Skip to content

Commit c9536f1

Browse files
committed
🎨 improve unicode/ids.ts
1 parent 3ab3e24 commit c9536f1

File tree

2 files changed

+33
-1953
lines changed

2 files changed

+33
-1953
lines changed

‎scripts/update-unicode-ids.ts

+22-5
Original file line numberDiff line numberDiff line change
@@ -62,22 +62,28 @@ export function isIdStart(cp: number): boolean {
6262
${makeSmallCondition(idStartSmall)}
6363
return isLargeIdStart(cp)
6464
}
65+
6566
export function isIdContinue(cp: number): boolean {
6667
${makeSmallCondition(idContinueSmall)}
6768
return isLargeIdStart(cp) || isLargeIdContinue(cp)
6869
}
70+
6971
function isLargeIdStart(cp: number): boolean {
7072
return isInRange(cp, largeIdStartRanges || (largeIdStartRanges = initLargeIdStartRanges()))
7173
}
74+
7275
function isLargeIdContinue(cp: number): boolean {
7376
return isInRange(cp, largeIdContinueRanges || (largeIdContinueRanges = initLargeIdContinueRanges()))
7477
}
78+
7579
function initLargeIdStartRanges(): number[] {
7680
${makeInitLargeIdRanges(idStartLarge)}
7781
}
82+
7883
function initLargeIdContinueRanges(): number[] {
7984
${makeInitLargeIdRanges(idContinueLarge)}
8085
}
86+
8187
function isInRange(cp: number, ranges: number[]): boolean {
8288
let l = 0, r = ranges.length / 2 | 0, i = 0, min = 0, max = 0
8389
while (l < r) {
@@ -93,7 +99,16 @@ function isInRange(cp: number, ranges: number[]): boolean {
9399
}
94100
}
95101
return false
96-
}`
102+
}
103+
104+
function restoreRanges(diffs: number[]): number[] {
105+
let last = 0
106+
for (let i = 0; i < diffs.length; ++i) {
107+
last = (diffs[i] += last)
108+
}
109+
return diffs
110+
}
111+
`
97112

98113
logger.log("Formatting code...")
99114
const engine = new CLIEngine({
@@ -164,12 +179,14 @@ function makeSmallCondition(ranges: [number, number][]): string {
164179
}
165180

166181
function makeInitLargeIdRanges(ranges: [number, number][]): string {
167-
const lines: string[] = ["return ["]
182+
const strings: string[] = ["return restoreRanges(["]
183+
let last = 0
168184
for (const [min, max] of ranges) {
169-
lines.push(`0x${min.toString(16)}, 0x${max.toString(16)},`)
185+
strings.push(`${min - last},${max - min},`)
186+
last = max
170187
}
171-
lines.push("]")
172-
return lines.join("\n")
188+
strings.push("]) //eslint-disable-line @mysticatea/prettier")
189+
return strings.join("")
173190
}
174191

175192
function save(content: string): Promise<void> {

0 commit comments

Comments
 (0)