Skip to content

Commit

Permalink
Remove Clike dependency from Bash
Browse files Browse the repository at this point in the history
The Bash language is actually very different from Clike. Only
'boolean', 'operator' and 'punctuation' are shared between them.
'operator' and 'punctuation' should be changed in the future,
because Bash actually has slightly different operators.

Since they share almost nothing, it makes sense to remove the
dependency. This patch copies 'boolean', 'operator' and
'punctuation' from Clike, but doesn't change them.

This patch also fixes a typo and adds the missing built-in keyword
`let`. `let` is not in the POSIX-standard, but Bash and some other
shells support it.
  • Loading branch information
zeitgeist87 committed Oct 2, 2015
1 parent 71bf8e9 commit 061bb01
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 18 deletions.
1 change: 0 additions & 1 deletion components.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,6 @@ var components = {
},
"bash": {
"title": "Bash",
"require": "clike",
"owner": "zeitgeist87"
},
"basic": {
Expand Down
30 changes: 14 additions & 16 deletions components/prism-bash.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
(function(Prism) {
var bashVars = {
variable: /\$(?:[a-zA-Z0-9_#\?\-\*!@]+|\{[^}]+\})/
};
var varsRegex = /\$(?:[a-z0-9_#\?\-\*!@]+|\{[^}]+\})/i,
bashVars = { variable: varsRegex };

Prism.languages.bash = Prism.languages.extend('clike', {
Prism.languages.bash = {
'shebang': {
pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,
alias: 'important'
},
'comment': {
pattern: /(^|[^"{\\])#.*/,
lookbehind: true
Expand All @@ -15,7 +18,7 @@
},
// Single quote strings cannot have variables inside
/'(?:\\?[\s\S])*?'/g,
// Support for Here-Dokuments https://en.wikipedia.org/wiki/Here_document
// Support for Here-Documents https://en.wikipedia.org/wiki/Here_document
{
pattern: /(<<\s*)(\w+?)\s*\r?\n(?:[\s\S])*?\r?\n\2/g,
lookbehind: true,
Expand All @@ -27,17 +30,12 @@
pattern: /([^\w\.])-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/,
lookbehind: true
},
'variable': varsRegex,
// Originally based on http://ss64.com/bash/
'function': /\b(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|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|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)\b/,
'keyword': /\b(if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)\b/
});

Prism.languages.insertBefore('bash', 'keyword', bashVars);
Prism.languages.insertBefore('bash', 'comment', {
// Shebang must be before comment
shebang: {
pattern: /^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,
alias: 'important'
}
});
'keyword': /\b(let|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)\b/,
'boolean': /\b(?:true|false)\b/,
'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,
'punctuation': /[{}[\];(),.:]/
};
})(Prism);
2 changes: 1 addition & 1 deletion components/prism-bash.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 061bb01

Please sign in to comment.