Skip to content

Commit ef1631a

Browse files
committed
Allow to use jog instead of walk for individual filters
Jog can be enable on a per-filter basis by setting the `traverser` field to `jog`.
1 parent 056c8ab commit ef1631a

File tree

4 files changed

+22
-6
lines changed

4 files changed

+22
-6
lines changed

src/resources/filters/ast/customnodes.lua

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function is_regular_node(node, name)
4141
return node
4242
end
4343

44-
function run_emulated_filter(doc, filter)
44+
function run_emulated_filter(doc, filter, traverse)
4545
if doc == nil then
4646
return nil
4747
end
@@ -73,7 +73,20 @@ function run_emulated_filter(doc, filter)
7373
-- luacov: enable
7474
end
7575
end
76-
local result = node:walk(filter_param)
76+
77+
local old_traverse = _quarto.traverser
78+
if traverser == nil or traverser == 'pandoc' or traverser == 'walk' then
79+
_quarto.traverser = _quarto.utils.walk
80+
elseif traverser == 'jog' then
81+
_quarto.traverser = _quarto.modules.jog
82+
elseif type(traverser) == 'function' then
83+
_quarto.traverser = traverser
84+
else
85+
warn('Unknown traverse method: ' .. tostring(traverse))
86+
end
87+
local result = _quarto.traverser(node, filter_param)
88+
_quarto.traverse = old_traverse
89+
7790
return result
7891
end
7992

src/resources/filters/ast/emulatedfilter.lua

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ inject_user_filters_at_entry_points = function(filter_list)
6868
end
6969
local filter = {
7070
name = entry_point .. "-user-" .. tostring(entry_point_counts[entry_point]),
71+
-- The filter might not work as expected when doing a non-lazy jog, so
72+
-- make sure it is processed with the default 'walk' function.
73+
traverser = 'walk',
7174
}
7275
if is_many_filters then
7376
filter.filters = wrapped
@@ -76,4 +79,4 @@ inject_user_filters_at_entry_points = function(filter_list)
7679
end
7780
table.insert(filter_list, index, filter)
7881
end
79-
end
82+
end

src/resources/filters/ast/runemulation.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ local function run_emulated_filter_chain(doc, filters, afterFilterPass, profilin
7979
print(pandoc.write(doc, "native"))
8080
else
8181
_quarto.ast._current_doc = doc
82-
doc = run_emulated_filter(doc, v.filter)
82+
doc = run_emulated_filter(doc, v.filter, v.traverser)
8383
ensure_vault(doc)
8484

8585
add_trace(doc, v.name)
@@ -204,4 +204,4 @@ function run_as_extended_ast(specTable)
204204
end
205205

206206
return pandocFilterList
207-
end
207+
end

src/resources/filters/quarto-post/render-asciidoc.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ function render_asciidoc()
8989
local noteEl = el[i+1]
9090
-- if the note contains a code inline, we need to add a space
9191
local hasCode = false
92-
pandoc.walk_inline(noteEl, {
92+
_quarto.traverser(noteEl, {
9393
Code = function(_el)
9494
hasCode = true
9595
end

0 commit comments

Comments
 (0)