{-|
Description:    Tokenization rules for characters within @\<!--@ ... @--\>@ sections.

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

Stability:      stable
Portability:    portable
-}
module Web.Mangrove.Parse.Tokenize.Comment
    ( tokenCommentStart
    , packCommentToken
    ) where


import qualified Data.Text as T

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


-- | Wrap a given span of 'Char's into the payload of a 'Comment'.
packCommentToken :: TokenizerOutput String -> TokenizerOutput Token
packCommentToken :: TokenizerOutput String -> TokenizerOutput Token
packCommentToken = (String -> Token)
-> TokenizerOutput String -> TokenizerOutput Token
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((String -> Token)
 -> TokenizerOutput String -> TokenizerOutput Token)
-> (String -> Token)
-> TokenizerOutput String
-> TokenizerOutput Token
forall a b. (a -> b) -> a -> b
$ Text -> Token
Comment (Text -> Token) -> (String -> Text) -> String -> Token
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack


-- | __HTML:__
--      @[comment start state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state)@
-- 
-- The parsing instructions for after reading @"\<!--"@ in a section of the
-- state machine which allows markup declarations.
tokenCommentStart :: Tokenizer (TokenizerOutput String)
tokenCommentStart :: Tokenizer (TokenizerOutput String)
tokenCommentStart = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') Tokenizer (TokenizerOutput String)
tokenCommentStartDash
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], String) -> Tokenizer (TokenizerOutput String)
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
AbruptClosingOfEmptyComment], String
"")
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment start dash state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-start-state)@
-- 
-- The parsing instructions for after reading @"\<!---"@ in a section of the
-- state machine which allows markup declarations.
tokenCommentStartDash :: Tokenizer (TokenizerOutput String)
tokenCommentStartDash :: Tokenizer (TokenizerOutput String)
tokenCommentStartDash = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') Tokenizer (TokenizerOutput String)
tokenCommentEnd
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], String) -> Tokenizer (TokenizerOutput String)
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
AbruptClosingOfEmptyComment], String
"")
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
'-' (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-state)@
-- 
-- The parsing instructions rooted in the HTML comment section of the state
-- machine.
tokenComment :: Tokenizer (TokenizerOutput String)
tokenComment :: Tokenizer (TokenizerOutput String)
tokenComment = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
ifChar (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'<') ((Char -> Tokenizer (TokenizerOutput String))
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
c (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenCommentLessThanSign
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') Tokenizer (TokenizerOutput String)
tokenCommentEndDash
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
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') (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ ParseError -> TokenizerOutput String -> TokenizerOutput String
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
UnexpectedNullCharacter (TokenizerOutput String -> TokenizerOutput String)
-> (TokenizerOutput String -> TokenizerOutput String)
-> TokenizerOutput String
-> TokenizerOutput String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
replacementChar (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenComment
    , (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
elseChar ((Char -> Tokenizer (TokenizerOutput String))
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
c (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment less-than sign state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-state)@
-- 
-- The parsing instructions for after reading @"\<"@ in the HTML comment
-- section of the state machine.
tokenCommentLessThanSign :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSign :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSign = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
ifChar (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'!') ((Char -> Tokenizer (TokenizerOutput String))
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
c (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBang
    , (Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
ifChar (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'<') ((Char -> Tokenizer (TokenizerOutput String))
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
c (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenCommentLessThanSign
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment less-than sign bang state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-state)@
-- 
-- The parsing instructions for after reading @"\<!"@ in the HTML comment
-- section of the state machine.
tokenCommentLessThanSignBang :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBang :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBang = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBangDash
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment less-than sign bang dash state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-state)@
-- 
-- The parsing instructions for after reading @"\<!-"@ in the HTML comment
-- section of the state machine.
tokenCommentLessThanSignBangDash :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBangDash :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBangDash = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBangDashDash
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ Tokenizer (TokenizerOutput String)
tokenCommentEndDash
    ]

-- | __HTML:__
--      @[comment less-than sign bang dash dash state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-less-than-sign-bang-dash-dash-state)@
-- 
-- The parsing instructions for after reading @"\<!--"@ in the HTML comment
-- section of the state machine.
tokenCommentLessThanSignBangDashDash :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBangDashDash :: Tokenizer (TokenizerOutput String)
tokenCommentLessThanSignBangDashDash = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
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 String)
tokenCommentEnd
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ ParseError -> TokenizerOutput String -> TokenizerOutput String
forall out.
ParseError -> TokenizerOutput out -> TokenizerOutput out
consTokenError ParseError
NestedComment (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenCommentEnd
    ]

-- | __HTML:__
--      @[comment end dash state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-end-dash-state)@
-- 
-- The parsing instructions for after reading @"-"@ in the HTML comment section
-- of the state machine.
tokenCommentEndDash :: Tokenizer (TokenizerOutput String)
tokenCommentEndDash :: Tokenizer (TokenizerOutput String)
tokenCommentEndDash = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') Tokenizer (TokenizerOutput String)
tokenCommentEnd
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
'-' (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment end state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-end-state)@
-- 
-- The parsing instructions for after reading @"--"@ in the HTML comment
-- section of the state machine.
tokenCommentEnd :: Tokenizer (TokenizerOutput String)
tokenCommentEnd :: Tokenizer (TokenizerOutput String)
tokenCommentEnd = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ CurrentTokenizerState -> Tokenizer ()
changeState CurrentTokenizerState
DataState Tokenizer ()
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> ([ParseError], String) -> Tokenizer (TokenizerOutput String)
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([], String
"")
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'!') Tokenizer (TokenizerOutput String)
tokenCommentEndBang
    , (Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> (Char -> Tokenizer (TokenizerOutput out))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
ifChar (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') ((Char -> Tokenizer (TokenizerOutput String))
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> (Char -> Tokenizer (TokenizerOutput String))
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ \Char
c -> Char -> TokenizerOutput String -> TokenizerOutput String
forall out. out -> TokenizerOutput [out] -> TokenizerOutput [out]
consOut Char
c (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenCommentEnd
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ String -> TokenizerOutput String -> TokenizerOutput String
forall out. [out] -> TokenizerOutput [out] -> TokenizerOutput [out]
consOuts String
"--" (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenComment
    ]

-- | __HTML:__
--      @[comment end bang state]
--      (https://html.spec.whatwg.org/multipage/parsing.html#comment-end-bang-state)@
-- 
-- The parsing instructions for after reading @"--!"@ in the HTML comment
-- section of the state machine.
tokenCommentEndBang :: Tokenizer (TokenizerOutput String)
tokenCommentEndBang :: Tokenizer (TokenizerOutput String)
tokenCommentEndBang = Maybe ([ParseError], String)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput String)]
-> Tokenizer (TokenizerOutput String)
forall out.
Maybe ([ParseError], out)
-> [SwitchCase TokenizerInput Tokenizer (WrappedOutput out)]
-> Tokenizer (TokenizerOutput out)
tokenizer (([ParseError], String) -> Maybe ([ParseError], String)
forall a. a -> Maybe a
Just ([ParseError
EOFInComment], String
""))
    [ (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'-') (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ String -> TokenizerOutput String -> TokenizerOutput String
forall out. [out] -> TokenizerOutput [out] -> TokenizerOutput [out]
consOuts String
"--!" (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenCommentEndDash
    , (Char -> Bool)
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
(Char -> Bool)
-> Tokenizer (TokenizerOutput out)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput out)
if_ (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'>') (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ ([ParseError], String) -> Tokenizer (TokenizerOutput String)
forall out. ([ParseError], out) -> Tokenizer (TokenizerOutput out)
packToken ([ParseError
IncorrectlyClosedComment], String
"")
    , Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall out.
Tokenizer out -> SwitchCase TokenizerInput Tokenizer (Wrapped out)
elsePush_ (Tokenizer (TokenizerOutput String)
 -> SwitchCase TokenizerInput Tokenizer (WrappedOutput String))
-> Tokenizer (TokenizerOutput String)
-> SwitchCase TokenizerInput Tokenizer (WrappedOutput String)
forall a b. (a -> b) -> a -> b
$ String -> TokenizerOutput String -> TokenizerOutput String
forall out. [out] -> TokenizerOutput [out] -> TokenizerOutput [out]
consOuts String
"--!" (TokenizerOutput String -> TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
-> Tokenizer (TokenizerOutput String)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Tokenizer (TokenizerOutput String)
tokenComment
    ]