Building documentation
++++++++++++++++++++++
.. class:: nodoc
> {-# LANGUAGE OverloadedStrings #-}
> import Text.Pandoc
> import Text.Pandoc.Highlighting (tango)
> import qualified Data.Text.IO as TIO
> import System.Directory (setCurrentDirectory)
> import Data.Map as M
> import Text.DocTemplates (ToContext(toVal), Context(..))
> import Data.Text (pack)
> import Data.Either.Combinators (rightToMaybe)
The documentation can be generated by running ``cabal run pesto-doc``. It is
exclusively based on the restructuredText inside this package’s literal Haskell
source code.
.. _restructuredText: http://docutils.sourceforge.net/rst.html
> readDoc = readRST def {
> readerExtensions = extensionsFromList [
> Ext_literate_haskell
> , Ext_implicit_header_references
> ]
> , readerStandalone = True }
`Pandoc `_ outputs a single HTML5 page with syntax
highlighting and MathJax for formulas.
> writeDoc tpl = writeHtml5String def {
> writerTemplate = tpl
> , writerHighlightStyle = Just tango
> , writerNumberSections = True
> , writerSectionDivs = True
> , writerTabStop = 4
> , writerHTMLMathMethod = MathJax "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
> , writerVariables = Context $ M.fromList [
> ("css", toVal $ pack "pesto.css")
> , ("lang", toVal $ pack "en")
> , ("include-before", toVal $ pack "
")
> , ("include-after", toVal $ pack "
")
> ]
> }
>
> main = do
The module ``Codec.Pesto`` serves as starting point and it includes every other
module in a sensible order. For the relative includes to work, we need to
change our current working directory.
> tpl <- runIO $ compileDefaultTemplate "html5"
> setCurrentDirectory "src/lib/Codec"
> doc <- TIO.readFile "Pesto.lhs"
> result <- runIO $ readDoc doc >>= writeDoc (rightToMaybe tpl)
> setCurrentDirectory "../../../"
> html <- handleError result
Output is written to the directory ``_build``, which contains the corresponding
stylesheet.
> TIO.writeFile "_build/index.html" html