packages feed

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