Shake.hs, tools/pandoc-drop-toc: switch to lua script filter

This commit is contained in:
Everett Hildenbrandt 2018-04-21 17:10:24 -06:00 committed by Simon Michael
parent 95c9af5664
commit ddaea7cffc
3 changed files with 18 additions and 46 deletions

View File

@ -87,7 +87,7 @@ main = do
--- "tools" </> "pandoc-drop-html-inlines"
--- "tools" </> "pandoc-drop-links"
--- "tools" </> "pandoc-drop-notes"
"tools" </> "pandoc-drop-toc"
--- "tools" </> "pandoc-drop-toc"
]
shakeArgs
@ -286,7 +286,7 @@ main = do
cmd Shell ("printf '\\n\\n' >>") webmanall :: Action ExitCode
cmd Shell "pandoc" f "-t markdown-fenced_divs --atx-headers"
-- "--filter tools/pandoc-drop-man-blocks"
"--filter tools/pandoc-drop-toc"
"--lua-filter tools/pandoc-drop-toc.lua"
-- "--filter tools/pandoc-capitalize-headers"
"--lua-filter tools/pandoc-demote-headers.lua"
">>" webmanall :: Action ExitCode

View File

@ -1,44 +0,0 @@
#!/usr/bin/env stack
{- stack runghc
--verbosity info
--stack-yaml=stack-ghc8.2.yaml
--package pandoc-types
--package safe
--package split
-}
-- Remove a table of contents marker
-- (a bullet list item containing "toc[-N[-M]]")
{-# LANGUAGE OverloadedStrings #-}
import Data.Char (isDigit)
import Data.List.Split
import Data.Maybe
import Safe
import Text.Pandoc.JSON
main :: IO ()
main = toJSONFilter dropToc
dropHtmlBlocks :: Block -> Block
dropHtmlBlocks (RawBlock (Format "html") _) = Plain []
dropHtmlBlocks x = x
-- BulletList
-- [ [Plain [Str "toc"]] ]
dropToc :: Block -> Block
dropToc (BulletList is) =
BulletList $ filter (not.null) $ map (filter isNotToc) is
where
isNotToc (Plain [Str s]) | isJust $ tocParams s = False
isNotToc _ = True
dropToc x = x
tocParams :: String -> Maybe (Maybe Int, Maybe Int)
tocParams s =
case splitOn "-" s of
["toc"] -> Just (Nothing, Nothing)
["toc",a] | all isDigit a -> Just (Nothing, readMay a)
["toc",a,b] | all isDigit a, all isDigit b -> Just (readMay a, readMay b)
_ -> Nothing

16
tools/pandoc-drop-toc.lua Normal file
View File

@ -0,0 +1,16 @@
function keepBi(bi)
if not (bi[1].t == "Plain") then return true end
if not (bi[1].content[1].t == "Str") then return true end
if not (string.find(bi[1].content[1].text, "toc") == 1) then return true end
return false
end
function BulletList(bl)
local newBl = { }
for i,bi in pairs(bl.content) do
if keepBi(bi)
then table.insert(newBl, bi)
end
end
return pandoc.BulletList(newBl)
end