Skip to content

Commit 66b7615

Browse files
committed
feat: numbered listitems
- Capture numbered listiems in the existing `line_li` form. - Introduce `prefix` capture so that consumers can check if a listitem is ordered (numbered) or unordered.
1 parent e7c5565 commit 66b7615

File tree

4 files changed

+78
-49
lines changed

4 files changed

+78
-49
lines changed

grammar.js

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,8 @@
1313
// @ts-check
1414

1515
const _uppercase_word = /[A-Z0-9.()][-A-Z0-9.()_]+/;
16-
// List-item.
17-
const _li_token = /[-][ ]+/;
18-
// Numbered list-item.
19-
const _num_li_token = /[0-9]{1,3}\.[ ]+/;
16+
// Listitem (incl. numbered items).
17+
const _li_token = /([-]|([0-9]{1,3}\.))[ ]+/;
2018

2119
module.exports = grammar({
2220
name: 'vimdoc',
@@ -136,8 +134,7 @@ module.exports = grammar({
136134
choice(
137135
repeat1($.line),
138136
repeat1($.line_li),
139-
repeat1($.line_li_num),
140-
seq(repeat1($.line), repeat1(choice($.line_li, $.line_li_num))),
137+
seq(repeat1($.line), repeat1($.line_li)),
141138
),
142139
choice(
143140
token.immediate('<'), // Treat codeblock-terminating "<" as whitespace.
@@ -169,17 +166,7 @@ module.exports = grammar({
169166
// Listitem: consumes prefixed line and all adjacent non-prefixed lines.
170167
line_li: ($) => prec.right(1, seq(
171168
optional(token.immediate('<')), // Treat codeblock-terminating "<" as whitespace.
172-
_li_token,
173-
choice(
174-
alias(seq(repeat1($._atom), /\n/), $.line),
175-
seq(alias(repeat1($._atom), $.line), $.codeblock),
176-
),
177-
repeat(alias($._line_noli, $.line)),
178-
)),
179-
// Numbered listitem: consumes prefixed line and all adjacent non-prefixed lines.
180-
line_li_num: ($) => prec.right(1, seq(
181-
optional(token.immediate('<')), // Treat codeblock-terminating "<" as whitespace.
182-
_num_li_token,
169+
alias(_li_token, $.prefix),
183170
choice(
184171
alias(seq(repeat1($._atom), /\n/), $.line),
185172
seq(alias(repeat1($._atom), $.line), $.codeblock),

test/corpus/heading3-column_heading.txt

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -224,34 +224,38 @@ ABC not-h3
224224
(word)
225225
(word)))
226226
(block
227-
(line
228-
(word)
229-
(optionlink
230-
(word))
231-
(codespan
232-
(word))
233-
(word)
234-
(word))
235-
(line
236-
(codespan
227+
(line_li
228+
(prefix)
229+
(line
230+
(optionlink
231+
(word))
232+
(codespan
233+
(word))
234+
(word)
237235
(word))
238-
(word)
239-
(word))
240-
(line
241-
(word)
242-
(word)
243-
(word)
244-
(word)
245-
(word))
246-
(line
247-
(word)
248-
(word)
249-
(word)
250-
(codespan
236+
(line)
237+
(line
238+
(codespan
239+
(word))
240+
(word)
241+
(word)))
242+
(line_li
243+
(prefix)
244+
(line
245+
(word)
246+
(word)
247+
(word)
251248
(word))
252-
(word)
253-
(word)
254-
(word))))
249+
(line)
250+
(line
251+
(word)
252+
(word)
253+
(word)
254+
(codespan
255+
(word))
256+
(word)
257+
(word)
258+
(word)))))
255259

256260
================================================================================
257261
NOT column_heading

test/corpus/listitem.txt

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,21 @@ li continues
2323
(help_file
2424
(block
2525
(line_li
26+
(prefix)
2627
(line
2728
(word)
2829
(word)
2930
(word)
3031
(word))
3132
(line))
3233
(line_li
34+
(prefix)
3335
(line
3436
(word)
3537
(word))
3638
(line))
3739
(line_li
40+
(prefix)
3841
(line
3942
(word)
4043
(word))
@@ -53,6 +56,7 @@ li continues
5356
(taglink
5457
(word))))
5558
(line_li
59+
(prefix)
5660
(line
5761
(word)
5862
(word)
@@ -67,19 +71,22 @@ li continues
6771
(word)
6872
(word)))
6973
(line_li
74+
(prefix)
7075
(line
7176
(argument
7277
(word))
7378
(word))
7479
(line)))
7580
(block
7681
(line_li
82+
(prefix)
7783
(line
7884
(word)
7985
(word)
8086
(word))
8187
(line))
8288
(line_li
89+
(prefix)
8390
(line
8491
(tag
8592
(word))
@@ -88,12 +95,14 @@ li continues
8895
(word)))
8996
(line))
9097
(line_li
98+
(prefix)
9199
(line
92100
(word)
93101
(word)
94102
(word))
95103
(line))
96104
(line_li
105+
(prefix)
97106
(line
98107
(word))
99108
(line)
@@ -125,6 +134,7 @@ listitem with codeblock
125134
(help_file
126135
(block
127136
(line_li
137+
(prefix)
128138
(line
129139
(word)
130140
(word)
@@ -134,13 +144,15 @@ listitem with codeblock
134144
(code
135145
(line))))
136146
(line_li
147+
(prefix)
137148
(line
138149
(word)
139150
(word)
140151
(word)
141152
(word))
142153
(line))
143154
(line_li
155+
(prefix)
144156
(line
145157
(word)
146158
(word))
@@ -153,10 +165,12 @@ listitem with codeblock
153165
(line)
154166
(line)))))
155167
(line_li
168+
(prefix)
156169
(line
157170
(word))
158171
(line))
159172
(line_li
173+
(prefix)
160174
(line
161175
(word)
162176
(word))
@@ -198,24 +212,28 @@ listitems + lines without blank lines
198212
(word))
199213
(word))
200214
(line_li
215+
(prefix)
201216
(line
202217
(word)
203218
(taglink
204219
(word)))
205220
(line))
206221
(line_li
222+
(prefix)
207223
(line
208224
(word)
209225
(taglink
210226
(word)))
211227
(line))
212228
(line_li
229+
(prefix)
213230
(line
214231
(word)
215232
(taglink
216233
(word)))
217234
(line))
218235
(line_li
236+
(prefix)
219237
(line
220238
(word))
221239
(line)
@@ -242,6 +260,7 @@ listitem tricky
242260
(help_file
243261
(block
244262
(line_li
263+
(prefix)
245264
(line
246265
(word)
247266
(word)
@@ -253,18 +272,21 @@ listitem tricky
253272
(word)))
254273
(block
255274
(line_li
275+
(prefix)
256276
(line
257277
(word)
258278
(word)
259279
(word))
260280
(line))
261281
(line_li
282+
(prefix)
262283
(line
263284
(word)
264285
(word)
265286
(word))
266287
(line))
267288
(line_li
289+
(prefix)
268290
(line
269291
(word))
270292
(line))))
@@ -282,7 +304,9 @@ numbered listitem
282304
1. nested
283305
continued line
284306

285-
1. new block
307+
999. new block
308+
309+
9999. number too big
286310

287311
- new block
288312

@@ -291,7 +315,8 @@ numbered listitem
291315

292316
(help_file
293317
(block
294-
(line_li_num
318+
(line_li
319+
(prefix)
295320
(line
296321
(word)
297322
(word)
@@ -300,38 +325,50 @@ numbered listitem
300325
(line
301326
(word)
302327
(word)))
303-
(line_li_num
328+
(line_li
329+
(prefix)
304330
(line
305331
(word)
306332
(word)
307333
(word))
308334
(line))
309-
(line_li_num
335+
(line_li
336+
(prefix)
310337
(line
311338
(word))
312339
(line))
313340
(line_li
341+
(prefix)
314342
(line
315343
(word))
316344
(line)
317345
(line
318346
(word)
319347
(word)))
320-
(line_li_num
348+
(line_li
349+
(prefix)
321350
(line
322351
(word))
323352
(line)
324353
(line
325354
(word)
326355
(word))))
327356
(block
328-
(line_li_num
357+
(line_li
358+
(prefix)
329359
(line
330360
(word)
331361
(word))
332362
(line)))
363+
(block
364+
(line
365+
(word)
366+
(word)
367+
(word)
368+
(word)))
333369
(block
334370
(line_li
371+
(prefix)
335372
(line
336373
(word)
337374
(word))

test/corpus/taglink.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ Note: ":autocmd" can...
137137
(word))))
138138
(block
139139
(line_li
140+
(prefix)
140141
(line
141142
(argument
142143
(word))

0 commit comments

Comments
 (0)