{-# LANGUAGE OverloadedStrings #-}
-- | This module exports HTML combinators used to create documents.
--
module Text.Blaze.Html5
    ( module Text.Blaze
    , html
    , docType
    , a
    , abbr
    , address
    , area
    , article
    , aside
    , audio
    , b
    , base
    , bdo
    , blockquote
    , body
    , br
    , button
    , canvas
    , caption
    , cite
    , code
    , col
    , colgroup
    , command
    , datalist
    , dd
    , del
    , details
    , dfn
    , div
    , dl
    , dt
    , em
    , embed
    , fieldset
    , figcaption
    , figure
    , footer
    , form
    , h1
    , h2
    , h3
    , h4
    , h5
    , h6
    , head
    , header
    , hgroup
    , hr
    , htmlNoDocType
    , i
    , iframe
    , img
    , input
    , ins
    , kbd
    , keygen
    , label
    , legend
    , li
    , link
    , map
    , mark
    , menu
    , meta
    , meter
    , nav
    , noscript
    , object
    , ol
    , optgroup
    , option
    , output
    , p
    , param
    , pre
    , progress
    , q
    , rp
    , rt
    , ruby
    , samp
    , script
    , section
    , select
    , small
    , source
    , span
    , strong
    , style
    , sub
    , summary
    , sup
    , table
    , tbody
    , td
    , textarea
    , tfoot
    , th
    , thead
    , time
    , title
    , tr
    , ul
    , var
    , video
    ) where

import Prelude ()
import Data.Monoid (mappend)

import Text.Blaze
import Text.Blaze.Internal (parent, leaf, open)

-- | Combinator for the @\<html>@ element. This combinator will also
-- insert the correct doctype.
--
-- Example:
--
-- > html $ span $ text "foo"
--
-- Result:
--
-- > <!DOCTYPE HTML>
-- > <html><span>foo</span></html>
--
html :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
html inner = docType `mappend` htmlNoDocType inner
{-# INLINE html #-}

-- | Combinator for the document type. This should be placed at the top
-- of every HTML page.
--
-- Example:
--
-- > docType
--
-- Result:
--
-- > <!DOCTYPE HTML>
--
docType :: Html a  -- ^ The document type HTML.
docType = preEscapedText "<!DOCTYPE HTML>\n"
{-# INLINE docType #-}

-- | Combinator for the @\<a>@ element.
--
-- Example:
--
-- > a $ span $ text "foo"
--
-- Result:
--
-- > <a><span>foo</span></a>
--
a :: Html a  -- ^ Inner HTML.
  -> Html b  -- ^ Resulting HTML.
a = parent "<a" "</a>"
{-# INLINE a #-}

-- | Combinator for the @\<abbr>@ element.
--
-- Example:
--
-- > abbr $ span $ text "foo"
--
-- Result:
--
-- > <abbr><span>foo</span></abbr>
--
abbr :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
abbr = parent "<abbr" "</abbr>"
{-# INLINE abbr #-}

-- | Combinator for the @\<address>@ element.
--
-- Example:
--
-- > address $ span $ text "foo"
--
-- Result:
--
-- > <address><span>foo</span></address>
--
address :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
address = parent "<address" "</address>"
{-# INLINE address #-}

-- | Combinator for the @\<area />@ element.
--
-- Example:
--
-- > area
--
-- Result:
--
-- > <area />
--
area :: Html a  -- ^ Resulting HTML.
area = leaf "<area"
{-# INLINE area #-}

-- | Combinator for the @\<article>@ element.
--
-- Example:
--
-- > article $ span $ text "foo"
--
-- Result:
--
-- > <article><span>foo</span></article>
--
article :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
article = parent "<article" "</article>"
{-# INLINE article #-}

-- | Combinator for the @\<aside>@ element.
--
-- Example:
--
-- > aside $ span $ text "foo"
--
-- Result:
--
-- > <aside><span>foo</span></aside>
--
aside :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
aside = parent "<aside" "</aside>"
{-# INLINE aside #-}

-- | Combinator for the @\<audio>@ element.
--
-- Example:
--
-- > audio $ span $ text "foo"
--
-- Result:
--
-- > <audio><span>foo</span></audio>
--
audio :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
audio = parent "<audio" "</audio>"
{-# INLINE audio #-}

-- | Combinator for the @\<b>@ element.
--
-- Example:
--
-- > b $ span $ text "foo"
--
-- Result:
--
-- > <b><span>foo</span></b>
--
b :: Html a  -- ^ Inner HTML.
  -> Html b  -- ^ Resulting HTML.
b = parent "<b" "</b>"
{-# INLINE b #-}

-- | Combinator for the @\<base>@ element.
--
-- Example:
--
-- > base $ span $ text "foo"
--
-- Result:
--
-- > <base><span>foo</span></base>
--
base :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
base = parent "<base" "</base>"
{-# INLINE base #-}

-- | Combinator for the @\<bdo>@ element.
--
-- Example:
--
-- > bdo $ span $ text "foo"
--
-- Result:
--
-- > <bdo><span>foo</span></bdo>
--
bdo :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
bdo = parent "<bdo" "</bdo>"
{-# INLINE bdo #-}

-- | Combinator for the @\<blockquote>@ element.
--
-- Example:
--
-- > blockquote $ span $ text "foo"
--
-- Result:
--
-- > <blockquote><span>foo</span></blockquote>
--
blockquote :: Html a  -- ^ Inner HTML.
           -> Html b  -- ^ Resulting HTML.
blockquote = parent "<blockquote" "</blockquote>"
{-# INLINE blockquote #-}

-- | Combinator for the @\<body>@ element.
--
-- Example:
--
-- > body $ span $ text "foo"
--
-- Result:
--
-- > <body><span>foo</span></body>
--
body :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
body = parent "<body" "</body>"
{-# INLINE body #-}

-- | Combinator for the @\<br />@ element.
--
-- Example:
--
-- > br
--
-- Result:
--
-- > <br />
--
br :: Html a  -- ^ Resulting HTML.
br = leaf "<br"
{-# INLINE br #-}

-- | Combinator for the @\<button>@ element.
--
-- Example:
--
-- > button $ span $ text "foo"
--
-- Result:
--
-- > <button><span>foo</span></button>
--
button :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
button = parent "<button" "</button>"
{-# INLINE button #-}

-- | Combinator for the @\<canvas>@ element.
--
-- Example:
--
-- > canvas $ span $ text "foo"
--
-- Result:
--
-- > <canvas><span>foo</span></canvas>
--
canvas :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
canvas = parent "<canvas" "</canvas>"
{-# INLINE canvas #-}

-- | Combinator for the @\<caption>@ element.
--
-- Example:
--
-- > caption $ span $ text "foo"
--
-- Result:
--
-- > <caption><span>foo</span></caption>
--
caption :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
caption = parent "<caption" "</caption>"
{-# INLINE caption #-}

-- | Combinator for the @\<cite>@ element.
--
-- Example:
--
-- > cite $ span $ text "foo"
--
-- Result:
--
-- > <cite><span>foo</span></cite>
--
cite :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
cite = parent "<cite" "</cite>"
{-# INLINE cite #-}

-- | Combinator for the @\<code>@ element.
--
-- Example:
--
-- > code $ span $ text "foo"
--
-- Result:
--
-- > <code><span>foo</span></code>
--
code :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
code = parent "<code" "</code>"
{-# INLINE code #-}

-- | Combinator for the @\<col />@ element.
--
-- Example:
--
-- > col
--
-- Result:
--
-- > <col />
--
col :: Html a  -- ^ Resulting HTML.
col = leaf "<col"
{-# INLINE col #-}

-- | Combinator for the @\<colgroup>@ element.
--
-- Example:
--
-- > colgroup $ span $ text "foo"
--
-- Result:
--
-- > <colgroup><span>foo</span></colgroup>
--
colgroup :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
colgroup = parent "<colgroup" "</colgroup>"
{-# INLINE colgroup #-}

-- | Combinator for the @\<command>@ element.
--
-- Example:
--
-- > command $ span $ text "foo"
--
-- Result:
--
-- > <command><span>foo</span></command>
--
command :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
command = parent "<command" "</command>"
{-# INLINE command #-}

-- | Combinator for the @\<datalist>@ element.
--
-- Example:
--
-- > datalist $ span $ text "foo"
--
-- Result:
--
-- > <datalist><span>foo</span></datalist>
--
datalist :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
datalist = parent "<datalist" "</datalist>"
{-# INLINE datalist #-}

-- | Combinator for the @\<dd>@ element.
--
-- Example:
--
-- > dd $ span $ text "foo"
--
-- Result:
--
-- > <dd><span>foo</span></dd>
--
dd :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
dd = parent "<dd" "</dd>"
{-# INLINE dd #-}

-- | Combinator for the @\<del>@ element.
--
-- Example:
--
-- > del $ span $ text "foo"
--
-- Result:
--
-- > <del><span>foo</span></del>
--
del :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
del = parent "<del" "</del>"
{-# INLINE del #-}

-- | Combinator for the @\<details>@ element.
--
-- Example:
--
-- > details $ span $ text "foo"
--
-- Result:
--
-- > <details><span>foo</span></details>
--
details :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
details = parent "<details" "</details>"
{-# INLINE details #-}

-- | Combinator for the @\<dfn>@ element.
--
-- Example:
--
-- > dfn $ span $ text "foo"
--
-- Result:
--
-- > <dfn><span>foo</span></dfn>
--
dfn :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
dfn = parent "<dfn" "</dfn>"
{-# INLINE dfn #-}

-- | Combinator for the @\<div>@ element.
--
-- Example:
--
-- > div $ span $ text "foo"
--
-- Result:
--
-- > <div><span>foo</span></div>
--
div :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
div = parent "<div" "</div>"
{-# INLINE div #-}

-- | Combinator for the @\<dl>@ element.
--
-- Example:
--
-- > dl $ span $ text "foo"
--
-- Result:
--
-- > <dl><span>foo</span></dl>
--
dl :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
dl = parent "<dl" "</dl>"
{-# INLINE dl #-}

-- | Combinator for the @\<dt>@ element.
--
-- Example:
--
-- > dt $ span $ text "foo"
--
-- Result:
--
-- > <dt><span>foo</span></dt>
--
dt :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
dt = parent "<dt" "</dt>"
{-# INLINE dt #-}

-- | Combinator for the @\<em>@ element.
--
-- Example:
--
-- > em $ span $ text "foo"
--
-- Result:
--
-- > <em><span>foo</span></em>
--
em :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
em = parent "<em" "</em>"
{-# INLINE em #-}

-- | Combinator for the @\<embed />@ element.
--
-- Example:
--
-- > embed
--
-- Result:
--
-- > <embed />
--
embed :: Html a  -- ^ Resulting HTML.
embed = leaf "<embed"
{-# INLINE embed #-}

-- | Combinator for the @\<fieldset>@ element.
--
-- Example:
--
-- > fieldset $ span $ text "foo"
--
-- Result:
--
-- > <fieldset><span>foo</span></fieldset>
--
fieldset :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
fieldset = parent "<fieldset" "</fieldset>"
{-# INLINE fieldset #-}

-- | Combinator for the @\<figcaption>@ element.
--
-- Example:
--
-- > figcaption $ span $ text "foo"
--
-- Result:
--
-- > <figcaption><span>foo</span></figcaption>
--
figcaption :: Html a  -- ^ Inner HTML.
           -> Html b  -- ^ Resulting HTML.
figcaption = parent "<figcaption" "</figcaption>"
{-# INLINE figcaption #-}

-- | Combinator for the @\<figure>@ element.
--
-- Example:
--
-- > figure $ span $ text "foo"
--
-- Result:
--
-- > <figure><span>foo</span></figure>
--
figure :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
figure = parent "<figure" "</figure>"
{-# INLINE figure #-}

-- | Combinator for the @\<footer>@ element.
--
-- Example:
--
-- > footer $ span $ text "foo"
--
-- Result:
--
-- > <footer><span>foo</span></footer>
--
footer :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
footer = parent "<footer" "</footer>"
{-# INLINE footer #-}

-- | Combinator for the @\<form>@ element.
--
-- Example:
--
-- > form $ span $ text "foo"
--
-- Result:
--
-- > <form><span>foo</span></form>
--
form :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
form = parent "<form" "</form>"
{-# INLINE form #-}

-- | Combinator for the @\<h1>@ element.
--
-- Example:
--
-- > h1 $ span $ text "foo"
--
-- Result:
--
-- > <h1><span>foo</span></h1>
--
h1 :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
h1 = parent "<h1" "</h1>"
{-# INLINE h1 #-}

-- | Combinator for the @\<h2>@ element.
--
-- Example:
--
-- > h2 $ span $ text "foo"
--
-- Result:
--
-- > <h2><span>foo</span></h2>
--
h2 :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
h2 = parent "<h2" "</h2>"
{-# INLINE h2 #-}

-- | Combinator for the @\<h3>@ element.
--
-- Example:
--
-- > h3 $ span $ text "foo"
--
-- Result:
--
-- > <h3><span>foo</span></h3>
--
h3 :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
h3 = parent "<h3" "</h3>"
{-# INLINE h3 #-}

-- | Combinator for the @\<h4>@ element.
--
-- Example:
--
-- > h4 $ span $ text "foo"
--
-- Result:
--
-- > <h4><span>foo</span></h4>
--
h4 :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
h4 = parent "<h4" "</h4>"
{-# INLINE h4 #-}

-- | Combinator for the @\<h5>@ element.
--
-- Example:
--
-- > h5 $ span $ text "foo"
--
-- Result:
--
-- > <h5><span>foo</span></h5>
--
h5 :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
h5 = parent "<h5" "</h5>"
{-# INLINE h5 #-}

-- | Combinator for the @\<h6>@ element.
--
-- Example:
--
-- > h6 $ span $ text "foo"
--
-- Result:
--
-- > <h6><span>foo</span></h6>
--
h6 :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
h6 = parent "<h6" "</h6>"
{-# INLINE h6 #-}

-- | Combinator for the @\<head>@ element.
--
-- Example:
--
-- > head $ span $ text "foo"
--
-- Result:
--
-- > <head><span>foo</span></head>
--
head :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
head = parent "<head" "</head>"
{-# INLINE head #-}

-- | Combinator for the @\<header>@ element.
--
-- Example:
--
-- > header $ span $ text "foo"
--
-- Result:
--
-- > <header><span>foo</span></header>
--
header :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
header = parent "<header" "</header>"
{-# INLINE header #-}

-- | Combinator for the @\<hgroup>@ element.
--
-- Example:
--
-- > hgroup $ span $ text "foo"
--
-- Result:
--
-- > <hgroup><span>foo</span></hgroup>
--
hgroup :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
hgroup = parent "<hgroup" "</hgroup>"
{-# INLINE hgroup #-}

-- | Combinator for the @\<hr />@ element.
--
-- Example:
--
-- > hr
--
-- Result:
--
-- > <hr />
--
hr :: Html a  -- ^ Resulting HTML.
hr = leaf "<hr"
{-# INLINE hr #-}

-- | Combinator for the @\<html>@ element.
--
-- Example:
--
-- > htmlNoDocType $ span $ text "foo"
--
-- Result:
--
-- > <html><span>foo</span></html>
--
htmlNoDocType :: Html a  -- ^ Inner HTML.
              -> Html b  -- ^ Resulting HTML.
htmlNoDocType = parent "<html" "</html>"
{-# INLINE htmlNoDocType #-}

-- | Combinator for the @\<i>@ element.
--
-- Example:
--
-- > i $ span $ text "foo"
--
-- Result:
--
-- > <i><span>foo</span></i>
--
i :: Html a  -- ^ Inner HTML.
  -> Html b  -- ^ Resulting HTML.
i = parent "<i" "</i>"
{-# INLINE i #-}

-- | Combinator for the @\<iframe>@ element.
--
-- Example:
--
-- > iframe $ span $ text "foo"
--
-- Result:
--
-- > <iframe><span>foo</span></iframe>
--
iframe :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
iframe = parent "<iframe" "</iframe>"
{-# INLINE iframe #-}

-- | Combinator for the @\<img />@ element.
--
-- Example:
--
-- > img
--
-- Result:
--
-- > <img />
--
img :: Html a  -- ^ Resulting HTML.
img = leaf "<img"
{-# INLINE img #-}

-- | Combinator for the @\<input />@ element.
--
-- Example:
--
-- > input
--
-- Result:
--
-- > <input />
--
input :: Html a  -- ^ Resulting HTML.
input = leaf "<input"
{-# INLINE input #-}

-- | Combinator for the @\<ins>@ element.
--
-- Example:
--
-- > ins $ span $ text "foo"
--
-- Result:
--
-- > <ins><span>foo</span></ins>
--
ins :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
ins = parent "<ins" "</ins>"
{-# INLINE ins #-}

-- | Combinator for the @\<kbd>@ element.
--
-- Example:
--
-- > kbd $ span $ text "foo"
--
-- Result:
--
-- > <kbd><span>foo</span></kbd>
--
kbd :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
kbd = parent "<kbd" "</kbd>"
{-# INLINE kbd #-}

-- | Combinator for the @\<keygen>@ element.
--
-- Example:
--
-- > keygen $ span $ text "foo"
--
-- Result:
--
-- > <keygen><span>foo</span></keygen>
--
keygen :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
keygen = parent "<keygen" "</keygen>"
{-# INLINE keygen #-}

-- | Combinator for the @\<label>@ element.
--
-- Example:
--
-- > label $ span $ text "foo"
--
-- Result:
--
-- > <label><span>foo</span></label>
--
label :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
label = parent "<label" "</label>"
{-# INLINE label #-}

-- | Combinator for the @\<legend>@ element.
--
-- Example:
--
-- > legend $ span $ text "foo"
--
-- Result:
--
-- > <legend><span>foo</span></legend>
--
legend :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
legend = parent "<legend" "</legend>"
{-# INLINE legend #-}

-- | Combinator for the @\<li>@ element.
--
-- Example:
--
-- > li $ span $ text "foo"
--
-- Result:
--
-- > <li><span>foo</span></li>
--
li :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
li = parent "<li" "</li>"
{-# INLINE li #-}

-- | Combinator for the @\<link />@ element.
--
-- Example:
--
-- > link
--
-- Result:
--
-- > <link />
--
link :: Html a  -- ^ Resulting HTML.
link = leaf "<link"
{-# INLINE link #-}

-- | Combinator for the @\<map>@ element.
--
-- Example:
--
-- > map $ span $ text "foo"
--
-- Result:
--
-- > <map><span>foo</span></map>
--
map :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
map = parent "<map" "</map>"
{-# INLINE map #-}

-- | Combinator for the @\<mark>@ element.
--
-- Example:
--
-- > mark $ span $ text "foo"
--
-- Result:
--
-- > <mark><span>foo</span></mark>
--
mark :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
mark = parent "<mark" "</mark>"
{-# INLINE mark #-}

-- | Combinator for the @\<menu>@ element.
--
-- Example:
--
-- > menu $ span $ text "foo"
--
-- Result:
--
-- > <menu><span>foo</span></menu>
--
menu :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
menu = parent "<menu" "</menu>"
{-# INLINE menu #-}

-- | Combinator for the @\<meta />@ element.
--
-- Example:
--
-- > meta
--
-- Result:
--
-- > <meta />
--
meta :: Html a  -- ^ Resulting HTML.
meta = leaf "<meta"
{-# INLINE meta #-}

-- | Combinator for the @\<meter>@ element.
--
-- Example:
--
-- > meter $ span $ text "foo"
--
-- Result:
--
-- > <meter><span>foo</span></meter>
--
meter :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
meter = parent "<meter" "</meter>"
{-# INLINE meter #-}

-- | Combinator for the @\<nav>@ element.
--
-- Example:
--
-- > nav $ span $ text "foo"
--
-- Result:
--
-- > <nav><span>foo</span></nav>
--
nav :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
nav = parent "<nav" "</nav>"
{-# INLINE nav #-}

-- | Combinator for the @\<noscript>@ element.
--
-- Example:
--
-- > noscript $ span $ text "foo"
--
-- Result:
--
-- > <noscript><span>foo</span></noscript>
--
noscript :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
noscript = parent "<noscript" "</noscript>"
{-# INLINE noscript #-}

-- | Combinator for the @\<object>@ element.
--
-- Example:
--
-- > object $ span $ text "foo"
--
-- Result:
--
-- > <object><span>foo</span></object>
--
object :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
object = parent "<object" "</object>"
{-# INLINE object #-}

-- | Combinator for the @\<ol>@ element.
--
-- Example:
--
-- > ol $ span $ text "foo"
--
-- Result:
--
-- > <ol><span>foo</span></ol>
--
ol :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
ol = parent "<ol" "</ol>"
{-# INLINE ol #-}

-- | Combinator for the @\<optgroup>@ element.
--
-- Example:
--
-- > optgroup $ span $ text "foo"
--
-- Result:
--
-- > <optgroup><span>foo</span></optgroup>
--
optgroup :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
optgroup = parent "<optgroup" "</optgroup>"
{-# INLINE optgroup #-}

-- | Combinator for the @\<option>@ element.
--
-- Example:
--
-- > option $ span $ text "foo"
--
-- Result:
--
-- > <option><span>foo</span></option>
--
option :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
option = parent "<option" "</option>"
{-# INLINE option #-}

-- | Combinator for the @\<output>@ element.
--
-- Example:
--
-- > output $ span $ text "foo"
--
-- Result:
--
-- > <output><span>foo</span></output>
--
output :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
output = parent "<output" "</output>"
{-# INLINE output #-}

-- | Combinator for the @\<p>@ element.
--
-- Example:
--
-- > p $ span $ text "foo"
--
-- Result:
--
-- > <p><span>foo</span></p>
--
p :: Html a  -- ^ Inner HTML.
  -> Html b  -- ^ Resulting HTML.
p = parent "<p" "</p>"
{-# INLINE p #-}

-- | Combinator for the @\<param />@ element.
--
-- Example:
--
-- > param
--
-- Result:
--
-- > <param />
--
param :: Html a  -- ^ Resulting HTML.
param = leaf "<param"
{-# INLINE param #-}

-- | Combinator for the @\<pre>@ element.
--
-- Example:
--
-- > pre $ span $ text "foo"
--
-- Result:
--
-- > <pre><span>foo</span></pre>
--
pre :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
pre = parent "<pre" "</pre>"
{-# INLINE pre #-}

-- | Combinator for the @\<progress>@ element.
--
-- Example:
--
-- > progress $ span $ text "foo"
--
-- Result:
--
-- > <progress><span>foo</span></progress>
--
progress :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
progress = parent "<progress" "</progress>"
{-# INLINE progress #-}

-- | Combinator for the @\<q>@ element.
--
-- Example:
--
-- > q $ span $ text "foo"
--
-- Result:
--
-- > <q><span>foo</span></q>
--
q :: Html a  -- ^ Inner HTML.
  -> Html b  -- ^ Resulting HTML.
q = parent "<q" "</q>"
{-# INLINE q #-}

-- | Combinator for the @\<rp>@ element.
--
-- Example:
--
-- > rp $ span $ text "foo"
--
-- Result:
--
-- > <rp><span>foo</span></rp>
--
rp :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
rp = parent "<rp" "</rp>"
{-# INLINE rp #-}

-- | Combinator for the @\<rt>@ element.
--
-- Example:
--
-- > rt $ span $ text "foo"
--
-- Result:
--
-- > <rt><span>foo</span></rt>
--
rt :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
rt = parent "<rt" "</rt>"
{-# INLINE rt #-}

-- | Combinator for the @\<ruby>@ element.
--
-- Example:
--
-- > ruby $ span $ text "foo"
--
-- Result:
--
-- > <ruby><span>foo</span></ruby>
--
ruby :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
ruby = parent "<ruby" "</ruby>"
{-# INLINE ruby #-}

-- | Combinator for the @\<samp>@ element.
--
-- Example:
--
-- > samp $ span $ text "foo"
--
-- Result:
--
-- > <samp><span>foo</span></samp>
--
samp :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
samp = parent "<samp" "</samp>"
{-# INLINE samp #-}

-- | Combinator for the @\<script>@ element.
--
-- Example:
--
-- > script $ span $ text "foo"
--
-- Result:
--
-- > <script><span>foo</span></script>
--
script :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
script = parent "<script" "</script>"
{-# INLINE script #-}

-- | Combinator for the @\<section>@ element.
--
-- Example:
--
-- > section $ span $ text "foo"
--
-- Result:
--
-- > <section><span>foo</span></section>
--
section :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
section = parent "<section" "</section>"
{-# INLINE section #-}

-- | Combinator for the @\<select>@ element.
--
-- Example:
--
-- > select $ span $ text "foo"
--
-- Result:
--
-- > <select><span>foo</span></select>
--
select :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
select = parent "<select" "</select>"
{-# INLINE select #-}

-- | Combinator for the @\<small>@ element.
--
-- Example:
--
-- > small $ span $ text "foo"
--
-- Result:
--
-- > <small><span>foo</span></small>
--
small :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
small = parent "<small" "</small>"
{-# INLINE small #-}

-- | Combinator for the @\<source>@ element.
--
-- Example:
--
-- > source $ span $ text "foo"
--
-- Result:
--
-- > <source><span>foo</span></source>
--
source :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
source = parent "<source" "</source>"
{-# INLINE source #-}

-- | Combinator for the @\<span>@ element.
--
-- Example:
--
-- > span $ span $ text "foo"
--
-- Result:
--
-- > <span><span>foo</span></span>
--
span :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
span = parent "<span" "</span>"
{-# INLINE span #-}

-- | Combinator for the @\<strong>@ element.
--
-- Example:
--
-- > strong $ span $ text "foo"
--
-- Result:
--
-- > <strong><span>foo</span></strong>
--
strong :: Html a  -- ^ Inner HTML.
       -> Html b  -- ^ Resulting HTML.
strong = parent "<strong" "</strong>"
{-# INLINE strong #-}

-- | Combinator for the @\<style>@ element.
--
-- Example:
--
-- > style $ span $ text "foo"
--
-- Result:
--
-- > <style><span>foo</span></style>
--
style :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
style = parent "<style" "</style>"
{-# INLINE style #-}

-- | Combinator for the @\<sub>@ element.
--
-- Example:
--
-- > sub $ span $ text "foo"
--
-- Result:
--
-- > <sub><span>foo</span></sub>
--
sub :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
sub = parent "<sub" "</sub>"
{-# INLINE sub #-}

-- | Combinator for the @\<summary>@ element.
--
-- Example:
--
-- > summary $ span $ text "foo"
--
-- Result:
--
-- > <summary><span>foo</span></summary>
--
summary :: Html a  -- ^ Inner HTML.
        -> Html b  -- ^ Resulting HTML.
summary = parent "<summary" "</summary>"
{-# INLINE summary #-}

-- | Combinator for the @\<sup>@ element.
--
-- Example:
--
-- > sup $ span $ text "foo"
--
-- Result:
--
-- > <sup><span>foo</span></sup>
--
sup :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
sup = parent "<sup" "</sup>"
{-# INLINE sup #-}

-- | Combinator for the @\<table>@ element.
--
-- Example:
--
-- > table $ span $ text "foo"
--
-- Result:
--
-- > <table><span>foo</span></table>
--
table :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
table = parent "<table" "</table>"
{-# INLINE table #-}

-- | Combinator for the @\<tbody>@ element.
--
-- Example:
--
-- > tbody $ span $ text "foo"
--
-- Result:
--
-- > <tbody><span>foo</span></tbody>
--
tbody :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
tbody = parent "<tbody" "</tbody>"
{-# INLINE tbody #-}

-- | Combinator for the @\<td>@ element.
--
-- Example:
--
-- > td $ span $ text "foo"
--
-- Result:
--
-- > <td><span>foo</span></td>
--
td :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
td = parent "<td" "</td>"
{-# INLINE td #-}

-- | Combinator for the @\<textarea>@ element.
--
-- Example:
--
-- > textarea $ span $ text "foo"
--
-- Result:
--
-- > <textarea><span>foo</span></textarea>
--
textarea :: Html a  -- ^ Inner HTML.
         -> Html b  -- ^ Resulting HTML.
textarea = parent "<textarea" "</textarea>"
{-# INLINE textarea #-}

-- | Combinator for the @\<tfoot>@ element.
--
-- Example:
--
-- > tfoot $ span $ text "foo"
--
-- Result:
--
-- > <tfoot><span>foo</span></tfoot>
--
tfoot :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
tfoot = parent "<tfoot" "</tfoot>"
{-# INLINE tfoot #-}

-- | Combinator for the @\<th>@ element.
--
-- Example:
--
-- > th $ span $ text "foo"
--
-- Result:
--
-- > <th><span>foo</span></th>
--
th :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
th = parent "<th" "</th>"
{-# INLINE th #-}

-- | Combinator for the @\<thead>@ element.
--
-- Example:
--
-- > thead $ span $ text "foo"
--
-- Result:
--
-- > <thead><span>foo</span></thead>
--
thead :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
thead = parent "<thead" "</thead>"
{-# INLINE thead #-}

-- | Combinator for the @\<time>@ element.
--
-- Example:
--
-- > time $ span $ text "foo"
--
-- Result:
--
-- > <time><span>foo</span></time>
--
time :: Html a  -- ^ Inner HTML.
     -> Html b  -- ^ Resulting HTML.
time = parent "<time" "</time>"
{-# INLINE time #-}

-- | Combinator for the @\<title>@ element.
--
-- Example:
--
-- > title $ span $ text "foo"
--
-- Result:
--
-- > <title><span>foo</span></title>
--
title :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
title = parent "<title" "</title>"
{-# INLINE title #-}

-- | Combinator for the @\<tr>@ element.
--
-- Example:
--
-- > tr $ span $ text "foo"
--
-- Result:
--
-- > <tr><span>foo</span></tr>
--
tr :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
tr = parent "<tr" "</tr>"
{-# INLINE tr #-}

-- | Combinator for the @\<ul>@ element.
--
-- Example:
--
-- > ul $ span $ text "foo"
--
-- Result:
--
-- > <ul><span>foo</span></ul>
--
ul :: Html a  -- ^ Inner HTML.
   -> Html b  -- ^ Resulting HTML.
ul = parent "<ul" "</ul>"
{-# INLINE ul #-}

-- | Combinator for the @\<var>@ element.
--
-- Example:
--
-- > var $ span $ text "foo"
--
-- Result:
--
-- > <var><span>foo</span></var>
--
var :: Html a  -- ^ Inner HTML.
    -> Html b  -- ^ Resulting HTML.
var = parent "<var" "</var>"
{-# INLINE var #-}

-- | Combinator for the @\<video>@ element.
--
-- Example:
--
-- > video $ span $ text "foo"
--
-- Result:
--
-- > <video><span>foo</span></video>
--
video :: Html a  -- ^ Inner HTML.
      -> Html b  -- ^ Resulting HTML.
video = parent "<video" "</video>"
{-# INLINE video #-}