-
-
Notifications
You must be signed in to change notification settings - Fork 36
/
nevod.js
136 lines (135 loc) · 3.21 KB
/
nevod.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// @ts-nocheck
nevod.displayName = 'nevod'
nevod.aliases = []
/** @type {import('../core.js').Syntax} */
export default function nevod(Prism) {
Prism.languages.nevod = {
comment: /\/\/.*|(?:\/\*[\s\S]*?(?:\*\/|$))/,
string: {
pattern: /(?:"(?:""|[^"])*"(?!")|'(?:''|[^'])*'(?!'))!?\*?/,
greedy: true,
inside: {
'string-attrs': /!$|!\*$|\*$/
}
},
namespace: {
pattern: /(@namespace\s+)[a-zA-Z0-9\-.]+(?=\s*\{)/,
lookbehind: true
},
pattern: {
pattern:
/(@pattern\s+)?#?[a-zA-Z0-9\-.]+(?:\s*\(\s*(?:~\s*)?[a-zA-Z0-9\-.]+\s*(?:,\s*(?:~\s*)?[a-zA-Z0-9\-.]*)*\))?(?=\s*=)/,
lookbehind: true,
inside: {
'pattern-name': {
pattern: /^#?[a-zA-Z0-9\-.]+/,
alias: 'class-name'
},
fields: {
pattern: /\(.*\)/,
inside: {
'field-name': {
pattern: /[a-zA-Z0-9\-.]+/,
alias: 'variable'
},
punctuation: /[,()]/,
operator: {
pattern: /~/,
alias: 'field-hidden-mark'
}
}
}
}
},
search: {
pattern: /(@search\s+|#)[a-zA-Z0-9\-.]+(?:\.\*)?(?=\s*;)/,
alias: 'function',
lookbehind: true
},
keyword:
/@(?:having|inside|namespace|outside|pattern|require|search|where)\b/,
'standard-pattern': {
pattern:
/\b(?:Alpha|AlphaNum|Any|Blank|End|LineBreak|Num|NumAlpha|Punct|Space|Start|Symbol|Word|WordBreak)\b(?:\([a-zA-Z0-9\-.,\s+]*\))?/,
inside: {
'standard-pattern-name': {
pattern: /^[a-zA-Z0-9\-.]+/,
alias: 'builtin'
},
quantifier: {
pattern: /\b\d+(?:\s*\+|\s*-\s*\d+)?(?!\w)/,
alias: 'number'
},
'standard-pattern-attr': {
pattern: /[a-zA-Z0-9\-.]+/,
alias: 'builtin'
},
punctuation: /[,()]/
}
},
quantifier: {
pattern: /\b\d+(?:\s*\+|\s*-\s*\d+)?(?!\w)/,
alias: 'number'
},
operator: [
{
pattern: /=/,
alias: 'pattern-def'
},
{
pattern: /&/,
alias: 'conjunction'
},
{
pattern: /~/,
alias: 'exception'
},
{
pattern: /\?/,
alias: 'optionality'
},
{
pattern: /[[\]]/,
alias: 'repetition'
},
{
pattern: /[{}]/,
alias: 'variation'
},
{
pattern: /[+_]/,
alias: 'sequence'
},
{
pattern: /\.{2,3}/,
alias: 'span'
}
],
'field-capture': [
{
pattern:
/([a-zA-Z0-9\-.]+\s*\()\s*[a-zA-Z0-9\-.]+\s*:\s*[a-zA-Z0-9\-.]+(?:\s*,\s*[a-zA-Z0-9\-.]+\s*:\s*[a-zA-Z0-9\-.]+)*(?=\s*\))/,
lookbehind: true,
inside: {
'field-name': {
pattern: /[a-zA-Z0-9\-.]+/,
alias: 'variable'
},
colon: /:/
}
},
{
pattern: /[a-zA-Z0-9\-.]+\s*:/,
inside: {
'field-name': {
pattern: /[a-zA-Z0-9\-.]+/,
alias: 'variable'
},
colon: /:/
}
}
],
punctuation: /[:;,()]/,
name: /[a-zA-Z0-9\-.]+/
}
}