strong-tie/inbound-calls
0
1"use strict";2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {3 if (k2 === undefined) k2 = k;4 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });5}) : (function(o, m, k, k2) {6 if (k2 === undefined) k2 = k;7 o[k2] = m[k];8}));9var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {10 Object.defineProperty(o, "default", { enumerable: true, value: v });11}) : function(o, v) {12 o["default"] = v;13});14var __importStar = (this && this.__importStar) || function (mod) {15 if (mod && mod.__esModule) return mod;16 var result = {};17 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);18 __setModuleDefault(result, mod);19 return result;20};21Object.defineProperty(exports, "__esModule", { value: true });22exports.writeSetTokens = exports.setChar = void 0;23const types_1 = require("./types");24const sets = __importStar(require("./sets-lookup"));25/**26 * Takes character code and returns character to be displayed in a set27 * @param {number} charCode Character code of set element28 * @returns {string} The string for the sets character29 */30function setChar(charCode) {31 return charCode === 94 ? '\\^' :32 charCode === 92 ? '\\\\' :33 charCode === 93 ? '\\]' :34 charCode === 45 ? '\\-' :35 String.fromCharCode(charCode);36}37exports.setChar = setChar;38/**39 * Test if a character set matches a 'set-lookup'40 * @param {SetTokens} set The set to be tested41 * @param {SetLookup} param The predefined 'set-lookup' & the number of elements in the lookup42 * @returns {boolean} True if the character set corresponds to the 'set-lookup'43 */44function isSameSet(set, { lookup, len }) {45 // If the set and the lookup are not of the same length46 // then we immediately know that the lookup will be false47 if (len !== set.length) {48 return false;49 }50 const map = lookup();51 for (const elem of set) {52 if (elem.type === types_1.types.SET) {53 return false;54 }55 const key = elem.type === types_1.types.CHAR ? elem.value : `${elem.from}-${elem.to}`;56 if (map[key]) {57 map[key] = false;58 }59 else {60 return false;61 }62 }63 return true;64}65/**66 * Writes the tokens for a set67 * @param {Set} set The set to display68 * @param {boolean} isNested Whether the token is nested inside another set token69 * @returns {string} The tokens for the set70 */71function writeSetTokens(set, isNested = false) {72 if (isSameSet(set.set, sets.INTS)) {73 return set.not ? '\\D' : '\\d';74 }75 if (isSameSet(set.set, sets.WORDS)) {76 return set.not ? '\\W' : '\\w';77 }78 // Notanychar is only relevant when not nested inside another set token79 if (set.not && isSameSet(set.set, sets.NOTANYCHAR)) {80 return '.';81 }82 if (isSameSet(set.set, sets.WHITESPACE)) {83 return set.not ? '\\S' : '\\s';84 }85 let tokenString = '';86 for (let i = 0; i < set.set.length; i++) {87 const subset = set.set[i];88 tokenString += writeSetToken(subset);89 }90 const contents = `${set.not ? '^' : ''}${tokenString}`;91 return isNested ? contents : `[${contents}]`;92}93exports.writeSetTokens = writeSetTokens;94/**95 * Writes a token within a set96 * @param {Range | Char | Set} set The set token to display97 * @returns {string} The token as a string98 */99function writeSetToken(set) {100 if (set.type === types_1.types.CHAR) {101 return setChar(set.value);102 }103 else if (set.type === types_1.types.RANGE) {104 return `${setChar(set.from)}-${setChar(set.to)}`;105 }106 return writeSetTokens(set, true);107}108//# sourceMappingURL=write-set-tokens.js.map