@@ -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