content: 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)
  