Created
September 24, 2020 18:07
-
-
Save Keats/004faa34708b69c6172447923cea82e2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%YAML 1.2 | |
--- | |
# http://www.sublimetext.com/docs/3/syntax.html | |
name: AsciiDoc (Asciidoctor) | |
file_extensions: | |
- adoc | |
- ad | |
- asciidoc | |
scope: text.asciidoc | |
contexts: | |
main: | |
- include: lists | |
- include: blocks | |
- include: section_titles | |
- include: lines | |
- include: inline | |
- include: characters | |
attribute_entry: | |
- match: |- | |
(?x) | |
^(:) # opening delimiter | |
(!)? # bang symbol (unset attribute) | |
([A-Za-z0-9_][A-Za-z0-9_-]*) # attribute name | |
(!)? # bang symbol (unset attribute) | |
(:) # closing delimiter | |
(?:\s+|(?=$)) | |
comment: | | |
An attribute entry. | |
Examples: | |
:my-attribute: value | |
:sectnums!: | |
:!sectnums: | |
captures: | |
1: punctuation.definition.attributeentry.attrname.begin.asciidoc | |
2: punctuation.definition.attributeentry.unset.asciidoc | |
3: support.variable.attribute.asciidoc | |
4: punctuation.definition.attributeentry.unset.asciidoc | |
5: punctuation.definition.attributeentry.attrname.end.asciidoc | |
push: | |
- meta_scope: meta.attributeentry.asciidoc | |
- meta_content_scope: meta.attributeentry.value.asciidoc | |
- match: $\n? | |
pop: true | |
- include: characters | |
attribute_list_line: | |
- match: '^(\[)[^\[\]]*(\])\s*$\n?' | |
comment: "Attribute list as paragraph: single brackets. No need for special treatment of escape; follows literal block, section template as being a more general regex." | |
scope: support.variable.attributelist.asciidoc | |
captures: | |
1: punctuation.definition.attributelistline.begin.asciidoc | |
2: punctuation.definition.attributelistline.end.asciidoc | |
attribute_reference: | |
- match: "({)([A-Za-z0-9_][A-Za-z0-9_-]*)(})" | |
comment: | | |
Examples: | |
{my-attribute} | |
scope: variable.other | |
captures: | |
1: constant.character.attributes.reference.begin.asciidoc | |
2: support.variable.attribute.asciidoc | |
3: constant.character.attributes.reference.end.asciidoc | |
biblio_anchor: | |
- match: '(?<!\[)(\[\[\[).*?(\]\]\])(?!\])' | |
comment: | | |
Bibliography anchor | |
Examples: | |
[[[Lorem ipsum]]] | |
scope: storage.type.reference.biblioanchor.asciidoc | |
captures: | |
1: punctuation.definition.biblioanchor.begin.asciidoc | |
2: punctuation.definition.biblioanchor.end.asciidoc | |
block_admonition_label: | |
- match: ^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):(?=\s+) | |
comment: | | |
Label of an admonition block. | |
Examples: | |
NOTE: This is a admonition block. | |
WARNING: Be aware of them! | |
scope: support.constant.admonitionword.asciidoc | |
block_comment: | |
- match: '^(/{4,})\s*$\n?' | |
comment: | | |
Examples: | |
//// | |
A multi-line comment. | |
Notice it's a delimited block. | |
//// | |
captures: | |
0: punctuation.definition.comment.begin.asciidoc | |
push: | |
- meta_scope: comment.block.asciidoc | |
- meta_content_scope: meta.block.comment.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: punctuation.definition.comment.end.asciidoc | |
pop: true | |
- include: macro | |
block_example: | |
- match: '^(={4,})\s*$\n?' | |
comment: | | |
Examples: | |
==== | |
Lorem ipsum. | |
==== | |
Note: Might need to add more includes, but these are the ones that arise in | |
practice for me. | |
captures: | |
0: constant.delimiter.example.begin.asciidoc | |
push: | |
- meta_scope: string.unquoted.block.example.asciidoc | |
- meta_content_scope: meta.block.example.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.example.end.asciidoc | |
pop: true | |
- include: lists | |
- include: block_listing | |
- include: lines | |
- include: inline | |
- include: characters | |
block_id: | |
- match: '^(\[\[)([^\[].*)(\]\])\s*$\n?' | |
comment: | | |
A block id (i.e. anchor). | |
Examples: | |
[[myid]] | |
Lorem ipsum dolor. | |
scope: meta.tag.blockid.asciidoc | |
captures: | |
1: punctuation.definition.blockid.begin.asciidoc | |
2: markup.underline.blockid.id.asciidoc | |
3: punctuation.definition.blockid.end.asciidoc | |
block_listing: | |
- match: '^(\-{4,})\s*$\n?' | |
comment: | | |
Examples: | |
---- | |
Lorem ipsum. | |
---- | |
captures: | |
0: constant.delimiter.listing.begin.asciidoc | |
push: | |
- meta_scope: meta.embedded.block.listing.asciidoc | |
- meta_content_scope: source.block.listing.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.listing.end.asciidoc | |
pop: true | |
- include: inline_callout | |
block_literal: | |
- match: '^(\.{4,})\s*$\n?' | |
comment: | | |
Examples: | |
.... | |
Lorem ipsum. | |
.... | |
captures: | |
0: constant.delimiter.block.literal.begin.asciidoc | |
push: | |
- meta_scope: string.literal.block.delimited.asciidoc | |
- meta_content_scope: meta.block.literal.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.block.literal.end.asciidoc | |
pop: true | |
- include: inline_callout | |
block_open: | |
- match: ^\-\-\s*$\n? | |
comment: | | |
Examples: | |
-- | |
Lorem ipsum | |
-- | |
Note: Might need to check on these includes. | |
captures: | |
0: constant.delimiter.block.open.begin.asciidoc | |
push: | |
- meta_scope: meta.block.open.asciidoc | |
- meta_content_scope: meta.block.open.content.asciidoc | |
- match: ^\-\-\s*$\n? | |
captures: | |
0: constant.delimiter.block.open.end.asciidoc | |
pop: true | |
- include: lists | |
- include: block_comment | |
- include: block_listing | |
- include: block_pass | |
- include: lines | |
- include: inline | |
- include: characters | |
block_page_break: | |
- match: '^<{3,}$\n?' | |
comment: | | |
A page break. | |
Examples: | |
<<< | |
<<<<< | |
scope: meta.separator.pagebreak.asciidoc | |
block_pass: | |
- match: '^(\+{4,})\s*$\n?' | |
captures: | |
0: constant.delimiter.block.passthrough.begin.asciidoc | |
push: | |
- meta_scope: meta.embedded.block.passthrough.asciidoc | |
- meta_content_scope: text.xml.block.passthrough.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.block.passthrough.end.asciidoc | |
pop: true | |
- include: scope:text.xml | |
block_quote: | |
- match: '^(_{4,})\s*$\n?' | |
comment: | | |
Examples: | |
____ | |
Lorem ipsum | |
____ | |
Note: Might need to add more includes, but these are the ones that arise for me in practice. | |
captures: | |
0: constant.delimiter.block.quote.begin.asciidoc | |
push: | |
- meta_scope: markup.quote.block.asciidoc | |
- meta_content_scope: meta.block.quote.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.block.quote.end.asciidoc | |
pop: true | |
- include: lines | |
- include: inline | |
- include: characters | |
block_sidebar: | |
- match: '^(\*{4,})\s*$\n?' | |
comment: | | |
Examples: | |
**** | |
Lorem ipsum | |
**** | |
Note: Might need to add more includes, but these are the ones that arise | |
for me in practice. | |
captures: | |
0: constant.delimiter.block.sidebar.begin.asciidoc | |
push: | |
- meta_scope: string.quoted.block.sidebar.asciidoc | |
- meta_content_scope: meta.block.sidebar.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.block.sidebar.end.asciidoc | |
pop: true | |
- include: lists | |
- include: block_comment | |
- include: block_listing | |
- include: lines | |
- include: inline | |
- include: characters | |
block_source_fenced: | |
- match: ^(```)(\w+)?\s*$\n? | |
comment: | | |
Fenced code block (ala Markdown) | |
Examples: | |
```rb | |
puts 'Hello world!' | |
``` | |
captures: | |
0: constant.delimiter.listing.begin.asciidoc | |
push: | |
- meta_scope: meta.embedded.block.listing.asciidoc | |
- meta_content_scope: source.block.listing.content.asciidoc | |
- match: ^\1\s*$\n? | |
captures: | |
0: constant.delimiter.listing.end.asciidoc | |
pop: true | |
- include: inline_callout | |
block_thematic_break: | |
- match: '^''{3,}$\n?' | |
comment: | | |
A thematic break (aka horizontal rule). | |
Examples: | |
''' | |
'''''' | |
scope: meta.separator.ruler.asciidoc | |
block_title: | |
- match: ^(\.)\w.*$\n? | |
comment: | | |
Title of a block. | |
Examples: | |
.My title | |
Lorem ipsum dolor. | |
scope: markup.heading.block.asciidoc | |
captures: | |
1: punctuation.definition.blockheading.asciidoc | |
blocks: | |
- include: block_literal | |
- include: block_comment | |
- include: block_listing | |
- include: block_source_fenced | |
- include: block_sidebar | |
- include: block_pass | |
- include: block_quote | |
- include: block_example | |
- include: block_open | |
characters: | |
- include: attribute_reference | |
- include: entity_number | |
- include: entity_name | |
- include: escape | |
- include: replacement | |
- include: macro_pass | |
- include: macro | |
- include: xref | |
- include: biblio_anchor | |
- include: indexterm_triple | |
- include: indexterm_double | |
colist_item_marker: | |
- match: ^(\s*((<)\d+?(>)))\s+(?=\S) | |
comment: | | |
Marker of a callout list item. | |
Examples: | |
<1> a callout | |
<42> another callout | |
scope: markup.list.numbered.callout.asciidoc | |
captures: | |
1: string.unquoted.list.callout.asciidoc | |
2: constant.numeric.callout.asciidoc | |
3: punctuation.definition.calloutlistnumber.begin.asciidoc | |
4: punctuation.definition.calloutlistnumber.end.asciidoc | |
dlist_item_label: | |
- match: '^\s*(?=.*:{2,4}(?:\s|$))' | |
comment: | | |
Label of a definition (labeled) list item. | |
Examples: | |
Label level 1:: lorem ipsum | |
Label level 2::: dolor sit amet | |
Label level 3:::: consectetur | |
Label level 1:: | |
lorem ipsum | |
Another label :: lorem ipsum | |
Last::label:: dolor sit amet | |
Note: This rule is not strictly correct, because Asciidoctor allows | |
double colon followed by a space inside a label, i.e. it matches the | |
*last* double colon, not the first. I don't know how to do that | |
*effectively. | |
push: | |
- meta_scope: markup.list.labeled.asciidoc | |
- meta_content_scope: meta.list.label.asciidoc | |
- match: '(:{2,4})(?:\s|$\n?)' | |
captures: | |
1: constant.labeledlist.separator.asciidoc | |
pop: true | |
- include: inline | |
- include: characters | |
emphasis: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might be preceded by an attributes list | |
(?<=^|\W)(?<!\\|}) # must be preceded by nonword character, and not by escape or } (attribute) | |
(_)(?=\S) # delimiter underscore that must be followed by a nonspace character | |
comment: | | |
Emphasized (italic) text (constrained variant). | |
Examples: | |
_Lorem ipsum_ dolor | |
[red]_Lorem ipsum_ dolor | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.italic.single.begin.asciidoc | |
push: | |
- meta_scope: markup.italic.single.asciidoc | |
- meta_content_scope: meta.italicinner.single.asciidoc | |
- match: |- | |
(?x) | |
(?<=\S)(_) # delimiter underscore that must be preceded by a nonspace character | |
(?!\w) # ...and followed by a nonword character | |
captures: | |
1: punctuation.definition.italic.single.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: strong | |
- include: monospaced | |
- include: mark | |
- include: superscript | |
- include: subscript | |
- include: characters | |
emphasis_double: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with attribute list | |
(?<!\\) # must not be preceded by escape | |
(__) | |
comment: | | |
Emphasized (italic) text (unconstrained variant). | |
Examples: | |
Lo__re__m __ipsum dolor__. | |
Lo[red]__re__m | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.italic.double.begin.asciidoc | |
push: | |
- meta_scope: markup.italic.double.asciidoc | |
- meta_content_scope: meta.italicinner.double.asciidoc | |
- match: __ | |
captures: | |
0: punctuation.definition.italic.double.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: strong | |
- include: monospaced | |
- include: mark | |
- include: superscript | |
- include: subscript | |
- include: characters | |
entity_name: | |
- match: '(?<!\\)&([a-zA-Z][a-zA-Z0-9]*);' | |
comment: | | |
Character entity reference | |
Examples: | |
| |
² | |
scope: constant.character.entity.xml.asciidoc | |
entity_number: | |
- match: '(?<!\\)&#(x?[0-9a-fA-f]{2,4});' | |
comment: | | |
Numeric character reference | |
Examples: | |
➊ | |
¶ | |
scope: constant.character.entity.asciidoc | |
escape: | |
- match: '\\(?=[-`*_#+.!(){}\[\]\\>:])' | |
comment: | | |
List of special characters that may be escaped. | |
Note: I do not really know if this is a good list, adopted wholesale from | |
original bundle. | |
scope: constant.character.escape.asciidoc | |
indexterm_double: | |
- match: '(?<!\()(\({2})([^\(\s].*?)(\){2})(?!\))' | |
comment: | | |
Double parenthesis indexterm. | |
Examples: | |
((Arthur)) | |
scope: variable.other.indexterm.double.asciidoc | |
captures: | |
1: constant.character.indexterm.double.begin.asciidoc | |
3: constant.character.indexterm.double.end.asciidoc | |
indexterm_triple: | |
- match: '(?<!\()(\({3})([^\(].*?)(\){3})(?!\))' | |
comment: | | |
Triple parenthesis indexterm. | |
Examples: | |
(((Sword, Broadsword, Excalibur))) | |
scope: variable.other.indexterm.triple.asciidoc | |
captures: | |
1: constant.character.indexterm.triple.begin.asciidoc | |
3: constant.character.indexterm.triple.end.asciidoc | |
inline: | |
- include: passthrough | |
- include: strong_double | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: strong | |
- include: emphasis | |
- include: monospaced | |
- include: mark | |
- include: superscript | |
- include: subscript | |
inline_break: | |
- match: (?<=\s)\+$\n? | |
comment: | | |
Line hard break with a plus sign (+). | |
Examples: | |
Rubies are red, + | |
Topazes are blue. | |
scope: constant.linebreak.asciidoc | |
inline_callout: | |
- match: (?<!\\)(<)\d+(>) | |
comment: | | |
Callout label | |
Examples: | |
<1> | |
<42> | |
scope: constant.other.callout.asciidoc | |
captures: | |
1: punctuation.definition.callout.begin.asciidoc | |
2: punctuation.definition.callout.end.asciidoc | |
inline_comment: | |
- match: '^(//)([^/\n].*|)$\n?' | |
comment: | | |
Inline comment. | |
Examples: | |
// This is just a comment! | |
scope: comment.line.double-slash.asciidoc | |
captures: | |
1: punctuation.definition.comment.line.asciidoc | |
2: meta.line.comment.content.asciidoc | |
lines: | |
- include: inline_comment | |
- include: list_continuation | |
- include: inline_break | |
- include: block_page_break | |
- include: block_thematic_break | |
- include: block_title | |
- include: block_id | |
- include: section_template | |
- include: attribute_list_line | |
- include: attribute_entry | |
list_continuation: | |
- match: ^\+\s*$\n? | |
scope: constant.listcontinuation.asciidoc | |
lists: | |
- include: block_admonition_label | |
- include: ulist_item_marker | |
- include: olist_item_marker | |
- include: dlist_item_label | |
- include: colist_item_marker | |
macro: | |
- match: |- | |
(?x) | |
(?: | |
((?:https?|mailto|ftp|file) # specify separately so we can mark them as links that TextMate opens | |
?:{1} # inline only | |
\S*) # (others such as image are partial URLs and/or TextMate cannot handle them) | |
| | |
(([a-zA-Z0-9][a-zA-Z0-9_]*) | |
(:{1,2}) | |
(\S*)) | |
) | |
(?:(\[)([^\]]*)(\])) | |
comment: | | |
Note: There are other macro notations, but I match only those that end in | |
square brackets. | |
scope: meta.macro.asciidoc | |
captures: | |
1: markup.underline.link.macro.asciidoc | |
3: keyword.control.name.macro.asciidoc | |
4: constant.character.separator.macro.asciidoc | |
5: markup.underline.target.macro.asciidoc | |
6: constant.character.attributes.macro.begin.asciidoc | |
7: variable.parameter.attributes.macro.asciidoc | |
8: constant.character.attributes.macro.end.asciidoc | |
macro_pass: | |
- match: |- | |
(?x) | |
(pass) | |
(:{1,2}) | |
(\S*) | |
(\[)(?=[^\]]*\]) | |
comment: | | |
Passthrough macro | |
Examples: | |
pass:[Lorem ipsum] | |
pass::[Lorem ipsum] | |
captures: | |
1: keyword.control.name.macro.pass.asciidoc | |
2: constant.character.separator.macro.asciidoc | |
3: markup.underline.target.macro.asciidoc | |
4: constant.character.attributes.macro.begin.asciidoc | |
push: | |
- meta_scope: meta.macro.pass.asciidoc | |
- meta_content_scope: variable.parameter.attributes.macro.pass.asciidoc | |
- match: '\]' | |
captures: | |
0: constant.character.attributes.macro.end.asciidoc | |
pop: true | |
- include: scope:text.xml | |
mark: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with attribute list (darned well better or why are we here) | |
(?<=^|\W)(?<!\\|}) # must be preceded by nonword character, and not by escape or } (attribute) | |
(\#)(?=\S) # delimiter hash that must be followed by a nonspace character | |
comment: | | |
Marked text (constrained variant). | |
Examples: | |
#Lorem ipsum# dolor | |
[red]#Lorem ipsum# dolor | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.string.unquoted.single.begin.asciidoc | |
push: | |
- meta_scope: string.other.unquoted.single.asciidoc | |
- meta_content_scope: string.unquoted.unquotedinner.single.asciidoc | |
- match: |- | |
(?x) | |
(?<=\S)(\#) # delimiter hash that must be preceded by a nonspace character | |
(?!\w) # ...and followed by a nonword character | |
captures: | |
1: punctuation.definition.string.unquoted.single.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: strong | |
- include: emphasis | |
- include: monospaced | |
- include: superscript | |
- include: subscript | |
- include: characters | |
mark_double: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with an attribute list (indeed, that is its purpose) | |
(?<!\\) # must not be preceded by escape | |
(\#\#) | |
comment: | | |
Marked text (unconstrained variant). | |
Examples: | |
Lo##re##m ##ipsum dolor##. | |
Lo[red]##re##m | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.string.unquoted.double.begin.asciidoc | |
push: | |
- meta_scope: string.other.unquoted.double.asciidoc | |
- meta_content_scope: string.unquoted.unquotedinner.double.asciidoc | |
- match: '\#\#' | |
captures: | |
0: punctuation.definition.string.unquoted.double.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: strong | |
- include: emphasis | |
- include: monospaced | |
- include: superscript | |
- include: subscript | |
- include: characters | |
monospaced: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with attributes list | |
(?<=^|\W)(?<!\\|}) # must be preceded by nonword character, and not by escape or } (attribute) | |
(`)(?=\S) # delimiter backtick that must be followed by a nonspace character | |
comment: | | |
Monospaced text (constrained variant). | |
Examples: | |
`Lorem ipsum` dolor | |
[red]`Lorem ipsum` dolor | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.literal.single.begin.asciidoc | |
push: | |
- meta_scope: string.other.literal.single.asciidoc | |
- meta_content_scope: meta.literalinner.single.asciidoc | |
- match: |- | |
(?x) | |
(?<=\S)(`) # delimiter backtick that must be preceded by a nonspace character | |
(?!\w) # ...and followed by a nonword character | |
captures: | |
1: punctuation.definition.literal.single.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: emphasis_double | |
- include: mark_double | |
- include: strong | |
- include: emphasis | |
- include: mark | |
- include: superscript | |
- include: subscript | |
- include: characters | |
monospaced_double: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with attribute list | |
(?<!\\) # must not be preceded by escape | |
(``) | |
comment: | | |
Monospaced text (unconstrained variant). | |
Examples: | |
Lo``re``m ``ipsum dolor``. | |
Lo[red]``re``m | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.literal.double.begin.asciidoc | |
push: | |
- meta_scope: string.other.literal.double.asciidoc | |
- meta_content_scope: meta.literalinner.double.asciidoc | |
- match: "``" | |
captures: | |
0: punctuation.definition.literal.double.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: emphasis_double | |
- include: mark_double | |
- include: strong | |
- include: emphasis | |
- include: mark | |
- include: superscript | |
- include: subscript | |
- include: characters | |
olist_item_marker: | |
- match: '^(\s*(\.{1,5}))\s+(?=\S)' | |
comment: | | |
Marker of an ordered (numbered) list item. | |
Examples: | |
. level 1 | |
.. level 2 | |
... level 3 | |
.... level 4 | |
..... level 5 | |
Note: The space distinguishes it from a block title. | |
scope: markup.list.numbered.dotted.asciidoc | |
captures: | |
1: string.unquoted.list.dotted.asciidoc | |
2: constant.numeric.list.dot.asciidoc | |
passthrough: | |
- match: (\+\+\+|\$\$) | |
comment: | | |
Inline triple-plus and double dolar passthrough. | |
Examples: | |
Lo+++re++++m +++ipsum dolor+++. | |
Lo$$re$$m $$ipsum dolor$$. | |
Note: Must be dead first among the inlines, so as to take priority. | |
captures: | |
1: constant.character.passthru.begin.asciidoc | |
push: | |
- meta_scope: meta.passthru.inline.asciidoc | |
- meta_content_scope: variable.parameter.passthruinner.asciidoc | |
- match: \1 | |
captures: | |
0: constant.character.passthru.end.asciidoc | |
pop: true | |
replacement: | |
- match: |- | |
(?x) | |
(?<!\\) # must not be escaped | |
( | |
\(C\) | |
| \(TM\) | |
| \(R\) | |
| ((?<!\-)\-\-(?!\-)) # exactly two, and even this may not rule out all that I want to | |
| ((?<!\.)\.\.\.(?!\.)) # exactly three | |
| \-> | |
| <\- | |
| => | |
| <= | |
) | |
scope: constant.character.replacement.asciidoc | |
section_template: | |
- match: |- | |
(?x)^ | |
(\[) # in square brackets | |
(template\s*=\s*)?(")? # might start with template-equals and might have template name in quotes | |
( | |
sect\d|abstract|preface|colophon|dedication|glossary|bibliography|synopsis|appendix|index # fixed list of known templates | |
) | |
(".*(\])|(\])) # either close the quote (and perhaps go on) and close the bracket, or close the bracket immediately | |
\s*$\n? | |
comment: fixed list of known template names | |
scope: variable.parameter.sectiontemplate.asciidoc | |
captures: | |
1: punctuation.definition.sectiontemplate.begin.asciidoc | |
4: meta.tag.sectiontemplate.asciidoc | |
6: punctuation.definition.sectiontemplate.end.asciidoc | |
7: punctuation.definition.sectiontemplate.end.asciidoc | |
section_titles: | |
- include: title_level_5 | |
- include: title_level_4 | |
- include: title_level_3 | |
- include: title_level_2 | |
- include: title_level_1 | |
- include: title_level_0 | |
strong: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with an attributes list | |
(?<=^|\W)(?<!\\|}) # must be preceded by nonword character, and not by escape or } (attribute) | |
(\*)(?=\S) # delimiter star that must be followed by a nonspace character | |
comment: | | |
Strong (bold) text (constrained variant). | |
Examples: | |
*Lorem ipsum* dolor | |
[red]*Lorem ipsum* dolor | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.bold.single.begin.asciidoc | |
push: | |
- meta_scope: markup.bold.single.asciidoc | |
- meta_content_scope: meta.boldinner.single.asciidoc | |
- match: |- | |
(?x) | |
(?<=\S)(\*) # delimiter star that must be preceded by a nonspace character | |
(?!\w) # ...and followed by a nonword character | |
captures: | |
1: punctuation.definition.bold.single.end.asciidoc | |
pop: true | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: emphasis | |
- include: monospaced | |
- include: mark | |
- include: superscript | |
- include: subscript | |
- include: characters | |
strong_double: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with an attribute list | |
(?<!\\) # must not be preceded by escape | |
(\*\*) | |
comment: | | |
Strong (bold) text (unconstrained variant). | |
Examples: | |
Lo**re**m **ipsum dolor**. | |
Lo[red]**re**m | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.bold.double.begin.asciidoc | |
push: | |
- meta_scope: markup.bold.double.asciidoc | |
- meta_content_scope: meta.boldinner.double.asciidoc | |
- match: \*\* | |
captures: | |
0: punctuation.definition.bold.double.end.asciidoc | |
pop: true | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: emphasis | |
- include: monospaced | |
- include: mark | |
- include: superscript | |
- include: subscript | |
- include: characters | |
subscript: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with attribute list | |
(?<!\\) # must not be preceded by escape | |
(~) | |
comment: | | |
Subscript text. | |
Examples: | |
E=mc^2^ | |
E=mc[red]^2^ | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.string.subscript.begin.asciidoc | |
push: | |
- meta_scope: string.other.subscript.asciidoc | |
- meta_content_scope: meta.subscriptinner.asciidoc | |
- match: ~ | |
captures: | |
0: punctuation.definition.string.subscript.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: strong | |
- include: emphasis | |
- include: monospaced | |
- include: mark | |
- include: superscript | |
- include: characters | |
superscript: | |
- match: |- | |
(?x) | |
(\[[^\]]*?\])? # might start with attribute list | |
(?<!\\) # no preceding escape | |
(\^) | |
comment: | | |
Superscript text. | |
Examples: | |
H~2~O | |
H[red]~2~O | |
captures: | |
1: support.variable.attributelist.asciidoc | |
2: punctuation.definition.string.superscript.begin.asciidoc | |
push: | |
- meta_scope: string.other.superscript.asciidoc | |
- meta_content_scope: meta.superscriptinner.asciidoc | |
- match: ^ | |
captures: | |
0: punctuation.definition.string.superscript.end.asciidoc | |
pop: true | |
- include: strong_double | |
- include: emphasis_double | |
- include: monospaced_double | |
- include: mark_double | |
- include: strong | |
- include: emphasis | |
- include: monospaced | |
- include: mark | |
- include: subscript | |
- include: characters | |
title_level_0: | |
- match: ^(=) (\w.*)$\n? | |
scope: markup.heading.level.0.asciidoc | |
captures: | |
1: punctuation.definition.heading.asciidoc | |
2: entity.name.section.asciidoc | |
title_level_1: | |
- match: ^(==) (\w.*)$\n? | |
scope: markup.heading.level.1.asciidoc | |
captures: | |
1: punctuation.definition.heading.asciidoc | |
2: entity.name.section.asciidoc | |
title_level_2: | |
- match: ^(===) (\w.*)$\n? | |
scope: markup.heading.level.2.asciidoc | |
captures: | |
1: punctuation.definition.heading.asciidoc | |
2: entity.name.section.asciidoc | |
title_level_3: | |
- match: ^(====) (\w.*)$\n? | |
scope: markup.heading.level.3.asciidoc | |
captures: | |
1: punctuation.definition.heading.asciidoc | |
2: entity.name.section.asciidoc | |
title_level_4: | |
- match: ^(=====) (\w.*)$\n? | |
scope: markup.heading.level.4.asciidoc | |
captures: | |
1: punctuation.definition.heading.asciidoc | |
2: entity.name.section.asciidoc | |
title_level_5: | |
- match: ^(======) (\w.*)$\n? | |
scope: markup.heading.level.5.asciidoc | |
captures: | |
1: punctuation.definition.heading.asciidoc | |
2: entity.name.section.asciidoc | |
ulist_item_marker: | |
- match: '^(\s*(\-|\*{1,5}))\s+(?=\S)' | |
comment: | | |
Marker of an unordered (bullet) list item. | |
Examples: | |
* level 1 | |
** level 2 | |
*** level 3 | |
**** level 4 | |
***** level 5 | |
- level 1 | |
-- level 2 | |
--- level 3 | |
---- level 4 | |
----- level 5 | |
scope: markup.list.bulleted.asciidoc | |
captures: | |
1: string.unquoted.list.bullet.asciidoc | |
2: constant.numeric.list.bullet.asciidoc | |
xref: | |
- match: '(?<!<)(<<)([^,]*?)((,\s*)(.*?))?(>>)(?!<)' | |
comment: | | |
Internal cross-reference | |
Examples: | |
<<lorem>> | |
<<lorem, see here>> | |
scope: meta.xref.asciidoc | |
captures: | |
1: constant.character.xref.begin.asciidoc | |
2: markup.underline.term.xref.asciidoc | |
5: variable.parameter.xref.asciidoc | |
6: constant.character.xref.end.asciidoc |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment