markdown-0.1.4: Convert Markdown to HTML, with XSS protection

Safe HaskellNone

Text.Markdown

Contents

Synopsis

Functions

markdown :: MarkdownSettings -> Text -> HtmlSource

Convert the given textual markdown content to HTML.

>>> :set -XOverloadedStrings
>>> import Text.Blaze.Html.Renderer.Text
>>> renderHtml $ markdown def "# Hello World!"
"<h1>Hello World!</h1>"
>>> renderHtml $ markdown def { msXssProtect = False } "<script>alert('evil')</script>"
"<script>alert('evil')</script>"

Settings

data MarkdownSettings Source

A settings type providing various configuration options.

See http://www.yesodweb.com/book/settings-types for more information on settings types. In general, you can use def.

msXssProtect :: MarkdownSettings -> BoolSource

Whether to automatically apply XSS protection to embedded HTML. Default: True.

msStandaloneHtml :: MarkdownSettings -> Set TextSource

HTML snippets which stand on their own. We do not require a blank line following these pieces of HTML.

Default: empty set.

Since: 0.1.2

msFencedHandlers :: MarkdownSettings -> Map Text (Text -> FencedHandler)Source

Handlers for the special "fenced" format. This is most commonly used for fenced code, e.g.:

 ```haskell
 main = putStrLn "Hello"
 ```

This is an extension of Markdown, but a fairly commonly used one.

This setting allows you to create new kinds of fencing. Fencing goes into two categories: parsed and raw. Code fencing would be in the raw category, where the contents are not treated as Markdown. Parsed will treat the contents as Markdown and allow you to perform some kind of modifcation to it.

For example, to create a new @@@ fencing which wraps up the contents in an article tag, you could use:

 def { msFencedHandlers = htmlFencedHandler "@@@" (const "<article>") (const "</article")
              `Map.union` msFencedHandlers def
     }

Default: code fencing for ``` and ~~~.

Since: 0.1.2

msBlockCodeRenderer :: MarkdownSettings -> Maybe Text -> (Text, Html) -> HtmlSource

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">&quot;Hello world!&quot;</span></code></pre>

Since: 0.1.2.1

msLinkNewTab :: MarkdownSettings -> BoolSource

If True, all generated links have the attribute target=_blank set, causing them to be opened in a new tab or window.

Default: False

Since 0.1.4

Newtype

newtype Markdown Source

A newtype wrapper providing a ToHtml instance.

Constructors

Markdown Text 

Fenced handlers

data FencedHandler Source

See 'msFencedHandlers.

Since 0.1.2

Constructors

FHRaw (Text -> [Block Text])

Wrap up the given raw content.

FHParsed ([Block Text] -> [Block Text])

Wrap up the given parsed content.

codeFencedHandlerSource

Arguments

:: Text

Delimiter

-> Map Text (Text -> FencedHandler) 

Helper for creating a FHRaw.

Since 0.1.2

htmlFencedHandlerSource

Arguments

:: Text

Delimiter

-> (Text -> Text)

start HTML

-> (Text -> Text)

end HTML

-> Map Text (Text -> FencedHandler) 

Helper for creating a FHParsed.

Note that the start and end parameters take a Text parameter; this is the text following the delimiter. For example, with the markdown:

 @@@ foo

foo would be passed to start and end.

Since 0.1.2

Convenience re-exports

def :: Default a => a

The default value for this type.