Skip to content

Commit d9599fd

Browse files
committed
Accomodate jog and attrcheck to pandoc dev version
1 parent 714a19f commit d9599fd

File tree

2 files changed

+66
-27
lines changed

2 files changed

+66
-27
lines changed

src/resources/filters/modules/attribcheck.lua

+49-19
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

+17-8
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@ local function recurse (element, tp, jogger)
9393
for key, value in pairs(element) do
9494
element[key] = jogger(value)
9595
end
96-
elseif content_only_node_tags[tag] or tp == 'pandoc Cell' then
96+
elseif content_only_node_tags[tag] or
97+
tp == 'Cell' or tp == 'pandoc Cell' then
9798
element.content = jogger(element.content)
9899
elseif tag == 'Image' then
99100
element.caption = jogger(element.caption)
@@ -102,16 +103,20 @@ local function recurse (element, tp, jogger)
102103
element.head = jogger(element.head)
103104
element.bodies = jogger(element.bodies)
104105
element.foot = jogger(element.foot)
106+
elseif tag == 'Caption' then
107+
element.long = jogger(element.long)
108+
element.short = element.short and jogger(element.short)
105109
elseif tag == 'Figure' then
106110
element.caption = jogger(element.caption)
107111
element.content = jogger(element.content)
108112
elseif tp == 'Meta' then
109113
for key, value in pairs(element) do
110114
element[key] = jogger(value)
111115
end
112-
elseif tp == 'pandoc Row' then
116+
elseif tp == 'Row' or tp == 'pandoc Row' then
113117
element.cells = jogger(element.cells)
114-
elseif tp == 'pandoc TableHead' or tp == 'pandoc TableFoot' then
118+
elseif tp == 'pandoc TableHead' or tp == 'pandoc TableFoot' or
119+
tp == 'TableHead' or tp == 'TableFoot' then
115120
element.rows = jogger(element.rows)
116121
elseif tp == 'Blocks' or tp == 'Inlines' then
117122
local expected_itemtype = tp == 'Inlines' and 'Inline' or 'Block'
@@ -158,6 +163,9 @@ local function recurse (element, tp, jogger)
158163
element[i] = jogger(item)
159164
i, item = i+1, element[i+1]
160165
end
166+
elseif tp == 'Caption' then
167+
element.long = jogger(element.long)
168+
element.short = element.short and jogger(element.short)
161169
elseif tp == 'Pandoc' then
162170
element.meta = jogger(element.meta)
163171
element.blocks = jogger(element.blocks)
@@ -274,15 +282,16 @@ local function add_method(funname)
274282
pandoc.Pandoc{} -- init metatable 'Pandoc'
275283
pandoc.Blocks{} -- init metatable 'Blocks'
276284
pandoc.Inlines{} -- init metatable 'Inlines'
277-
pandoc.Cell{} -- init metatable 'pandoc Cell'
278-
pandoc.Row{} -- init metatable 'pandoc Row'
279-
pandoc.TableHead{} -- init metatable 'pandoc TableHead'
280-
pandoc.TableFoot{} -- init metatable 'pandoc TableFoot'
285+
pandoc.Caption{} -- init metatable 'Caption'
286+
pandoc.Cell{} -- init metatable 'Cell'
287+
pandoc.Row{} -- init metatable 'Row'
288+
pandoc.TableHead{} -- init metatable 'TableHead'
289+
pandoc.TableFoot{} -- init metatable 'TableFoot'
281290
local reg = debug.getregistry()
282291
List{
283292
'Block', 'Inline', 'Pandoc',
284293
'pandoc Cell', 'pandoc Row', 'pandoc TableHead', 'pandoc TableFoot',
285-
'Cell', 'Row', 'TableHead', 'TableFoot',
294+
'Caption', 'Cell', 'Row', 'TableHead', 'TableFoot',
286295
}:map(
287296
function (name)
288297
if reg[name] then

0 commit comments

Comments
 (0)