{-# language OverloadedStrings #-} -- | Produces XHTML 1.0 Strict. module Text.XHtml.Strict ( -- * Data types Html, HtmlAttr, -- * Classes HTML(..), ADDATTRS(..), CHANGEATTRS(..), -- * Primitives and basic combinators (<<), concatHtml, (+++), noHtml, isNoHtml, tag, itag, htmlAttrPair, emptyAttr, intAttr, strAttr, htmlAttr, primHtml, stringToHtmlString, docType, -- * Rendering showHtml, renderHtml, renderHtmlWithLanguage, prettyHtml, showHtmlFragment, renderHtmlFragment, prettyHtmlFragment, module Text.XHtml.Strict.Elements, module Text.XHtml.Strict.Attributes, module Text.XHtml.Extras ) where import qualified Data.Text.Lazy as LText import Text.XHtml.Internals import Text.XHtml.Strict.Elements import Text.XHtml.Strict.Attributes import Text.XHtml.Extras -- | The @DOCTYPE@ for XHTML 1.0 Strict. docType :: Builder docType = " " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">" -- | Output the HTML without adding newlines or spaces within the markup. -- This should be the most time and space efficient way to -- render HTML, though the output is quite unreadable. showHtml :: HTML html => html -> Builder showHtml = showHtmlInternal docType {-# SPECIALIZE showHtml :: Html -> Builder #-} {-# INLINABLE showHtml #-} -- | Outputs indented HTML. Because space matters in -- HTML, the output is quite messy. renderHtml :: HTML html => html -> Builder renderHtml = renderHtmlInternal docType {-# SPECIALIZE renderHtml :: Html -> Builder #-} {-# INLINABLE renderHtml #-} -- | Outputs indented XHTML. Because space matters in -- HTML, the output is quite messy. renderHtmlWithLanguage :: HTML html => LText.Text -- ^ The code of the "dominant" language of the webpage. -> html -- ^ All the 'Html', including a header. -> Builder renderHtmlWithLanguage l theHtml = docType <> "\n" <> renderHtmlFragment code <> "\n" where code = tag "html" ! [ strAttr "xmlns" "http://www.w3.org/1999/xhtml" , strAttr "lang" l , strAttr "xml:lang" l ] << theHtml -- | Outputs indented HTML, with indentation inside elements. -- This can change the meaning of the HTML document, and -- is mostly useful for debugging the HTML output. -- The implementation is inefficient, and you are normally -- better off using 'showHtml' or 'renderHtml'. prettyHtml :: HTML html => html -> String prettyHtml = prettyHtmlInternal (builderToString docType)