iamcal 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/property/escape.d.ts.map +1 -1
- package/lib/property/escape.js +39 -11
- package/package.json +1 -1
- package/src/property/escape.ts +42 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/property/escape.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/property/escape.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CA2C/D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAclE;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpE;AAGD,eAAO,MAAM,eAAe,KAAK,CAAA;AAEjC;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY7C;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|
package/lib/property/escape.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.escapePropertyParameterValue = escapePropertyParameterValue;
|
|
|
7
7
|
exports.unescapePropertyParameterValue = unescapePropertyParameterValue;
|
|
8
8
|
exports.foldLine = foldLine;
|
|
9
9
|
exports.unfoldLine = unfoldLine;
|
|
10
|
+
const patterns_1 = require("../patterns");
|
|
10
11
|
/**
|
|
11
12
|
* Escape special characters in a TEXT property value.
|
|
12
13
|
*
|
|
@@ -26,17 +27,44 @@ function escapeTextPropertyValue(value) {
|
|
|
26
27
|
* @see {@link unescapeTextPropertyValue}
|
|
27
28
|
*/
|
|
28
29
|
function unescapeTextPropertyValue(value) {
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
/** List that will contain the characters of the unescaped string. */
|
|
31
|
+
const chars = [];
|
|
32
|
+
// Character codes for special characters
|
|
33
|
+
const backslash = (0, patterns_1.ord)('\\');
|
|
34
|
+
const newline = (0, patterns_1.ord)('\n');
|
|
35
|
+
const lowercaseN = (0, patterns_1.ord)('n');
|
|
36
|
+
const uppercaseN = (0, patterns_1.ord)('N');
|
|
37
|
+
const comma = (0, patterns_1.ord)(',');
|
|
38
|
+
const semicolon = (0, patterns_1.ord)(';');
|
|
39
|
+
let previousCharWasBackslash = false;
|
|
40
|
+
for (let i = 0; i < value.length; i++) {
|
|
41
|
+
const char = value.charCodeAt(i);
|
|
42
|
+
if (previousCharWasBackslash) {
|
|
43
|
+
// Previous character was a backslash, so this character is the second character in an escape sequence
|
|
44
|
+
if (char === lowercaseN || char === uppercaseN) {
|
|
45
|
+
chars.push(newline);
|
|
46
|
+
}
|
|
47
|
+
else if (char === comma ||
|
|
48
|
+
char === semicolon ||
|
|
49
|
+
char === backslash) {
|
|
50
|
+
chars.push(char);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const position = i - 1;
|
|
54
|
+
throw new SyntaxError(`Bad escaped character '\\${String.fromCharCode(char)}' at position ${position}`);
|
|
55
|
+
}
|
|
56
|
+
// End the escape sequence
|
|
57
|
+
previousCharWasBackslash = false;
|
|
58
|
+
}
|
|
59
|
+
else if (char === backslash) {
|
|
60
|
+
// Start of an escape sequence
|
|
61
|
+
previousCharWasBackslash = true;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
chars.push(char);
|
|
65
|
+
}
|
|
37
66
|
}
|
|
38
|
-
|
|
39
|
-
return JSON.parse(`"${jsonValue}"`);
|
|
67
|
+
return String.fromCharCode(...chars);
|
|
40
68
|
}
|
|
41
69
|
/**
|
|
42
70
|
* Escape a property parameter value.
|
|
@@ -98,4 +126,4 @@ function foldLine(line) {
|
|
|
98
126
|
function unfoldLine(lines) {
|
|
99
127
|
return lines.replace(/\r\n /g, '');
|
|
100
128
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb3BlcnR5L2VzY2FwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFVQSwwREFFQztBQVNELDhEQTJDQztBQVNELG9FQWNDO0FBUUQsd0VBS0M7QUFVRCw0QkFZQztBQU9ELGdDQUVDO0FBbklELDBDQUFpQztBQUVqQzs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsS0FBYTtJQUNqRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDdEUsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHlCQUF5QixDQUFDLEtBQWE7SUFDbkQscUVBQXFFO0lBQ3JFLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQTtJQUUxQix5Q0FBeUM7SUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBQSxjQUFHLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFHLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDekIsTUFBTSxVQUFVLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBQSxjQUFHLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFFMUIsSUFBSSx3QkFBd0IsR0FBRyxLQUFLLENBQUE7SUFDcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMs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
|
package/package.json
CHANGED
package/src/property/escape.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ord } from '../patterns'
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Escape special characters in a TEXT property value.
|
|
3
5
|
*
|
|
@@ -18,20 +20,48 @@ export function escapeTextPropertyValue(value: string): string {
|
|
|
18
20
|
* @see {@link unescapeTextPropertyValue}
|
|
19
21
|
*/
|
|
20
22
|
export function unescapeTextPropertyValue(value: string): string {
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
/** List that will contain the characters of the unescaped string. */
|
|
24
|
+
const chars: number[] = []
|
|
25
|
+
|
|
26
|
+
// Character codes for special characters
|
|
27
|
+
const backslash = ord('\\')
|
|
28
|
+
const newline = ord('\n')
|
|
29
|
+
const lowercaseN = ord('n')
|
|
30
|
+
const uppercaseN = ord('N')
|
|
31
|
+
const comma = ord(',')
|
|
32
|
+
const semicolon = ord(';')
|
|
33
|
+
|
|
34
|
+
let previousCharWasBackslash = false
|
|
35
|
+
for (let i = 0; i < value.length; i++) {
|
|
36
|
+
const char = value.charCodeAt(i)
|
|
37
|
+
|
|
38
|
+
if (previousCharWasBackslash) {
|
|
39
|
+
// Previous character was a backslash, so this character is the second character in an escape sequence
|
|
40
|
+
if (char === lowercaseN || char === uppercaseN) {
|
|
41
|
+
chars.push(newline)
|
|
42
|
+
} else if (
|
|
43
|
+
char === comma ||
|
|
44
|
+
char === semicolon ||
|
|
45
|
+
char === backslash
|
|
46
|
+
) {
|
|
47
|
+
chars.push(char)
|
|
48
|
+
} else {
|
|
49
|
+
const position = i - 1
|
|
50
|
+
throw new SyntaxError(
|
|
51
|
+
`Bad escaped character '\\${String.fromCharCode(char)}' at position ${position}`
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
// End the escape sequence
|
|
55
|
+
previousCharWasBackslash = false
|
|
56
|
+
} else if (char === backslash) {
|
|
57
|
+
// Start of an escape sequence
|
|
58
|
+
previousCharWasBackslash = true
|
|
59
|
+
} else {
|
|
60
|
+
chars.push(char)
|
|
61
|
+
}
|
|
31
62
|
}
|
|
32
63
|
|
|
33
|
-
|
|
34
|
-
return JSON.parse(`"${jsonValue}"`) as string
|
|
64
|
+
return String.fromCharCode(...chars)
|
|
35
65
|
}
|
|
36
66
|
|
|
37
67
|
/**
|