module Lsql.Csv.Main (run) where
import Lsql.Csv.Lang.Args
import Lsql.Csv.Lang.BlockSeparator
import Lsql.Csv.Lang.From.Block
import Lsql.Csv.Lang.BlockChain
import Lsql.Csv.Core.BlockOps
import Lsql.Csv.Core.Symbols
import Lsql.Csv.Core.Evaluator
import Lsql.Csv.Utils.CsvGenerator
run :: Program -> IO String
run :: Program -> IO String
run Program
prog = do
SymbolMap
symbol_map <- Program -> String -> IO SymbolMap
getFromSymbols Program
prog String
from_block
let blocks :: [Block]
blocks = [String] -> [String] -> [Block]
parseBlocks [String]
rest_blocks([String] -> [Block]) -> [String] -> [Block]
forall a b. (a -> b) -> a -> b
$ SymbolMap -> [String]
symbolList SymbolMap
symbol_map
let evaluated :: [Printable]
evaluated = SymbolMap -> [Block] -> [Printable]
evaluate SymbolMap
symbol_map [Block]
blocks
String -> IO String
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return(String -> IO String) -> String -> IO String
forall a b. (a -> b) -> a -> b
$ Char -> Char -> [Printable] -> String
csvGenerate Char
sep Char
sec_sep [Printable]
evaluated
where
Program String
command Char
sep Char
sec_sep Bool
_ = Program
prog
blocks_split :: [String]
blocks_split :: [String]
blocks_split = String -> [String]
splitBlocks String
command
String
from_block : [String]
rest_blocks = [String]
blocks_split