Skip to content

Commit 4ed4104

Browse files
author
DeathAxe
committed
Syntax: Use branches to highlight SETEXT headings
This commit is compatible with ST4107+ It adds support for setext headings highlighting from default Markdown syntax.
1 parent 8179cb4 commit 4ed4104

File tree

2 files changed

+270
-12
lines changed

2 files changed

+270
-12
lines changed

syntaxes/Markdown.sublime-syntax

+20-5
Original file line numberDiff line numberDiff line change
@@ -317,28 +317,43 @@ contexts:
317317
# applies `meta.paragraph` scope as expected.
318318
# A line of dashes is already matched as thematic break and thus ignored.
319319
- match: ^[ ]{,3}(?:=+|(?=\S))
320-
push: paragraph
320+
branch_point: setext-heading-or-paragraph
321+
branch:
322+
- paragraph
323+
- setext-heading2
324+
- setext-heading1
321325

322326
setext-heading1:
327+
# https://spec.commonmark.org/0.30/#setext-headings
328+
- meta_scope: markup.heading.1.markdown
323329
- match: ^[ ]{,3}(=+)[ \t]*$(\n?)
324-
scope: markup.heading.1.setext.markdown
325330
captures:
326331
1: punctuation.definition.heading.setext.markdown
327332
2: meta.whitespace.newline.markdown
328333
pop: true
334+
- include: setext-heading-content
329335

330336
setext-heading2:
337+
# https://spec.commonmark.org/0.30/#setext-headings
338+
- meta_scope: markup.heading.2.markdown
331339
- match: ^[ ]{,3}(-+)[ \t]*$(\n?)
332-
scope: markup.heading.2.setext.markdown
333340
captures:
334341
1: punctuation.definition.heading.setext.markdown
335342
2: meta.whitespace.newline.markdown
336343
pop: true
344+
- include: setext-heading-content
345+
346+
setext-heading-content:
347+
- match: '{{setext_escape}}'
348+
fail: setext-heading-or-paragraph
349+
- include: inline-bold-italic
350+
- include: scope:text.html.basic
337351

338352
paragraph:
353+
# https://spec.commonmark.org/0.30/#paragraphs
339354
- meta_scope: meta.paragraph.markdown
340-
- include: setext-heading1
341-
- include: setext-heading2
355+
- match: '{{setext_escape}}'
356+
fail: setext-heading-or-paragraph
342357
- include: paragraph-end
343358
- include: inline-bold-italic-linebreak
344359
- include: tag-kbd

tests/syntax_test_markdown.md

+250-7
Original file line numberDiff line numberDiff line change
@@ -133,24 +133,267 @@ this must not be bold italic***
133133
| <- - meta.bold - markup.italic
134134
|^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - meta.bold - markup.italic
135135

136-
Alternate Heading
136+
SETEXT Heading Level 1
137+
| <- markup.heading.1.markdown
137138
=================
138-
|^^^^^^^^^^^^^^^^ markup.heading.1 punctuation.definition
139-
| ^ meta.whitespace.newline
139+
| <- markup.heading.1.markdown punctuation.definition.heading.setext.markdown
140+
|^^^^^^^^^^^^^^^^ markup.heading.1.markdown punctuation.definition.heading.setext.markdown
141+
| ^ markup.heading.1.markdown meta.whitespace.newline.markdown
140142

141-
heading underlined with dashes
143+
SETEXT Heading Level 2
144+
| <- markup.heading.2.markdown
142145
------------------------------
143-
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.heading.2 punctuation.definition.heading
146+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
147+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
148+
| ^ markup.heading.2.markdown meta.whitespace.newline.markdown - punctuation
144149

145150
underlined heading followed by a separator
146151
-------------------
147152
------
148-
| <- meta.block-level meta.separator - markup.heading
153+
| <- meta.separator.thematic-break.markdown - markup.heading
149154

150155
underlined heading followed by another one that should be treated as a normal paragraph
151156
==================
152157
=====
153-
| <- - markup.heading
158+
| <- meta.paragraph.markdown - markup.heading
159+
160+
https://spec.commonmark.org/0.30/#example-80
161+
162+
Foo *bar*
163+
| <- markup.heading.1.markdown
164+
|^^^^^^^^^ markup.heading.1.markdown
165+
| ^^^^^ markup.italic.markdown
166+
=========
167+
| <- markup.heading.1.markdown punctuation.definition.heading.setext.markdown
168+
|^^^^^^^^ markup.heading.1.markdown punctuation.definition.heading.setext.markdown
169+
| ^ markup.heading.1.markdown meta.whitespace.newline.markdown
170+
171+
Foo *bar*
172+
| <- markup.heading.2.markdown
173+
|^^^^^^^^^ markup.heading.2.markdown
174+
| ^^^^^ markup.italic.markdown
175+
---------
176+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
177+
|^^^^^^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
178+
| ^ markup.heading.2.markdown meta.whitespace.newline.markdown
179+
180+
Foo *bar
181+
| <- markup.heading.1.markdown
182+
|^^^^^^^^^ markup.heading.1.markdown
183+
| ^^^^^ markup.italic.markdown
184+
=========
185+
| <- markup.heading.1.markdown punctuation.definition.heading.setext.markdown - markup.italic
186+
|^^^^^^^^ markup.heading.1.markdown punctuation.definition.heading.setext.markdown - markup.italic
187+
| ^ markup.heading.1.markdown meta.whitespace.newline.markdown - markup.italic
188+
189+
Foo *bar
190+
| <- markup.heading.2.markdown
191+
|^^^^^^^^^ markup.heading.2.markdown
192+
| ^^^^^ markup.italic.markdown
193+
---------
194+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown - markup.italic
195+
|^^^^^^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown - markup.italic
196+
| ^ markup.heading.2.markdown meta.whitespace.newline.markdown - markup.italic
197+
198+
https://spec.commonmark.org/0.30/#example-81
199+
200+
Foo *bar
201+
baz*
202+
| <- markup.heading.1.markdown markup.italic.markdown
203+
|^^^ markup.heading.1.markdown markup.italic.markdown
204+
| ^ markup.heading.1.markdown - markup.italic
205+
====
206+
| <- markup.heading.1.markdown punctuation.definition.heading.setext.markdown
207+
|^^^ markup.heading.1.markdown punctuation.definition.heading.setext.markdown
208+
| ^ markup.heading.1.markdown meta.whitespace.newline.markdown
209+
210+
https://spec.commonmark.org/0.30/#example-82
211+
212+
Foo *bar
213+
baz*
214+
| <- markup.heading.1.markdown markup.italic.markdown
215+
|^^^ markup.heading.1.markdown markup.italic.markdown
216+
| ^^ markup.heading.1.markdown - markup.italic
217+
====
218+
| <- markup.heading.1.markdown punctuation.definition.heading.setext.markdown
219+
|^^^ markup.heading.1.markdown punctuation.definition.heading.setext.markdown
220+
| ^ markup.heading.1.markdown meta.whitespace.newline.markdown
221+
222+
https://spec.commonmark.org/0.30/#example-83
223+
224+
Foo
225+
=
226+
| <- markup.heading.1.markdown punctuation.definition.heading.setext.markdown
227+
|^ markup.heading.1.markdown meta.whitespace.newline.markdown
228+
229+
Foo
230+
-
231+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
232+
|^ markup.heading.2.markdown meta.whitespace.newline.markdown
233+
234+
https://spec.commonmark.org/0.30/#example-84
235+
236+
Foo
237+
---
238+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
239+
|^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
240+
| ^ markup.heading.2.markdown meta.whitespace.newline.markdown
241+
242+
Foo
243+
-----
244+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
245+
|^^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
246+
| ^ markup.heading.2.markdown meta.whitespace.newline.markdown
247+
248+
Foo
249+
===
250+
| <- markup.heading.1.markdown - punctuation
251+
|^ markup.heading.1.markdown - punctuation
252+
| ^^^ markup.heading.1.markdown punctuation.definition.heading.setext.markdown
253+
| ^ markup.heading.1.markdown meta.whitespace.newline.markdown
254+
255+
https://spec.commonmark.org/0.30/#example-85
256+
257+
Foo
258+
---
259+
|^^^^^^^ markup.raw.block.markdown
260+
261+
Foo
262+
---
263+
| <- meta.separator.thematic-break.markdown - markup.heading
264+
|^^^ meta.separator.thematic-break.markdown - markup.heading
265+
266+
https://spec.commonmark.org/0.30/#example-86
267+
268+
Foo
269+
----
270+
|^^^^^^^^^^^^^ markup.heading.2.markdown
271+
|^^ - punctuation
272+
| ^^^^ punctuation.definition.heading.setext.markdown
273+
| ^^^^^^^ - punctuation
274+
| ^ meta.whitespace.newline.markdown
275+
276+
https://spec.commonmark.org/0.30/#example-87
277+
278+
Foo
279+
---
280+
| <- meta.paragraph.markdown - markup.heading
281+
|^^^^^^^ meta.paragraph.markdown - markup.heading
282+
283+
https://spec.commonmark.org/0.30/#example-88
284+
285+
Foo
286+
= =
287+
| <- meta.paragraph.markdown - markup.heading
288+
|^^^ meta.paragraph.markdown - markup.heading
289+
290+
Foo
291+
--- -
292+
| <- meta.separator.thematic-break.markdown - markup.heading
293+
|^^^^^ meta.separator.thematic-break.markdown - markup.heading
294+
295+
https://spec.commonmark.org/0.30/#example-89
296+
297+
Foo
298+
| ^^ markup.heading.2.markdown - meta.hard-line-break
299+
-----
300+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
301+
|^^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
302+
303+
https://spec.commonmark.org/0.30/#example-90
304+
305+
Foo\
306+
| ^ markup.heading.2.markdown - meta.hard-line-break
307+
----
308+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
309+
|^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
310+
311+
https://spec.commonmark.org/0.30/#example-91
312+
313+
`Foo
314+
----
315+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
316+
|^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
317+
318+
`Foo`
319+
----
320+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
321+
|^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
322+
323+
https://spec.commonmark.org/0.30/#example-92
324+
325+
> Foo
326+
---
327+
| <- meta.separator.thematic-break.markdown - markup.heading
328+
|^^^ meta.separator.thematic-break.markdown - markup.heading
329+
330+
https://spec.commonmark.org/0.30/#example-93
331+
332+
> foo
333+
bar
334+
===
335+
| <- markup.quote.markdown - markup.heading
336+
|^^^ markup.quote.markdown - markup.heading
337+
338+
https://spec.commonmark.org/0.30/#example-94
339+
- Foo
340+
---
341+
| <- meta.separator.thematic-break.markdown - markup.heading
342+
|^^^ meta.separator.thematic-break.markdown - markup.heading
343+
344+
https://spec.commonmark.org/0.30/#example-95
345+
346+
Foo
347+
Bar
348+
---
349+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
350+
|^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
351+
352+
https://spec.commonmark.org/0.30/#example-96
353+
354+
---
355+
Foo
356+
---
357+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
358+
|^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
359+
360+
---
361+
Foo
362+
---
363+
Bar
364+
---
365+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
366+
|^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
367+
Baz
368+
369+
---
370+
Foo
371+
---
372+
Bar
373+
---
374+
Baz
375+
| <- meta.paragraph.markdown
376+
|^^^ meta.paragraph.markdown
377+
378+
https://spec.commonmark.org/0.30/#example-97
379+
380+
====
381+
| <- meta.paragraph.markdown
382+
|^^^^ meta.paragraph.markdown
383+
384+
https://spec.commonmark.org/0.30/#example-98
385+
386+
---
387+
---
388+
| <- meta.separator.thematic-break.markdown - markup.heading
389+
|^^^ meta.separator.thematic-break.markdown - markup.heading
390+
391+
https://spec.commonmark.org/0.30/#example-102
392+
393+
\> foo
394+
------
395+
| <- markup.heading.2.markdown punctuation.definition.heading.setext.markdown
396+
|^^^^^ markup.heading.2.markdown punctuation.definition.heading.setext.markdown
154397

155398
```
156399
Fenced codeblocks are no no setext heading

0 commit comments

Comments
 (0)