diff --git a/Shake.hs b/Shake.hs index 977dd25a7..a12de6754 100755 --- a/Shake.hs +++ b/Shake.hs @@ -118,13 +118,13 @@ main = do let md = out <.> "md" tmpl = "doc/manpage.nroff" need $ md : tmpl : pandocFilters - cmd pandoc md "-s --template" tmpl "-o" out + cmd pandoc md "-s --template" tmpl "--filter doc/pandoc-drop-web-blocks" "--filter doc/pandoc-drop-html-blocks" "--filter doc/pandoc-drop-html-inlines" "--filter doc/pandoc-drop-links" "--filter doc/pandoc-drop-notes" - "--filter doc/pandoc-capitalize-headers" + "-o" out -- man pages adjusted for web by pandoc (ready for hakyll) let webManpageMds = ["site" p <.>".md" | p <- manpages] @@ -133,10 +133,11 @@ main = do let p = dropExtension $ takeFileName out md = manpageDir p p <.> "md" need $ md : pandocFilters - cmd pandoc md "-o" out + cmd pandoc md "--filter doc/pandoc-demote-headers" -- "--filter doc/pandoc-add-toc" -- "--filter doc/pandoc-drop-man-blocks" + "-o" out -- method 2: @@ -151,12 +152,12 @@ main = do tmpl = "doc/manpage.nroff" need $ m4src : m4lib : tmpl : pandocFilters ++ m4includes cmd Shell "m4 -P" "-DMAN" "-I" dir m4lib m4src - "|" pandoc "-s --template" tmpl "-o" out + "|" pandoc "-s --template" tmpl "--filter doc/pandoc-drop-html-blocks" "--filter doc/pandoc-drop-html-inlines" "--filter doc/pandoc-drop-links" "--filter doc/pandoc-drop-notes" - "--filter doc/pandoc-capitalize-headers" + "-o" out -- man pages assembled from parts and adjusted for web with m4, adjusted slightly more with pandoc (ready for hakyll) let m4webManpageMds = ["site" "m4-"++p <.>".md" | p <- ["hledger.1"]] @@ -170,9 +171,10 @@ main = do m4lib = "doc/lib.m4" need $ m4src : m4lib : m4includes cmd Shell "m4 -P" "-DMAN -DWEB" "-I" dir m4lib m4src - "|" pandoc "-o" out + "|" pandoc "--filter doc/pandoc-demote-headers" -- "--filter doc/pandoc-add-toc" + "-o" out -- web manual combined from man pages @@ -180,12 +182,30 @@ main = do phony "webmanual" $ need [ webmanual ] "site/manual2.md" %> \out -> do need webManpageMds - cmd Shell "printf '* toc\\n\\n' >" webmanual :: Action ExitCode + liftIO $ writeFile webmanual [i| + +* toc + +|] forM_ webManpageMds $ \f -> do - let manpage = dropExtension $ takeFileName f - cmd Shell ("printf '\\n## "++ manpage ++"\\n\\n' >>") webmanual :: Action ExitCode + let heading = + let s = dropExtension $ dropExtension $ takeFileName f + in if "hledger_" `isPrefixOf` s + then drop 8 s ++ " format" + else s + cmd Shell ("printf '\\n## "++ heading ++"\\n\\n' >>") webmanual :: Action ExitCode cmd Shell "pandoc" f "-t markdown" + "--filter doc/pandoc-drop-man-blocks" "--filter doc/pandoc-drop-toc" + -- "--filter doc/pandoc-capitalize-headers" "--filter doc/pandoc-demote-headers" ">>" webmanual :: Action ExitCode diff --git a/doc/.gitignore b/doc/.gitignore index d29e05367..77d4d9d0b 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,5 +1,6 @@ pandoc-add-toc pandoc-capitalize-headers +pandoc-demote-headers pandoc-drop-html-blocks pandoc-drop-html-inlines pandoc-drop-links diff --git a/doc/pandoc-capitalize-headers.hs b/doc/pandoc-capitalize-headers.hs index 0e9cb393c..6ed1f0922 100755 --- a/doc/pandoc-capitalize-headers.hs +++ b/doc/pandoc-capitalize-headers.hs @@ -1,19 +1,20 @@ #!/usr/bin/env stack {- stack runghc --verbosity info --package pandoc-types-1.16.1 -} +-- Ensure level 1 and 2 headings are first-letter-capitalised. +import Data.Char import Text.Pandoc.JSON import Text.Pandoc.Walk -import Data.Char (toUpper) main :: IO () main = toJSONFilter capitalizeHeaders capitalizeHeaders :: Block -> Block -capitalizeHeaders (Header 1 attr xs) = Header 1 attr $ walk capitalize xs +capitalizeHeaders (Header lvl attr xs) | lvl < 3 = Header lvl attr $ map capitalize (take 1 xs) ++ drop 1 xs capitalizeHeaders x = x capitalize :: Inline -> Inline -capitalize (Str xs) = Str $ map toUpper xs +capitalize (Str s) = Str $ map toUpper (take 1 s) ++ map toLower (drop 1 s) capitalize x = x {-