aboutsummaryrefslogtreecommitdiff
path: root/tools/specfilter.hs
blob: 304e4632665a3ff788120d3d0d3585db62193562 (plain)
  1. #!/usr/bin/env runhaskell
  2. import Text.Pandoc.JSON
  3. import Text.Pandoc.Walk
  4. import Text.Pandoc.Generic
  5. main = toJSONFilter go
  6. where go :: Pandoc -> Pandoc
  7. go = bottomUp exampleDivs . bottomUp (concatMap anchors)
  8. exampleDivs :: Block -> Block
  9. exampleDivs (Div (ident, ["example"], kvs)
  10. [ d@(Div (_,["examplenum"],_) _),
  11. d1@(Div (_,["column"],_) _),
  12. d2@(Div (_,["column"],_) _)
  13. ]) = Div (ident, ["example"], kvs)
  14. [ rawtex "\\begin{minipage}[t]{\\textwidth}\n{\\scriptsize "
  15. , d
  16. , rawtex "}\\vspace{-0.4em}\n"
  17. , rawtex "\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.85}\n\\begin{snugshade}\\small\n"
  18. , walk addBreaks d1
  19. , rawtex "\\end{snugshade}\n\\end{minipage}\n\\hfill\n\\begin{minipage}[t]{0.49\\textwidth}\n\\definecolor{shadecolor}{gray}{0.95}\n\\begin{snugshade}\\small\n"
  20. , walk addBreaks d2
  21. , rawtex "\\end{snugshade}\n\\end{minipage}\n\\end{minipage}"
  22. ]
  23. where rawtex = RawBlock (Format "latex")
  24. addBreaks (CodeBlock attrs code) = CodeBlock attrs $ addBreaks' code
  25. addBreaks x = x
  26. addBreaks' code =
  27. if length code > 49
  28. then take 49 code ++ ('\n':addBreaks' (drop 49 code))
  29. else code
  30. exampleDivs x = x
  31. anchors :: Inline -> [Inline]
  32. anchors (Link text ('@':lab,_)) =
  33. [RawInline (Format "latex") ("\\hyperdef{}{" ++ lab ++ "}{\\label{" ++ lab ++ "}}"), Strong text]
  34. anchors (Span ("",["number"],[]) xs) = [] -- remove sect numbers
  35. anchors x = [x]