git.iko.soy/typeable/pandoc
on master help sign in
Lua filter: allow filtering of meta data only
commit9cd20c9b8b1fa3bd4581399327d61551558cf899 authorAlbert Krewinkel <albert@zeitkraut.de> dateSun 16 Apr 2017, 21:06 (10 years ago) parent5416fb1
2 files changed+25−1
src/Text/Pandoc/Lua.hs+13−1 test/lua/smallcaps-title.lua+12
src/Text/Pandoc/Lua.hs+13−1
@@ -75,7 +75,8 @@ runAll (x:xs) = walkMWithLuaFilter x >=> runAll xs
7575walkMWithLuaFilter :: LuaFilter -> Pandoc -> IO Pandoc
7676walkMWithLuaFilter (LuaFilter lua fnMap) =
7777 walkM (execInlineLuaFilter lua fnMap) >=>
78− walkM (execBlockLuaFilter lua fnMap) >=>
78+ walkM (execBlockLuaFilter lua fnMap) >=>
79+ walkM (execMetaLuaFilter lua fnMap) >=>
7980 walkM (execDocLuaFilter lua fnMap)
8081
8182type FunctionMap = Map String LuaFilterFunction
@@ -92,6 +93,17 @@ execDocLuaFilter lua fnMap x = do
9293 Nothing -> return x
9394 Just fn -> runLuaFilterFunction lua fn x
9495
96+execMetaLuaFilter :: LuaState
97+ -> FunctionMap
98+ -> Pandoc -> IO Pandoc
99+execMetaLuaFilter lua fnMap pd@(Pandoc meta blks) = do
100+ let metaFnName = "Meta"
101+ case Map.lookup metaFnName fnMap of
102+ Nothing -> return pd
103+ Just fn -> do
104+ meta' <- runLuaFilterFunction lua fn meta
105+ return $ Pandoc meta' blks
106+
95107execBlockLuaFilter :: LuaState
96108 -> FunctionMap
97109 -> Block -> IO Block
test/lua/smallcaps-title.luanew file+12
@@ -0,0 +1,12 @@
1+return {
2+ {
3+ Meta = function(meta)
4+ -- The call to `MetaInlines` is redundant and used for testing purposes
5+ -- only. The explicit use of a MetaValue constructor is only useful when
6+ -- used with an empty table: `MetaInlines{}` is read differently than
7+ -- `MetaBlocks{}`.
8+ meta.title = pandoc.MetaInlines{pandoc.SmallCaps(meta.title)}
9+ return meta
10+ end
11+ }
12+}