blob: 7dc92fde6f10a287087212ce325f4013da81e245 (
plain) (
tree)
|
|
{-# LANGUAGE OverloadedStrings #-}
module Text.Edifact.BundleReader.CodedSimples
( readCodedSimples
) where
import Text.Edifact.BundleReader.Commons
import Text.Edifact.BundleReader.Configuration (BundleReaderEnv (..))
import Text.Edifact.BundleReader.Simples (simplesDirectory)
import Text.Edifact.Scaffolder.Commons
import Text.Edifact.Scaffolder.CodedSimples.Specification
import Control.Monad (when)
import Control.Monad.Reader (asks)
import Data.ByteString as BS (ByteString,
readFile)
import Formatting
readCodedSimples :: [ByteString] -> [SimpleCode] -> BundleReader ()
readCodedSimples contents simples = do
let parsedFile path = parseFile simples =<< liftIO (BS.readFile path)
parsedString = parseFile simples
files <- asks codedSimplesFiles
mapM_ parsedFile files
mapM_ parsedString contents
parseFile :: [SimpleCode] -> ByteString -> BundleReader [SimpleCode]
parseFile simples content =
let chunks = tail $ splitFileByDash 70 $ decodeContent content
in traverse (parseChunk simples) chunks
parseChunk :: [SimpleCode] -> Text -> BundleReader SimpleCode
parseChunk simples chunk = do
parsed <- parseOrFail chunk specificationParser
outputFile <- getOutputFile (fSimpleCodeLower % ".txt") simplesDirectory (fst parsed)
when (fst parsed `elem` simples) $ toFile chunk outputFile
pure $ fst parsed
|