@@ -41,7 +41,8 @@ module Text.Pandoc.Writers.HTML (
41 writeSlidy,
41 writeSlidy,
42 writeSlideous,
42 writeSlideous,
43 writeDZSlides,
43 writeDZSlides,
44− writeRevealJs
44+ writeRevealJs,
46import Control.Monad.State.Strict
47import Control.Monad.State.Strict
47import Data.Char (ord, toLower)
48import Data.Char (ord, toLower)
@@ -55,6 +56,7 @@ import qualified Data.Text.Lazy as TL
55import Network.HTTP (urlEncode)
56import Network.HTTP (urlEncode)
56import Network.URI (URI (..), parseURIReference, unEscapeString)
57import Network.URI (URI (..), parseURIReference, unEscapeString)
57import Numeric (showHex)
58import Numeric (showHex)
59+import Text.Blaze.Internal (customLeaf, textTag)
58import Text.Blaze.Html hiding (contents)
60import Text.Blaze.Html hiding (contents)
59import Text.Pandoc.Definition
61import Text.Pandoc.Definition
60import Text.Pandoc.Highlighting (formatHtmlBlock, formatHtmlInline, highlight,
62import Text.Pandoc.Highlighting (formatHtmlBlock, formatHtmlInline, highlight,
@@ -83,7 +85,7 @@ import System.FilePath (takeBaseName, takeExtension)
83import Text.Blaze.Html.Renderer.Text (renderHtml)
85import Text.Blaze.Html.Renderer.Text (renderHtml)
84import qualified Text.Blaze.XHtml1.Transitional as H
86import qualified Text.Blaze.XHtml1.Transitional as H
85import qualified Text.Blaze.XHtml1.Transitional.Attributes as A
87import qualified Text.Blaze.XHtml1.Transitional.Attributes as A
86−import Text.Pandoc.Class (PandocMonad, report)
88+import Text.Pandoc.Class (PandocMonad, report, runPure)
87import Text.Pandoc.Error
89import Text.Pandoc.Error
88import Text.Pandoc.Logging
90import Text.Pandoc.Logging
89import Text.TeXMath
91import Text.TeXMath
@@ -542,6 +544,21 @@ obfuscateChar char =
542obfuscateString :: String -> String
544obfuscateString :: String -> String
543obfuscateString = concatMap obfuscateChar . fromEntities
545obfuscateString = concatMap obfuscateChar . fromEntities
547+-- | Create HTML tag with attributes.
548+tagWithAttributes :: WriterOptions
549+ -> Bool -- ^ True for HTML5
550+ -> Bool -- ^ True if self-closing tag
551+ -> Text -- ^ Tag text
552+ -> Attr -- ^ Pandoc style tag attributes
554+tagWithAttributes opts html5 selfClosing tagname attr =
555+ let mktag = (TL.toStrict . renderHtml <$> evalStateT
556+ (addAttrs opts attr (customLeaf (textTag tagname) selfClosing))
557+ defaultWriterState{ stHtml5 = html5 })
558+ in case runPure mktag of
545addAttrs :: PandocMonad m
562addAttrs :: PandocMonad m
546 => WriterOptions -> Attr -> Html -> StateT WriterState m Html
563 => WriterOptions -> Attr -> Html -> StateT WriterState m Html
547addAttrs opts attr h = foldl (!) h <$> attrsToHtml opts attr
564addAttrs opts attr h = foldl (!) h <$> attrsToHtml opts attr