module Language.Modelica.Parser where import Language.Modelica.Syntax.Programme import Language.Modelica.Syntax.Modelica import Language.Modelica.Syntax.ToString (toString) import Language.Modelica.Parser.ClassDefinition import Language.Modelica.Parser.Programme import Language.Modelica.Parser.Option (OptionSet, defaultOptions) import Language.Modelica.Parser.Utility (stringParser) import Text.Parsec.Prim (runP) commentsAndCode :: OptionSet -> FilePath -> String -> [TextSegment] commentsAndCode opts file str = case runP (stringParser modelica_programme) opts file str of Right x -> x Left err -> error (show err) simple :: FilePath -> String -> StoredDefinition simple = withOptions defaultOptions withOptions :: OptionSet -> FilePath -> String -> StoredDefinition withOptions opts file str = let txt = concatMap f $ commentsAndCode opts file str f xs@(Str _) = toString xs f xs@(Code _) = toString xs f (LineComment _) = "\n" f (BlockComment xs) = filter (== '\n') xs in case runP stored_definition opts file txt of Right ast -> ast Left err -> error $ show err