orchid-0.0.6: src/Text/Document/Plugin/TOC.hs
module Text.Document.Plugin.TOC (tocPlugin) where
import Control.Applicative
import Text.ParserCombinators.Parsec hiding (many, optional, (<|>))
import Text.Document.Core.Type
import Text.Document.Plugin
import Text.Document.Parser.WikiHelper
import qualified Text.Xhtml.Xhtml as H
import qualified Text.Xml.Xml as X
-------- table of contents plugin ---------------------------------------------
tocPlugin :: Plugin Document Syn_Document
tocPlugin = makePlugin "toc"
[(Wiki, pTOC)]
[(XHTML, ppXHTML), (LaTeX, ppCodeLaTeX), (ADT, ppADT)]
[]
-------- parser(s) ------------------------------------------------------------
pTOC (Just (ContextWiki n)) = do
(m, i) <- pIndent n
(string "@@" <* many (oneOf ws) <* string "toc") *> many pEmptyLineEol
-------- pretty printer(s) ----------------------------------------------------
ppXHTML _ doc = OutputXML
$ H.classDiv "toc"
$ X.nodeset
$ (H.h2 $ H.text "Contents")
: documentToXhtmlTOC doc
ppCodeLaTeX s doc = OutputPlain "\\pagebreak\n\\tableofcontents\n\\pagebreak\n"
ppADT _ doc = OutputPlain "ERROR"