hakyll-std/{TableOfContents,hakyll-std}: switch from string-based alignment to sum-type
This commit is contained in:
parent
6b576a7e2d
commit
40934fa72e
@ -7,6 +7,7 @@ module TableOfContents (
|
||||
tableOfContents,
|
||||
ignoreTOC,
|
||||
collectHeaders,
|
||||
TOCAlignment(TOCOff,TOCLeft,TOCRight)
|
||||
) where
|
||||
|
||||
import Text.Pandoc
|
||||
@ -28,6 +29,8 @@ import Text.Blaze.Html.Renderer.String (renderHtml)
|
||||
import qualified Text.Blaze.Html5 as H
|
||||
import qualified Text.Blaze.Html5.Attributes as A
|
||||
|
||||
data TOCAlignment = TOCOff | TOCLeft | TOCRight
|
||||
|
||||
headerLevel :: Block -> Int
|
||||
headerLevel (Header level _ _) = level
|
||||
headerLevel _ = error "not a header"
|
||||
@ -69,20 +72,18 @@ createTable headers =
|
||||
H.p "Contents"
|
||||
H.ol $ markupHeaders headers
|
||||
|
||||
generateTOC :: [Block] -> String -> Block -> Block
|
||||
generateTOC :: [Block] -> TOCAlignment -> Block -> Block
|
||||
generateTOC [] _ x = x
|
||||
generateTOC headers alignment x@(BulletList (( (( Plain ((Str "toc"):_)):_)):_))
|
||||
| alignment == "right" = render . (! A.class_ "right-toc") . table $ headers
|
||||
| alignment == "left" = render . table $ headers
|
||||
| otherwise = x
|
||||
= case alignment of
|
||||
TOCRight -> render . (! A.class_ "right-toc") . table $ headers
|
||||
TOCLeft -> render . table $ headers
|
||||
_ -> x
|
||||
where render = (RawBlock "html") . renderHtml
|
||||
table = createTable . groupByHierarchy
|
||||
generateTOC _ _ x = x
|
||||
|
||||
tableOfContents :: String -> Pandoc -> Pandoc
|
||||
tableOfContents alignment ast =
|
||||
if alignment /= "off"
|
||||
then let headers = query collectHeaders ast
|
||||
in walk (generateTOC headers alignment) ast
|
||||
else walk ignoreTOC ast
|
||||
|
||||
tableOfContents :: TOCAlignment -> Pandoc -> Pandoc
|
||||
tableOfContents TOCOff ast = walk ignoreTOC ast
|
||||
tableOfContents alignment ast = let headers = query collectHeaders ast
|
||||
in walk (generateTOC headers alignment) ast
|
||||
|
||||
@ -53,7 +53,7 @@ import System.Process (system)
|
||||
-- import Text.Highlighting.Kate (pygments, kate, espresso, tango, haddock, monochrome, zenburn)
|
||||
import Text.Pandoc.Options
|
||||
|
||||
import TableOfContents (tableOfContents)
|
||||
import TableOfContents (tableOfContents, TOCAlignment(TOCRight))
|
||||
|
||||
import Debug.Trace
|
||||
strace :: Show a => a -> a
|
||||
@ -118,7 +118,7 @@ pandocWriterOptions = def
|
||||
-- ,writerHighlightStyle=tango
|
||||
--- }
|
||||
|
||||
pandocTransform = tableOfContents "right"
|
||||
pandocTransform = tableOfContents TOCRight
|
||||
|
||||
main = do
|
||||
args <- getArgs
|
||||
|
||||
Loading…
Reference in New Issue
Block a user