forked from EnlighterJS/EnlighterJS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshell.js
executable file
·109 lines (90 loc) · 2.7 KB
/
shell.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// ----------------------------------------------------------------------
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
// --
// Copyright 2016-2018 Andi Dittrich <https://andidittrich.de>
// ----------------------------------------------------------------------
// Generic Rules/Regex
import _language_common_rules from './rulesets/generic';
import {generic} from './generic';
// Shell/Bash Scripting
// Author: [Andi Dittrich]
// --
export class shell extends generic {
// language aliases
static alias(){
return ['bash', 'sh', 'zsh'];
}
setupLanguage() {
this.rules = [
// shebang
{
regex: /(^#!.*?)\n/gi,
type: 'k4'
},
// pound comments: # hello world
{
regex: /(?:^|[^\\\S])(#.*)$/gm,
type: 'c0'
},
// dq strings, single escaped chars like \" can be used within bash scripts
{
regex: /[^\\]("(?:[^"\\]|\\.)*")/g,
type: 's0'
},
// strings, single escaped chars like \' can be used within bash scripts
{
regex: /[^\\]('(?:[^'\\]|\\.)*')/g,
type: 's0'
},
// back-tick command string
{
regex: /`.*?`/gm,
type: 's2'
},
// command wrapper
{
regex: /(\$)\(/gm,
type: 's2'
},
// arguments
{
regex: /(\$\d)\b/gim,
type: 'k9'
},
// variables
{
regex: /(\$\w+)\b/gim,
type: 'k7'
},
// variable assignment
{
regex: /^(\s*\w+)=/gm,
type: 'k7'
},
// cases/labels
{
regex: /^\s*\w+\)\s*$/gm,
type: 'k6'
},
// control keywords
{
regex: /\b(if|fi|then|elif|else|for|do|done|until|while|break|continue|case|esac|in|eq|ne|gt|lt|ge|le)\b/gi,
type: 'k1'
},
// general keywords
{
regex: /\b(return|function)\b/gi,
type: 'k0'
},
// functions
{
regex: /^\s*\w+\(\)\s*\{/gm,
type: 'k0'
},
// numbers
_language_common_rules.int
];
}
}