packages feed

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"