build_gfonts.dart
2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import 'dart:convert';
import 'dart:io';
String _capitalize(String s) {
if (s.isEmpty) return s;
return '${s[0].toUpperCase()}${s.substring(1)}';
}
String _uncapitalize(String s) {
if (s.isEmpty) return s;
return '${s[0].toLowerCase()}${s.substring(1)}';
}
void main(List<String> args) async {
final f = File('fonts.json');
final d = StringBuffer();
if (f.existsSync()) {
d.write(await f.readAsString());
} else {
final key = args[0];
final http = HttpClient();
print('Downloading...');
final q = await http.getUrl(Uri.parse(
'https://content-webfonts.googleapis.com/v1/webfonts?key=$key'));
final r = await q.close();
await for (final c in r.transform(utf8.decoder)) {
d.write(c);
}
await f.writeAsString(d.toString());
}
print('Converting...');
final Map m = json.decode(d.toString());
final output =
await File('../printing/lib/src/fonts/gfonts.dart').openWrite();
output.writeln('import \'package:pdf/widgets.dart\';');
output.writeln('');
output.writeln('import \'font.dart\';');
output.writeln('');
output.writeln('/// Google Fonts');
output.writeln('class PdfGoogleFonts extends DownloadbleFont {');
output.writeln('');
output.writeln('/// Create a Google Font');
output.writeln(
'const PdfGoogleFonts._(String url, String name) : super(url, name);');
for (final f in m['items']) {
final family = _uncapitalize(f['family'].replaceAll(' ', ''));
for (final s in f['files'].entries) {
var sub = _capitalize(s.key);
sub = sub.replaceAll('100', 'Thin ');
sub = sub.replaceAll('200', 'ExtraLight ');
sub = sub.replaceAll('300', 'Light ');
sub = sub.replaceAll('400', 'Regular ');
sub = sub.replaceAll('500', 'Medium ');
sub = sub.replaceAll('600', 'SemiBold ');
sub = sub.replaceAll('700', 'Bold ');
sub = sub.replaceAll('800', 'ExtraBold ');
sub = sub.replaceAll('900', 'Black ');
sub = sub.split(' ').map<String>((String e) => _capitalize(e)).join('');
final name = _capitalize(family) + '-' + sub;
output.writeln('');
output.writeln('/// ${f['family']} ${s.key}');
output.writeln('static Future<Font> $family$sub() {');
output.writeln(
'const font = PdfGoogleFonts._(\'${s.value}\', \'$name\',);');
output.writeln('return font.getFont();');
output.writeln('}');
}
}
for (final entry in <String, String>{
'MaterialIcons':
'https://fonts.gstatic.com/s/materialicons/v90/flUhRq6tzZclQEJ-Vdg-IuiaDsNZ.ttf'
}.entries) {
output.writeln('');
output.writeln('/// ${entry.key}');
output.writeln('static Future<Font> ${_uncapitalize(entry.key)}() {');
output.writeln(
'const font = PdfGoogleFonts._(\'${entry.value}\', \'${entry.key}\',);');
output.writeln('return font.getFont();');
output.writeln('}');
}
output.writeln('}');
await output.close();
print('Done');
}