David PHAM-VAN

Do not modify the TTF font streams

  1 +# 1.3.13
  2 +* Do not modify the TTF font streams
  3 +
1 # 1.3.12 4 # 1.3.12
2 * Fix TextStyle constructor 5 * Fix TextStyle constructor
3 6
@@ -16,19 +16,28 @@ @@ -16,19 +16,28 @@
16 16
17 part of pdf; 17 part of pdf;
18 18
  19 +@immutable
19 class TtfGlyphInfo { 20 class TtfGlyphInfo {
20 - TtfGlyphInfo(this.index, this.data, this.compounds); 21 + const TtfGlyphInfo(this.index, this.data, this.compounds);
21 22
22 final int index; 23 final int index;
23 final Uint8List data; 24 final Uint8List data;
24 final List<int> compounds; 25 final List<int> compounds;
25 26
  27 + TtfGlyphInfo copy() {
  28 + return TtfGlyphInfo(
  29 + index,
  30 + Uint8List.fromList(data),
  31 + List<int>.from(compounds),
  32 + );
  33 + }
  34 +
26 @override 35 @override
27 String toString() => 'Glyph $index $compounds'; 36 String toString() => 'Glyph $index $compounds';
28 } 37 }
29 38
30 class TtfParser { 39 class TtfParser {
31 - TtfParser(this.bytes) { 40 + TtfParser(ByteData bytes) : bytes = UnmodifiableByteDataView(bytes) {
32 final int numTables = bytes.getUint16(4); 41 final int numTables = bytes.getUint16(4);
33 42
34 for (int i = 0; i < numTables; i++) { 43 for (int i = 0; i < numTables; i++) {
@@ -54,7 +63,7 @@ class TtfParser { @@ -54,7 +63,7 @@ class TtfParser {
54 static const String loca_table = 'loca'; 63 static const String loca_table = 'loca';
55 static const String glyf_table = 'glyf'; 64 static const String glyf_table = 'glyf';
56 65
57 - final ByteData bytes; 66 + final UnmodifiableByteDataView bytes;
58 final Map<String, int> tableOffsets = <String, int>{}; 67 final Map<String, int> tableOffsets = <String, int>{};
59 final Map<String, int> tableSize = <String, int>{}; 68 final Map<String, int> tableSize = <String, int>{};
60 String _fontName; 69 String _fontName;
@@ -284,7 +293,7 @@ class TtfParser { @@ -284,7 +293,7 @@ class TtfParser {
284 return TtfGlyphInfo( 293 return TtfGlyphInfo(
285 glyph, 294 glyph,
286 Uint8List.view(bytes.buffer, start, offset - start), 295 Uint8List.view(bytes.buffer, start, offset - start),
287 - <int>[], 296 + const <int>[],
288 ); 297 );
289 } 298 }
290 299
@@ -322,7 +331,7 @@ class TtfParser { @@ -322,7 +331,7 @@ class TtfParser {
322 return TtfGlyphInfo( 331 return TtfGlyphInfo(
323 glyph, 332 glyph,
324 Uint8List.view(bytes.buffer, start, offset - start), 333 Uint8List.view(bytes.buffer, start, offset - start),
325 - <int>[], 334 + const <int>[],
326 ); 335 );
327 } 336 }
328 337
@@ -62,13 +62,14 @@ class TtfWriter { @@ -62,13 +62,14 @@ class TtfWriter {
62 62
63 for (int index = 0; index < chars.length; index++) { 63 for (int index = 0; index < chars.length; index++) {
64 if (chars[index] == 32) { 64 if (chars[index] == 32) {
65 - final TtfGlyphInfo glyph = TtfGlyphInfo(32, Uint8List(0), <int>[]); 65 + final TtfGlyphInfo glyph =
  66 + TtfGlyphInfo(32, Uint8List(0), const <int>[]);
66 glyphsInfo.add(glyph); 67 glyphsInfo.add(glyph);
67 continue; 68 continue;
68 } 69 }
69 70
70 final TtfGlyphInfo glyph = 71 final TtfGlyphInfo glyph =
71 - ttf.readGlyph(ttf.charToGlyphIndexMap[chars[index]] ?? 0); 72 + ttf.readGlyph(ttf.charToGlyphIndexMap[chars[index]] ?? 0).copy();
72 for (int g in glyph.compounds) { 73 for (int g in glyph.compounds) {
73 compounds[g] = null; 74 compounds[g] = null;
74 } 75 }
@@ -92,7 +93,7 @@ class TtfWriter { @@ -92,7 +93,7 @@ class TtfWriter {
92 } 93 }
93 94
94 // Add one last empty glyph 95 // Add one last empty glyph
95 - final TtfGlyphInfo glyph = TtfGlyphInfo(32, Uint8List(0), <int>[]); 96 + final TtfGlyphInfo glyph = TtfGlyphInfo(32, Uint8List(0), const <int>[]);
96 glyphsInfo.add(glyph); 97 glyphsInfo.add(glyph);
97 98
98 // update compound indices 99 // update compound indices
@@ -131,6 +131,9 @@ class Font { @@ -131,6 +131,9 @@ class Font {
131 _pdfFont = buildFont(pdfDocument); 131 _pdfFont = buildFont(pdfDocument);
132 } 132 }
133 133
  134 + assert(_pdfFont.pdfDocument == context.document,
  135 + 'Do not reuse a Font object across multiple documents');
  136 +
134 return _pdfFont; 137 return _pdfFont;
135 } 138 }
136 139
@@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl
4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf 4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf
5 repository: https://github.com/DavBfr/dart_pdf 5 repository: https://github.com/DavBfr/dart_pdf
6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues 6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues
7 -version: 1.3.12 7 +version: 1.3.13
8 8
9 environment: 9 environment:
10 sdk: ">=2.1.0 <3.0.0" 10 sdk: ">=2.1.0 <3.0.0"