-
Notifications
You must be signed in to change notification settings - Fork 6
/
Lib.js
44 lines (44 loc) · 1.55 KB
/
Lib.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
"use strict";
let Caf = require("caffeine-script-runtime");
Caf.defMod(module, () => {
return Caf.importInvoke(
["escapeRegExp"],
[global, require("art-standard-lib")],
escapeRegExp => {
let deescapeSpaces, legalUnquotedPropName;
return {
deescapeSpaces: (deescapeSpaces = function(string) {
return Caf.array(string.split(/((?:\\\\)+)/), (str, i) =>
Caf.mod(i, 2) === 0 ? str.replace(/\\[_ ]/g, " ") : str
).join("");
}),
escapeNewLines: function(string) {
return string.replace(/\n/g, "\\n");
},
escapeMustEscapes: function(string) {
return string.replace(/[\n]/g, "\\n");
},
escapeUnescaped: function(string, charsToEscape = '"') {
let charsRegExp, split;
charsRegExp = RegExp(
`([${Caf.toString(escapeRegExp(charsToEscape))}])`,
"g"
);
split = charsToEscape.match(/\\/)
? [string]
: string.split(/((?:\\.)+)/);
return Caf.array(split, (str, i) =>
Caf.mod(i, 2) === 0 ? str.replace(charsRegExp, "\\$1") : str
).join("");
},
legalUnquotedPropName: (legalUnquotedPropName = /^(0|[1-9][0-9]*|[a-z_][0-9_a-z]*)$/i),
escapePropName: function(rawPropName) {
return legalUnquotedPropName.test(rawPropName)
? rawPropName
: '"' + deescapeSpaces(rawPropName).replace(/["]/g, '\\"') + '"';
},
identifierRegexp: /^(?!\d)((?!\s)[$\w\u007f-\uffff])+$/
};
}
);
});