mangrove-0.1.0.0: src/Web/Mangrove/Parse/Tokenize/Dispatcher.hs
{-|
Description: Central directory for tokenization rules.
Copyright: (c) 2020 Sam May
License: MPL-2.0
Maintainer: ag.eitilt@gmail.com
Stability: stable
Portability: portable
-}
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
-- | Delegate parsing the binary stream to the appropriate part of the finite
-- state machine, according to the top-level 'CurrentTokenizerState'.
dispatcher :: Tokenizer [TokenizerOutput Token]
dispatcher = do
state <- N.S.get
case currentState state of
DataState -> tokenData
RCDataState -> tokenRCData
RawTextState -> tokenRawText
PlainTextState -> fmap (: []) tokenPlainText
ScriptDataState -> tokenScriptData
ScriptDataEscapedState -> tokenScriptDataEscaped
ScriptDataDoubleEscapedState -> tokenScriptDataDoubleEscaped
CDataState -> tokenCDataSection