aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/Scaffolder/Segments/Elements.hs
blob: 4e8b39c9b190a7810a24e229c46e93eb0708ca3e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module Text.Edifact.Scaffolder.Segments.Elements
  ( listSegments
  ) where

import           Text.Edifact.Scaffolder.Commons

import           Data.Char                       (isLower, toUpper)
import           Text.Parsec                     (eof, lower, satisfy, string,
                                                  (<?>))
import           Text.Parsec.String              (Parser)

listSegments :: Scaffolding [ElementWithDefinition SegmentCode]
listSegments = listElements "segments" segmentCodeParser

segmentCodeParser :: Parser SegmentCode
segmentCodeParser = do
  c1 <- lowerExceptU
  c2 <- lower
  c3 <- lower
  let code = SegmentCode (toUpper <$> [c1,c2,c3])
  code <$  string ".txt"
       <*  eof
       <?> "SegmentCode"

lowerExceptU :: Parser Char
lowerExceptU = satisfy (\ c -> isLower c && c /= 'u')