| #!/usr/bin/env runhaskell |
| |
| import Text.Pandoc.JSON |
| import Text.Pandoc.Walk |
| |
| main = toJSONFilter go |
| where go :: Pandoc -> Pandoc |
| go = walk exampleDivs . walk anchors |
| |
| exampleDivs :: Block -> Block |
| exampleDivs (Div (ident, ["example"], kvs) |
| [ d@(Div (_,["examplenum"],_) _), |
| c1@(CodeBlock (_,["markdown"],_) _), |
| c2@(CodeBlock (_,["html"],_) _) |
| ]) = Div (ident, ["example"], kvs) |
| [ rawtex "\\begin{minipage}[t]{\\textwidth}\n{\\scriptsize " |
| , d |
| , rawtex "\\vspace{-1em}}" |
| , rawtex "\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.85}\n" |
| , addBreaks c1 |
| , rawtex "\\end{minipage}\n\\hfill\n\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.95}\n" |
| , addBreaks c2 |
| , rawtex "\\end{minipage}\n\\end{minipage}" |
| ] |
| where rawtex = RawBlock (Format "latex") |
| addBreaks (CodeBlock attrs code) = CodeBlock attrs $ addBreaks' code |
| addBreaks' code = |
| if length code > 49 |
| then take 49 code ++ ('\n':addBreaks' (drop 49 code)) |
| else code |
| exampleDivs x = x |
| |
| anchors :: Inline -> Inline |
| anchors (RawInline (Format "html") ('<':'a':' ':'i':'d':'=':'"':xs)) = |
| RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}") |
| where lab = takeWhile (/='"') xs |
| anchors x = x |