175 lines
4.5 KiB
Lua
175 lines
4.5 KiB
Lua
|
|
||
|
local maybesubs = false
|
||
|
local stk_end = false
|
||
|
|
||
|
add = pandoc.RawInline('html', "<ins>")
|
||
|
adde = pandoc.RawInline('html', "</ins>")
|
||
|
|
||
|
rm = pandoc.RawInline('html', "<del>")
|
||
|
rme = pandoc.RawInline('html', "</del>")
|
||
|
rmeadd = pandoc.RawInline('html', "</del><ins>")
|
||
|
|
||
|
mark = pandoc.RawInline('html', "<mark>")
|
||
|
marke = pandoc.RawInline('html', "</mark>")
|
||
|
|
||
|
comm = pandoc.RawInline('html', [[<span class="critic comment">]])
|
||
|
comme = pandoc.RawInline('html', "</span>")
|
||
|
|
||
|
ruless = {['{%+%+']=add, ['{\u{2013}']=rm, ['{==']=mark, ['{>>']=comm, ['{~~']=rm,
|
||
|
['%+%+}']=adde, ['\u{2013}}']=rme, ['==}']=marke, ['<<}']=comme, ['~~}']=rme, ['~>']=rmeadd}
|
||
|
|
||
|
-- Strikeout before/after
|
||
|
st_b = '{'
|
||
|
st_e = '}'
|
||
|
|
||
|
local scriptcode = [[
|
||
|
|
||
|
<div id="criticnav">
|
||
|
<ul>
|
||
|
<li id="markup-button">Markup</li>
|
||
|
<li id="original-button">Original</li>
|
||
|
<li id="edited-button">Edited</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
function critic() {
|
||
|
|
||
|
$('.content').addClass('markup');
|
||
|
$('#markup-button').addClass('active');
|
||
|
$('ins.break').unwrap();
|
||
|
$('span.critic.comment').wrap('<span class="popoverc" /></span>');
|
||
|
$('span.critic.comment').before('‡');
|
||
|
}
|
||
|
|
||
|
function original() {
|
||
|
$('#original-button').addClass('active');
|
||
|
$('#edited-button').removeClass('active');
|
||
|
$('#markup-button').removeClass('active');
|
||
|
|
||
|
$('.content').addClass('original');
|
||
|
$('.content').removeClass('edited');
|
||
|
$('.content').removeClass('markup');
|
||
|
}
|
||
|
|
||
|
function edited() {
|
||
|
$('#original-button').removeClass('active');
|
||
|
$('#edited-button').addClass('active');
|
||
|
$('#markup-button').removeClass('active');
|
||
|
|
||
|
$('.content').removeClass('original');
|
||
|
$('.content').addClass('edited');
|
||
|
$('.content').removeClass('markup');
|
||
|
}
|
||
|
|
||
|
function markup() {
|
||
|
$('#original-button').removeClass('active');
|
||
|
$('#edited-button').removeClass('active');
|
||
|
$('#markup-button').addClass('active');
|
||
|
|
||
|
$('.content').removeClass('original');
|
||
|
$('.content').removeClass('edited');
|
||
|
$('.content').addClass('markup');
|
||
|
}
|
||
|
|
||
|
var o = document.getElementById("original-button");
|
||
|
var e = document.getElementById("edited-button");
|
||
|
var m = document.getElementById("markup-button");
|
||
|
|
||
|
window.onload = critic();
|
||
|
o.onclick = original;
|
||
|
e.onclick = edited;
|
||
|
m.onclick = markup;
|
||
|
</script>
|
||
|
]]
|
||
|
|
||
|
function cirtiblock(blocks, k, v)
|
||
|
local newblock = {}
|
||
|
for ti,t in pairs(blocks) do
|
||
|
if t.text then
|
||
|
i, j = t.text:find(k)
|
||
|
if i then
|
||
|
newblock[#newblock + 1] = pandoc.Str(t.text:sub(1, i-1))
|
||
|
newblock[#newblock + 1] = v
|
||
|
newblock[#newblock + 1] = pandoc.Str(t.text:sub(j+1, t.text:len()))
|
||
|
else
|
||
|
newblock[#newblock + 1] = t
|
||
|
end
|
||
|
else
|
||
|
newblock[#newblock + 1] = t
|
||
|
end
|
||
|
end
|
||
|
return newblock
|
||
|
end
|
||
|
|
||
|
|
||
|
if FORMAT:match 'html' then
|
||
|
|
||
|
function Str (el)
|
||
|
local replaced = {el}
|
||
|
-- Check for standard substitutions
|
||
|
for k,v in pairs(ruless) do
|
||
|
replaced = cirtiblock(replaced, k, v)
|
||
|
end
|
||
|
return replaced
|
||
|
end
|
||
|
|
||
|
function Strikeout (strk)
|
||
|
return strk.content
|
||
|
end
|
||
|
|
||
|
-- Check Inlines for Strikeout (~~) and remove brackets before/after for replacement
|
||
|
function Inlines (inlines)
|
||
|
for i = #inlines-1,2,-1 do
|
||
|
if inlines[i] and inlines[i].t == 'Strikeout' and inlines[i+1] then
|
||
|
if inlines[i+1].t == 'Str' then
|
||
|
if inlines[i+1].text == st_e then
|
||
|
inlines[i+1] = adde
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
if inlines[i] and inlines[i].t == 'Strikeout' and inlines[i-1] then
|
||
|
if inlines[i-1].t == 'Str' then
|
||
|
if inlines[i-1].text == st_b then
|
||
|
inlines[i-1] = rm
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
return inlines
|
||
|
end
|
||
|
end
|
||
|
|
||
|
--- From the lightbox filter
|
||
|
local function add_header_includes(meta, blocks)
|
||
|
|
||
|
local header_includes = pandoc.List(blocks)
|
||
|
|
||
|
-- add any exisiting meta['header-includes']
|
||
|
-- it could be a MetaList or a single String
|
||
|
if meta['header-includes'] then
|
||
|
if type(meta['header-includes']) == 'List' then
|
||
|
header_includes:extend(meta['header-includes'])
|
||
|
else
|
||
|
header_includes:insert(meta['header-includes'])
|
||
|
end
|
||
|
end
|
||
|
|
||
|
meta['header-includes'] = pandoc.MetaBlocks(header_includes)
|
||
|
return meta
|
||
|
end
|
||
|
|
||
|
|
||
|
function criticheader (meta)
|
||
|
quarto.doc.add_html_dependency({
|
||
|
name = 'critic',
|
||
|
scripts = {'critic.min.js'},
|
||
|
stylesheets = {'critic.css'}
|
||
|
})
|
||
|
-- inject the rendering code
|
||
|
quarto.doc.include_text("after-body", scriptcode)
|
||
|
end
|
||
|
|
||
|
-- All pass with Meta first
|
||
|
return {{Meta = criticheader}, {Inlines = Inlines}, {Strikeout = Strikeout}, {Str = Str}}
|