bash function

Mode bash(
  1. Highlight hljs
)

Implementation

Mode bash(Highlight hljs) {
  final Mode _mode0 = Mode();
  final Mode _mode1 = Mode();
  final Mode _mode2 = Mode();
  final Mode _mode3 = Mode();
  final Mode _mode4 = Mode();
  final Mode _mode5 = Mode();
  _mode0.scope = r'variable';
  _mode0.variants = [_mode1, _mode2];
  _mode1.begin = r'\$[\w\d#@][\w\d_]*(?![\w\d])(?![$])';
  _mode2.begin = r'\$\{';
  _mode2.end = r'\}';
  _mode2.contains = [r'self', _mode3];
  _mode3.begin = r':-';
  _mode3.contains = [_mode0];
  _mode4.scope = r'string';
  _mode4.begin = r'"';
  _mode4.end = r'"';
  _mode4.contains = [
    _mode5,
    _mode0,
    Mode(
      scope: r'subst',
      begin: r'\$\(',
      end: r'\)',
      contains: [_mode5, _mode4],
    ),
  ];
  _mode5.begin = r'\\[\s\S]';
  _mode5.relevance = 0;
  return Mode(
    name: r'Bash',
    aliases: [r'sh', r'zsh'],
    keywords: {
      r'$pattern': r'\b[a-z][a-z0-9._-]+\b',
      r'keyword': [
        r'if',
        r'then',
        r'else',
        r'elif',
        r'fi',
        r'time',
        r'for',
        r'while',
        r'until',
        r'in',
        r'do',
        r'done',
        r'case',
        r'esac',
        r'coproc',
        r'function',
        r'select',
      ],
      r'literal': [r'true', r'false'],
      r'built_in': [
        r'break',
        r'cd',
        r'continue',
        r'eval',
        r'exec',
        r'exit',
        r'export',
        r'getopts',
        r'hash',
        r'pwd',
        r'readonly',
        r'return',
        r'shift',
        r'test',
        r'times',
        r'trap',
        r'umask',
        r'unset',
        r'alias',
        r'bind',
        r'builtin',
        r'caller',
        r'command',
        r'declare',
        r'echo',
        r'enable',
        r'help',
        r'let',
        r'local',
        r'logout',
        r'mapfile',
        r'printf',
        r'read',
        r'readarray',
        r'source',
        r'sudo',
        r'type',
        r'typeset',
        r'ulimit',
        r'unalias',
        r'set',
        r'shopt',
        r'autoload',
        r'bg',
        r'bindkey',
        r'bye',
        r'cap',
        r'chdir',
        r'clone',
        r'comparguments',
        r'compcall',
        r'compctl',
        r'compdescribe',
        r'compfiles',
        r'compgroups',
        r'compquote',
        r'comptags',
        r'comptry',
        r'compvalues',
        r'dirs',
        r'disable',
        r'disown',
        r'echotc',
        r'echoti',
        r'emulate',
        r'fc',
        r'fg',
        r'float',
        r'functions',
        r'getcap',
        r'getln',
        r'history',
        r'integer',
        r'jobs',
        r'kill',
        r'limit',
        r'log',
        r'noglob',
        r'popd',
        r'print',
        r'pushd',
        r'pushln',
        r'rehash',
        r'sched',
        r'setcap',
        r'setopt',
        r'stat',
        r'suspend',
        r'ttyctl',
        r'unfunction',
        r'unhash',
        r'unlimit',
        r'unsetopt',
        r'vared',
        r'wait',
        r'whence',
        r'where',
        r'which',
        r'zcompile',
        r'zformat',
        r'zftp',
        r'zle',
        r'zmodload',
        r'zparseopts',
        r'zprof',
        r'zpty',
        r'zregexparse',
        r'zsocket',
        r'zstyle',
        r'ztcp',
        r'chcon',
        r'chgrp',
        r'chown',
        r'chmod',
        r'cp',
        r'dd',
        r'df',
        r'dir',
        r'dircolors',
        r'ln',
        r'ls',
        r'mkdir',
        r'mkfifo',
        r'mknod',
        r'mktemp',
        r'mv',
        r'realpath',
        r'rm',
        r'rmdir',
        r'shred',
        r'sync',
        r'touch',
        r'truncate',
        r'vdir',
        r'b2sum',
        r'base32',
        r'base64',
        r'cat',
        r'cksum',
        r'comm',
        r'csplit',
        r'cut',
        r'expand',
        r'fmt',
        r'fold',
        r'head',
        r'join',
        r'md5sum',
        r'nl',
        r'numfmt',
        r'od',
        r'paste',
        r'ptx',
        r'pr',
        r'sha1sum',
        r'sha224sum',
        r'sha256sum',
        r'sha384sum',
        r'sha512sum',
        r'shuf',
        r'sort',
        r'split',
        r'sum',
        r'tac',
        r'tail',
        r'tr',
        r'tsort',
        r'unexpand',
        r'uniq',
        r'wc',
        r'arch',
        r'basename',
        r'chroot',
        r'date',
        r'dirname',
        r'du',
        r'echo',
        r'env',
        r'expr',
        r'factor',
        r'groups',
        r'hostid',
        r'id',
        r'link',
        r'logname',
        r'nice',
        r'nohup',
        r'nproc',
        r'pathchk',
        r'pinky',
        r'printenv',
        r'printf',
        r'pwd',
        r'readlink',
        r'runcon',
        r'seq',
        r'sleep',
        r'stat',
        r'stdbuf',
        r'stty',
        r'tee',
        r'test',
        r'timeout',
        r'tty',
        r'uname',
        r'unlink',
        r'uptime',
        r'users',
        r'who',
        r'whoami',
        r'yes',
      ],
    },
    contains: [
      Mode(
        scope: r'meta',
        begin: r'^#![ ]*\/.*\b(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)\b.*',
        end: r'$',
        relevance: 10,
        binary: r'(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)',
      ),
      Mode(scope: r'meta', begin: r'^#![ ]*\/', end: r'$', relevance: 0),
      Mode(
        scope: r'function',
        begin: r'\w[\w\d_]*\s*\(\s*\)\s*\{',
        returnBegin: true,
        contains: [Mode(scope: r'title', begin: r'\w[\w\d_]*', relevance: 0)],
        relevance: 0,
      ),
      Mode(
        begin: r'\$?\(\(',
        end: r'\)\)',
        contains: [
          Mode(begin: r'\d+#[0-9a-f]+', scope: r'number'),
          Mode(scope: r'number', begin: r'\b\d+(\.\d+)?', relevance: 0),
          _mode0,
        ],
      ),
      Mode(
        scope: {2: r'comment'},
        contains: [
          Mode(
            scope: r'doctag',
            begin: r'[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',
            end: r'(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):',
            excludeBegin: true,
            relevance: 0,
          ),
          Mode(
            begin:
                r"[ ]+((?:I|a|is|so|us|to|at|if|in|it|on|[A-Za-z]+['](d|ve|re|ll|t|s|n)|[A-Za-z]+[-][a-z]+|[A-Za-z][a-z]{2,})[.]?[:]?([.][ ]|[ ])){3}",
          ),
        ],
        match: [r'(^|\s)', r'#.*$'],
      ),
      Mode(
        begin: r'<<-?\s*(?=\w+)',
        starts: Mode(
          contains: [
            hljs.END_SAME_AS_BEGIN(
              Mode(begin: r'(\w+)', end: r'(\w+)', scope: r'string'),
            ),
          ],
        ),
      ),
      Mode(match: r'(\/[a-z._-]+)+'),
      _mode4,
      Mode(match: r'\\"'),
      Mode(scope: r'string', begin: r"'", end: r"'"),
      Mode(match: r"\\'"),
      _mode0,
    ],
  );
}