@rightcapital/phpdoc-parser
Version:
TypeScript version of PHPDoc parser with support for intersection types and generics
48 lines (47 loc) • 1.96 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuoteAwareConstExprStringNode = void 0;
const const_expr_string_node_1 = require("./const-expr-string-node");
class QuoteAwareConstExprStringNode extends const_expr_string_node_1.ConstExprStringNode {
constructor(value, quoteType) {
super(value);
this.quoteType = quoteType;
}
toString() {
if (this.quoteType === QuoteAwareConstExprStringNode.SINGLE_QUOTED) {
return `'${this.value.replace(/'/g, "\\'")}'`;
}
return `"${this.escapeDoubleQuotedString()}"`;
}
escapeDoubleQuotedString() {
let escaped = this.value.replace(/["\n\r\t\x0B\f\v\\$]/g, '\\$&');
const regexes = [
/[\x00-\x08\x0E-\x1F]/g,
/[\xC0-\xC1]/g,
/[\xF5-\xFF]/g,
/\xE0[\x80-\x9F]/g,
/\xF0[\x80-\x8F]/g,
/[\xC2-\xDF](?![\x80-\xBF])/g,
/[\xE0-\xEF](?![\x80-\xBF]{2})/g,
/[\xF0-\xF4](?![\x80-\xBF]{3})/g,
/(?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF]/g,
/(?<![\xC2-\xDF]|[\xE0-\xEF]|[\xE0-\xEF][\x80-\xBF]|[\xF0-\xF4]|[\xF0-\xF4][\x80-\xBF]|[\xF0-\xF4][\x80-\xBF]{2})[\x80-\xBF]/g,
/(?<=[\xE0-\xEF])[\x80-\xBF](?![\x80-\xBF])/g,
/(?<=[\xF0-\xF4])[\x80-\xBF](?![\x80-\xBF]{2})/g,
/(?<=[\xF0-\xF4][\x80-\xBF])[\x80-\xBF](?![\x80-\xBF])/g,
];
for (const regex of regexes) {
escaped = escaped.replace(regex, (match) => {
const hex = match.charCodeAt(0).toString(16);
return `\\x${'0'.repeat(2 - hex.length) + hex}`;
});
}
return escaped;
}
getNodeType() {
return 'QuoteAwareConstExprStringNode';
}
}
exports.QuoteAwareConstExprStringNode = QuoteAwareConstExprStringNode;
QuoteAwareConstExprStringNode.SINGLE_QUOTED = 1;
QuoteAwareConstExprStringNode.DOUBLE_QUOTED = 2;