never executed always true always false
1 module HelVM.HelMA.Automata.WhiteSpace.Evaluator (
2 runRio,
3 run,
4 simpleEval,
5 evalParams,
6 ) where
7
8 import HelVM.HelMA.Automata.WhiteSpace.API.TokenType
9 import HelVM.HelMA.Automata.WhiteSpace.Lexer
10 import HelVM.HelMA.Automata.WhiteSpace.Parser
11 import qualified HelVM.HelMA.Automata.WhiteSpace.SimpleParams as S
12 import HelVM.HelMA.Automata.WhiteSpace.Token
13
14 import qualified HelVM.HelMA.Automaton.API.AppOptions as App
15 import qualified HelVM.HelMA.Automaton.API.AutomatonOptions as Automaton
16 import HelVM.HelMA.Automaton.API.Emit
17 import HelVM.HelMA.Automaton.API.Env
18 import HelVM.HelMA.Automaton.API.EvalParams
19 import HelVM.HelMA.Automaton.API.IOTypes
20
21 import HelVM.HelMA.Automaton.Automaton
22
23 import HelVM.HelMA.Automaton.Eff.MonadEff
24
25 import HelVM.HelMA.Automaton.Extra
26
27 import HelVM.HelMA.Automaton.Types.LabelType
28
29 import HelVM.HelIO.Control.Safe
30
31 import Prelude hiding (swap)
32
33 import qualified RIO
34
35 import Text.Pretty.Simple
36
37 runRio :: Has env => TokenType -> RIO.RIO env ()
38 runRio t = runWithOptions =<< optionsRio where
39 runWithOptions o = run (App.emit o) t . App.evalParams o =<< readSourceFileRio
40
41 run :: Has env => Emit -> TokenType -> EvalParams -> RIO.RIO env ()
42 run No t = runAsRIO . evalParams t
43 run IL VisibleTokenType = putLTextLnRio . pShowNoColor . (flipParseVisible <$> formatType <*> source)
44 run IL WhiteTokenType = putLTextLnRio . pShowNoColor . (flipParseWhite <$> formatType <*> source)
45 run TL VisibleTokenType = putLTextLnRio . show . tokenizeVisible . source
46 run TL WhiteTokenType = putLTextLnRio . show . tokenizeWhite . source
47 run Code VisibleTokenType = putLTextLnRio . show . readVisibleTokens . source
48 run Code WhiteTokenType = putLTextLnRio . show . readWhiteTokens . source
49
50
51 simpleEval :: AppEff m => S.SimpleParams -> m ()
52 simpleEval p = eval (S.tokenType p) (S.source p) (S.formatType p) $ S.automatonOptions p
53
54 ----
55
56 evalParams :: AppEff m => TokenType -> EvalParams -> m ()
57 evalParams tokenType p = eval tokenType (source p) (formatType p) $ automatonOptions p
58
59 eval :: AppEff m => TokenType -> Source -> LabelType -> Automaton.AutomatonOptions -> m ()
60 eval tokenType source = evalTL $ tokenize tokenType source
61
62 evalTL :: AppEff m => TokenList -> LabelType -> Automaton.AutomatonOptions -> m ()
63 evalTL tl ascii ao = flip start ao =<< liftSafe (parseFromTL ascii tl)