MCPcopy
hub / github.com/slevithan/xregexp / createBmpRange

Function createBmpRange

tools/scripts/utils.js:79–127  ·  view source on GitHub ↗
(r, {addBrackets} = {addBrackets: true})

Source from the content-addressed store, hash-verified

77};
78
79const createBmpRange = (r, {addBrackets} = {addBrackets: true}) => {
80 if (r.length === 0) {return '';}
81
82 const buf = [];
83 let [start] = r;
84 let [end] = r;
85 let predict = start + 1;
86 r = r.slice(1);
87
88 let counter = 0;
89 for (const code of r) {
90 if (predict == code) {
91 end = code;
92 predict = code + 1;
93 continue;
94 } else {
95 if (start == end) {
96 buf.push(codePointToString(start));
97 counter++;
98 } else if (end == start + 1) {
99 buf.push(`${codePointToString(start)}${codePointToString(end)}`);
100 counter += 2;
101 } else {
102 buf.push(`${codePointToString(start)}-${codePointToString(end)}`);
103 counter += 2;
104 }
105 start = code;
106 end = code;
107 predict = code + 1;
108 }
109 }
110
111 if (start == end) {
112 buf.push(codePointToString(start));
113 counter++;
114 } else if (end == start + 1) {
115 buf.push(`${codePointToString(start)}${codePointToString(end)}`);
116 counter += 2;
117 } else {
118 buf.push(`${codePointToString(start)}-${codePointToString(end)}`);
119 counter += 2;
120 }
121
122 const output = buf.join('');
123 if (!addBrackets || counter == 1) {
124 return output;
125 }
126 return `[${output}]`;
127};
128
129const assemble = ({name, alias, codePoints}) => {
130 const {bmp, astral, isBmpLast} = createRange(codePoints);

Callers 1

createRangeFunction · 0.85

Calls 1

codePointToStringFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…