mirror of
				https://github.com/sharkdp/bat.git
				synced 2025-11-03 08:31:55 +00: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
 |