packages feed

seonbi-0.3.0: src/Text/Seonbi/Html/Entity.hs

module Text.Seonbi.Html.Entity
    ( HtmlEntity (..)
    , HtmlRawAttrs
    ) where

import Data.Text

import Text.Seonbi.Html.Tag (HtmlTag)
import Text.Seonbi.Html.TagStack (HtmlTagStack)

-- | All element attributes in a string.
type HtmlRawAttrs = Text

-- | An event entity emitted by 'scanHtml'.
data HtmlEntity
    -- | Represent a token which [opens an HTML element
    -- ](https://www.w3.org/TR/html5/syntax.html#start-tags).
    --
    -- Note that 'rawAttributes' is not a parsed and structured data but a raw
    -- string as its name implies.
    --
    -- The 'tagStack' doesn't include the corresponding opened 'tag'.
    = HtmlStartTag
        { -- | A stack of 'HtmlTag's that represents a hierarchy of a currently
          -- parsing position in an 'HtmlTag' tree.
          tagStack :: HtmlTagStack
        , tag :: HtmlTag
        , rawAttributes :: HtmlRawAttrs
        }
    -- | Represent a token which [closes an HTML element
    -- ](https://www.w3.org/TR/html5/syntax.html#end-tags).
    -- The 'tagStack' doesn't include the corresponding closed 'tag'.
    | HtmlEndTag
        { -- | A stack of 'HtmlTag's that represents a hierarchy of a currently
          -- parsing position in an 'HtmlTag' tree.
          tagStack :: HtmlTagStack
        , tag :: HtmlTag
        }
    -- | Represent a token of a text node.  Note that 'rawText' is not a parsed
    -- and structured data but a raw string as its name implies.  There can be
    -- continuously more than one 'HtmlText' values can be emitted even if they
    -- are not separated by element openings or closings.
    | HtmlText
        { -- | A stack of 'HtmlTag's that represents a hierarchy of a currently
          -- parsing position in an 'HtmlTag' tree.
          tagStack :: HtmlTagStack
        , rawText :: Text
        }
    -- | Represent a token of a
    -- [CDATA section](https://www.w3.org/TR/html5/syntax.html#cdata-sections).
    | HtmlCdata
        { -- | A stack of 'HtmlTag's that represents a hierarchy of a currently
          -- parsing position in an 'HtmlTag' tree.
          tagStack :: HtmlTagStack
        , text :: Text
        }
    -- | Represent a token of an
    -- [HTML comment](https://www.w3.org/TR/html5/syntax.html#comments).
    | HtmlComment
        { -- | A stack of 'HtmlTag's that represents a hierarchy of a currently
          -- parsing position in an 'HtmlTag' tree.
          tagStack :: HtmlTagStack
        , comment :: Text
        }
    deriving (Eq, Ord, Show)