aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs
diff options
context:
space:
mode:
Diffstat (limited to 'scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs')
-rw-r--r--scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs26
1 files changed, 26 insertions, 0 deletions
diff --git a/scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs b/scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs
new file mode 100644
index 0000000..4e8b39c
--- /dev/null
+++ b/scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs
@@ -0,0 +1,26 @@
1module Text.Edifact.Scaffolder.Segments.Elements
2 ( listSegments
3 ) where
4
5import Text.Edifact.Scaffolder.Commons
6
7import Data.Char (isLower, toUpper)
8import Text.Parsec (eof, lower, satisfy, string,
9 (<?>))
10import Text.Parsec.String (Parser)
11
12listSegments :: Scaffolding [ElementWithDefinition SegmentCode]
13listSegments = listElements "segments" segmentCodeParser
14
15segmentCodeParser :: Parser SegmentCode
16segmentCodeParser = do
17 c1 <- lowerExceptU
18 c2 <- lower
19 c3 <- lower
20 let code = SegmentCode (toUpper <$> [c1,c2,c3])
21 code <$ string ".txt"
22 <* eof
23 <?> "SegmentCode"
24
25lowerExceptU :: Parser Char
26lowerExceptU = satisfy (\ c -> isLower c && c /= 'u')