70 lines
1.9 KiB
Lua
70 lines
1.9 KiB
Lua
local pagebreak = {
|
|
asciidoc = '<<<\n\n',
|
|
context = '\\page',
|
|
epub = '<p style="page-break-after: always;"> </p>',
|
|
html = '<div style="page-break-after: always;"></div>',
|
|
latex = '\\newpage{}',
|
|
ms = '.bp',
|
|
ooxml = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>',
|
|
odt = '<text:p text:style-name="Pagebreak"/>'
|
|
}
|
|
local title = '';
|
|
local title_inHaders = true;
|
|
|
|
local stringify_orig = (require 'pandoc.utils').stringify
|
|
|
|
local function stringify(x)
|
|
return type(x) == 'string' and x or stringify_orig(x)
|
|
end
|
|
|
|
local function newpage(format)
|
|
if format:match 'asciidoc' then
|
|
return pandoc.RawBlock('asciidoc', pagebreak.asciidoc)
|
|
elseif format == 'context' then
|
|
return pandoc.RawBlock('context', pagebreak.context)
|
|
elseif format == 'docx' then
|
|
return pandoc.RawBlock('openxml', pagebreak.ooxml)
|
|
elseif format:match 'epub' then
|
|
return pandoc.RawBlock('html', pagebreak.epub)
|
|
elseif format:match 'html.*' then
|
|
return pandoc.RawBlock('html', pagebreak.html)
|
|
elseif format:match 'latex' then
|
|
return pandoc.RawBlock('tex', pagebreak.latex)
|
|
elseif format:match 'ms' then
|
|
return pandoc.RawBlock('ms', pagebreak.ms)
|
|
elseif format:match 'odt' then
|
|
return pandoc.RawBlock('opendocument', pagebreak.odt)
|
|
else
|
|
-- fall back to insert a form feed character
|
|
return pandoc.Para{pandoc.Str '\f'}
|
|
end
|
|
end
|
|
|
|
function Meta(meta)
|
|
title = (meta.title and stringify(meta.title)) or title
|
|
if title ~= '' then
|
|
title_inHaders = false;
|
|
end
|
|
end
|
|
|
|
function Header(el)
|
|
if title_inHaders then
|
|
if el.level == 1 then
|
|
title = el.content
|
|
return {}
|
|
else
|
|
el.level = el.level - 1;
|
|
end
|
|
end
|
|
|
|
if el.level == 1 or el.level == 2 then
|
|
return { newpage(FORMAT), el }
|
|
end
|
|
end
|
|
|
|
return {
|
|
{Meta = Meta},
|
|
{Header = Header},
|
|
{Meta = function (meta) meta.title = title; return meta end}
|
|
}
|