@@ -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 ' ' ))
146146end
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+
148158local ensure_type
149159ensure_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}
330347setmetatable (ensure_type , ensure_type_metatable )
331348
349+ local CaptionMT = pandoc .Caption and debug.getmetatable (pandoc .Caption {})
332350local CellMT = debug.getmetatable (pandoc .Cell {})
333351local InlineMT = debug.getmetatable (pandoc .Space ())
334352local 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 ))
0 commit comments