{-# LANGUAGE TemplateHaskell, EmptyDataDecls, NoMonomorphismRestriction #-} module Toc.Semantics.Html where import Data.List import Data.HList.Label4 import Data.HList.TypeEqGeneric1 import Data.HList.TypeCastGeneric1 import Language.Grammars.AspectAG import Language.Grammars.AspectAG.Derive import Document.Decl import Toc.Decl import Document.Semantics.Html import Document.Semantics.NumberedHeaders import Toc.Semantics.Toc -- | Rule that redefines the html attribute for headers such that the associated -- header number is printed and its "id" value is set for navigation. header_html' = syn html $ do level <- at ch_level_header inls <- at ch_inlines_header loc <- at loc let num = loc # headerNum return $ "" ++ formatNH num ++ " " ++ inls # html ++ "" ++ "\n" -- | Rule that defines the html attribute for the table of contents toc_html = syn html $ do lhs <- at lhs return $ formatToc (lhs # toc) -- | Formats the table of contents to html formatToc :: [([Int], String)] -> String formatToc = foldr f "" where f (x, section) table = "" ++ (formatNH x) ++ " " ++ section ++ "
\n" ++ table semHtml'' = mkDoc' (default_toc `ext` blockLcons_html `ext` default_cHeaderNum `ext` default_sToc) (default_toc `ext` blockLnil_html `ext` default_cHeaderNum `ext` default_sToc) (bold_html `ext` bold_sInlStr) (document_toc `ext` document_cHeaderNum `ext` document_html) (header_html' `ext` header_cHeaderNum `ext` header_headerNum `ext` header_sToc)-- NOTE: this should be aspHeader instead (inlineLcons_html `ext` default_sInlStr) (inlineLnil_html `ext` default_sInlStr) (italics_html `ext` italics_sInlStr) (default_toc `ext` paragraph_html `ext` default_cHeaderNum `ext` default_sToc) (plain_html `ext` plain_sInlStr) semHtmlToc = mkDocToc (default_toc `ext` toc_html `ext` default_cHeaderNum `ext` default_sToc)