Skip to content

Commit f62ca78

Browse files
Regex: Changed how languages embed regexes (#2532)
1 parent bf169e5 commit f62ca78

File tree

12 files changed

+138
-58
lines changed

12 files changed

+138
-58
lines changed

components.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components.json

+3-9
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
"title": "JavaScript",
7474
"require": "clike",
7575
"modify": "markup",
76+
"optional": "regex",
7677
"alias": "js",
7778
"option": "default"
7879
},
@@ -210,7 +211,7 @@
210211
"oscript": "OneScript"
211212
},
212213
"owner": "Diversus23"
213-
},
214+
},
214215
"c": {
215216
"title": "C",
216217
"require": "clike",
@@ -969,14 +970,6 @@
969970
},
970971
"regex": {
971972
"title": "Regex",
972-
"modify": [
973-
"actionscript",
974-
"coffeescript",
975-
"flow",
976-
"javascript",
977-
"typescript",
978-
"vala"
979-
],
980973
"owner": "RunDevelopment"
981974
},
982975
"renpy": {
@@ -1181,6 +1174,7 @@
11811174
"vala": {
11821175
"title": "Vala",
11831176
"require": "clike",
1177+
"optional": "regex",
11841178
"owner": "TemplarVolk"
11851179
},
11861180
"vbnet": {

components/prism-javascript.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,17 @@ Prism.languages.insertBefore('javascript', 'keyword', {
2828
'regex': {
2929
pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,
3030
lookbehind: true,
31-
greedy: true
31+
greedy: true,
32+
inside: {
33+
'regex-source': {
34+
pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
35+
lookbehind: true,
36+
alias: 'language-regex',
37+
inside: Prism.languages.regex
38+
},
39+
'regex-flags': /[a-z]+$/,
40+
'regex-delimiter': /^\/|\/$/
41+
}
3242
},
3343
// This must be declared before keyword because we use "function" inside the look-forward
3444
'function-variable': {

components/prism-javascript.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/prism-regex.js

-23
Original file line numberDiff line numberDiff line change
@@ -101,27 +101,4 @@
101101
}
102102
};
103103

104-
105-
[
106-
'actionscript',
107-
'coffescript',
108-
'flow',
109-
'javascript',
110-
'typescript',
111-
'vala'
112-
].forEach(function (lang) {
113-
var grammar = Prism.languages[lang];
114-
if (grammar) {
115-
grammar['regex'].inside = {
116-
'language-regex': {
117-
pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/i,
118-
lookbehind: true,
119-
inside: Prism.languages.regex
120-
},
121-
'regex-flags': /[a-z]+$/i,
122-
'regex-delimiter': /^\/|\/$/,
123-
};
124-
}
125-
});
126-
127104
}(Prism))

components/prism-regex.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

components/prism-vala.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ Prism.languages.insertBefore('vala','string', {
6969
Prism.languages.insertBefore('vala', 'keyword', {
7070
'regex': {
7171
pattern: /\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[imsx]{0,4}(?=\s*(?:$|[\r\n,.;})\]]))/,
72-
greedy: true
72+
greedy: true,
73+
inside: {
74+
'regex-source': {
75+
pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
76+
lookbehind: true,
77+
alias: 'language-regex',
78+
inside: Prism.languages.regex
79+
},
80+
'regex-flags': /[a-z]+$/,
81+
'regex-delimiter': /^\/|\/$/
82+
}
7383
}
7484
});

components/prism-vala.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

prism.js

+11-1
Original file line numberDiff line numberDiff line change
@@ -1474,7 +1474,17 @@ Prism.languages.insertBefore('javascript', 'keyword', {
14741474
'regex': {
14751475
pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,
14761476
lookbehind: true,
1477-
greedy: true
1477+
greedy: true,
1478+
inside: {
1479+
'regex-source': {
1480+
pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
1481+
lookbehind: true,
1482+
alias: 'language-regex',
1483+
inside: Prism.languages.regex
1484+
},
1485+
'regex-flags': /[a-z]+$/,
1486+
'regex-delimiter': /^\/|\/$/
1487+
}
14781488
},
14791489
// This must be declared before keyword because we use "function" inside the look-forward
14801490
'function-variable': {

tests/languages/javascript!+regex/regex_inclusion.test

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
[
66
["regex", [
77
["regex-delimiter", "/"],
8-
["language-regex", [
8+
["regex-source", [
99
"a",
1010
["quantifier", "+"],
1111
["group", ["(?:"]],

tests/languages/javascript/regex_feature.test

+88-16
Original file line numberDiff line numberDiff line change
@@ -17,38 +17,110 @@ yield /regex/;
1717
----------------------------------------------------
1818

1919
[
20-
["regex", "/foo bar/"], ["punctuation", ";"],
21-
["regex", "/foo/gimyus"], ["punctuation", ","],
22-
["regex", "/[\\[\\]]{2,4}(?:foo)*/"], ["punctuation", ";"],
23-
["regex", "/foo\"test\"bar/"], ["punctuation", ";"],
24-
["regex", "/foo\\//"], ["punctuation", ";"],
25-
["regex", "/[]/"], ["punctuation", ";"],
26-
["regex", "/[\\]/]/"], ["punctuation", ";"],
27-
["number", "1"], ["operator", "/"], ["number", "4"], ["operator", "+"], ["string", "\"/, not a regex\""], ["punctuation", ";"],
28-
["regex", "/ '1' '2' '3' '4' '5' /"],
29-
["punctuation", "["], ["regex", "/foo/"], ["punctuation", "]"],
20+
["regex", [
21+
["regex-delimiter", "/"],
22+
["regex-source", "foo bar"],
23+
["regex-delimiter", "/"]
24+
]],
25+
["punctuation", ";"],
26+
["regex", [
27+
["regex-delimiter", "/"],
28+
["regex-source", "foo"],
29+
["regex-delimiter", "/"],
30+
["regex-flags", "gimyus"]
31+
]],
32+
["punctuation", ","],
33+
["regex", [
34+
["regex-delimiter", "/"],
35+
["regex-source", "[\\[\\]]{2,4}(?:foo)*"],
36+
["regex-delimiter", "/"]
37+
]],
38+
["punctuation", ";"],
39+
["regex", [
40+
["regex-delimiter", "/"],
41+
["regex-source", "foo\"test\"bar"],
42+
["regex-delimiter", "/"]
43+
]],
44+
["punctuation", ";"],
45+
["regex", [
46+
["regex-delimiter", "/"],
47+
["regex-source", "foo\\/"],
48+
["regex-delimiter", "/"]
49+
]],
50+
["punctuation", ";"],
51+
["regex", [
52+
["regex-delimiter", "/"],
53+
["regex-source", "[]"],
54+
["regex-delimiter", "/"]
55+
]],
56+
["punctuation", ";"],
57+
["regex", [
58+
["regex-delimiter", "/"],
59+
["regex-source", "[\\]/]"],
60+
["regex-delimiter", "/"]
61+
]],
62+
["punctuation", ";"],
63+
["number", "1"],
64+
["operator", "/"],
65+
["number", "4"],
66+
["operator", "+"],
67+
["string", "\"/, not a regex\""],
68+
["punctuation", ";"],
69+
["regex", [
70+
["regex-delimiter", "/"],
71+
["regex-source", " '1' '2' '3' '4' '5' "],
72+
["regex-delimiter", "/"]
73+
]],
74+
["punctuation", "["],
75+
["regex", [
76+
["regex-delimiter", "/"],
77+
["regex-source", "foo"],
78+
["regex-delimiter", "/"]
79+
]],
80+
["punctuation", "]"],
3081

3182
["keyword", "let"],
3283
" a ",
3384
["operator", "="],
34-
["regex", "/regex/m"],
85+
["regex", [
86+
["regex-delimiter", "/"],
87+
["regex-source", "regex"],
88+
["regex-delimiter", "/"],
89+
["regex-flags", "m"]
90+
]],
3591
["comment", "// comment"],
3692
["keyword", "let"],
3793
" b ",
3894
["operator", "="],
3995
" condition ",
4096
["operator", "?"],
41-
["regex", "/regex/"],
97+
["regex", [
98+
["regex-delimiter", "/"],
99+
["regex-source", "regex"],
100+
["regex-delimiter", "/"]
101+
]],
42102
["operator", ":"],
43-
["regex", "/another one/"],
103+
["regex", [
104+
["regex-delimiter", "/"],
105+
["regex-source", "another one"],
106+
["regex-delimiter", "/"]
107+
]],
44108
["keyword", "return"],
45-
["regex", "/regex/"],
109+
["regex", [
110+
["regex-delimiter", "/"],
111+
["regex-source", "regex"],
112+
["regex-delimiter", "/"]
113+
]],
46114
["punctuation", ";"],
47115
["keyword", "yield"],
48-
["regex", "/regex/"],
116+
["regex", [
117+
["regex-delimiter", "/"],
118+
["regex-source", "regex"],
119+
["regex-delimiter", "/"]
120+
]],
49121
["punctuation", ";"]
50122
]
51123

52124
----------------------------------------------------
53125

54-
Checks for regex.
126+
Checks for regex.

0 commit comments

Comments
 (0)