85 lines
4.0 KiB
JavaScript
85 lines
4.0 KiB
JavaScript
|
(function(Prism) {
|
||
|
var insideString = {
|
||
|
variable: [
|
||
|
// Arithmetic Environment
|
||
|
{
|
||
|
pattern: /\$?\(\([\s\S]+?\)\)/,
|
||
|
inside: {
|
||
|
// If there is a $ sign at the beginning highlight $(( and )) as variable
|
||
|
variable: [{
|
||
|
pattern: /(^\$\(\([\s\S]+)\)\)/,
|
||
|
lookbehind: true
|
||
|
},
|
||
|
/^\$\(\(/
|
||
|
],
|
||
|
number: /\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,
|
||
|
// Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
|
||
|
operator: /--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,
|
||
|
// If there is no $ sign at the beginning highlight (( and )) as punctuation
|
||
|
punctuation: /\(\(?|\)\)?|,|;/
|
||
|
}
|
||
|
},
|
||
|
// Command Substitution
|
||
|
{
|
||
|
pattern: /\$\([^)]+\)|`[^`]+`/,
|
||
|
greedy: true,
|
||
|
inside: {
|
||
|
variable: /^\$\(|^`|\)$|`$/
|
||
|
}
|
||
|
},
|
||
|
/\$(?:[\w#?*!@]+|\{[^}]+\})/i
|
||
|
]
|
||
|
};
|
||
|
|
||
|
Prism.languages.bash = {
|
||
|
'shebang': {
|
||
|
pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,
|
||
|
alias: 'important'
|
||
|
},
|
||
|
'comment': {
|
||
|
pattern: /(^|[^"{\\])#.*/,
|
||
|
lookbehind: true
|
||
|
},
|
||
|
'string': [
|
||
|
//Support for Here-Documents https://en.wikipedia.org/wiki/Here_document
|
||
|
{
|
||
|
pattern: /((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,
|
||
|
lookbehind: true,
|
||
|
greedy: true,
|
||
|
inside: insideString
|
||
|
},
|
||
|
{
|
||
|
pattern: /(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,
|
||
|
greedy: true,
|
||
|
inside: insideString
|
||
|
}
|
||
|
],
|
||
|
'variable': insideString.variable,
|
||
|
// Originally based on http://ss64.com/bash/
|
||
|
'function': {
|
||
|
pattern: /(^|[\s;|&])(?:alias|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|hash|head|help|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logout|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tail|tar|tee|test|time|timeout|times|top|touch|tr|traceroute|trap|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip|zypper)(?=$|[\s;|&])/,
|
||
|
lookbehind: true
|
||
|
},
|
||
|
'keyword': {
|
||
|
pattern: /(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,
|
||
|
lookbehind: true
|
||
|
},
|
||
|
'boolean': {
|
||
|
pattern: /(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,
|
||
|
lookbehind: true
|
||
|
},
|
||
|
'operator': /&&?|\|\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,
|
||
|
'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];]/
|
||
|
};
|
||
|
|
||
|
var inside = insideString.variable[1].inside;
|
||
|
inside.string = Prism.languages.bash.string;
|
||
|
inside['function'] = Prism.languages.bash['function'];
|
||
|
inside.keyword = Prism.languages.bash.keyword;
|
||
|
inside['boolean'] = Prism.languages.bash['boolean'];
|
||
|
inside.operator = Prism.languages.bash.operator;
|
||
|
inside.punctuation = Prism.languages.bash.punctuation;
|
||
|
|
||
|
Prism.languages.shell = Prism.languages.bash;
|
||
|
})(Prism);
|