123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- import Utils from "../Utils.js";
- /**
- * Unicode operations.
- *
- * @author n1474335 [n1474335@gmail.com]
- * @copyright Crown Copyright 2016
- * @license Apache-2.0
- *
- * @namespace
- */
- const Unicode = {
- /**
- * @constant
- * @default
- */
- PREFIXES: ["\\u", "%u", "U+"],
- /**
- * Unescape Unicode Characters operation.
- *
- * @param {string} input
- * @param {Object[]} args
- * @returns {string}
- */
- runUnescape: function(input, args) {
- let prefix = Unicode._prefixToRegex[args[0]],
- regex = new RegExp(prefix+"([a-f\\d]{4})", "ig"),
- output = "",
- m,
- i = 0;
- while ((m = regex.exec(input))) {
- // Add up to match
- output += input.slice(i, m.index);
- i = m.index;
- // Add match
- output += Utils.chr(parseInt(m[1], 16));
- i = regex.lastIndex;
- }
- // Add all after final match
- output += input.slice(i, input.length);
- return output;
- },
- /**
- * Escape Unicode Characters operation.
- *
- * @param {string} input
- * @param {Object[]} args
- * @returns {string}
- */
- runEscape: function(input, args) {
- const regexWhitelist = /[ -~]/i,
- prefix = args[0],
- encodeAll = args[1],
- padding = args[2],
- uppercaseHex = args[3];
- let output = "",
- character = "";
- for (let i = 0; i < input.length; i++) {
- character = input[i];
- if (!encodeAll && regexWhitelist.test(character)) {
- // It’s a printable ASCII character so don’t escape it.
- output += character;
- continue;
- }
- let cp = character.codePointAt(0).toString(16);
- if (uppercaseHex) cp = cp.toUpperCase();
- output += prefix + cp.padStart(padding, "0");
- }
- return output;
- },
- /**
- * Lookup table to add prefixes to unicode delimiters so that they can be used in a regex.
- *
- * @private
- * @constant
- */
- _prefixToRegex: {
- "\\u": "\\\\u",
- "%u": "%u",
- "U+": "U\\+"
- },
- };
- export default Unicode;
|