summaryrefslogtreecommitdiff
path: root/src/exe/Doc.lhs
blob: 711050b6a748b6a0fb46bf0719ec21c0ad90b819 (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.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 <http://www.pandoc.org/>`_ 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 "<div class=\"wrapper\">")
> 		, ("include-after", toVal $ pack "</div>")
> 		]
> 	}
>
> 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