]> git.immae.eu Git - github/fretlink/edi-parser.git/blob - scaffolder/src/Text/Edifact/Scaffolder/Simples/Specification.hs
Release code as open source
[github/fretlink/edi-parser.git] / scaffolder / src / Text / Edifact / Scaffolder / Simples / Specification.hs
1 module Text.Edifact.Scaffolder.Simples.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 [ simpleParser ]
16
17 simpleParser :: Parser (SimpleCode, SimpleName)
18 simpleParser = do
19 _ <- count 3 (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