Skip to content

Commit 264445a

Browse files
committed
Move unnumbered class from Image to containing Figure
Otherwise, assigning the `unnumbered` class to a Figure in Markdown has no effect, as the class is assigned to the Image, not the containing Figure. Close #28.
1 parent 81d2a9a commit 264445a

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

init.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ function Pandoc(doc)
4040
:walk({
4141
Inlines = crossrefs.parse_crossrefs,
4242
})
43+
:walk({
44+
Figure = numbering.move_unnumbered_class,
45+
})
4346
:walk({
4447
-- Number cross-referenceable elements and construct table with Ids and numbers.
4548
traverse = 'topdown', -- needed for subfigs

lib/numbering.lua

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,26 @@ local utils = require('lib.utils')
22

33
local M = {}
44

5+
---Move class `unnumbered` from Image to containing Figure.
6+
---@param fig Figure
7+
---@return Figure?
8+
M.move_unnumbered_class = function(fig)
9+
if
10+
#fig.content == 1
11+
and fig.content[1].tag == 'Plain'
12+
and #fig.content[1].content == 1
13+
and fig.content[1].content[1].tag == 'Image'
14+
then
15+
local img = fig.content[1].content[1]
16+
---@cast img Image
17+
if img.classes:includes('unnumbered') then
18+
img.classes:remove(img.classes:find('unnumbered')[2])
19+
fig.classes:insert('unnumbered')
20+
return fig
21+
end
22+
end
23+
end
24+
525
local docx_bmk_id = 100000 -- large number to prevent collisions with bookmark Ids used by pandoc.
626

727
local function get_docx_bmk_id()

spec/golden/md2html/expected.html

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ <h1 data-number="3" id="sec3"><span class="header-section-number">3</span> Table
2424
</tr>
2525
</tbody>
2626
</table>
27-
<h1 data-number="4" id="groups-of-cross-references"><span class="header-section-number">4</span> Groups of cross-references</h1>
27+
<h1 data-number="4" id="unnumbered-figure"><span class="header-section-number">4</span> Unnumbered figure</h1>
28+
<figure class="unnumbered">
29+
<img src="img.jpg" alt="Figure caption." />
30+
<figcaption aria-hidden="true">Figure caption.</figcaption>
31+
</figure>
32+
<h1 data-number="5" id="groups-of-cross-references"><span class="header-section-number">5</span> Groups of cross-references</h1>
2833
<figure id="fig2">
2934
<img src="fig2.jpg" alt="test" />
3035
<figcaption><span class="figure-label">Fig. 2: </span>test</figcaption>
@@ -38,15 +43,15 @@ <h1 data-number="4" id="groups-of-cross-references"><span class="header-section-
3843
<p>See <span class="cross-ref-group"><span class="crossrefs-of-a-kind">Figs. <a href="#fig1" class="cross-ref">1</a>, <a href="#fig2" class="cross-ref">2</a>, and <a href="#fig3" class="cross-ref">3</a></span></span>.</p>
3944
<p>See <span class="cross-ref-group"><span class="crossrefs-of-a-kind">Figs. <a href="#fig1" class="cross-ref">1</a>; <a href="#fig2" class="cross-ref">2</a>; <a href="#fig3" class="cross-ref">3</a></span></span>.</p>
4045
<p>See <span class="cross-ref-group"><span class="crossrefs-of-a-kind">Figs. <a href="#fig1" class="cross-ref">1</a> and <a href="#fig2" class="cross-ref">2</a></span></span>.</p>
41-
<h1 data-number="5" id="groups-of-cross-references-of-non-uniform-types"><span class="header-section-number">5</span> Groups of cross-references of non-uniform types</h1>
46+
<h1 data-number="6" id="groups-of-cross-references-of-non-uniform-types"><span class="header-section-number">6</span> Groups of cross-references of non-uniform types</h1>
4247
<p>See <span class="cross-ref-group"><a href="#sec1" class="cross-ref">Sec. 1</a> and <span class="crossrefs-of-a-kind">Figs. <a href="#fig2" class="cross-ref">2</a> and <a href="#fig3" class="cross-ref">3</a></span></span>.</p>
4348
<p>See <span class="cross-ref-group"><span class="crossrefs-of-a-kind">Secs. <a href="#sec1" class="cross-ref">1</a> and <a href="#sec2" class="cross-ref">2</a></span> and <a href="#fig3" class="cross-ref">Fig. 3</a></span>.</p>
4449
<p>See <span class="cross-ref-group"><a href="#eq1" class="cross-ref">Eqn. 1</a>, <a href="#fig2" class="cross-ref">Fig. 2</a>, and <a href="#sec3" class="cross-ref">Sec. 3</a></span>.</p>
4550
<p>See <span class="cross-ref-group"><a href="#eq1" class="cross-ref">Eqn. 1</a> and <a href="#fig1" class="cross-ref">Fig. 1</a></span>.</p>
4651
<p>See <span class="cross-ref-group"><a href="#eq1" class="cross-ref">Eqn. 1</a> and <span class="crossrefs-of-a-kind">Figs. <a href="#fig1" class="cross-ref">1</a>, <a href="#fig2" class="cross-ref">2</a>, and <a href="#fig3" class="cross-ref">3</a></span></span>.</p>
47-
<h1 data-number="6" id="cross-reference-with-suppressed-prefix"><span class="header-section-number">6</span> Cross-reference with suppressed prefix</h1>
52+
<h1 data-number="7" id="cross-reference-with-suppressed-prefix"><span class="header-section-number">7</span> Cross-reference with suppressed prefix</h1>
4853
<p>See <a href="#fig1" class="cross-ref">1</a>.</p>
4954
<p>See <a href="#fig1" class="cross-ref">Figure 1</a>.</p>
50-
<h1 data-number="7" id="pathological-cases"><span class="header-section-number">7</span> Pathological cases</h1>
55+
<h1 data-number="8" id="pathological-cases"><span class="header-section-number">8</span> Pathological cases</h1>
5156
<p>Single cross-reference in group: See <span class="cross-ref-group"><a href="#eq1" class="cross-ref">Eqn. 1</a></span>.</p>
5257
<p>Cross-reference group that doesn’t begin and end in a cross-reference: See <span class="cross-ref-group">in particular <span class="crossrefs-of-a-kind">Secs. <a href="#sec1" class="cross-ref">1</a>, <a href="#sec2" class="cross-ref">2</a>, and <a href="#sec3" class="cross-ref">3</a></span> as well.</span></p>

spec/golden/md2html/input.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ b wingspan
2323
Table: Table caption {#tbl1 .class key=val}
2424

2525

26+
# Unnumbered figure
27+
28+
![Figure caption.](img.jpg){.unnumbered}
29+
30+
2631
# Groups of cross-references
2732

2833
![test](fig2.jpg){#fig2}

spec/units/numbering.lua

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ local function create_dummy_figure(caption_str)
1515
return pandoc.Figure(pandoc.Plain(pandoc.Image('alt text', 'test.jpg')), pandoc.Caption(caption_str))
1616
end
1717

18+
describe('move_unnumbered_class', function()
19+
it('moves `unnumbered` class', function()
20+
local fig = create_dummy_figure('Caption')
21+
fig.content[1].content[1].classes:insert('unnumbered')
22+
local modified_fig = numbering.move_unnumbered_class(fig)
23+
assert.is_true(modified_fig.classes:includes('unnumbered')) ---@diagnostic disable-line: need-check-nil
24+
end)
25+
end)
26+
1827
describe('number_sections', function()
1928
_G.IDs = {}
2029
local header_doc = pandoc.Pandoc {

0 commit comments

Comments
 (0)