From 430e55c0f1ca94fdb20b99061862af2ceabe4469 Mon Sep 17 00:00:00 2001 From: fiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b> Date: Tue, 2 Dec 2008 22:42:29 +0000 Subject: [PATCH] Handle --lhs-out option in HTML, LaTeX, and Markdown writers. Documented lhs options in man page and README. Note: HTML output with --lhs-out is not strictly literate haskell, but it is designed so that the result of copying and pasting the page in the browser will be a literate haskell file. git-svn-id: https://pandoc.googlecode.com/svn/trunk@1501 788f1e2b-df1e-0410-8736-df70ead52e1b --- README | 14 ++++++++++++++ Text/Pandoc/Writers/HTML.hs | 4 ++++ Text/Pandoc/Writers/LaTeX.hs | 12 +++++++----- Text/Pandoc/Writers/Markdown.hs | 3 +++ man/man1/pandoc.1.md | 14 ++++++++++++++ 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/README b/README index 230ad9c5b..f86c850ab 100644 --- a/README +++ b/README @@ -371,6 +371,20 @@ For further documentation, see the `pandoc(1)` man page. are omitted. URIs in links and images are also checked against a whitelist of URI schemes. +`--lhs-in` +: treat input as literate Haskell. In markdown input, "bird track" + sections will be treated as Haskell source code. In LaTeX input, + `code` environments will be treated as Haskell source code. + +`--lhs-out` +: write output as literate Haskell. In markdown output, Haskell + source code will be printed with "bird tracks." In LaTeX output, + it will be put in `code` environments. In HTML output, it will + be put inside `<pre>` tags, with "bird tracks." + +`--lhs` +: equivalent to `--lhs-in --lhs-out`. + `--dump-args` : is intended to make it easier to create wrapper scripts that use Pandoc. It causes Pandoc to dump information about the arguments diff --git a/Text/Pandoc/Writers/HTML.hs b/Text/Pandoc/Writers/HTML.hs index 8dafd2440..087fff623 100644 --- a/Text/Pandoc/Writers/HTML.hs +++ b/Text/Pandoc/Writers/HTML.hs @@ -297,6 +297,10 @@ blockToHtml opts (Plain lst) = inlineListToHtml opts lst blockToHtml opts (Para lst) = inlineListToHtml opts lst >>= (return . paragraph) blockToHtml _ (RawHtml str) = return $ primHtml str blockToHtml _ (HorizontalRule) = return $ hr +blockToHtml opts (CodeBlock (_,classes,_) rawCode) | "haskell" `elem` classes && + writerLiterateHaskell opts = + let classes' = map (\c -> if c == "haskell" then "literatehaskell" else c) classes + in blockToHtml opts $ CodeBlock ("",classes',[]) $ intercalate "\n" $ map ("> " ++) $ lines rawCode blockToHtml _ (CodeBlock attr@(_,classes,_) rawCode) = do case highlightHtml attr rawCode of Left _ -> -- change leading newlines into <br /> tags, because some diff --git a/Text/Pandoc/Writers/LaTeX.hs b/Text/Pandoc/Writers/LaTeX.hs index dd0e23981..f3cbf1acb 100644 --- a/Text/Pandoc/Writers/LaTeX.hs +++ b/Text/Pandoc/Writers/LaTeX.hs @@ -147,12 +147,14 @@ blockToLaTeX (Para lst) = do blockToLaTeX (BlockQuote lst) = do contents <- blockListToLaTeX lst return $ text "\\begin{quote}" $$ contents $$ text "\\end{quote}" -blockToLaTeX (CodeBlock _ str) = do +blockToLaTeX (CodeBlock (_,classes,_) str) = do st <- get - env <- if stInNote st - then do addToHeader "\\usepackage{fancyvrb}" - return "Verbatim" - else return "verbatim" + env <- if writerLiterateHaskell (stOptions st) && "haskell" `elem` classes + then return "code" + else if stInNote st + then do addToHeader "\\usepackage{fancyvrb}" + return "Verbatim" + else return "verbatim" return $ text ("\\begin{" ++ env ++ "}\n") <> text str <> text ("\n\\end{" ++ env ++ "}") blockToLaTeX (RawHtml _) = return empty diff --git a/Text/Pandoc/Writers/Markdown.hs b/Text/Pandoc/Writers/Markdown.hs index 32ebcf758..4b365773f 100644 --- a/Text/Pandoc/Writers/Markdown.hs +++ b/Text/Pandoc/Writers/Markdown.hs @@ -185,6 +185,9 @@ blockToMarkdown _ HorizontalRule = return $ text "\n* * * * *\n" blockToMarkdown opts (Header level inlines) = do contents <- inlineListToMarkdown opts inlines return $ text ((replicate level '#') ++ " ") <> contents <> text "\n" +blockToMarkdown opts (CodeBlock (_,classes,_) str) | "haskell" `elem` classes && + writerLiterateHaskell opts = + return $ (vcat $ map (text "> " <>) $ map text (lines str)) <> text "\n" blockToMarkdown opts (CodeBlock _ str) = return $ (nest (writerTabStop opts) $ vcat $ map text (lines str)) <> text "\n" blockToMarkdown opts (BlockQuote blocks) = do diff --git a/man/man1/pandoc.1.md b/man/man1/pandoc.1.md index bbd4e725e..bdd317c78 100644 --- a/man/man1/pandoc.1.md +++ b/man/man1/pandoc.1.md @@ -142,6 +142,20 @@ to Pandoc. Or use `html2markdown`(1), a wrapper around `pandoc`. are omitted. URIs in links and images are also checked against a whitelist of URI schemes. +\--lhs-in +: Treat input as literate Haskell. In markdown input, "bird track" + sections will be treated as Haskell source code. In LaTeX input, + `code` environments will be treated as Haskell source code. + +\--lhs-out +: Write output as literate Haskell. In markdown output, Haskell + source code will be printed with "bird tracks." In LaTeX output, + it will be put in `code` environments. In HTML output, it will + be put inside `<pre>` tags, with "bird tracks." + +\--lhs +: Equivalent to `--lhs-in --lhs-out`. + \--toc, \--table-of-contents : Include an automatically generated table of contents (HTML, markdown, RTF) or an instruction to create one (LaTeX, reStructuredText).