1 | "use strict";
|
2 | var __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 | }));
|
9 | var __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 | });
|
14 | var __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 | };
|
21 | Object.defineProperty(exports, "__esModule", { value: true });
|
22 | exports.writeSetTokens = exports.setChar = void 0;
|
23 | const types_1 = require("./types");
|
24 | const sets = __importStar(require("./sets-lookup"));
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | function setChar(charCode) {
|
31 | return charCode === 94 ? '\\^' :
|
32 | charCode === 92 ? '\\\\' :
|
33 | charCode === 93 ? '\\]' :
|
34 | charCode === 45 ? '\\-' :
|
35 | String.fromCharCode(charCode);
|
36 | }
|
37 | exports.setChar = setChar;
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 | function isSameSet(set, { lookup, len }) {
|
45 |
|
46 |
|
47 | 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 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | function 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 token
|
79 | 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 | }
|
93 | exports.writeSetTokens = writeSetTokens;
|
94 | /**
|
95 | * Writes a token within a set
|
96 | * @param {Range | Char | Set} set The set token to display
|
97 | * @returns {string} The token as a string
|
98 | */
|
99 | function 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 |
\ | No newline at end of file |