iniLanguage top-level constant

Grammar const iniLanguage

INI files and Java .properties files.

Implementation

const iniLanguage = Grammar(
  name: 'ini',
  aliases: ['properties', 'conf', 'cfg', 'editorconfig', 'gitconfig'],
  fileExtensions: ['ini', 'cfg', 'conf', 'properties', 'editorconfig'],
  fileNames: ['.editorconfig', '.gitconfig', 'gradle.properties'],
  signatures: [
    r'^\[[\w .:"-]+\]\s*$',
    r'^[\w.-]+\s*=\s*\S',
    r'^root\s*=\s*true\s*$',
  ],
  rules: [
    TokenRule(r'^[ \t]*[;#!].*$', scope: Scopes.comment),
    TokenRule(r'^[ \t]*\[[^\]\n]*\]', scope: Scopes.heading),
    // A key before `=` or `:`.
    TokenRule(
      r'^[ \t]*[^\s=:;#!\[][^=:\n]*?(?=[ \t]*[=:])',
      scope: Scopes.property,
    ),
    // The value after `=` or `:`. A trailing `\` continues it (properties).
    RegionRule(
      begin: '[=:]',
      end: r'$',
      beginScope: Scopes.operator,
      rules: [
        TokenRule(r'\\u[0-9a-fA-F]{4}|\\[\s\S]', scope: Scopes.stringEscape),
        QuotedString('"'),
        TokenRule(r'\$\{[^}\n]*\}|%\([\w.-]+\)[sdrf]', scope: Scopes.variable),
        // A value that is entirely a literal or a number.
        TokenRule(
          r'(?<=[=:][ \t]{0,8})(?:true|false|yes|no|on|off|null|none|'
          r'True|False|Yes|No|On|Off|TRUE|FALSE|YES|NO|ON|OFF)(?=[ \t]*$)',
          scope: Scopes.literal,
        ),
        TokenRule(
          r'(?<=[=:][ \t]{0,8})[+-]?(?:0[xX][0-9a-fA-F]+|\d+(?:\.\d+)?)'
          r'(?=[ \t]*$)',
          scope: Scopes.number,
        ),
      ],
    ),
  ],
);