Harden wording files parsing against partial read due to unexpected token and add support for comments
This commit is contained in:
parent
d35a4c33ef
commit
f9a82cb088
1 changed files with 7 additions and 4 deletions
|
@ -19,7 +19,7 @@ import Paths_hablo (getDataFileName)
|
||||||
import Text.ParserCombinators.Parsec (
|
import Text.ParserCombinators.Parsec (
|
||||||
Parser
|
Parser
|
||||||
, (<|>)
|
, (<|>)
|
||||||
, char, choice, endBy, many, many1, noneOf, parse, string, try
|
, char, choice, endBy, eof, many, many1, noneOf, optional, parse, string, try
|
||||||
)
|
)
|
||||||
import System.Exit (die)
|
import System.Exit (die)
|
||||||
|
|
||||||
|
@ -61,11 +61,14 @@ addWording currentWording wordingFile = do
|
||||||
Right newWording -> return $ Map.union currentWording newWording
|
Right newWording -> return $ Map.union currentWording newWording
|
||||||
|
|
||||||
wordingP :: Parser (Map String Text)
|
wordingP :: Parser (Map String Text)
|
||||||
wordingP = Map.map Text.pack . Map.fromList <$> (many eol *> line `endBy` (many1 eol))
|
wordingP = Map.map Text.pack . Map.fromList <$>
|
||||||
|
(many skip *> line `endBy` (many1 skip) <* eof)
|
||||||
where
|
where
|
||||||
line = (,) <$> (choice (try . string <$> keys) <* equal) <*> many (noneOf "\r\n")
|
restOfLine = many $ noneOf "\r\n"
|
||||||
equal = many (char ' ') *> char '=' *> many (char ' ')
|
|
||||||
eol = try (string "\r\n") <|> string "\r" <|> string "\n"
|
eol = try (string "\r\n") <|> string "\r" <|> string "\n"
|
||||||
|
skip = optional (char '#' *> restOfLine) *> eol
|
||||||
|
line = (,) <$> (choice (try . string <$> keys) <* equal) <*> restOfLine
|
||||||
|
equal = many (char ' ') *> char '=' *> many (char ' ')
|
||||||
|
|
||||||
checkTemplateWith :: [Text] -> String -> Map String Text -> IO Template
|
checkTemplateWith :: [Text] -> String -> Map String Text -> IO Template
|
||||||
checkTemplateWith variables key wording =
|
checkTemplateWith variables key wording =
|
||||||
|
|
Loading…
Reference in a new issue