]>
Commit | Line | Data |
---|---|---|
a9d77a20 FM |
1 | module Text.Edifact.Scaffolder.CodedSimples.Specification |
2 | ( -- * | |
3 | specificationParser | |
4 | ) where | |
5 | ||
6 | import Text.Edifact.Scaffolder.Commons | |
7 | ||
8 | import Text.Parsec as P (anyChar, count, digit, | |
9 | endOfLine, manyTill, | |
10 | oneOf, skipMany, string, | |
11 | try) | |
12 | import Text.Parsec.String (Parser) | |
13 | ||
14 | specificationParser :: Parser (SimpleCode, SimpleName) | |
15 | specificationParser = scanUntil [ codedSimpleParser ] | |
16 | ||
17 | codedSimpleParser :: Parser (SimpleCode, SimpleName) | |
18 | codedSimpleParser = do | |
19 | _ <- count 2 (oneOf "+*#|-X ") | |
20 | skipMany (string " ") | |
21 | code <- simpleCodeParser | |
22 | _ <- string " " | |
23 | skipMany (string " ") | |
24 | name <- SimpleName <$> manyTill anyChar (() <$ try endOfLine) | |
25 | pure (code, name) | |
26 | ||
27 | simpleCodeParser :: Parser SimpleCode | |
28 | simpleCodeParser = fromString <$> count 4 digit |