@technobuddha/library
Version:
A large library of useful functions
119 lines • 7.7 kB
JavaScript
import { build } from "./build.js";
import { oct, u4, u8, x2 } from "./escape.js";
// cspell:ignore unnnn Unnnnnnnn
/**
* Escape a string for use in Python
*
* | Character | Hex | Escape Sequence |
* | ------------------ | -------------------- | ------------------------ |
* | NUL | 0x00 | \\0 or \\000[^1] |
* | Bell | 0x07 | \\a |
* | Backspace | 0x08 | \\b |
* | Tab | 0x09 | \\t |
* | Newline | 0x0a | \\n |
* | Vertical Tab | 0x0b | \\v |
* | Form Feed | 0x0c | \\f |
* | Carriage Return | 0x0d | \\r |
* | Double Quote | 0x22 | \\" |
* | Single Quote | 0x27 | \\' |
* | Backslash | 0x5c | \\\\ |
* | Control Characters | 0x00-0x1f, 0x7f-0x9f | \\xnn |
* | BMP | 0x0100-0xffff | \\unnnn |
* | Astral | 0x10000-0x10ffff | \\Unnnnnnnn |
*
* [^1]: The sequence \\0 must not be followed by a octal digit (0-7) to avoid being interpreted
* as a different character, \\000 will be used to avoid ambiguity.
* @param input - The string to escape
* @returns the string escapes for use in python
* @example
* ```typescript
* escapePython('Hello\nWorld'); // "Hello\\nWorld"
* escapePython('"\\'); // "\\\"\\\\"
* escapePython('\b'); // "\\b"
* escapePython('\u20ac'); // "\\u20ac"
* ```
* @group Programming
* @category Escaping
*/
export function escapePython(input) {
const output = [];
for (let i = 0; i < input.length; ++i) {
const u0 = input.codePointAt(i);
const u1 = input.codePointAt(i + 1);
if (u0 < 0x00000020) {
switch (u0) {
case 0x00000000: {
output.push(oct(u1) ? '\\000' : '\\0');
break;
}
case 0x00000007: {
output.push('\\a');
break;
}
case 0x00000008: {
output.push('\\b');
break;
}
case 0x00000009: {
output.push('\\t');
break;
}
case 0x0000000a: {
output.push('\\n');
break;
}
case 0x0000000b: {
output.push('\\v');
break;
}
case 0x0000000c: {
output.push('\\f');
break;
}
case 0x0000000d: {
output.push('\\r');
break;
}
default: {
output.push(x2(u0));
}
}
}
else if (u0 < 0x0000007f) {
switch (u0) {
case 0x00000022: {
output.push('\\"');
break;
}
case 0x00000027: {
output.push("\\'");
break;
}
case 0x0000005c: {
output.push('\\\\');
break;
}
default: {
// eslint-disable-next-line unicorn/prefer-code-point
output.push(String.fromCharCode(u0));
}
}
}
else if (u0 < 0x000000a1) {
output.push(x2(u0));
}
else if (u0 < 0x00000100) {
// eslint-disable-next-line unicorn/prefer-code-point
output.push(String.fromCharCode(u0));
}
else if (u0 < 0x00010000) {
output.push(u4(u0));
}
else {
++i;
output.push(u8(u0));
}
}
return build(output);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNjYXBlLXB5dGhvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lc2NhcGUtcHl0aG9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5QyxnQ0FBZ0M7QUFDaEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYTtJQUN4QyxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXBDLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ1gsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdkMsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkIsTUFBTTtnQkFDUixDQUFDO2dCQUNELEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztvQkFDaEIs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