summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/sample.lua14
-rw-r--r--src/Text/Pandoc/Writers/Custom.hs20
2 files changed, 22 insertions, 12 deletions
diff --git a/data/sample.lua b/data/sample.lua
index fe425b749..36eb9f6ef 100644
--- a/data/sample.lua
+++ b/data/sample.lua
@@ -66,10 +66,10 @@ function Blocksep()
end
-- This function is called once for the whole document. Parameters:
--- body, title, date are strings; authors is an array of strings;
--- variables is a table. One could use some kind of templating
+-- body is a string, metadata is a table, variables is a table.
+-- One could use some kind of templating
-- system here; this just gives you a simple standalone HTML file.
-function Doc(body, title, authors, date, variables)
+function Doc(body, metadata, variables)
local buffer = {}
local function add(s)
table.insert(buffer, s)
@@ -77,17 +77,17 @@ function Doc(body, title, authors, date, variables)
add('<!DOCTYPE html>')
add('<html>')
add('<head>')
- add('<title>' .. title .. '</title>')
+ add('<title>' .. metadata.title .. '</title>')
add('</head>')
add('<body>')
if title ~= "" then
- add('<h1 class="title">' .. title .. '</h1>')
+ add('<h1 class="title">' .. metadata.title .. '</h1>')
end
- for _, author in pairs(authors) do
+ for _, author in pairs(metadata.author) do
add('<h2 class="author">' .. author .. '</h2>')
end
if date ~= "" then
- add('<h3 class="date">' .. date .. '</h3>')
+ add('<h3 class="date">' .. metadata.date .. '</h3>')
end
add(body)
if #notes > 0 then
diff --git a/src/Text/Pandoc/Writers/Custom.hs b/src/Text/Pandoc/Writers/Custom.hs
index e6d912e78..732497616 100644
--- a/src/Text/Pandoc/Writers/Custom.hs
+++ b/src/Text/Pandoc/Writers/Custom.hs
@@ -107,6 +107,19 @@ instance StackValue [Block] where
peek _ _ = undefined
valuetype _ = Lua.TSTRING
+instance StackValue MetaValue where
+ push l (MetaMap m) = Lua.push l m
+ push l (MetaList xs) = Lua.push l xs
+ push l (MetaString s) = Lua.push l s
+ push l (MetaInlines ils) = Lua.push l ils
+ push l (MetaBlocks bs) = Lua.push l bs
+ peek _ _ = undefined
+ valuetype (MetaMap _) = Lua.TTABLE
+ valuetype (MetaList _) = Lua.TTABLE
+ valuetype (MetaString _) = Lua.TSTRING
+ valuetype (MetaInlines _) = Lua.TSTRING
+ valuetype (MetaBlocks _) = Lua.TSTRING
+
-- | Convert Pandoc to custom markup.
writeCustom :: FilePath -> WriterOptions -> Pandoc -> IO String
writeCustom luaFile opts doc = do
@@ -121,12 +134,9 @@ writeCustom luaFile opts doc = do
return $ toString rendered
docToCustom :: LuaState -> WriterOptions -> Pandoc -> IO ByteString
-docToCustom lua opts (Pandoc meta blocks) = do
- title' <- inlineListToCustom lua $ docTitle meta
- authors' <- mapM (inlineListToCustom lua) $ docAuthors meta
- date' <- inlineListToCustom lua $ docDate meta
+docToCustom lua opts (Pandoc (Meta metamap) blocks) = do
body <- blockListToCustom lua blocks
- callfunc lua "Doc" body title' authors' date' (writerVariables opts)
+ callfunc lua "Doc" body metamap (writerVariables opts)
-- | Convert Pandoc block element to Custom.
blockToCustom :: LuaState -- ^ Lua state