From f4cee3132d5fb9252862780e4a6e87d751642192 Mon Sep 17 00:00:00 2001 From: Nathan Daelman <ndaelman.physik.hu-berlin.de> Date: Wed, 5 Jun 2024 12:16:53 +0200 Subject: [PATCH] Add `stripWrapper` --- src/MapleParser.hs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/MapleParser.hs b/src/MapleParser.hs index 2e5ba4b..8ce8ab9 100644 --- a/src/MapleParser.hs +++ b/src/MapleParser.hs @@ -4,6 +4,7 @@ import Text.Parsec.String import ToDB import Database.Bolt (BoltActionT, Record) import Control.Monad (liftM2) +import Data.Functor (($>)) data MForm = MForm {fName :: String, fParams :: [String]} deriving (Show) @@ -17,18 +18,26 @@ data Extracted = MCDef String extendedLetter :: Parser Char extendedLetter = try alphaNum <|> char '_' +stripWrapper :: Char -> Char -> Parser String +stripWrapper s e = + optional (char s) *> + many (noneOf [s, e]) >>= \cnt -> + optional (char e) $> + cnt + -- MapleC parsers mcDefineParser :: Parser Extracted mcDefineParser = MCDef <$> (string "$define" *> spaces *> many1 extendedLetter) mcIncludeParser :: Parser Extracted -mcIncludeParser = MCInclude <$> (string "$include" *> spaces *> string "\"" *> many1 (extendedLetter <|> char '.') <* string "\"") +mcIncludeParser = MCInclude <$> (string "$include" *> spaces *> stripWrapper '"' '"') mcConditionalParser :: Parser Extracted mcConditionalParser = MCConditional <$> (string "$ifdef" *> spaces *> many1 extendedLetter <* newline) <*> - manyTill ((\x -> (varName x, varValue x)) <$> mVarParser) (string "$endif") -- use mVarParser to parse the conditional body + manyTill ((\x -> (varName x, varValue x)) <$> mVarParser) (string "$endif") + -- use mVarParser to parse the conditional body -- Maple parsers -- GitLab