1<?php 2/************************************************************************************* 3 * bash.php 4 * -------- 5 * Author: Andreas Gohr (andi@splitbrain.org) 6 * Copyright: (c) 2004 Andreas Gohr, Nigel McNie (http://qbnz.com/highlighter) 7 * Release Version: 1.0.8.3 8 * Date Started: 2004/08/20 9 * 10 * BASH language file for GeSHi. 11 * 12 * CHANGES 13 * ------- 14 * 2008/06/21 (1.0.8) 15 * - Added loads of keywords and commands of GNU/Linux 16 * - Added support for parameters starting with a dash 17 * 2008/05/23 (1.0.7.22) 18 * - Added description of extra language features (SF#1970248) 19 * 2007/09/05 (1.0.7.21) 20 * - PARSER_CONTROL patch using SF #1788408 (BenBE) 21 * 2007/06/11 (1.0.7.20) 22 * - Added a lot of keywords (BenBE / Jan G) 23 * 2004/11/27 (1.0.2) 24 * - Added support for multiple object splitters 25 * 2004/10/27 (1.0.1) 26 * - Added support for URLs 27 * 2004/08/20 (1.0.0) 28 * - First Release 29 * 30 * TODO (updated 2004/11/27) 31 * ------------------------- 32 * * Get symbols working 33 * * Highlight builtin vars 34 * 35 ************************************************************************************* 36 * 37 * This file is part of GeSHi. 38 * 39 * GeSHi is free software; you can redistribute it and/or modify 40 * it under the terms of the GNU General Public License as published by 41 * the Free Software Foundation; either version 2 of the License, or 42 * (at your option) any later version. 43 * 44 * GeSHi is distributed in the hope that it will be useful, 45 * but WITHOUT ANY WARRANTY; without even the implied warranty of 46 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 47 * GNU General Public License for more details. 48 * 49 * You should have received a copy of the GNU General Public License 50 * along with GeSHi; if not, write to the Free Software 51 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 52 * 53 ************************************************************************************/ 54 55$language_data = array ( 56 'LANG_NAME' => 'Bash', 57 // Bash DOES have single line comments with # markers. But bash also has 58 // the $# variable, so comments need special handling (see sf.net 59 // 1564839) 60 'COMMENT_SINGLE' => array('#'), 61 'COMMENT_MULTI' => array(), 62 'COMMENT_REGEXP' => array( 63 //Variables 64 1 => "/\\$\\{[^\\n\\}]*?\\}/i", 65 //BASH-style Heredoc 66 2 => '/<<-?\s*?(\'?)([a-zA-Z0-9]+)\1\\n.*\\n\\2(?![a-zA-Z0-9])/siU', 67 //Escaped String Starters 68 3 => "/\\\\['\"]/siU" 69 ), 70 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE, 71 'QUOTEMARKS' => array('"'), 72 'HARDQUOTE' => array("'", "'"), 73 'HARDESCAPE' => array("\'"), 74 'ESCAPE_CHAR' => '', 75 'ESCAPE_REGEXP' => array( 76 //Simple Single Char Escapes 77 1 => "#\\\\[nfrtv\\$\\\"\n]#i", 78 // $var 79 2 => "#\\$[a-z_][a-z0-9_]*#i", 80 // ${...} 81 3 => "/\\$\\{[^\\n\\}]*?\\}/i", 82 // $(...) 83 4 => "/\\$\\([^\\n\\)]*?\\)/i", 84 // `...` 85 5 => "/`[^`]*`/" 86 ), 87 'KEYWORDS' => array( 88 1 => array( 89 'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function', 90 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time' 91 ), 92 2 => array( 93 'aclocal', 'aconnect', 'aplay', 'apm', 'apmsleep', 'apropos', 94 'apt-cache', 'apt-get', 'apt-key', 'aptitude', 95 'ar', 'arch', 'arecord', 'as', 'as86', 'ash', 'autoconf', 96 'autoheader', 'automake', 'awk', 97 98 'basename', 'bash', 'bc', 'bison', 'bunzip2', 'bzcat', 99 'bzcmp', 'bzdiff', 'bzegrep', 'bzfgrep', 'bzgrep', 100 'bzip2', 'bzip2recover', 'bzless', 'bzmore', 101 102 'c++', 'cal', 'cat', 'chattr', 'cc', 'cdda2wav', 'cdparanoia', 103 'cdrdao', 'cd-read', 'cdrecord', 'chfn', 'chgrp', 'chmod', 104 'chown', 'chroot', 'chsh', 'chvt', 'clear', 'cmp', 'comm', 'co', 105 'col', 'cp', 'cpio', 'cpp', 'csh', 'cut', 'cvs', 'cvs-pserver', 106 107 'dash', 'date', 'dd', 'dc', 'dcop', 'deallocvt', 'df', 'dialog', 108 'diff', 'diff3', 'dir', 'dircolors', 'directomatic', 'dirname', 109 'dmesg', 'dnsdomainname', 'domainname', 'dpkg', 'dselect', 'du', 110 'dumpkeys', 111 112 'ed', 'egrep', 'env', 'expr', 113 114 'false', 'fbset', 'ffmpeg', 'fgconsole','fgrep', 'file', 'find', 115 'flex', 'flex++', 'fmt', 'free', 'ftp', 'funzip', 'fuser', 116 117 'g++', 'gawk', 'gc','gcc', 'gdb', 'getent', 'getkeycodes', 118 'getopt', 'gettext', 'gettextize', 'gimp', 'gimp-remote', 119 'gimptool', 'gmake', 'gocr', 'grep', 'groups', 'gs', 'gunzip', 120 'gzexe', 'gzip', 121 122 'head', 'hexdump', 'hostname', 123 124 'id', 'ifconfig', 'igawk', 'install', 125 126 'join', 127 128 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall', 129 130 'lame', 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link', 131 'ln', 'loadkeys', 'loadunimap', 'locate', 'lockfile', 'login', 132 'logname', 'lp', 'lpr', 'ls', 'lsattr', 'lsmod', 'lsmod.old', 133 'lspci', 'ltrace', 'lynx', 134 135 'm4', 'make', 'man', 'mapscrn', 'mesg', 'mkdir', 'mkfifo', 136 'mknod', 'mktemp', 'more', 'mount', 'mplayer', 'msgfmt', 'mv', 137 138 'namei', 'nano', 'nasm', 'nawk', 'netstat', 'nice', 139 'nisdomainname', 'nl', 'nm', 'nm86', 'nmap', 'nohup', 'nop', 140 141 'od', 'openvt', 142 143 'passwd', 'patch', 'pcregrep', 'pcretest', 'perl', 'perror', 144 'pgawk', 'pidof', 'ping', 'pr', 'procmail', 'prune', 'ps', 'pstree', 145 'ps2ascii', 'ps2epsi', 'ps2frag', 'ps2pdf', 'ps2ps', 'psbook', 146 'psmerge', 'psnup', 'psresize', 'psselect', 'pstops', 147 148 'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons', 149 'rev', 'rm', 'rmdir', 'rsh', 'run-parts', 150 151 'sash', 'scp', 'screen', 'sed', 'seq', 'sendmail', 'setfont', 152 'setkeycodes', 'setleds', 'setmetamode', 'setserial', 'setterm', 153 'sh', 'showkey', 'shred', 'size', 'size86', 'skill', 'sleep', 154 'slogin', 'snice', 'sort', 'sox', 'split', 'ssed', 'ssh', 'ssh-add', 155 'ssh-agent', 'ssh-keygen', 'ssh-keyscan', 'stat', 'strace', 156 'strings', 'strip', 'stty', 'su', 'sudo', 'suidperl', 'sum', 'svn', 157 'svnadmin', 'svndumpfilter', 'svnlook', 'svnmerge', 'svnmucc', 158 'svnserve', 'svnshell', 'svnsync', 'svnversion', 'svnwrap', 'sync', 159 160 'tac', 'tail', 'tar', 'tee', 'tempfile', 'touch', 'tr', 'tree', 161 'true', 162 163 'umount', 'uname', 'unicode_start', 'unicode_stop', 'uniq', 164 'unlink', 'unzip', 'updatedb', 'updmap', 'uptime', 'users', 165 'utmpdump', 'uuidgen', 166 167 'valgrind', 'vdir', 'vi', 'vim', 'vmstat', 168 169 'w', 'wall', 'wc', 'wget', 'whatis', 'whereis', 'which', 'whiptail', 170 'who', 'whoami', 'write', 171 172 'xargs', 'xhost', 'xmodmap', 'xset', 173 174 'yacc', 'yes', 'ypdomainname', 175 176 'zcat', 'zcmp', 'zdiff', 'zdump', 'zegrep', 'zfgrep', 'zforce', 177 'zgrep', 'zip', 'zipgrep', 'zipinfo', 'zless', 'zmore', 'znew', 178 'zsh', 'zsoelim' 179 ), 180 3 => array( 181 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command', 182 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown', 183 'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc', 184 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'let', 185 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly', 186 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times', 187 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset', 188 'wait' 189 ) 190 ), 191 'SYMBOLS' => array( 192 '(', ')', '[', ']', '!', '@', '%', '&', '*', '|', '/', '<', '>', ';;', '`' 193 ), 194 'CASE_SENSITIVE' => array( 195 GESHI_COMMENTS => false, 196 1 => true, 197 2 => true, 198 3 => true 199 ), 200 'STYLES' => array( 201 'KEYWORDS' => array( 202 1 => 'color: #000000; font-weight: bold;', 203 2 => 'color: #c20cb9; font-weight: bold;', 204 3 => 'color: #7a0874; font-weight: bold;' 205 ), 206 'COMMENTS' => array( 207 0 => 'color: #666666; font-style: italic;', 208 1 => 'color: #800000;', 209 2 => 'color: #cc0000; font-style: italic;', 210 3 => 'color: #000000; font-weight: bold;' 211 ), 212 'ESCAPE_CHAR' => array( 213 1 => 'color: #000099; font-weight: bold;', 214 2 => 'color: #007800;', 215 3 => 'color: #007800;', 216 4 => 'color: #007800;', 217 5 => 'color: #780078;', 218 'HARD' => 'color: #000099; font-weight: bold;' 219 ), 220 'BRACKETS' => array( 221 0 => 'color: #7a0874; font-weight: bold;' 222 ), 223 'STRINGS' => array( 224 0 => 'color: #ff0000;', 225 'HARD' => 'color: #ff0000;' 226 ), 227 'NUMBERS' => array( 228 0 => 'color: #000000;' 229 ), 230 'METHODS' => array( 231 ), 232 'SYMBOLS' => array( 233 0 => 'color: #000000; font-weight: bold;' 234 ), 235 'REGEXPS' => array( 236 0 => 'color: #007800;', 237 1 => 'color: #007800;', 238 2 => 'color: #007800;', 239 4 => 'color: #007800;', 240 5 => 'color: #660033;' 241 ), 242 'SCRIPT' => array( 243 ) 244 ), 245 'URLS' => array( 246 1 => '', 247 2 => '', 248 3 => '' 249 ), 250 'OOLANG' => false, 251 'OBJECT_SPLITTERS' => array( 252 ), 253 'REGEXPS' => array( 254 //Variables (will be handled by comment_regexps) 255 0 => "\\$\\{[a-zA-Z_][a-zA-Z0-9_]*?\\}", 256 //Variables without braces 257 1 => "\\$[a-zA-Z_][a-zA-Z0-9_]*", 258 //Variable assignment 259 2 => "(?<![\.a-zA-Z_\-])([a-zA-Z_][a-zA-Z0-9_]*?)(?==)", 260 //Shorthand shell variables 261 4 => "\\$[*#\$\\-\\?!]", 262 //Parameters of commands 263 5 => "(?<=\s)--?[0-9a-zA-Z\-]+(?=[\s=]|$)" 264 ), 265 'STRICT_MODE_APPLIES' => GESHI_NEVER, 266 'SCRIPT_DELIMITERS' => array( 267 ), 268 'HIGHLIGHT_STRICT_BLOCK' => array( 269 ), 270 'TAB_WIDTH' => 4, 271 'PARSER_CONTROL' => array( 272 'COMMENTS' => array( 273 'DISALLOWED_BEFORE' => '$' 274 ), 275 'KEYWORDS' => array( 276 'DISALLOWED_BEFORE' => "(?<![\.\-a-zA-Z0-9_\$\#])", 277 'DISALLOWED_AFTER' => "(?![\.\-a-zA-Z0-9_%\\/])" 278 ) 279 ) 280); 281 282?>