module Web.Mangrove.Parse.Tokenize.Dispatcher
( dispatcher
) where
import qualified Control.Monad.Trans.State as N.S
import Web.Mangrove.Parse.Tokenize.CData
import Web.Mangrove.Parse.Tokenize.Common
import Web.Mangrove.Parse.Tokenize.Data
import Web.Mangrove.Parse.Tokenize.RawText
import Web.Mangrove.Parse.Tokenize.RCData
import Web.Mangrove.Parse.Tokenize.PlainText
import Web.Mangrove.Parse.Tokenize.ScriptData
import Web.Mangrove.Parse.Tokenize.ScriptDataEscaped
import Web.Mangrove.Parse.Tokenize.ScriptDataDoubleEscaped
dispatcher :: Tokenizer [TokenizerOutput Token]
dispatcher :: Tokenizer [TokenizerOutput Token]
dispatcher = do
TokenParserState
state <- StateT TokenParserState (Parser [TokenizerInput]) TokenParserState
forall (m :: * -> *) s. Monad m => StateT s m s
N.S.get
case TokenParserState -> CurrentTokenizerState
currentState TokenParserState
state of
CurrentTokenizerState
DataState -> Tokenizer [TokenizerOutput Token]
tokenData
CurrentTokenizerState
RCDataState -> Tokenizer [TokenizerOutput Token]
tokenRCData
CurrentTokenizerState
RawTextState -> Tokenizer [TokenizerOutput Token]
tokenRawText
CurrentTokenizerState
PlainTextState -> (TokenizerOutput Token -> [TokenizerOutput Token])
-> StateT
TokenParserState (Parser [TokenizerInput]) (TokenizerOutput Token)
-> Tokenizer [TokenizerOutput Token]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (TokenizerOutput Token
-> [TokenizerOutput Token] -> [TokenizerOutput Token]
forall a. a -> [a] -> [a]
: []) StateT
TokenParserState (Parser [TokenizerInput]) (TokenizerOutput Token)
tokenPlainText
CurrentTokenizerState
ScriptDataState -> Tokenizer [TokenizerOutput Token]
tokenScriptData
CurrentTokenizerState
ScriptDataEscapedState -> Tokenizer [TokenizerOutput Token]
tokenScriptDataEscaped
CurrentTokenizerState
ScriptDataDoubleEscapedState -> Tokenizer [TokenizerOutput Token]
tokenScriptDataDoubleEscaped
CurrentTokenizerState
CDataState -> Tokenizer [TokenizerOutput Token]
tokenCDataSection