basant307/AI_Governance_Project
048
1/*2Language: Bash3Author: vah <vahtenberg@gmail.com>4Contributrors: Benjamin Pannell <contact@sierrasoftworks.com>5Website: https://www.gnu.org/software/bash/6Category: common, scripting7*/8 9/** @type LanguageFn */10function bash(hljs) {11 const regex = hljs.regex;12 const VAR = {};13 const BRACED_VAR = {14 begin: /\$\{/,15 end: /\}/,16 contains: [17 "self",18 {19 begin: /:-/,20 contains: [ VAR ]21 } // default values22 ]23 };24 Object.assign(VAR, {25 className: 'variable',26 variants: [27 { begin: regex.concat(/\$[\w\d#@][\w\d_]*/,28 // negative look-ahead tries to avoid matching patterns that are not29 // Perl at all like $ident$, @ident@, etc.30 `(?![\\w\\d])(?![$])`) },31 BRACED_VAR32 ]33 });34 35 const SUBST = {36 className: 'subst',37 begin: /\$\(/,38 end: /\)/,39 contains: [ hljs.BACKSLASH_ESCAPE ]40 };41 const COMMENT = hljs.inherit(42 hljs.COMMENT(),43 {44 match: [45 /(^|\s)/,46 /#.*$/47 ],48 scope: {49 2: 'comment'50 }51 }52 );53 const HERE_DOC = {54 begin: /<<-?\s*(?=\w+)/,55 starts: { contains: [56 hljs.END_SAME_AS_BEGIN({57 begin: /(\w+)/,58 end: /(\w+)/,59 className: 'string'60 })61 ] }62 };63 const QUOTE_STRING = {64 className: 'string',65 begin: /"/,66 end: /"/,67 contains: [68 hljs.BACKSLASH_ESCAPE,69 VAR,70 SUBST71 ]72 };73 SUBST.contains.push(QUOTE_STRING);74 const ESCAPED_QUOTE = {75 match: /\\"/76 };77 const APOS_STRING = {78 className: 'string',79 begin: /'/,80 end: /'/81 };82 const ESCAPED_APOS = {83 match: /\\'/84 };85 const ARITHMETIC = {86 begin: /\$?\(\(/,87 end: /\)\)/,88 contains: [89 {90 begin: /\d+#[0-9a-f]+/,91 className: "number"92 },93 hljs.NUMBER_MODE,94 VAR95 ]96 };97 const SH_LIKE_SHELLS = [98 "fish",99 "bash",100 "zsh",101 "sh",102 "csh",103 "ksh",104 "tcsh",105 "dash",106 "scsh",107 ];108 const KNOWN_SHEBANG = hljs.SHEBANG({109 binary: `(${SH_LIKE_SHELLS.join("|")})`,110 relevance: 10111 });112 const FUNCTION = {113 className: 'function',114 begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/,115 returnBegin: true,116 contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\w[\w\d_]*/ }) ],117 relevance: 0118 };119 120 const KEYWORDS = [121 "if",122 "then",123 "else",124 "elif",125 "fi",126 "time",127 "for",128 "while",129 "until",130 "in",131 "do",132 "done",133 "case",134 "esac",135 "coproc",136 "function",137 "select"138 ];139 140 const LITERALS = [141 "true",142 "false"143 ];144 145 // to consume paths to prevent keyword matches inside them146 const PATH_MODE = { match: /(\/[a-z._-]+)+/ };147 148 // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html149 const SHELL_BUILT_INS = [150 "break",151 "cd",152 "continue",153 "eval",154 "exec",155 "exit",156 "export",157 "getopts",158 "hash",159 "pwd",160 "readonly",161 "return",162 "shift",163 "test",164 "times",165 "trap",166 "umask",167 "unset"168 ];169 170 const BASH_BUILT_INS = [171 "alias",172 "bind",173 "builtin",174 "caller",175 "command",176 "declare",177 "echo",178 "enable",179 "help",180 "let",181 "local",182 "logout",183 "mapfile",184 "printf",185 "read",186 "readarray",187 "source",188 "sudo",189 "type",190 "typeset",191 "ulimit",192 "unalias"193 ];194 195 const ZSH_BUILT_INS = [196 "autoload",197 "bg",198 "bindkey",199 "bye",200 "cap",201 "chdir",202 "clone",203 "comparguments",204 "compcall",205 "compctl",206 "compdescribe",207 "compfiles",208 "compgroups",209 "compquote",210 "comptags",211 "comptry",212 "compvalues",213 "dirs",214 "disable",215 "disown",216 "echotc",217 "echoti",218 "emulate",219 "fc",220 "fg",221 "float",222 "functions",223 "getcap",224 "getln",225 "history",226 "integer",227 "jobs",228 "kill",229 "limit",230 "log",231 "noglob",232 "popd",233 "print",234 "pushd",235 "pushln",236 "rehash",237 "sched",238 "setcap",239 "setopt",240 "stat",241 "suspend",242 "ttyctl",243 "unfunction",244 "unhash",245 "unlimit",246 "unsetopt",247 "vared",248 "wait",249 "whence",250 "where",251 "which",252 "zcompile",253 "zformat",254 "zftp",255 "zle",256 "zmodload",257 "zparseopts",258 "zprof",259 "zpty",260 "zregexparse",261 "zsocket",262 "zstyle",263 "ztcp"264 ];265 266 const GNU_CORE_UTILS = [267 "chcon",268 "chgrp",269 "chown",270 "chmod",271 "cp",272 "dd",273 "df",274 "dir",275 "dircolors",276 "ln",277 "ls",278 "mkdir",279 "mkfifo",280 "mknod",281 "mktemp",282 "mv",283 "realpath",284 "rm",285 "rmdir",286 "shred",287 "sync",288 "touch",289 "truncate",290 "vdir",291 "b2sum",292 "base32",293 "base64",294 "cat",295 "cksum",296 "comm",297 "csplit",298 "cut",299 "expand",300 "fmt",301 "fold",302 "head",303 "join",304 "md5sum",305 "nl",306 "numfmt",307 "od",308 "paste",309 "ptx",310 "pr",311 "sha1sum",312 "sha224sum",313 "sha256sum",314 "sha384sum",315 "sha512sum",316 "shuf",317 "sort",318 "split",319 "sum",320 "tac",321 "tail",322 "tr",323 "tsort",324 "unexpand",325 "uniq",326 "wc",327 "arch",328 "basename",329 "chroot",330 "date",331 "dirname",332 "du",333 "echo",334 "env",335 "expr",336 "factor",337 // "false", // keyword literal already338 "groups",339 "hostid",340 "id",341 "link",342 "logname",343 "nice",344 "nohup",345 "nproc",346 "pathchk",347 "pinky",348 "printenv",349 "printf",350 "pwd",351 "readlink",352 "runcon",353 "seq",354 "sleep",355 "stat",356 "stdbuf",357 "stty",358 "tee",359 "test",360 "timeout",361 // "true", // keyword literal already362 "tty",363 "uname",364 "unlink",365 "uptime",366 "users",367 "who",368 "whoami",369 "yes"370 ];371 372 return {373 name: 'Bash',374 aliases: [375 'sh',376 'zsh'377 ],378 keywords: {379 $pattern: /\b[a-z][a-z0-9._-]+\b/,380 keyword: KEYWORDS,381 literal: LITERALS,382 built_in: [383 ...SHELL_BUILT_INS,384 ...BASH_BUILT_INS,385 // Shell modifiers386 "set",387 "shopt",388 ...ZSH_BUILT_INS,389 ...GNU_CORE_UTILS390 ]391 },392 contains: [393 KNOWN_SHEBANG, // to catch known shells and boost relevancy394 hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang395 FUNCTION,396 ARITHMETIC,397 COMMENT,398 HERE_DOC,399 PATH_MODE,400 QUOTE_STRING,401 ESCAPED_QUOTE,402 APOS_STRING,403 ESCAPED_APOS,404 VAR405 ]406 };407}408 409export { bash as default };410 