mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-10-22 11:43:58 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			998 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			YAML
		
	
	
	
		
			Vendored
		
	
	
	
			
		
		
	
	
			998 lines
		
	
	
		
			31 KiB
		
	
	
	
		
			YAML
		
	
	
	
		
			Vendored
		
	
	
	
| %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: '~' # this tilda a problem if unquoted
 | |
|           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
 |