From 6e0fe3ed2952f2241d3a75d3f9134580dfaa709b Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 13:41:42 +0100 Subject: [PATCH 1/7] Make object parsing tolerant of empty bodies --- src/JbeamEdit/Parsing/Jbeam.hs | 7 ++++--- test/Parsing/JbeamSpec.hs | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/JbeamEdit/Parsing/Jbeam.hs b/src/JbeamEdit/Parsing/Jbeam.hs index 7244660e..b5cf35fe 100644 --- a/src/JbeamEdit/Parsing/Jbeam.hs +++ b/src/JbeamEdit/Parsing/Jbeam.hs @@ -16,7 +16,7 @@ import Data.Functor (($>)) import Data.Maybe (isNothing) import Data.Text (Text) import Data.Text qualified as T -import Data.Text.Encoding (decodeUtf8) +import Data.Text.Encoding (decodeUtf8Lenient) import Data.Vector qualified as V (fromList) import Data.Void (Void) import JbeamEdit.Core.Node ( @@ -91,7 +91,7 @@ singlelineCommentParser = do txt <- MP.some (MP.satisfy (charNotEqWord8 '\n')) pure InternalComment - { cText = T.strip . decodeUtf8 . BS.toStrict $ BS.pack txt + { cText = T.strip . decodeUtf8Lenient . BS.toStrict $ BS.pack txt , cMultiline = False , cAssociationDirection = associationDirection st } @@ -156,7 +156,8 @@ objectKeyParser = do objectParser :: JbeamParser Node objectParser = do _ <- byteChar '{' - keys <- MP.some (commentParser <|> objectKeyParser) + skipWhiteSpace + keys <- MP.many (commentParser <|> objectKeyParser) _ <- MP.optional separatorParser _ <- byteChar '}' pure . Object . V.fromList $ keys diff --git a/test/Parsing/JbeamSpec.hs b/test/Parsing/JbeamSpec.hs index dd52c1e1..b69e1b24 100644 --- a/test/Parsing/JbeamSpec.hs +++ b/test/Parsing/JbeamSpec.hs @@ -86,6 +86,26 @@ arraySpec = objectSpec :: [(String, Node)] objectSpec = [ + ( "{}" + , Object + (fromList []) + ) + , + ( "{ }" + , Object + (fromList []) + ) + , + ( "{\n//test\n\"test\" : 1, \"test2\" : 2}" + , Object + ( fromList + [ Comment (InternalComment "test" False NextNode) + , ObjectKey (String "test", Number 1) + , ObjectKey (String "test2", Number 2) + ] + ) + ) + , ( "{\"test\" : 1, \"test2\" : 2}" , Object ( fromList From ea5e6a21bcbc45a22108ea18ea3a3615fe71c849 Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 13:44:34 +0100 Subject: [PATCH 2/7] Unify ByteString usage --- src/JbeamEdit/Parsing/Common/Helpers.hs | 10 +++++----- src/JbeamEdit/Parsing/Jbeam.hs | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/JbeamEdit/Parsing/Common/Helpers.hs b/src/JbeamEdit/Parsing/Common/Helpers.hs index 60fe6cd3..057b2c55 100644 --- a/src/JbeamEdit/Parsing/Common/Helpers.hs +++ b/src/JbeamEdit/Parsing/Common/Helpers.hs @@ -13,8 +13,8 @@ module JbeamEdit.Parsing.Common.Helpers ( ) where import Control.Applicative (asum, empty) -import Data.ByteString.Lazy (ByteString) -import Data.ByteString.Lazy qualified as BS +import Data.ByteString qualified as BS +import Data.ByteString.Lazy qualified as LBS import Data.Char (chr, isSpace, ord) import Data.Functor ((<&>)) import Data.List.NonEmpty qualified as NE (fromList) @@ -26,7 +26,7 @@ import Data.Word (Word8) import Text.Megaparsec qualified as MP import Text.Megaparsec.Byte qualified as B -type Parser m a = MP.ParsecT Void ByteString m a +type Parser m a = MP.ParsecT Void LBS.ByteString m a --- --- helpers @@ -55,7 +55,7 @@ skipWhiteSpace = B.space parseWord8s :: (T.Text -> a) -> Parser m [Word8] -> Parser m a parseWord8s f bsParser = do bs' <- bsParser - case decodeUtf8' (BS.toStrict $ BS.pack bs') of + case decodeUtf8' (BS.pack bs') of Right text' -> pure (f text') Left _ -> empty @@ -63,7 +63,7 @@ failingParser :: [String] -> Parser m a failingParser expLabels = unexpTok >>= flip MP.failure expToks where unexpTok = - Just . MP.Tokens . NE.fromList . BS.unpack + Just . MP.Tokens . NE.fromList . LBS.unpack <$> MP.takeWhile1P Nothing isNotFinalChar expToks = S.fromList . map (MP.Label . NE.fromList) $ expLabels isNotFinalChar w = diff --git a/src/JbeamEdit/Parsing/Jbeam.hs b/src/JbeamEdit/Parsing/Jbeam.hs index b5cf35fe..0aec9404 100644 --- a/src/JbeamEdit/Parsing/Jbeam.hs +++ b/src/JbeamEdit/Parsing/Jbeam.hs @@ -10,8 +10,8 @@ module JbeamEdit.Parsing.Jbeam ( import Control.Monad.State (State, evalState) import Control.Monad.State.Class import Data.Bifunctor (first) -import Data.ByteString.Lazy (ByteString) -import Data.ByteString.Lazy qualified as BS +import Data.ByteString qualified as BS +import Data.ByteString.Lazy qualified as LBS import Data.Functor (($>)) import Data.Maybe (isNothing) import Data.Text (Text) @@ -44,8 +44,8 @@ separatorParser = do ws2 <- MP.takeWhileP Nothing wordIsSpace let hasNewline = - isNothing comma && '\n' `elem` map toChar (BS.unpack ws1) - || '\n' `elem` map toChar (BS.unpack ws2) + isNothing comma && '\n' `elem` map toChar (LBS.unpack ws1) + || '\n' `elem` map toChar (LBS.unpack ws2) modify (\s -> s {lastNodeEndedWithNewline = hasNewline}) @@ -91,7 +91,7 @@ singlelineCommentParser = do txt <- MP.some (MP.satisfy (charNotEqWord8 '\n')) pure InternalComment - { cText = T.strip . decodeUtf8Lenient . BS.toStrict $ BS.pack txt + { cText = T.strip . decodeUtf8Lenient $ BS.pack txt , cMultiline = False , cAssociationDirection = associationDirection st } @@ -167,11 +167,11 @@ topNodeParser = nodeParser <* skipWhiteSpace <* MP.eof parseNodesState :: JbeamParser a - -> ByteString - -> Either (MP.ParseErrorBundle ByteString Void) a + -> LBS.ByteString + -> Either (MP.ParseErrorBundle LBS.ByteString Void) a parseNodesState parser input = let initialState = ParseState {lastNodeEndedWithNewline = True} in evalState (MP.runParserT parser "" input) initialState -parseNodes :: BS.ByteString -> Either Text Node +parseNodes :: LBS.ByteString -> Either Text Node parseNodes input = first formatErrors (parseNodesState topNodeParser input) From f2061fae291fa2074811e8742149b8f4ca0ea542 Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 14:08:06 +0100 Subject: [PATCH 3/7] Refactor creating backup files --- exe/jbeam-edit/Main.hs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/exe/jbeam-edit/Main.hs b/exe/jbeam-edit/Main.hs index d6b08c0f..7ff21ab4 100644 --- a/exe/jbeam-edit/Main.hs +++ b/exe/jbeam-edit/Main.hs @@ -3,7 +3,7 @@ module Main ( ) where import CommandLineOptions -import Control.Monad (unless) +import Control.Monad (when) import Data.ByteString.Lazy qualified as LBS (fromStrict, writeFile) import Data.Text (Text) import Data.Text.Encoding (encodeUtf8) @@ -12,7 +12,7 @@ import JbeamEdit.Formatting (RuleSet, formatNode) import JbeamEdit.Formatting.Config import JbeamEdit.IOUtils import JbeamEdit.Parsing.Jbeam (parseNodes) -import System.Directory (copyFile) +import System.Directory (copyFile, doesFileExist) import System.Environment (getArgs) #ifdef ENABLE_WINDOWS_NEWLINES @@ -36,23 +36,23 @@ main = do Options {optCopyJbflConfig = Just configType} -> copyToConfigDir configType _ -> editFile opts -getWritabaleFilename :: FilePath -> Options -> IO FilePath -getWritabaleFilename filename opts = do +createBackupFile :: FilePath -> Options -> IO () +createBackupFile filename opts = do let backupFilename = dropExtension filename <> ".bak.jbeam" - unless - (optInPlace opts) + doesExist <- doesFileExist filename + when + (not (optInPlace opts) && doesExist) (copyFile filename backupFilename) - pure filename editFile :: Options -> IO () editFile opts = do formattingConfig <- readFormattingConfig Nothing case optInputFile opts of Just filename -> do - outFilename <- getWritabaleFilename filename opts + createBackupFile filename opts contents <- tryReadFile [] filename case contents >>= parseNodes of - Right ns -> processNodes opts outFilename ns formattingConfig + Right ns -> processNodes opts filename ns formattingConfig Left err -> putErrorLine err Nothing -> putErrorLine "missing arg filename" From f920a9c5ff3eb0fa6ae80a5d27759096d9d40247 Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 14:09:03 +0100 Subject: [PATCH 4/7] Be more tolerant when extracting beams --- .../transformation/JbeamEdit/Transformation/SupportVertex.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-extra/transformation/JbeamEdit/Transformation/SupportVertex.hs b/src-extra/transformation/JbeamEdit/Transformation/SupportVertex.hs index 24864d8f..3b99f32d 100644 --- a/src-extra/transformation/JbeamEdit/Transformation/SupportVertex.hs +++ b/src-extra/transformation/JbeamEdit/Transformation/SupportVertex.hs @@ -19,7 +19,7 @@ possiblyBeam node case node of (Array beamVec) -> case V.toList beamVec of - [String vertex1, String vertex2] -> Just (vertex1, vertex2) + (String vertex1 : String vertex2 : _) -> Just (vertex1, vertex2) _ -> Nothing _ -> Nothing From 16cec4e46ba9942c9d240d6bf565599cd4fe6f00 Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 21:54:34 +0100 Subject: [PATCH 5/7] Rename support vertices directly moveSupportVertices --- .../JbeamEdit/Transformation.hs | 24 +++++++++---------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src-extra/transformation/JbeamEdit/Transformation.hs b/src-extra/transformation/JbeamEdit/Transformation.hs index d7ee9f1f..efcb1b45 100644 --- a/src-extra/transformation/JbeamEdit/Transformation.hs +++ b/src-extra/transformation/JbeamEdit/Transformation.hs @@ -121,10 +121,7 @@ updateSupportVertexName updateSupportVertexName vType (AnnotatedVertex c v m) = AnnotatedVertex c (v {vName = newName}) m where name = vName v - newName = - case T.unsnoc name of - Nothing -> name - Just (prefix, _) -> prefix <> prefixForType vType + newName = dropIndex name <> prefixForType vType moveSupportVertices :: UpdateNamesMap @@ -146,6 +143,10 @@ moveSupportVertices newNames tfCfg connMap vsPerType = , count >= thrCount ] + brks = xGroupBreakpoints tfCfg + + assignSupportNames = assignNames newNames brks SupportTree + vertexForest :: VertexForest vertexForest = case nonEmpty supportVertices of @@ -155,8 +156,12 @@ moveSupportVertices newNames tfCfg connMap vsPerType = ( SupportTree , VertexTree [sideComment SupportTree] - ( one $ - sortSupportVertices newNames tfCfg (NE.map (uncurry updateSupportVertexName) vs) + ( one + . snd + . mapAccumL + assignSupportNames + M.empty + $ NE.map (uncurry updateSupportVertexName) vs ) ) @@ -344,13 +349,6 @@ assignNames newNames brks treeType prefixMap av = prefixMap' = M.insert cleanPrefix (lastIdx + 1) prefixMap in (prefixMap', av {aVertex = newVertex}) -sortSupportVertices - :: UpdateNamesMap - -> TransformationConfig - -> NonEmpty AnnotatedVertex - -> NonEmpty AnnotatedVertex -sortSupportVertices = sortVertices SupportTree - sortVertices :: VertexTreeType -> UpdateNamesMap From cf89e4772e3836792ed98fc40b688837856400cf Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 22:00:35 +0100 Subject: [PATCH 6/7] Updated generated examples --- .../transformed_jbeam/frame-cfg-default.jbeam | 98 ++++++++--------- .../transformed_jbeam/frame-cfg-example.jbeam | 98 ++++++++--------- .../suspension-cfg-default.jbeam | 102 +++++++++--------- .../suspension-cfg-example.jbeam | 102 +++++++++--------- 4 files changed, 200 insertions(+), 200 deletions(-) diff --git a/examples/transformed_jbeam/frame-cfg-default.jbeam b/examples/transformed_jbeam/frame-cfg-default.jbeam index fc76956f..12a9273f 100644 --- a/examples/transformed_jbeam/frame-cfg-default.jbeam +++ b/examples/transformed_jbeam/frame-cfg-default.jbeam @@ -79,9 +79,9 @@ [ "rl_r7", -0.451, 2.284, 0.447], // Support nodes - [ "rl1sm", 0.053, -0.024, 0.578], // support - ["rl_r4sm", 0.053, 1.710, 0.565], // support for rear - ["rl_f1sm", 0.053, -1.314, 0.382] + ["rl_rsm", 0.053, 1.710, 0.565], // support for rear + [ "rlsm", 0.053, -0.024, 0.578], // support + ["rl_fsm", 0.053, -1.314, 0.382] ], // --Beams-- @@ -270,59 +270,59 @@ // Front end {"beamDeform" : 19000.0}, - ["rl_fl2", "rl_f1sm"], - ["rl_fr2", "rl_f1sm"], + ["rl_fl2", "rl_fsm"], + ["rl_fr2", "rl_fsm"], ["rl_f", "rl_fl0"], - ["rl_fl4", "rl_f1sm"], - ["rl_f1sm", "rl_fr5"], - ["rl_fr1", "rl_f1sm"], - ["rl_fl1", "rl_f1sm"], - ["rl_fr4", "rl_f1sm"], - ["rl_fm0", "rl_f1sm"], - ["rl_f1sm", "rl_fr0"], - ["rl_f1sm", "rl_fl3"], - ["rl_f1sm", "rl_fr3"], - ["rl_f1sm", "rl_fm1"], - ["rl_f1sm", "rl_fl5"], + ["rl_fl4", "rl_fsm"], + ["rl_fsm", "rl_fr5"], + ["rl_fr1", "rl_fsm"], + ["rl_fl1", "rl_fsm"], + ["rl_fr4", "rl_fsm"], + ["rl_fm0", "rl_fsm"], + ["rl_fsm", "rl_fr0"], + ["rl_fsm", "rl_fl3"], + ["rl_fsm", "rl_fr3"], + ["rl_fsm", "rl_fm1"], + ["rl_fsm", "rl_fl5"], // Middle {"beamDeform" : 11000.0}, - ["rlr5", "rl1sm"], - ["rlr3", "rl1sm"], - ["rlm0", "rl1sm"], - ["rll4", "rl1sm"], - ["rll3", "rl1sm"], - ["rl1sm", "rll1"], - ["rl1sm", "rll0"], - ["rll7", "rl1sm"], - ["rlr7", "rl1sm"], - ["rlr2", "rl1sm"], - ["rl1sm", "rlm1"], - ["rll5", "rl1sm"], - ["rll2", "rl1sm"], - ["rl1sm", "rlr6"], - ["rlr4", "rl1sm"], - ["rl1sm", "rlr1"], - ["rl1sm", "rlr0"], - ["rl1sm", "rll6"], + ["rlr5", "rlsm"], + ["rlr3", "rlsm"], + ["rlm0", "rlsm"], + ["rll4", "rlsm"], + ["rll3", "rlsm"], + ["rlsm", "rll1"], + ["rlsm", "rll0"], + ["rll7", "rlsm"], + ["rlr7", "rlsm"], + ["rlr2", "rlsm"], + ["rlsm", "rlm1"], + ["rll5", "rlsm"], + ["rll2", "rlsm"], + ["rlsm", "rlr6"], + ["rlr4", "rlsm"], + ["rlsm", "rlr1"], + ["rlsm", "rlr0"], + ["rlsm", "rll6"], // Rear end {"beamDeform" : 19000.0}, - ["rl_r4sm", "rl_m2"], - ["rl_r4sm", "rl_r7"], - ["rl_r4", "rl_r4sm"], - ["rl_r4sm", "rl_l7"], - ["rl_r4sm", "rl_l3"], - ["rl_r4sm", "rl_r5"], - ["rl_l6", "rl_r4sm"], - ["rl_m1", "rl_r4sm"], - ["rl_r4sm", "rl_r3"], - ["rl_l4", "rl_r4sm"], - ["rl_r6", "rl_r4sm"], - ["rl_m3", "rl_r4sm"], - ["rl_l2", "rl_r4sm"], - ["rl_r4sm", "rl_m0"], - ["rl_r2", "rl_r4sm"], + ["rl_rsm", "rl_m2"], + ["rl_rsm", "rl_r7"], + ["rl_r4", "rl_rsm"], + ["rl_rsm", "rl_l7"], + ["rl_rsm", "rl_l3"], + ["rl_rsm", "rl_r5"], + ["rl_l6", "rl_rsm"], + ["rl_m1", "rl_rsm"], + ["rl_rsm", "rl_r3"], + ["rl_l4", "rl_rsm"], + ["rl_r6", "rl_rsm"], + ["rl_m3", "rl_rsm"], + ["rl_l2", "rl_rsm"], + ["rl_rsm", "rl_m0"], + ["rl_r2", "rl_rsm"], ["rl_r4", "rl_l5"], // Front crush diff --git a/examples/transformed_jbeam/frame-cfg-example.jbeam b/examples/transformed_jbeam/frame-cfg-example.jbeam index fc76956f..12a9273f 100644 --- a/examples/transformed_jbeam/frame-cfg-example.jbeam +++ b/examples/transformed_jbeam/frame-cfg-example.jbeam @@ -79,9 +79,9 @@ [ "rl_r7", -0.451, 2.284, 0.447], // Support nodes - [ "rl1sm", 0.053, -0.024, 0.578], // support - ["rl_r4sm", 0.053, 1.710, 0.565], // support for rear - ["rl_f1sm", 0.053, -1.314, 0.382] + ["rl_rsm", 0.053, 1.710, 0.565], // support for rear + [ "rlsm", 0.053, -0.024, 0.578], // support + ["rl_fsm", 0.053, -1.314, 0.382] ], // --Beams-- @@ -270,59 +270,59 @@ // Front end {"beamDeform" : 19000.0}, - ["rl_fl2", "rl_f1sm"], - ["rl_fr2", "rl_f1sm"], + ["rl_fl2", "rl_fsm"], + ["rl_fr2", "rl_fsm"], ["rl_f", "rl_fl0"], - ["rl_fl4", "rl_f1sm"], - ["rl_f1sm", "rl_fr5"], - ["rl_fr1", "rl_f1sm"], - ["rl_fl1", "rl_f1sm"], - ["rl_fr4", "rl_f1sm"], - ["rl_fm0", "rl_f1sm"], - ["rl_f1sm", "rl_fr0"], - ["rl_f1sm", "rl_fl3"], - ["rl_f1sm", "rl_fr3"], - ["rl_f1sm", "rl_fm1"], - ["rl_f1sm", "rl_fl5"], + ["rl_fl4", "rl_fsm"], + ["rl_fsm", "rl_fr5"], + ["rl_fr1", "rl_fsm"], + ["rl_fl1", "rl_fsm"], + ["rl_fr4", "rl_fsm"], + ["rl_fm0", "rl_fsm"], + ["rl_fsm", "rl_fr0"], + ["rl_fsm", "rl_fl3"], + ["rl_fsm", "rl_fr3"], + ["rl_fsm", "rl_fm1"], + ["rl_fsm", "rl_fl5"], // Middle {"beamDeform" : 11000.0}, - ["rlr5", "rl1sm"], - ["rlr3", "rl1sm"], - ["rlm0", "rl1sm"], - ["rll4", "rl1sm"], - ["rll3", "rl1sm"], - ["rl1sm", "rll1"], - ["rl1sm", "rll0"], - ["rll7", "rl1sm"], - ["rlr7", "rl1sm"], - ["rlr2", "rl1sm"], - ["rl1sm", "rlm1"], - ["rll5", "rl1sm"], - ["rll2", "rl1sm"], - ["rl1sm", "rlr6"], - ["rlr4", "rl1sm"], - ["rl1sm", "rlr1"], - ["rl1sm", "rlr0"], - ["rl1sm", "rll6"], + ["rlr5", "rlsm"], + ["rlr3", "rlsm"], + ["rlm0", "rlsm"], + ["rll4", "rlsm"], + ["rll3", "rlsm"], + ["rlsm", "rll1"], + ["rlsm", "rll0"], + ["rll7", "rlsm"], + ["rlr7", "rlsm"], + ["rlr2", "rlsm"], + ["rlsm", "rlm1"], + ["rll5", "rlsm"], + ["rll2", "rlsm"], + ["rlsm", "rlr6"], + ["rlr4", "rlsm"], + ["rlsm", "rlr1"], + ["rlsm", "rlr0"], + ["rlsm", "rll6"], // Rear end {"beamDeform" : 19000.0}, - ["rl_r4sm", "rl_m2"], - ["rl_r4sm", "rl_r7"], - ["rl_r4", "rl_r4sm"], - ["rl_r4sm", "rl_l7"], - ["rl_r4sm", "rl_l3"], - ["rl_r4sm", "rl_r5"], - ["rl_l6", "rl_r4sm"], - ["rl_m1", "rl_r4sm"], - ["rl_r4sm", "rl_r3"], - ["rl_l4", "rl_r4sm"], - ["rl_r6", "rl_r4sm"], - ["rl_m3", "rl_r4sm"], - ["rl_l2", "rl_r4sm"], - ["rl_r4sm", "rl_m0"], - ["rl_r2", "rl_r4sm"], + ["rl_rsm", "rl_m2"], + ["rl_rsm", "rl_r7"], + ["rl_r4", "rl_rsm"], + ["rl_rsm", "rl_l7"], + ["rl_rsm", "rl_l3"], + ["rl_rsm", "rl_r5"], + ["rl_l6", "rl_rsm"], + ["rl_m1", "rl_rsm"], + ["rl_rsm", "rl_r3"], + ["rl_l4", "rl_rsm"], + ["rl_r6", "rl_rsm"], + ["rl_m3", "rl_rsm"], + ["rl_l2", "rl_rsm"], + ["rl_rsm", "rl_m0"], + ["rl_r2", "rl_rsm"], ["rl_r4", "rl_l5"], // Front crush diff --git a/examples/transformed_jbeam/suspension-cfg-default.jbeam b/examples/transformed_jbeam/suspension-cfg-default.jbeam index 7b3c1126..a7a30321 100644 --- a/examples/transformed_jbeam/suspension-cfg-default.jbeam +++ b/examples/transformed_jbeam/suspension-cfg-default.jbeam @@ -81,12 +81,12 @@ // Support nodes {"nodeWeight" : 3.5}, - [ "rl4sm", 0.053, 1.710, 0.565], + [ "rlsm", 0.053, 1.710, 0.565], {"selfCollision" : true}, - [ "rl1sm", 0.053, -0.024, 0.578], + [ "rlsm1", 0.053, -0.024, 0.578], {"nodeWeight" : 3.8}, {"selfCollision" : false}, - ["rl1sm1", 0.053, -1.314, 0.382] + [ "rlsm2", 0.053, -1.314, 0.382] ], // --Beams-- @@ -275,60 +275,60 @@ // Front end {"beamDeform" : 19000.0}, - ["rll18", "rl1sm1"], - ["rlr18", "rl1sm1"], - ["rl1sm1", "rll16"], - ["rll20", "rl1sm1"], - ["rl1sm1", "rlr21"], - ["rlr17", "rl1sm1"], - ["rll17", "rl1sm1"], - ["rlr20", "rl1sm1"], - ["rlm6", "rl1sm1"], - ["rl1sm1", "rlr16"], - ["rl1sm1", "rll19"], - ["rl1sm1", "rlr19"], - ["rl1sm1", "rlm7"], - ["rl1sm1", "rll21"], + ["rll18", "rlsm2"], + ["rlr18", "rlsm2"], + ["rlsm2", "rll16"], + ["rll20", "rlsm2"], + ["rlsm2", "rlr21"], + ["rlr17", "rlsm2"], + ["rll17", "rlsm2"], + ["rlr20", "rlsm2"], + ["rlm6", "rlsm2"], + ["rlsm2", "rlr16"], + ["rlsm2", "rll19"], + ["rlsm2", "rlr19"], + ["rlsm2", "rlm7"], + ["rlsm2", "rll21"], // Middle {"beamDeform" : 11000.0}, - ["rlr13", "rl1sm"], - ["rlr11", "rl1sm"], - ["rlm4", "rl1sm"], - ["rll12", "rl1sm"], - ["rll11", "rl1sm"], - ["rl1sm", "rll9"], - ["rl1sm", "rll8"], - ["rll15", "rl1sm"], - ["rlr15", "rl1sm"], - ["rlr10", "rl1sm"], - ["rl1sm", "rlm5"], - ["rll13", "rl1sm"], - ["rll10", "rl1sm"], - ["rl1sm", "rlr14"], - ["rlr12", "rl1sm"], - ["rl1sm", "rlr9"], - ["rl1sm", "rlr8"], - ["rl1sm", "rll14"], + ["rlr13", "rlsm1"], + ["rlr11", "rlsm1"], + ["rlm4", "rlsm1"], + ["rll12", "rlsm1"], + ["rll11", "rlsm1"], + ["rlsm1", "rll9"], + ["rlsm1", "rll8"], + ["rll15", "rlsm1"], + ["rlr15", "rlsm1"], + ["rlr10", "rlsm1"], + ["rlsm1", "rlm5"], + ["rll13", "rlsm1"], + ["rll10", "rlsm1"], + ["rlsm1", "rlr14"], + ["rlr12", "rlsm1"], + ["rlsm1", "rlr9"], + ["rlsm1", "rlr8"], + ["rlsm1", "rll14"], // Rear end {"beamDeform" : 19000.0}, - ["rl4sm", "rlm2"], - ["rl4sm", "rlr7"], - ["rlr4", "rl4sm"], - ["rl4sm", "rll7"], - ["rl4sm", "rll3"], - ["rl4sm", "rlr5"], - ["rll6", "rl4sm"], - ["rlm1", "rl4sm"], - ["rl4sm", "rlr3"], - ["rll4", "rl4sm"], - ["rlr6", "rl4sm"], - ["rlm3", "rl4sm"], - ["rll2", "rl4sm"], - ["rl4sm", "rlm0"], - ["rlr2", "rl4sm"], - ["rl4sm", "rll5"], + ["rlsm", "rlm2"], + ["rlsm", "rlr7"], + ["rlr4", "rlsm"], + ["rlsm", "rll7"], + ["rlsm", "rll3"], + ["rlsm", "rlr5"], + ["rll6", "rlsm"], + ["rlm1", "rlsm"], + ["rlsm", "rlr3"], + ["rll4", "rlsm"], + ["rlr6", "rlsm"], + ["rlm3", "rlsm"], + ["rll2", "rlsm"], + ["rlsm", "rlm0"], + ["rlr2", "rlsm"], + ["rlsm", "rll5"], // Front crush {"beamDeform" : 8500.0}, diff --git a/examples/transformed_jbeam/suspension-cfg-example.jbeam b/examples/transformed_jbeam/suspension-cfg-example.jbeam index 7b3c1126..a7a30321 100644 --- a/examples/transformed_jbeam/suspension-cfg-example.jbeam +++ b/examples/transformed_jbeam/suspension-cfg-example.jbeam @@ -81,12 +81,12 @@ // Support nodes {"nodeWeight" : 3.5}, - [ "rl4sm", 0.053, 1.710, 0.565], + [ "rlsm", 0.053, 1.710, 0.565], {"selfCollision" : true}, - [ "rl1sm", 0.053, -0.024, 0.578], + [ "rlsm1", 0.053, -0.024, 0.578], {"nodeWeight" : 3.8}, {"selfCollision" : false}, - ["rl1sm1", 0.053, -1.314, 0.382] + [ "rlsm2", 0.053, -1.314, 0.382] ], // --Beams-- @@ -275,60 +275,60 @@ // Front end {"beamDeform" : 19000.0}, - ["rll18", "rl1sm1"], - ["rlr18", "rl1sm1"], - ["rl1sm1", "rll16"], - ["rll20", "rl1sm1"], - ["rl1sm1", "rlr21"], - ["rlr17", "rl1sm1"], - ["rll17", "rl1sm1"], - ["rlr20", "rl1sm1"], - ["rlm6", "rl1sm1"], - ["rl1sm1", "rlr16"], - ["rl1sm1", "rll19"], - ["rl1sm1", "rlr19"], - ["rl1sm1", "rlm7"], - ["rl1sm1", "rll21"], + ["rll18", "rlsm2"], + ["rlr18", "rlsm2"], + ["rlsm2", "rll16"], + ["rll20", "rlsm2"], + ["rlsm2", "rlr21"], + ["rlr17", "rlsm2"], + ["rll17", "rlsm2"], + ["rlr20", "rlsm2"], + ["rlm6", "rlsm2"], + ["rlsm2", "rlr16"], + ["rlsm2", "rll19"], + ["rlsm2", "rlr19"], + ["rlsm2", "rlm7"], + ["rlsm2", "rll21"], // Middle {"beamDeform" : 11000.0}, - ["rlr13", "rl1sm"], - ["rlr11", "rl1sm"], - ["rlm4", "rl1sm"], - ["rll12", "rl1sm"], - ["rll11", "rl1sm"], - ["rl1sm", "rll9"], - ["rl1sm", "rll8"], - ["rll15", "rl1sm"], - ["rlr15", "rl1sm"], - ["rlr10", "rl1sm"], - ["rl1sm", "rlm5"], - ["rll13", "rl1sm"], - ["rll10", "rl1sm"], - ["rl1sm", "rlr14"], - ["rlr12", "rl1sm"], - ["rl1sm", "rlr9"], - ["rl1sm", "rlr8"], - ["rl1sm", "rll14"], + ["rlr13", "rlsm1"], + ["rlr11", "rlsm1"], + ["rlm4", "rlsm1"], + ["rll12", "rlsm1"], + ["rll11", "rlsm1"], + ["rlsm1", "rll9"], + ["rlsm1", "rll8"], + ["rll15", "rlsm1"], + ["rlr15", "rlsm1"], + ["rlr10", "rlsm1"], + ["rlsm1", "rlm5"], + ["rll13", "rlsm1"], + ["rll10", "rlsm1"], + ["rlsm1", "rlr14"], + ["rlr12", "rlsm1"], + ["rlsm1", "rlr9"], + ["rlsm1", "rlr8"], + ["rlsm1", "rll14"], // Rear end {"beamDeform" : 19000.0}, - ["rl4sm", "rlm2"], - ["rl4sm", "rlr7"], - ["rlr4", "rl4sm"], - ["rl4sm", "rll7"], - ["rl4sm", "rll3"], - ["rl4sm", "rlr5"], - ["rll6", "rl4sm"], - ["rlm1", "rl4sm"], - ["rl4sm", "rlr3"], - ["rll4", "rl4sm"], - ["rlr6", "rl4sm"], - ["rlm3", "rl4sm"], - ["rll2", "rl4sm"], - ["rl4sm", "rlm0"], - ["rlr2", "rl4sm"], - ["rl4sm", "rll5"], + ["rlsm", "rlm2"], + ["rlsm", "rlr7"], + ["rlr4", "rlsm"], + ["rlsm", "rll7"], + ["rlsm", "rll3"], + ["rlsm", "rlr5"], + ["rll6", "rlsm"], + ["rlm1", "rlsm"], + ["rlsm", "rlr3"], + ["rll4", "rlsm"], + ["rlr6", "rlsm"], + ["rlm3", "rlsm"], + ["rll2", "rlsm"], + ["rlsm", "rlm0"], + ["rlr2", "rlsm"], + ["rlsm", "rll5"], // Front crush {"beamDeform" : 8500.0}, From 8b64faeb4a47ab352c01f608bec752eec2433410 Mon Sep 17 00:00:00 2001 From: webdevred <148627186+webdevred@users.noreply.github.com> Date: Sat, 15 Nov 2025 22:27:32 +0100 Subject: [PATCH 7/7] support node comments in suspension.jbeam --- examples/ast/jbeam/suspension.hs | 21 +++++++++++++++++++ .../suspension-complex-jbfl.jbeam | 6 +++--- .../suspension-minimal-jbfl.jbeam | 6 +++--- examples/jbeam/suspension.jbeam | 6 +++--- .../suspension-cfg-default.jbeam | 6 +++--- .../suspension-cfg-example.jbeam | 6 +++--- 6 files changed, 36 insertions(+), 15 deletions(-) diff --git a/examples/ast/jbeam/suspension.hs b/examples/ast/jbeam/suspension.hs index 7090ca76..4f341f01 100644 --- a/examples/ast/jbeam/suspension.hs +++ b/examples/ast/jbeam/suspension.hs @@ -171,6 +171,13 @@ Object ( -1.314 ) , Number 0.382 ] + , Comment + ( InternalComment + { cText = "support" + , cMultiline = False + , cAssociationDirection = PreviousNode + } + ) , Object [ ObjectKey ( String "selfCollision" @@ -220,6 +227,13 @@ Object ( -2.4e-2 ) , Number 0.578 ] + , Comment + ( InternalComment + { cText = "support" + , cMultiline = False + , cAssociationDirection = PreviousNode + } + ) , Array [ String "rl20" , Number 0.837 @@ -426,6 +440,13 @@ Object , Number 1.71 , Number 0.565 ] + , Comment + ( InternalComment + { cText = "support" + , cMultiline = False + , cAssociationDirection = PreviousNode + } + ) , Array [ String "rl49" , Number 0.558 diff --git a/examples/formatted_jbeam/suspension-complex-jbfl.jbeam b/examples/formatted_jbeam/suspension-complex-jbfl.jbeam index e35d8122..059e2d8c 100644 --- a/examples/formatted_jbeam/suspension-complex-jbfl.jbeam +++ b/examples/formatted_jbeam/suspension-complex-jbfl.jbeam @@ -23,14 +23,14 @@ [ "rl11", 0.547, -1.350, 0.364], [ "rl12", -0.440, -1.350, 0.310], [ "rl13", -0.440, -1.350, 0.364], - [ "rl14", 0.053, -1.314, 0.382], + [ "rl14", 0.053, -1.314, 0.382], // support {"selfCollision" : true}, {"nodeWeight" : 3.5}, [ "rl15", 0.790, -0.919, 0.182], [ "rl16", 0.790, -0.919, 0.233], [ "rl17", -0.683, -0.919, 0.182], [ "rl18", -0.683, -0.919, 0.233], - [ "rl19", 0.053, -0.024, 0.578], + [ "rl19", 0.053, -0.024, 0.578], // support [ "rl20", 0.837, 0.002, 0.182], // ref node left [ "rl21", 0.837, 0.002, 0.233], [ "rl22", 0.415, 0.002, 0.182], @@ -60,7 +60,7 @@ [ "rl45", -0.446, 1.654, 0.359], [ "rl46", 0.553, 1.679, 0.448], [ "rl47", -0.446, 1.679, 0.448], - [ "rl48", 0.053, 1.710, 0.565], + [ "rl48", 0.053, 1.710, 0.565], // support [ "rl49", 0.558, 2.284, 0.364], [ "rl50", 0.558, 2.284, 0.447], [ "rl51", 0.053, 2.284, 0.370], diff --git a/examples/formatted_jbeam/suspension-minimal-jbfl.jbeam b/examples/formatted_jbeam/suspension-minimal-jbfl.jbeam index 51d9e673..b800ec6c 100644 --- a/examples/formatted_jbeam/suspension-minimal-jbfl.jbeam +++ b/examples/formatted_jbeam/suspension-minimal-jbfl.jbeam @@ -23,14 +23,14 @@ [ "rl11", 0.547, -1.350, 0.364], [ "rl12", -0.440, -1.350, 0.310], [ "rl13", -0.440, -1.350, 0.364], - [ "rl14", 0.053, -1.314, 0.382], + [ "rl14", 0.053, -1.314, 0.382], // support {"selfCollision" : true}, {"nodeWeight" : 3.5}, [ "rl15", 0.790, -0.919, 0.182], [ "rl16", 0.790, -0.919, 0.233], [ "rl17", -0.683, -0.919, 0.182], [ "rl18", -0.683, -0.919, 0.233], - [ "rl19", 0.053, -0.024, 0.578], + [ "rl19", 0.053, -0.024, 0.578], // support [ "rl20", 0.837, 0.002, 0.182], // ref node left [ "rl21", 0.837, 0.002, 0.233], [ "rl22", 0.415, 0.002, 0.182], @@ -60,7 +60,7 @@ [ "rl45", -0.446, 1.654, 0.359], [ "rl46", 0.553, 1.679, 0.448], [ "rl47", -0.446, 1.679, 0.448], - [ "rl48", 0.053, 1.710, 0.565], + [ "rl48", 0.053, 1.710, 0.565], // support [ "rl49", 0.558, 2.284, 0.364], [ "rl50", 0.558, 2.284, 0.447], [ "rl51", 0.053, 2.284, 0.370], diff --git a/examples/jbeam/suspension.jbeam b/examples/jbeam/suspension.jbeam index 07fea9e0..031cf6c9 100644 --- a/examples/jbeam/suspension.jbeam +++ b/examples/jbeam/suspension.jbeam @@ -25,14 +25,14 @@ ["rl11",0.547,-1.35,0.364], ["rl12",-0.44,-1.35,0.31], ["rl13",-0.44,-1.35,0.364], - ["rl14",0.053,-1.314,0.382], + ["rl14",0.053,-1.314,0.382], // support {"selfCollision": true}, {"nodeWeight":3.5}, ["rl15",0.79,-0.919,0.182], ["rl16",0.79,-0.919,0.233], ["rl17",-0.683,-0.919,0.182], ["rl18",-0.683,-0.919,0.233], - ["rl19",0.053,-0.024,0.578], + ["rl19",0.053,-0.024,0.578], // support ["rl20",0.837,0.002,0.182], //ref node left ["rl21",0.837,0.002,0.233], ["rl22",0.415,0.002,0.182], @@ -62,7 +62,7 @@ ["rl45",-0.446,1.654,0.359], ["rl46",0.553,1.679,0.448], ["rl47",-0.446,1.679,0.448], - ["rl48",0.053,1.71,0.565], + ["rl48",0.053,1.71,0.565], // support ["rl49",0.558,2.284,0.364], ["rl50",0.558,2.284,0.447], ["rl51",0.053,2.284,0.37], diff --git a/examples/transformed_jbeam/suspension-cfg-default.jbeam b/examples/transformed_jbeam/suspension-cfg-default.jbeam index a7a30321..a4bfd4c6 100644 --- a/examples/transformed_jbeam/suspension-cfg-default.jbeam +++ b/examples/transformed_jbeam/suspension-cfg-default.jbeam @@ -81,12 +81,12 @@ // Support nodes {"nodeWeight" : 3.5}, - [ "rlsm", 0.053, 1.710, 0.565], + [ "rlsm", 0.053, 1.710, 0.565], // support {"selfCollision" : true}, - [ "rlsm1", 0.053, -0.024, 0.578], + [ "rlsm1", 0.053, -0.024, 0.578], // support {"nodeWeight" : 3.8}, {"selfCollision" : false}, - [ "rlsm2", 0.053, -1.314, 0.382] + [ "rlsm2", 0.053, -1.314, 0.382], // support ], // --Beams-- diff --git a/examples/transformed_jbeam/suspension-cfg-example.jbeam b/examples/transformed_jbeam/suspension-cfg-example.jbeam index a7a30321..a4bfd4c6 100644 --- a/examples/transformed_jbeam/suspension-cfg-example.jbeam +++ b/examples/transformed_jbeam/suspension-cfg-example.jbeam @@ -81,12 +81,12 @@ // Support nodes {"nodeWeight" : 3.5}, - [ "rlsm", 0.053, 1.710, 0.565], + [ "rlsm", 0.053, 1.710, 0.565], // support {"selfCollision" : true}, - [ "rlsm1", 0.053, -0.024, 0.578], + [ "rlsm1", 0.053, -0.024, 0.578], // support {"nodeWeight" : 3.8}, {"selfCollision" : false}, - [ "rlsm2", 0.053, -1.314, 0.382] + [ "rlsm2", 0.053, -1.314, 0.382], // support ], // --Beams--