Skip to content

Commit 928772e

Browse files
authored
[web] Reduce code size impact of fallback font data (flutter#38787)
* [web] Reduce code size impact of fallback font data * fix rangeEnd vs rangeLength mistake
1 parent 5932bad commit 928772e

4 files changed

Lines changed: 800 additions & 181 deletions

File tree

lib/web_ui/dev/generate_fallback_font_data.dart

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,10 @@ class GenerateFallbackFontDataCommand extends Command<bool>
111111
sb.writeln('// dev/generate_fallback_font_data.dart');
112112
sb.writeln("import 'noto_font.dart';");
113113
sb.writeln();
114-
sb.writeln('const List<NotoFont> fallbackFonts = <NotoFont>[');
114+
sb.writeln('final List<NotoFont> fallbackFonts = <NotoFont>[');
115+
115116
for (final String family in fallbackFonts) {
116-
sb.write(" NotoFont('$family', '${urlForFamily[family]!}', ");
117+
sb.writeln(" NotoFont('$family', '${urlForFamily[family]!}',");
117118
final List<String> starts = <String>[];
118119
final List<String> ends = <String>[];
119120
for (final String range in charsetForFamily[family]!.split(' ')) {
@@ -126,15 +127,22 @@ class GenerateFallbackFontDataCommand extends Command<bool>
126127
ends.add(parts[1]);
127128
}
128129
}
129-
sb.write('<int>[');
130+
131+
// Print the unicode ranges in a readable format for easier review. This
132+
// shouldn't affect code size because comments are removed in release mode.
133+
sb.write(' // <int>[');
130134
for (final String start in starts) {
131135
sb.write('0x$start,');
132136
}
133-
sb.write('], <int>[');
137+
sb.writeln('],');
138+
sb.write(' // <int>[');
134139
for (final String end in ends) {
135140
sb.write('0x$end,');
136141
}
137-
sb.writeln(']),');
142+
sb.writeln(']');
143+
144+
sb.writeln(" '${_packFontRanges(starts, ends)}',");
145+
sb.writeln(' ),');
138146
}
139147
sb.writeln('];');
140148

@@ -293,3 +301,23 @@ const List<String> fallbackFonts = <String>[
293301
'Noto Sans Yi',
294302
'Noto Sans Zanabazar Square',
295303
];
304+
305+
String _packFontRanges(List<String> starts, List<String> ends) {
306+
assert(starts.length == ends.length);
307+
308+
final StringBuffer sb = StringBuffer();
309+
310+
for (int i = 0; i < starts.length; i++) {
311+
final int start = int.parse(starts[i], radix: 16);
312+
final int end = int.parse(ends[i], radix: 16);
313+
314+
sb.write(start.toRadixString(36));
315+
sb.write('|');
316+
if (start != end) {
317+
sb.write((end - start).toRadixString(36));
318+
}
319+
sb.write(';');
320+
}
321+
322+
return sb.toString();
323+
}

0 commit comments

Comments
 (0)