{-|
Description:    Tokenization rules for characters comprising a @\<!DOCTYPE\>@ declaration.

Copyright:      (c) 2020 Sam May
License:        MPL-2.0
Maintainer:     ag.eitilt@gmail.com

Stability:      stable
Portability:    portable
-}
module Web.Mangrove.Parse.Tokenize.Doctype
    ( tokenDoctype
    ) where


import qualified Data.Char as C
import qualified Data.Text as T

import Web.Mangrove.Parse.Common.Error
import Web.Mangrove.Parse.Tokenize.Common
import Web.Willow.Common.Encoding.Character
import Web.Willow.Common.Parser.Util

import Control.Applicative ( (<|>) )


-- | An intermediate form of 'DoctypeParams' with unpacked parameter types to
-- facilitate construction.  Specifically, 'Char'-by-'Char' construction of a
-- 'String' followed by a single 'T.pack' is much faster than repeated @O(n)@
-- calls to 'T.cons'.  Values may be easily instantiated as updates to
-- @emptyDoctypeData@ or @quirksDoctype@.
data DoctypeParams' = DoctypeParams'
    { DoctypeParams' -> Maybe String
doctypeName' :: Maybe String
        -- ^ See 'doctypeName'.
    , DoctypeParams' -> Maybe String
doctypePublicId' :: Maybe String
        -- ^ See 'doctypePublicId'.
    , DoctypeParams' -> Maybe String
doctypeSystemId' :: Maybe String
        -- ^ See 'doctypeSystemId'.
    , DoctypeParams' -> Bool
doctypeQuirks' :: Bool
        -- ^ See 'doctypeQuirks'.
    }
  deriving ( DoctypeParams' -> DoctypeParams' -> Bool
(DoctypeParams' -> DoctypeParams' -> Bool)
-> (DoctypeParams' -> DoctypeParams' -> Bool) -> Eq DoctypeParams'
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DoctypeParams' -> DoctypeParams' -> Bool
$c/= :: DoctypeParams' -> DoctypeParams' -> Bool
== :: DoctypeParams' -> DoctypeParams' -> Bool
$c== :: DoctypeParams' -> DoctypeParams' -> Bool
Eq, Int -> DoctypeParams' -> ShowS
[DoctypeParams'] -> ShowS
DoctypeParams' -> String
(Int -> DoctypeParams' -> ShowS)
-> (DoctypeParams' -> String)
-> ([DoctypeParams'] -> ShowS)
-> Show DoctypeParams'
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DoctypeParams'] -> ShowS
$cshowList :: [DoctypeParams'] -> ShowS
show :: DoctypeParams' -> String
$cshow :: DoctypeParams' -> String
showsPrec :: Int -> DoctypeParams' -> ShowS
$cshowsPrec :: Int -> DoctypeParams' -> ShowS
Show, ReadPrec [DoctypeParams']
ReadPrec DoctypeParams'
Int -> ReadS DoctypeParams'
ReadS [DoctypeParams']
(Int -> ReadS DoctypeParams')
-> ReadS [DoctypeParams']
-> ReadPrec DoctypeParams'
-> ReadPrec [DoctypeParams']
-> Read DoctypeParams'
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DoctypeParams']
$creadListPrec :: ReadPrec [DoctypeParams']
readPrec :: ReadPrec DoctypeParams'
$creadPrec :: ReadPrec DoctypeParams'
readList :: ReadS [DoctypeParams']
$creadList :: ReadS [DoctypeParams']
readsPrec :: Int -> ReadS DoctypeParams'
$creadsPrec :: Int -> ReadS DoctypeParams'
Read )

-- | A sane default collection for easy record initialization; namely,
-- 'Nothing's and 'False'.  See also @quirksDoctype@.
emptyDoctypeData :: DoctypeParams'
emptyDoctypeData :: DoctypeParams'
emptyDoctypeData = DoctypeParams' :: Maybe String
-> Maybe String -> Maybe String -> Bool -> DoctypeParams'
DoctypeParams'
    { doctypeName' :: Maybe String
doctypeName' = Maybe String
forall a. Maybe a
Nothing
    , doctypePublicId' :: Maybe String
doctypePublicId' = Maybe String
forall a. Maybe a
Nothing
    , doctypeSystemId' :: Maybe String
doctypeSystemId' = Maybe String
forall a. Maybe a
Nothing
    , doctypeQuirks' :: Bool
doctypeQuirks' = Bool
False
    }

-- | As like @emptyDoctypeData@, but indicating that the document should be
-- forced to render in the quirks mode.
quirksDoctype :: DoctypeParams'
quirksDoctype :: DoctypeParams'
quirksDoctype = DoctypeParams'
emptyDoctypeData
    { doctypeQuirks' :: Bool
doctypeQuirks' = Bool
True
    }


-- | Wrap a given collection of data into the payload of a 'Doctype'.
packDoctypeToken :: TokenizerOutput DoctypeParams' -> TokenizerOutput Token
packDoctypeToken :: TokenizerOutput DoctypeParams' -> TokenizerOutput Token
packDoctypeToken TokenizerOutput DoctypeParams'
d' = ((DoctypeParams' -> Token)
 -> TokenizerOutput DoctypeParams' -> TokenizerOutput Token)
-> TokenizerOutput DoctypeParams'
-> (DoctypeParams' -> Token)
-> TokenizerOutput Token
forall a b c. (a -> b -> c) -> b -> a -> c
flip (DoctypeParams' -> Token)
-> TokenizerOutput DoctypeParams' -> TokenizerOutput Token
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams'
d' ((DoctypeParams' -> Token) -> TokenizerOutput Token)
-> (DoctypeParams' -> Token) -> TokenizerOutput Token
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams -> Token
Doctype (DoctypeParams -> Token) -> DoctypeParams -> Token
forall a b. (a -> b) -> a -> b
$ DoctypeParams
emptyDoctypeParams
    { doctypeName :: Maybe Text
doctypeName = String -> Text
T.pack (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DoctypeParams' -> Maybe String
doctypeName' DoctypeParams'
d
    , doctypePublicId :: Maybe Text
doctypePublicId = String -> Text
T.pack (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DoctypeParams' -> Maybe String
doctypePublicId' DoctypeParams'
d
    , doctypeSystemId :: Maybe Text
doctypeSystemId = String -> Text
T.pack (String -> Text) -> Maybe String -> Maybe Text
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> DoctypeParams' -> Maybe String
doctypeSystemId' DoctypeParams'
d
    , doctypeQuirks :: Bool
doctypeQuirks = DoctypeParams' -> Bool
doctypeQuirks' DoctypeParams'
d
    }


-- | Mark a collection of data as containing a doctype public identifier,
-- without overwriting any data which may already be set.
ensurePublicId :: TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensurePublicId :: TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensurePublicId = (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((DoctypeParams' -> DoctypeParams')
 -> TokenizerOutput DoctypeParams'
 -> TokenizerOutput DoctypeParams')
-> (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams'
d
    { doctypePublicId' :: Maybe String
doctypePublicId' = DoctypeParams' -> Maybe String
doctypePublicId' DoctypeParams'
d Maybe String -> Maybe String -> Maybe String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Maybe String
forall a. a -> Maybe a
Just String
""
    }

-- | Mark a collection of data as containing a doctype system identifier,
-- without overwriting any data which may already be set.
ensureSystemId :: TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId :: TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId = (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((DoctypeParams' -> DoctypeParams')
 -> TokenizerOutput DoctypeParams'
 -> TokenizerOutput DoctypeParams')
-> (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams'
d
    { doctypeSystemId' :: Maybe String
doctypeSystemId' = DoctypeParams' -> Maybe String
doctypeSystemId' DoctypeParams'
d Maybe String -> Maybe String -> Maybe String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Maybe String
forall a. a -> Maybe a
Just String
""
    }

-- | Mark a collection of data as forcing a document to render in quirks mode.
ensureQuirks :: TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks :: TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks = (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((DoctypeParams' -> DoctypeParams')
 -> TokenizerOutput DoctypeParams'
 -> TokenizerOutput DoctypeParams')
-> (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams'
d
    { doctypeQuirks' :: Bool
doctypeQuirks' = Bool
True
    }


-- | Prepend a character to the unpacked name of the root element -- or, in
-- other words, the markup language used.
consDoctypeName :: Char -> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consDoctypeName :: Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consDoctypeName Char
c = (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((DoctypeParams' -> DoctypeParams')
 -> TokenizerOutput DoctypeParams'
 -> TokenizerOutput DoctypeParams')
-> (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams'
d
    { doctypeName' :: Maybe String
doctypeName' = ShowS -> Maybe String -> Maybe String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Char
c Char -> ShowS
forall a. a -> [a] -> [a]
:) (Maybe String -> Maybe String) -> Maybe String -> Maybe String
forall a b. (a -> b) -> a -> b
$ DoctypeParams' -> Maybe String
doctypeName' DoctypeParams'
d Maybe String -> Maybe String -> Maybe String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Maybe String
forall a. a -> Maybe a
Just []
    }

-- | Prepend a character to the unpacked public identifier of a doctype.
consPublicId :: Char -> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consPublicId :: Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consPublicId Char
c = (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((DoctypeParams' -> DoctypeParams')
 -> TokenizerOutput DoctypeParams'
 -> TokenizerOutput DoctypeParams')
-> (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams'
d
    { doctypePublicId' :: Maybe String
doctypePublicId' = ShowS -> Maybe String -> Maybe String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Char
c Char -> ShowS
forall a. a -> [a] -> [a]
:) (Maybe String -> Maybe String) -> Maybe String -> Maybe String
forall a b. (a -> b) -> a -> b
$ DoctypeParams' -> Maybe String
doctypePublicId' DoctypeParams'
d Maybe String -> Maybe String -> Maybe String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Maybe String
forall a. a -> Maybe a
Just []
    }

-- | Prepend a character to the unpacked system identifier of a doctype.
consSystemId :: Char -> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consSystemId :: Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consSystemId Char
c = (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((DoctypeParams' -> DoctypeParams')
 -> TokenizerOutput DoctypeParams'
 -> TokenizerOutput DoctypeParams')
-> (DoctypeParams' -> DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall a b. (a -> b) -> a -> b
$ \DoctypeParams'
d -> DoctypeParams'
d
    { doctypeSystemId' :: Maybe String
doctypeSystemId' = ShowS -> Maybe String -> Maybe String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Char
c Char -> ShowS
forall a. a -> [a] -> [a]
:) (Maybe String -> Maybe String) -> Maybe String -> Maybe String
forall a b. (a -> b) -> a -> b
$ DoctypeParams' -> Maybe String
doctypeSystemId' DoctypeParams'
d Maybe String -> Maybe String -> Maybe String
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Maybe String
forall a. a -> Maybe a
Just []
    }


-- | __HTML:__
--      @[DOCTYPE state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#doctype-state)@
-- 
-- The parsing instructions for after reading @"\<!DOCTYPE"@ in a section of the
-- state machine which allows markup declarations.
tokenDoctype :: Tokenizer (TokenizerOutput Token)
tokenDoctype :: Tokenizer (TokenizerOutput Token)
tokenDoctype = Maybe ([ParseError], Token)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)]
-> Tokenizer (TokenizerOutput Token)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], Token) -> Maybe ([ParseError], Token)
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], Token
quirksDoctype'))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput Token)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace (Tokenizer (TokenizerOutput Token)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token))
-> Tokenizer (TokenizerOutput Token)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput Token)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> Tokenizer (TokenizerOutput Token)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput Token
packDoctypeToken StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeName
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput Token)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)
forall out.
(Char -> Bool)
-> Tokenizer out
-> SwitchCase TokenizerInput Tokenizer (Wrapped out)
ifPush_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (Tokenizer (TokenizerOutput Token)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token))
-> Tokenizer (TokenizerOutput Token)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput Token)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> Tokenizer (TokenizerOutput Token)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput Token
packDoctypeToken StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeName
    , Tokenizer (TokenizerOutput Token)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (Tokenizer (TokenizerOutput Token)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token))
-> Tokenizer (TokenizerOutput Token)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput Token)
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput Token)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> Tokenizer (TokenizerOutput Token)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (TokenizerOutput DoctypeParams' -> TokenizerOutput Token
packDoctypeToken (TokenizerOutput DoctypeParams' -> TokenizerOutput Token)
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput Token
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceBeforeDoctypeName)
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeName
    ]
  where quirksDoctype' :: Token
quirksDoctype' = DoctypeParams -> Token
Doctype (DoctypeParams -> Token) -> DoctypeParams -> Token
forall a b. (a -> b) -> a -> b
$ DoctypeParams
emptyDoctypeParams
            { doctypeQuirks :: Bool
doctypeQuirks = Bool
True
            }

-- | __HTML:__
--      @[before DOCTYPE name state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#before-doctype-name-state)@
-- 
-- The parsing instructions for after reading @"\<!DOCTYPE "@ in the doctype
-- declaration section of the state machine.
tokenBeforeDoctypeName :: Tokenizer (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeName :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeName = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeName
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consDoctypeName Char
replacementChar (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeName
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
MissingDoctypeName], DoctypeParams'
quirksDoctype)
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consDoctypeName (Char -> Char
toAsciiLower Char
c) (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeName
    ]

-- | __HTML:__
--      @[DOCTYPE name state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#doctype-name-state)@
-- 
-- The parsing instructions at the initial segment of the doctype declaration
-- section of the state machine.
tokenDoctypeName :: Tokenizer (TokenizerOutput DoctypeParams')
tokenDoctypeName :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeName = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], DoctypeParams'
emptyDoctypeData)
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consDoctypeName Char
replacementChar (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeName
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consDoctypeName (Char -> Char
toAsciiLower Char
c) (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeName
    ]

-- | __HTML:__
--      @[after DOCTYPE name state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#after-doctype-name-state)@
-- 
-- The parsing instructions for after reading the root element in the doctype
-- declaration section of the state machine.
tokenAfterDoctypeName :: Tokenizer (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], DoctypeParams'
emptyDoctypeData)
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName'
    ]

-- | Dispatch the parser according to a @"PUBLIC"@ or @"SYSTEM"@ keyword in the
-- doctype declaration.
tokenAfterDoctypeName' :: Tokenizer (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName' :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeName' = [StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (m :: * -> *) a. Alternative m => [m a] -> m a
choice
    [ (Char -> Char) -> String -> Tokenizer [TokenizerInput]
chunk' Char -> Char
C.toUpper String
"PUBLIC" Tokenizer [TokenizerInput]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicKeyword
    , (Char -> Char) -> String -> Tokenizer [TokenizerInput]
chunk' Char -> Char
C.toUpper String
"SYSTEM" Tokenizer [TokenizerInput]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemKeyword
    , ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
InvalidCharacterSequenceAfterDoctypeName (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[after DOCTYPE public keyword state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#after-doctype-public-keyword-state)@
-- 
-- The parsing instructions for after reading @"PUBLIC"@ in the doctype
-- declaration section of the state machine.
tokenAfterDoctypePublicKeyword :: Tokenizer (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicKeyword :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicKeyword = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypePublicIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceAfterDoctypePublicKeyword (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensurePublicId (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceAfterDoctypePublicKeyword (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensurePublicId (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierSingleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
MissingDoctypePublicIdentifier], DoctypeParams'
quirksDoctype)
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingQuoteBeforeDoctypePublicIdentifier (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[before DOCTYPE public identifier state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#before-doctype-public-identifier-state)@
-- 
-- The parsing instructions for after reading @"PUBLIC "@ in the doctype
-- declaration section of the state machine.
tokenBeforeDoctypePublicIdentifier :: Tokenizer (TokenizerOutput DoctypeParams')
tokenBeforeDoctypePublicIdentifier :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypePublicIdentifier = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypePublicIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensurePublicId StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensurePublicId StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierSingleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
MissingDoctypePublicIdentifier], DoctypeParams'
quirksDoctype)
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingQuoteBeforeDoctypePublicIdentifier (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[DOCTYPE public identifier (double-quoted) state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#doctype-public-identifier-(double-quoted\)-state)@
-- 
-- The parsing instructions for after reading @"PUBLIC \\""@ in the doctype
-- declaration section of the state machine.
tokenDoctypePublicIdentifierDoubleQuoted :: Tokenizer (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierDoubleQuoted :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierDoubleQuoted = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consPublicId Char
replacementChar (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> 
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
AbruptDoctypePublicIdentifier], DoctypeParams'
quirksDoctype)
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consPublicId Char
c (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierDoubleQuoted
    ]

-- | __HTML:__
--      @[DOCTYPE public identifier (single-quoted) state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#doctype-public-identifier-(single-quoted\)-state)@
-- 
-- The parsing instructions for after reading @"PUBLIC '"@ in the doctype
-- declaration section of the state machine.
tokenDoctypePublicIdentifierSingleQuoted :: Tokenizer (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierSingleQuoted :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierSingleQuoted = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consPublicId Char
replacementChar (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierSingleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> 
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
AbruptDoctypePublicIdentifier], DoctypeParams'
quirksDoctype)
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consPublicId Char
c (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypePublicIdentifierSingleQuoted
    ]

-- | __HTML:__
--      @[after DOCTYPE public identifier state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#after-doctype-public-identifier-state)@
-- 
-- The parsing instructions for after reading the closing quote of a public
-- identifier in the doctype declaration section of the state machine.
tokenAfterDoctypePublicIdentifier :: Tokenizer (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicIdentifier :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypePublicIdentifier = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBetweenDoctypePublicAndSystemIdentifiers
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], DoctypeParams'
emptyDoctypeData)
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$
        ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$
        ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceBetweenDoctypePublicAndSystemIdentifiers (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$
        ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingQuoteBeforeDoctypeSystemIdentifier (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[between DOCTYPE public and system identifier state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#between-doctype-public-and-system-identifiers-state)@
-- 
-- The parsing instructions for after reading a whitespace character after the
-- closing quote of a public identifier in the doctype declaration section of
-- the state machine.
tokenBetweenDoctypePublicAndSystemIdentifiers :: Tokenizer (TokenizerOutput DoctypeParams')
tokenBetweenDoctypePublicAndSystemIdentifiers :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBetweenDoctypePublicAndSystemIdentifiers = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBetweenDoctypePublicAndSystemIdentifiers
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], DoctypeParams'
emptyDoctypeData)
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingQuoteBeforeDoctypeSystemIdentifier (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[after DOCTYPE system keyword state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#after-doctype-system-keyword-state)@
-- 
-- The parsing instructions for after reading @"SYSTEM"@ in the doctype
-- declaration section of the state machine.
tokenAfterDoctypeSystemKeyword :: Tokenizer (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemKeyword :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemKeyword = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeSystemIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceAfterDoctypeSystemKeyword (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingWhitespaceAfterDoctypeSystemKeyword (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
MissingDoctypeSystemIdentifier], DoctypeParams'
quirksDoctype)
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingQuoteBeforeDoctypeSystemIdentifier (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[before DOCTYPE system identifier state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#before-doctype-system-identifier-state)@
-- 
-- The parsing instructions for after reading @"SYSTEM "@ in the doctype
-- declaration section of the state machine.
tokenBeforeDoctypeSystemIdentifier :: Tokenizer (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeSystemIdentifier :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeSystemIdentifier = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBeforeDoctypeSystemIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureSystemId StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*>
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
MissingDoctypeSystemIdentifier], DoctypeParams'
quirksDoctype)
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
MissingQuoteBeforeDoctypeSystemIdentifier (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
ensureQuirks (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[DOCTYPE system identifier (double-quoted) state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#doctype-system-identifier-(double-quoted\)-state)@
-- 
-- The parsing instructions for after reading @"SYSTEM \\""@, or a @'"'@ after
-- a public identifier, in the doctype declaration section of the state
-- machine.
tokenDoctypeSystemIdentifierDoubleQuoted :: Tokenizer (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'"') StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consSystemId Char
replacementChar (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> 
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
AbruptDoctypeSystemIdentifier], DoctypeParams'
quirksDoctype)
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consSystemId Char
c (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierDoubleQuoted
    ]

-- | __HTML:__
--      @[DOCTYPE system identifier (single-quoted) state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#doctype-system-identifier-(single-quoted\)-state)@
-- 
-- The parsing instructions for after reading @"SYSTEM '"@, or a @'\''@ after
-- a public identifier, in the doctype declaration section of the state
-- machine.
tokenDoctypeSystemIdentifierSingleQuoted :: Tokenizer (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\'') StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> (TokenizerOutput DoctypeParams'
    -> TokenizerOutput DoctypeParams')
-> TokenizerOutput DoctypeParams'
-> TokenizerOutput DoctypeParams'
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consSystemId Char
replacementChar (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> 
        ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
AbruptDoctypeSystemIdentifier], DoctypeParams'
quirksDoctype)
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
consSystemId Char
c (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenDoctypeSystemIdentifierSingleQuoted
    ]

-- | __HTML:__
--      @[after DOCTYPE system identifier state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#after-doctype-system-identifier-state)@
-- 
-- The parsing instructions for after reading the closing quote of a system
-- identifier in the doctype declaration section of the state machine.
tokenAfterDoctypeSystemIdentifier :: Tokenizer (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemIdentifier :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemIdentifier = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([ParseError
EOFInDoctype], DoctypeParams'
quirksDoctype))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ Char -> Bool
isAsciiWhitespace StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenAfterDoctypeSystemIdentifier
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], DoctypeParams'
emptyDoctypeData)
    , (Char
 -> StateT
      TokenParserState
      (Parser [TokenizerInput])
      (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Tokenizer out)
-> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePushChar ((Char
  -> StateT
       TokenParserState
       (Parser [TokenizerInput])
       (TokenizerOutput DoctypeParams'))
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> (Char
    -> StateT
         TokenParserState
         (Parser [TokenizerInput])
         (TokenizerOutput DoctypeParams'))
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ \Char
c -> ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError (Char -> ParseError
UnexpectedCharacterAfterDoctypeSystemIdentifier Char
c) (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
        StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]

-- | __HTML:__
--      @[bogus DOCTYPE state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#bogus-doctype-state)@
-- 
-- The parsing instructions for after reading a disallowed character sequence
-- in the doctype declaration section of the state machine.
tokenBogusDoctype :: Tokenizer (TokenizerOutput DoctypeParams')
tokenBogusDoctype :: StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype = Maybe ([ParseError], DoctypeParams')
-> [SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams')]
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], DoctypeParams')
-> Maybe ([ParseError], DoctypeParams')
forall a. a -> Maybe a
Just ([], DoctypeParams'
emptyDoctypeData))
    [ (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], DoctypeParams'
emptyDoctypeData)
    , (Char -> Bool)
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\NUL') (StateT
   TokenParserState
   (Parser [TokenizerInput])
   (TokenizerOutput DoctypeParams')
 -> SwitchCase
      TokenizerInput Tokenizer (WrappedOutput DoctypeParams'))
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall a b. (a -> b) -> a -> b
$ ParseError
-> TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams'
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput DoctypeParams' -> TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
-> StateT
     TokenParserState
     (Parser [TokenizerInput])
     (TokenizerOutput DoctypeParams')
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    , StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
-> SwitchCase
     TokenizerInput Tokenizer (WrappedOutput DoctypeParams')
forall out.
Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
else_ StateT
  TokenParserState
  (Parser [TokenizerInput])
  (TokenizerOutput DoctypeParams')
tokenBogusDoctype
    ]