]>
Commit | Line | Data |
---|---|---|
a9d77a20 FM |
1 | module Text.Edifact.Common.Segments.UNA |
2 | ( segmentUNA | |
3 | ) where | |
4 | ||
5 | import Text.Edifact.Parsing | |
6 | import Text.Edifact.Parsing.Commons (updateSyntax) | |
7 | import Text.Edifact.Types (Syntax (..), defaultSyntax) | |
8 | ||
9 | import Control.Monad (void) | |
10 | import Text.Parsec (anyChar, char, endOfLine, | |
11 | optionMaybe, string, try) | |
12 | import qualified Text.Parsec as P (optional) | |
13 | ||
14 | segmentUNA :: Parser () | |
15 | segmentUNA = | |
16 | let segmentParser = string "UNA" *> parseSyntax <* P.optional endOfLine | |
17 | nothing = pure () | |
18 | in optionMaybe (try segmentParser) >>= maybe nothing updateSyntax | |
19 | ||
20 | parseSyntax :: Parser Syntax | |
21 | parseSyntax = do | |
22 | compositeSeparator' <- anyChar | |
23 | elementSeparator' <- anyChar | |
24 | decimalSign' <- anyChar | |
25 | escape' <- anyChar | |
26 | void $ char ' ' -- reserved, not used | |
27 | segmentSeparator' <- anyChar | |
28 | pure defaultSyntax | |
29 | { compositeSeparator = compositeSeparator' | |
30 | , elementSeparator = elementSeparator' | |
31 | , decimalSign = decimalSign' | |
32 | , escape = escape' | |
33 | , segmentSeparator = segmentSeparator' | |
34 | } |