markdown 0.1.2.1 → 0.1.3
raw patch · 4 files changed
+33/−3 lines, 4 files
Files
- Text/Markdown.hs +3/−2
- Text/Markdown/Types.hs +22/−0
- markdown.cabal +1/−1
- test/main.hs +7/−0
Text/Markdown.hs view
@@ -9,6 +9,7 @@ , msXssProtect , msStandaloneHtml , msFencedHandlers+ , msBlockCodeRenderer -- * Newtype , Markdown (..) -- * Fenced handlers@@ -19,6 +20,7 @@ , def ) where +import Control.Arrow ((&&&)) import Text.Markdown.Inline import Text.Markdown.Block import Text.Markdown.Types@@ -117,8 +119,7 @@ go (BlockList _ (Left h)) = H.li h go (BlockList _ (Right bs)) = H.li $ blocksToHtml bs go (BlockHtml t) = escape t- go (BlockCode Nothing t) = H.pre $ H.code $ toMarkup t- go (BlockCode (Just lang) t) = H.pre $ H.code H.! HA.class_ (H.toValue lang) $ toMarkup t+ go (BlockCode a b) = msBlockCodeRenderer ms a (id &&& toMarkup $ b) go (BlockQuote bs) = H.blockquote $ blocksToHtml bs go BlockRule = H.hr go (BlockHeading level h) =
Text/Markdown/Types.hs view
@@ -7,6 +7,9 @@ import Data.Set (Set, empty) import Data.Map (Map, singleton) import Data.Monoid (mappend)+import Text.Blaze.Html (Html)+import qualified Text.Blaze.Html5 as H+import qualified Text.Blaze.Html5.Attributes as HA -- | A settings type providing various configuration options. --@@ -47,6 +50,21 @@ -- Default: code fencing for @```@ and @~~~@. -- -- Since: 0.1.2+ , msBlockCodeRenderer :: Maybe Text -> (Text,Html) -> Html+ -- ^ A rendering function through which code blocks are passed.+ --+ -- The arguments are the block's language, if any, and the tuple+ -- @(unrendered content, rendered content)@. For example, if you wanted to pass+ -- code blocks in your markdown text through a highlighter like @highlighting-kate@,+ -- you might do something like:+ --+ -- >>> :set -XOverloadedStrings+ -- >>> let renderer lang (src,_) = formatHtmlBlock defaultFormatOpts $ highlightAs (maybe "text" unpack lang) $ unpack src+ -- >>> let md = markdown def { msBlockCodeRenderer = renderer } "``` haskell\nmain = putStrLn \"Hello world!\"\n```"+ -- >>> putStrLn $ renderHtml md+ -- <pre class="sourceCode"><code class="sourceCode">main <span class="fu">=</span> <span class="fu">putStrLn</span> <span class="st">"Hello world!"</span></code></pre>+ --+ -- Since: 0.1.2.1 } -- | See 'msFencedHandlers.@@ -62,6 +80,10 @@ { msXssProtect = True , msStandaloneHtml = empty , msFencedHandlers = codeFencedHandler "```" `mappend` codeFencedHandler "~~~"+ , msBlockCodeRenderer =+ \lang (_,rendered) -> case lang of+ Just l -> H.pre $ H.code H.! HA.class_ (H.toValue l) $ rendered+ Nothing -> H.pre $ H.code $ rendered } -- | Helper for creating a 'FHRaw'.
markdown.cabal view
@@ -1,5 +1,5 @@ Name: markdown-Version: 0.1.2.1+Version: 0.1.3 Synopsis: Convert Markdown to HTML, with XSS protection Description: This library leverages existing high-performance libraries (attoparsec, blaze-html, text, and conduit), and should integrate well with existing codebases. Homepage: https://github.com/snoyberg/markdown
test/main.hs view
@@ -1,4 +1,6 @@ {-# LANGUAGE OverloadedStrings #-}+import Text.Blaze.Html (toHtml)+import Text.Blaze.Html5 (figure) import Test.Hspec import Text.Markdown import Data.Text.Lazy (Text, unpack, snoc, fromStrict)@@ -99,6 +101,11 @@ $ check "<pre><code>foo\n bar\nbaz</code></pre>" " foo\n bar\n baz"+ it "custom renderer"+ $ checkSet+ def { msBlockCodeRenderer = (\_ (u,_) -> figure (toHtml u)) }+ "<figure>foo\n bar\nbaz</figure>"+ "```haskell\nfoo\n bar\nbaz\n```" describe "escaping" $ do it "everything" $ check