xmlLanguage top-level constant

Language const xmlLanguage

XML (text.xml).

Implementation

const xmlLanguage = Language(
  name: 'xml',
  scopeName: 'text.xml',
  displayName: 'XML',
  aliases: ['svg'],
  grammar: <String, Object?>{
    'displayName': 'XML',
    'name': 'xml',
    'patterns': [
      {
        'begin': '(<\\?)\\s*([-0-9A-Z_a-z]+)',
        'captures': {
          '1': {'name': 'punctuation.definition.tag.xml'},
          '2': {'name': 'entity.name.tag.xml'},
        },
        'end': '(\\?>)',
        'name': 'meta.tag.preprocessor.xml',
        'patterns': [
          {'match': ' ([-A-Za-z]+)', 'name': 'entity.other.attribute-name.xml'},
          {'include': '#doublequotedString'},
          {'include': '#singlequotedString'},
        ],
      },
      {
        'begin': '(<!)(DOCTYPE)\\s+([:A-Z_a-z][-.0-:A-Z_a-z]*)',
        'captures': {
          '1': {'name': 'punctuation.definition.tag.xml'},
          '2': {'name': 'keyword.other.doctype.xml'},
          '3': {'name': 'variable.language.documentroot.xml'},
        },
        'end': '\\s*(>)',
        'name': 'meta.tag.sgml.doctype.xml',
        'patterns': [
          {'include': '#internalSubset'},
        ],
      },
      {'include': '#comments'},
      {
        'begin':
            '(<)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(?=(\\s[^>]*)?></\\2>)',
        'beginCaptures': {
          '1': {'name': 'punctuation.definition.tag.xml'},
          '2': {'name': 'entity.name.tag.xml'},
          '3': {'name': 'entity.name.tag.namespace.xml'},
          '4': {'name': 'punctuation.separator.namespace.xml'},
          '5': {'name': 'entity.name.tag.localname.xml'},
        },
        'end': '(>)(</)((?:([-0-9A-Z_a-z]+)(:))?([-0-:A-Z_a-z]+))(>)',
        'endCaptures': {
          '1': {'name': 'punctuation.definition.tag.xml'},
          '2': {'name': 'punctuation.definition.tag.xml'},
          '3': {'name': 'entity.name.tag.xml'},
          '4': {'name': 'entity.name.tag.namespace.xml'},
          '5': {'name': 'punctuation.separator.namespace.xml'},
          '6': {'name': 'entity.name.tag.localname.xml'},
          '7': {'name': 'punctuation.definition.tag.xml'},
        },
        'name': 'meta.tag.no-content.xml',
        'patterns': [
          {'include': '#tagStuff'},
        ],
      },
      {
        'begin': '(</?)(?:([-.\\w]+)((:)))?([-.:\\w]+)',
        'captures': {
          '1': {'name': 'punctuation.definition.tag.xml'},
          '2': {'name': 'entity.name.tag.namespace.xml'},
          '3': {'name': 'entity.name.tag.xml'},
          '4': {'name': 'punctuation.separator.namespace.xml'},
          '5': {'name': 'entity.name.tag.localname.xml'},
        },
        'end': '(/?>)',
        'name': 'meta.tag.xml',
        'patterns': [
          {'include': '#tagStuff'},
        ],
      },
      {'include': '#entity'},
      {'include': '#bare-ampersand'},
      {
        'begin': '<%@',
        'beginCaptures': {
          '0': {'name': 'punctuation.section.embedded.begin.xml'},
        },
        'end': '%>',
        'endCaptures': {
          '0': {'name': 'punctuation.section.embedded.end.xml'},
        },
        'name': 'source.java-props.embedded.xml',
        'patterns': [
          {
            'match': 'page|include|taglib',
            'name': 'keyword.other.page-props.xml',
          },
        ],
      },
      {
        'begin': '<%[!=]?(?!--)',
        'beginCaptures': {
          '0': {'name': 'punctuation.section.embedded.begin.xml'},
        },
        'end': '(?!--)%>',
        'endCaptures': {
          '0': {'name': 'punctuation.section.embedded.end.xml'},
        },
        'name': 'source.java.embedded.xml',
        'patterns': [
          {'include': 'source.java'},
        ],
      },
      {
        'begin': '<!\\[CDATA\\[',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.xml'},
        },
        'end': ']]>',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.xml'},
        },
        'name': 'string.unquoted.cdata.xml',
      },
    ],
    'repository': {
      'EntityDecl': {
        'begin':
            '(<!)(ENTITY)\\s+(%\\s+)?([:A-Z_a-z][-.0-:A-Z_a-z]*)(\\s+(?:SYSTEM|PUBLIC)\\s+)?',
        'captures': {
          '1': {'name': 'punctuation.definition.tag.xml'},
          '2': {'name': 'keyword.other.entity.xml'},
          '3': {'name': 'punctuation.definition.entity.xml'},
          '4': {'name': 'variable.language.entity.xml'},
          '5': {'name': 'keyword.other.entitytype.xml'},
        },
        'end': '(>)',
        'patterns': [
          {'include': '#doublequotedString'},
          {'include': '#singlequotedString'},
        ],
      },
      'bare-ampersand': {
        'match': '&',
        'name': 'invalid.illegal.bad-ampersand.xml',
      },
      'comments': {
        'patterns': [
          {
            'begin': '<%--',
            'captures': {
              '0': {'name': 'punctuation.definition.comment.xml'},
              'end': '--%>',
              'name': 'comment.block.xml',
            },
          },
          {
            'begin': '<!--',
            'captures': {
              '0': {'name': 'punctuation.definition.comment.xml'},
            },
            'end': '-->',
            'name': 'comment.block.xml',
            'patterns': [
              {
                'begin': '--(?!>)',
                'captures': {
                  '0': {'name': 'invalid.illegal.bad-comments-or-CDATA.xml'},
                },
              },
            ],
          },
        ],
      },
      'doublequotedString': {
        'begin': '"',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.xml'},
        },
        'end': '"',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.xml'},
        },
        'name': 'string.quoted.double.xml',
        'patterns': [
          {'include': '#entity'},
          {'include': '#bare-ampersand'},
        ],
      },
      'entity': {
        'captures': {
          '1': {'name': 'punctuation.definition.constant.xml'},
          '3': {'name': 'punctuation.definition.constant.xml'},
        },
        'match': '(&)([:A-Z_a-z][-.0-:A-Z_a-z]*|#[0-9]+|#x\\h+)(;)',
        'name': 'constant.character.entity.xml',
      },
      'internalSubset': {
        'begin': '(\\[)',
        'captures': {
          '1': {'name': 'punctuation.definition.constant.xml'},
        },
        'end': '(])',
        'name': 'meta.internalsubset.xml',
        'patterns': [
          {'include': '#EntityDecl'},
          {'include': '#parameterEntity'},
          {'include': '#comments'},
        ],
      },
      'parameterEntity': {
        'captures': {
          '1': {'name': 'punctuation.definition.constant.xml'},
          '3': {'name': 'punctuation.definition.constant.xml'},
        },
        'match': '(%)([:A-Z_a-z][-.0-:A-Z_a-z]*)(;)',
        'name': 'constant.character.parameter-entity.xml',
      },
      'singlequotedString': {
        'begin': '\'',
        'beginCaptures': {
          '0': {'name': 'punctuation.definition.string.begin.xml'},
        },
        'end': '\'',
        'endCaptures': {
          '0': {'name': 'punctuation.definition.string.end.xml'},
        },
        'name': 'string.quoted.single.xml',
        'patterns': [
          {'include': '#entity'},
          {'include': '#bare-ampersand'},
        ],
      },
      'tagStuff': {
        'patterns': [
          {
            'captures': {
              '1': {'name': 'entity.other.attribute-name.namespace.xml'},
              '2': {'name': 'entity.other.attribute-name.xml'},
              '3': {'name': 'punctuation.separator.namespace.xml'},
              '4': {'name': 'entity.other.attribute-name.localname.xml'},
            },
            'match': '(?:^|\\s+)(?:([-.\\w]+)((:)))?([-.:\\w]+)\\s*=',
          },
          {'include': '#doublequotedString'},
          {'include': '#singlequotedString'},
        ],
      },
    },
    'scopeName': 'text.xml',
  },
);