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,
],
);
}