Skip to content

Commit 232d771

Browse files
committed
Address comments.
1 parent 22df6eb commit 232d771

File tree

6 files changed

+36
-32
lines changed

6 files changed

+36
-32
lines changed

pkgs/characters/lib/src/grapheme_clusters/table.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,6 +1130,7 @@ const String _start = '\u1132\u166c\u166c\u206f\u11c0\u13fb\u166c\u166c\u166c'
11301130
@pragma('vm:prefer-inline')
11311131
@pragma('wasm:prefer-inline')
11321132
int low(int codeUnit) {
1133+
assert(codeUnit <= 0xFFFF);
11331134
var chunkStart = _start.codeUnitAt(codeUnit >> 5);
11341135
var index = chunkStart + (codeUnit & 31);
11351136
return _data.codeUnitAt(index);
@@ -1139,10 +1140,11 @@ int low(int codeUnit) {
11391140
@pragma('vm:prefer-inline')
11401141
@pragma('wasm:prefer-inline')
11411142
int high(int lead, int tail) {
1142-
var offset = (tail >> 8) + (lead << 2);
1143-
tail &= 255;
1144-
var chunkStart = _start.codeUnitAt(2048 + offset);
1145-
return _data.codeUnitAt(chunkStart + tail);
1143+
assert(lead <= 0x3FF && tail <= 0x3FF);
1144+
var chunkIndex = (tail >> 8) + (lead << 2);
1145+
var byteIndex = tail & 255;
1146+
var chunkStart = _start.codeUnitAt(2048 + chunkIndex);
1147+
return _data.codeUnitAt(chunkStart + byteIndex);
11461148
}
11471149

11481150
const _stateMachine = '\x15\x01)))µ\x8d\x01=QeyeyÉ)))ñð\x15\x01)))µ\x8d\x00=Qey'

pkgs/characters/pubspec.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ topics:
1010
- unicode
1111

1212
environment:
13-
sdk: ^3.4.0
13+
sdk: ^3.8.0
1414

1515
dev_dependencies:
16-
dart_flutter_team_lints: ^3.1.0
17-
test: ^1.16.6
16+
dart_flutter_team_lints: ^3.5.0
17+
test: ^1.26.0

pkgs/characters/test/characters_test.dart

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,28 +115,29 @@ void main([List<String>? args]) {
115115
var zwj = '\u200d'; // U+200D, ZWJ
116116
var rainbow = '\u{1f308}'; // U+1F308, Rainbow. Category Pictogram
117117

118-
var rbflag = '$flag$white$zwj$rainbow';
119-
var string = '-$rbflag-';
118+
var rainbowFlag = '$flag$white$zwj$rainbow';
119+
var string = '-$rainbowFlag-';
120120
var range = CharacterRange.at(string, 1);
121121
expect(range.isEmpty, true);
122122
expect(range.moveNext(), true);
123-
expect(range.current, rbflag);
123+
expect(range.current, rainbowFlag);
124124

125125
range = range = CharacterRange.at(string, 2);
126126
expect(range.isEmpty, false);
127-
expect(range.current, rbflag);
127+
expect(range.current, rainbowFlag);
128128

129129
range = range = CharacterRange.at(string, 0, 2);
130130
expect(range.isEmpty, false);
131-
expect(range.current, '-$rbflag');
131+
expect(range.current, '-$rainbowFlag');
132132

133133
range = range = CharacterRange.at(string, 0, 2);
134134
expect(range.isEmpty, false);
135-
expect(range.current, '-$rbflag');
135+
expect(range.current, '-$rainbowFlag');
136136

137-
range = range = CharacterRange.at(string, 2, '-$rbflag'.length - 1);
137+
range =
138+
range = CharacterRange.at(string, 2, '-$rainbowFlag'.length - 1);
138139
expect(range.isEmpty, false);
139-
expect(range.current, rbflag);
140+
expect(range.current, rainbowFlag);
140141
expect(range.stringBeforeLength, 1);
141142

142143
range = range = CharacterRange.at(string, 0, string.length);

pkgs/characters/tool/benchmark.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ void main(List<String> args) {
1616
if (args.isNotEmpty) {
1717
count = int.parse(args[0]);
1818
}
19-
var gcsf = 0;
20-
var gcsb = 0;
19+
var gcSumForward = 0;
20+
var gcSumBackwards = 0;
2121

2222
var text = genesis +
2323
hangul +
@@ -29,19 +29,19 @@ void main(List<String> args) {
2929
var codeUnits = text.length;
3030
var codePoints = text.runes.length;
3131
for (var i = 0; i < count; i++) {
32-
gcsf = benchForward(text, i, codePoints, codeUnits);
33-
gcsb = benchBackward(text, i, codePoints, codeUnits);
32+
gcSumForward = benchForward(text, i, codePoints, codeUnits);
33+
gcSumBackwards = benchBackward(text, i, codePoints, codeUnits);
3434
}
3535
print('gc: Grapheme Clusters, cp: Code Points, cu: Code Units.');
36-
if (gcsf != gcsb) {
36+
if (gcSumForward != gcSumBackwards) {
3737
print(
3838
'ERROR: Did not count the same number of grapheme clusters: '
39-
'$gcsf forward vs. $gcsb backward.',
39+
'$gcSumForward forward vs. $gcSumBackwards backward.',
4040
);
4141
} else {
42-
print('Total: $gcsf gc, $codePoints cp, $codeUnits cu');
43-
print('Avg ${(codePoints / gcsf).toStringAsFixed(3)} cp/gc');
44-
print('Avg ${(codeUnits / gcsf).toStringAsFixed(3)} cu/gc');
42+
print('Total: $gcSumForward gc, $codePoints cp, $codeUnits cu');
43+
print('Avg ${(codePoints / gcSumForward).toStringAsFixed(3)} cp/gc');
44+
print('Avg ${(codeUnits / gcSumForward).toStringAsFixed(3)} cu/gc');
4545
}
4646
}
4747

pkgs/characters/tool/bin/generate_tables.dart

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ String _lookupMethod(
307307
'''
308308
$preferInline
309309
int $name(int codeUnit) {
310+
assert(codeUnit <= 0xFFFF);
310311
var chunkStart = $startName.codeUnitAt(codeUnit >> ${chunkSize.bitLength - 1});
311312
var index = chunkStart + (codeUnit & ${chunkSize - 1});
312313
return $dataName.codeUnitAt(index);
@@ -326,6 +327,7 @@ String _lookupSurrogatesMethod(
326327
return '''
327328
$preferInline
328329
int $name(int lead, int tail) {
330+
assert(lead <= 0x3FF && tail <= 0x3FF);
329331
var chunkStart = $startName.codeUnitAt($startOffset + lead);
330332
return $dataName.codeUnitAt(chunkStart + tail);
331333
}
@@ -335,15 +337,17 @@ int $name(int lead, int tail) {
335337
return '''
336338
$preferInline
337339
int $name(int lead, int tail) {
338-
var offset = (tail >> $shift) + (lead << ${10 - shift});
339-
tail &= ${chunkSize - 1};
340-
var chunkStart = $startName.codeUnitAt($startOffset + offset);
341-
return $dataName.codeUnitAt(chunkStart + tail);
340+
assert(lead <= 0x3FF && tail <= 0x3FF);
341+
var chunkIndex = (tail >> $shift) + (lead << ${10 - shift});
342+
var byteIndex = tail & ${chunkSize - 1};
343+
var chunkStart = $startName.codeUnitAt($startOffset + chunkIndex);
344+
return $dataName.codeUnitAt(chunkStart + byteIndex);
342345
}
343346
''';
344347
}
345348
// Add code if shift > 10 ever becomes optimal for table size.
346-
// Example code:
349+
// Fx: chunkIndex = lead >> ${20 - shift};
350+
// byteIndex = tail + ((lead & ${(chunkSize >> 10) - 1}) << 10);
347351
throw UnimplementedError('No code for chunk sizes > 10 bits');
348352
}
349353

pkgs/characters/tool/src/grapheme_category_loader.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -291,9 +291,6 @@ Uint8List _parseInCBCategories(String file, {required bool verbose}) {
291291
}
292292

293293
// --------------------------------------------------------------------
294-
// TODO: Use a sparse table?
295-
// Likely not worth it.
296-
297294
/// Fixed length table for Unicode properties.
298295
class UnicodePropertyTable {
299296
static const int _unicodeCodePoints = 0x110000;

0 commit comments

Comments
 (0)