123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- /**
- * multiple ocurrences of:
- * - alphabetical letter, underscore or dash, or
- * - non-ascii character, or
- * - escaped character
- * @type {RegExp}
- */
- var rIdentifier =
- /(?:[A-Za-z0-9_-]|[^\0-\237]|\\(?:[^A-Fa-f0-9]|[A-Fa-f0-9]{1,6} ?))+/;
- /**
- * backslash followed by a non-hexadecimal letter or
- * a 1 to 6 digit hexadecimal number followed by an optional white space
- * @type {RegExp}
- */
- var rEscapedCharacter = /\\([^A-Fa-f0-9]|[A-Fa-f0-9]{1,6} ?)/g;
- /**
- * Unescapes a single character
- * @param {string} escapedCharacter escaped character starting with a backslash
- * @return {string} unescaped character
- */
- function unescapeCharacter(escapedCharacter) {
- var escapeValue = escapedCharacter.substr(1);
- var numberValue = parseInt(escapeValue, 16);
- if (isNaN(numberValue)) {
- return escapeValue;
- }
- return String.fromCharCode(numberValue);
- }
- /**
- * Unescapes all escaped characters in the given identifier
- * @param {string} identifier identifier with possible escaped characters
- * @return {string} unescaped identifier
- */
- function unescapeIdentifier(identifier) {
- return identifier.replace(rEscapedCharacter, unescapeCharacter);
- }
- module.exports = {
- rIdentifier: rIdentifier,
- rEscapedCharacter: rEscapedCharacter,
- unescapeIdentifier: unescapeIdentifier,
- unescapeCharacter: unescapeCharacter
- };
|