{-| 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