Skip to content

Commit 0ef5b59

Browse files
committed
Accomodate jog and attrcheck to pandoc dev version
1 parent c52787c commit 0ef5b59

File tree

2 files changed

+66
-27
lines changed

2 files changed

+66
-27
lines changed

src/resources/filters/modules/attribcheck.lua

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,20 @@ local function warn_conversion (expected, actual, shift, extrainfo)
141141
dbginfostr = (dbginfo.name or '<no name>') .. ' in ' .. dbginfo.source
142142
.. ':' .. dbginfo.currentline
143143
end
144-
error(actual .. ' instead of ' .. expected .. ': ' .. dbginfostr
144+
warn(actual .. ' instead of ' .. expected .. ': ' .. dbginfostr
145145
.. (extrainfo and '\n' .. extrainfo or ''))
146146
end
147147

148+
local makeCaption = pandoc.Caption
149+
if not makeCaption then
150+
makeCaption = function (long, short)
151+
return {
152+
long = long,
153+
short = short
154+
}
155+
end
156+
end
157+
148158
local ensure_type
149159
ensure_type = {
150160
Attr = function (obj)
@@ -160,42 +170,49 @@ ensure_type = {
160170
if pt == 'Blocks' then
161171
return obj
162172
elseif pt == 'List' or pt == 'table' then
163-
warn_conversion('Blocks', pt, shift, extrainfo)
173+
warn_conversion('Blocks', pt, shift, tostring(obj))
164174
return setmetatable(obj, BlocksMT)
165175
elseif pt == 'Inline' then
166-
warn_conversion('Blocks', pt, shift)
176+
warn_conversion('Blocks', pt, shift, tostring(obj))
167177
return setmetatable({pandoc.Plain{obj}}, BlocksMT)
168178
elseif pt == 'Inlines' then
169-
warn_conversion('Blocks', pt, shift)
179+
warn_conversion('Blocks', pt, shift, tostring(obj))
170180
return setmetatable({pandoc.Plain(obj)}, BlocksMT)
171181
else
172-
warn_conversion('Blocks', pt, shift)
182+
warn_conversion('Blocks', pt, shift, tostring(obj))
173183
return pandoc.Blocks(obj)
174184
end
175185
end,
176186

177-
Caption = function (obj, shift)
187+
Caption = function (obj, shift, extrainfo)
178188
local tp = ptype(obj)
179-
if tp == 'table' and obj.long then
180-
obj.long = ensure_type['Blocks'](obj.long, shift + 1)
189+
if tp == 'Caption' then
190+
return obj
191+
elseif tp == 'table' and obj.long then
192+
if pandoc.Caption then warn_conversion('Caption', tp) end
193+
local long = ensure_type['Blocks'](obj.long, shift + 1, extrainfo)
194+
local short
181195
if obj.short then
182-
obj.short = ensure_type['Inlines'](obj.short, shift + 1)
196+
short = ensure_type['Inlines'](obj.short, shift + 1, extrainfo)
183197
end
184-
return obj
198+
return makeCaption(long, short)
185199
else
186-
warn_conversion('Caption', tp)
187-
local blocks = ensure_type['Blocks'](obj)
188-
for i = 1, #obj do
189-
obj[i] = nil
200+
if pandoc.Caption then warn_conversion('Caption', tp) end
201+
local blocks = ensure_type['Blocks'](obj, shift + 1, extrainfo)
202+
if pandoc.Caption then
203+
return pandoc.Caption(blocks)
204+
else
205+
for i = 1, #obj do
206+
obj[i] = nil
207+
end
208+
obj.long = blocks
209+
return obj
190210
end
191-
obj.long = blocks
192-
return obj
193211
end
194212
end,
195213

196214
DefinitionItem = function (obj, shift)
197215
shift = shift or 0
198-
-- warn_conversion('DefinitionItem', type(obj))
199216
obj[1] = ensure_type['Inlines'](obj[1], shift + 1)
200217
obj[2] = ensure_type[{ sequence = 'Blocks'}](obj[2], shift + 1)
201218
return obj
@@ -279,15 +296,15 @@ ensure_type = {
279296

280297
TableFoot = function (obj)
281298
local pt = ptype(obj)
282-
if pt ~= 'pandoc TableFoot' then
299+
if pt ~= 'pandoc TableFoot' and pt ~= 'TableFoot' then
283300
error('Cannot auto-convert to TableFoot, got ' .. pt)
284301
end
285302
return obj
286303
end,
287304

288305
TableHead = function (obj)
289306
local pt = ptype(obj)
290-
if pt ~= 'pandoc TableHead' then
307+
if pt ~= 'pandoc TableHead' and pt ~= 'TableHead' then
291308
error('Cannot auto-convert to TableHead, got ' .. pt)
292309
end
293310
return obj
@@ -329,6 +346,7 @@ local ensure_type_metatable = {
329346
}
330347
setmetatable(ensure_type, ensure_type_metatable)
331348

349+
local CaptionMT = pandoc.Caption and debug.getmetatable(pandoc.Caption{})
332350
local CellMT = debug.getmetatable(pandoc.Cell{})
333351
local InlineMT = debug.getmetatable(pandoc.Space())
334352
local BlockMT = debug.getmetatable(pandoc.HorizontalRule())
@@ -357,6 +375,18 @@ local function enable_attribute_checks()
357375
end
358376
end
359377

378+
-- Caption (currently only in pandoc dev version)
379+
if CaptionMT then
380+
CaptionMT.setters.short = function (obj, key, value)
381+
if value ~= nil then
382+
default_setter(obj, key, ensure_type['Inlines'](value))
383+
end
384+
end
385+
CaptionMT.setters.long = function (obj, key, value)
386+
default_setter(obj, key, ensure_type['Blocks'](value))
387+
end
388+
end
389+
360390
-- Cell
361391
CellMT.setters.col_span = function (obj, key, value)
362392
default_setter(obj, key, ensure_type['integer'](value))

src/resources/filters/modules/jog.lua

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ local function recurse (element, tp, jogger)
9595
for key, value in pairs(element) do
9696
element[key] = jogger(value)
9797
end
98-
elseif content_only_node_tags[tag] or tp == 'pandoc Cell' then
98+
elseif content_only_node_tags[tag] or
99+
tp == 'Cell' or tp == 'pandoc Cell' then
99100
element.content = jogger(element.content)
100101
elseif tag == 'Image' then
101102
element.caption = jogger(element.caption)
@@ -104,16 +105,20 @@ local function recurse (element, tp, jogger)
104105
element.head = jogger(element.head)
105106
element.bodies = jogger(element.bodies)
106107
element.foot = jogger(element.foot)
108+
elseif tag == 'Caption' then
109+
element.long = jogger(element.long)
110+
element.short = element.short and jogger(element.short)
107111
elseif tag == 'Figure' then
108112
element.caption = jogger(element.caption)
109113
element.content = jogger(element.content)
110114
elseif tp == 'Meta' then
111115
for key, value in pairs(element) do
112116
element[key] = jogger(value)
113117
end
114-
elseif tp == 'pandoc Row' then
118+
elseif tp == 'Row' or tp == 'pandoc Row' then
115119
element.cells = jogger(element.cells)
116-
elseif tp == 'pandoc TableHead' or tp == 'pandoc TableFoot' then
120+
elseif tp == 'pandoc TableHead' or tp == 'pandoc TableFoot' or
121+
tp == 'TableHead' or tp == 'TableFoot' then
117122
element.rows = jogger(element.rows)
118123
elseif tp == 'Blocks' or tp == 'Inlines' then
119124
local expected_itemtype = tp == 'Inlines' and 'Inline' or 'Block'
@@ -160,6 +165,9 @@ local function recurse (element, tp, jogger)
160165
element[i] = jogger(item)
161166
i, item = i+1, element[i+1]
162167
end
168+
elseif tp == 'Caption' then
169+
element.long = jogger(element.long)
170+
element.short = element.short and jogger(element.short)
163171
elseif tp == 'Pandoc' then
164172
element.meta = jogger(element.meta)
165173
element.blocks = jogger(element.blocks)
@@ -276,15 +284,16 @@ local function add_method(funname)
276284
pandoc.Pandoc{} -- init metatable 'Pandoc'
277285
pandoc.Blocks{} -- init metatable 'Blocks'
278286
pandoc.Inlines{} -- init metatable 'Inlines'
279-
pandoc.Cell{} -- init metatable 'pandoc Cell'
280-
pandoc.Row{} -- init metatable 'pandoc Row'
281-
pandoc.TableHead{} -- init metatable 'pandoc TableHead'
282-
pandoc.TableFoot{} -- init metatable 'pandoc TableFoot'
287+
pandoc.Caption{} -- init metatable 'Caption'
288+
pandoc.Cell{} -- init metatable 'Cell'
289+
pandoc.Row{} -- init metatable 'Row'
290+
pandoc.TableHead{} -- init metatable 'TableHead'
291+
pandoc.TableFoot{} -- init metatable 'TableFoot'
283292
local reg = debug.getregistry()
284293
List{
285294
'Block', 'Inline', 'Pandoc',
286295
'pandoc Cell', 'pandoc Row', 'pandoc TableHead', 'pandoc TableFoot',
287-
'Cell', 'Row', 'TableHead', 'TableFoot',
296+
'Caption', 'Cell', 'Row', 'TableHead', 'TableFoot',
288297
}:map(
289298
function (name)
290299
if reg[name] then

0 commit comments

Comments
 (0)