#!/usr/bin/env runhaskell import Text.Pandoc.JSON import Text.Pandoc.Generic main = toJSONFilter go where go :: Pandoc -> Pandoc go = bottomUp exampleDivs . bottomUp (concatMap 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 (Link text ('@':lab,_)) = [RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}"), Strong text] anchors x = [x]