summaryrefslogtreecommitdiff log msg author committer range
path: root/src/Doc.lhs
blob: 5cba5c101bd2cd82a850b1f610f0b2b74496ca77 (plain)
 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65  Building documentation ++++++++++++++++++++++ .. class:: nodoc > {-# LANGUAGE OverloadedStrings #-} > import Text.Pandoc > import Text.Pandoc.Error (handleError) > import Text.Highlighting.Kate.Styles (tango) > import Data.List (stripPrefix) > import System.FilePath (replaceFileName) > import qualified Data.Set as S The documentation is created from the source module Codec.Pesto, which includes the other modules. We use a slightly modified template. > main = do > tpl <- readFile "template.html" > doc <- readWithInclude "src/Codec/Pesto.lhs" > writeFile "_build/index.html" $rstToHtml tpl doc Since pandoc currently does not support restructured text’s include directive, emulate it. > readWithInclude f = do > c <- readFile f > let l = lines c > linc <- mapM (\line -> case stripPrefix ".. include:: " line of > Just incfile -> readWithInclude$ replaceFileName f incfile > Nothing -> return line) l > return \$ unlines linc The pass the resulting string to pandoc that builds a doctree, remove unwanted content and build a HTML page. > rstToHtml tpl = writeDoc tpl . dropNoDoc . handleError . readDoc > readDoc = readRST def { > readerExtensions = S.fromList [ > Ext_literate_haskell > , Ext_implicit_header_references > ] > , readerStandalone = True } Drop blocks that should not be visible in the documentation, like module definitions and imports. > dropNoDoc = topDown f > where > f (Div (_, classes, _) _) | "nodoc" elem classes = Null > f x = x > writeDoc tpl = writeHtmlString def { > writerStandalone = True > , writerTemplate = tpl > , writerHtml5 = True > , writerHighlight = True > , writerHighlightStyle = tango > , writerNumberSections = True > , writerSectionDivs = True > , writerTabStop = 4 > , writerHTMLMathMethod = MathJax "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" > , writerVariables = [("css", "pesto.css"), ("lang", "en")] > }