aboutsummaryrefslogtreecommitdiffhomepage
path: root/scaffolder/src/Text/Edifact/BundleReader/Simples.hs
diff options
context:
space:
mode:
authorFrédéric Menou <frederic.menou@fretlink.com>2016-12-08 10:19:15 +0200
committerIsmaël Bouya <ismael.bouya@fretlink.com>2022-05-17 18:01:51 +0200
commita9d77a20008efe82862cc1adbfa7a6d4f09f8ff7 (patch)
treeadf3186fdccaeef19151026cdfbd38a530cf9ecb /scaffolder/src/Text/Edifact/BundleReader/Simples.hs
downloadedi-parser-master.tar.gz
edi-parser-master.tar.zst
edi-parser-master.zip
Release code as open sourceHEADmaster
Diffstat (limited to 'scaffolder/src/Text/Edifact/BundleReader/Simples.hs')
-rw-r--r--scaffolder/src/Text/Edifact/BundleReader/Simples.hs43
1 files changed, 43 insertions, 0 deletions
diff --git a/scaffolder/src/Text/Edifact/BundleReader/Simples.hs b/scaffolder/src/Text/Edifact/BundleReader/Simples.hs
new file mode 100644
index 0000000..df7d662
--- /dev/null
+++ b/scaffolder/src/Text/Edifact/BundleReader/Simples.hs
@@ -0,0 +1,43 @@
1{-# LANGUAGE OverloadedStrings #-}
2
3module Text.Edifact.BundleReader.Simples
4 ( readSimples
5 , simplesDirectory
6 ) where
7
8import Text.Edifact.BundleReader.Commons
9import Text.Edifact.BundleReader.Configuration (BundleReaderEnv (..))
10import Text.Edifact.Scaffolder.Commons
11
12import Text.Edifact.Scaffolder.Simples.Specification
13
14import Control.Monad (when)
15import Control.Monad.Reader (asks)
16import Data.ByteString as BS (ByteString,
17 readFile)
18import Formatting
19
20simplesDirectory :: FilePath
21simplesDirectory = "simples"
22
23readSimples :: [ByteString] -> [SimpleCode] -> BundleReader [SimpleCode]
24readSimples contents simples = do
25 let parsedFile path = parseFile simples =<< liftIO (BS.readFile path)
26 parsedString = parseFile simples
27 files <- asks simplesFiles
28 parsedFiles <- traverse parsedFile files
29 parsedStrings <- traverse parsedString contents
30 let filtered = filter (`elem` simples) $ concat (parsedFiles <> parsedStrings)
31 pure filtered
32
33parseFile :: [SimpleCode] -> ByteString -> BundleReader [SimpleCode]
34parseFile simples content =
35 let chunks = tail $ splitFileByDash 70 $ decodeContent content
36 in traverse (parseChunk simples) chunks
37
38parseChunk :: [SimpleCode] -> Text -> BundleReader SimpleCode
39parseChunk simples chunk = do
40 parsed <- parseOrFail chunk specificationParser
41 outputFile <- getOutputFile (fSimpleCodeLower % ".txt") simplesDirectory (fst parsed)
42 when (fst parsed `elem` simples) $ toFile chunk outputFile
43 pure $ fst parsed