David PHAM-VAN

Make PdfXref a PdfIndirect descendent

@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 - Fix Page Content 13 - Fix Page Content
14 - Reorganize data types 14 - Reorganize data types
15 - Improve Documents conformity 15 - Improve Documents conformity
  16 +- Make PdfXref a PdfIndirect descendent
16 17
17 ## 3.9.0 18 ## 3.9.0
18 19
@@ -31,18 +31,15 @@ import 'stream.dart'; @@ -31,18 +31,15 @@ import 'stream.dart';
31 enum PdfCrossRefEntryType { free, inUse, compressed } 31 enum PdfCrossRefEntryType { free, inUse, compressed }
32 32
33 /// Cross-reference for a Pdf Object 33 /// Cross-reference for a Pdf Object
34 -class PdfXref { 34 +class PdfXref extends PdfIndirect {
35 /// Creates a cross-reference for a Pdf Object 35 /// Creates a cross-reference for a Pdf Object
36 const PdfXref( 36 const PdfXref(
37 - this.id, 37 + int ser,
38 this.offset, { 38 this.offset, {
39 - this.generation = 0, 39 + int gen = 0,
40 this.object, 40 this.object,
41 this.type = PdfCrossRefEntryType.inUse, 41 this.type = PdfCrossRefEntryType.inUse,
42 - });  
43 -  
44 - /// The id of a Pdf Object  
45 - final int id; 42 + }) : super(ser, gen);
46 43
47 /// The offset within the Pdf file 44 /// The offset within the Pdf file
48 final int offset; 45 final int offset;
@@ -50,14 +47,11 @@ class PdfXref { @@ -50,14 +47,11 @@ class PdfXref {
50 /// The object ID containing this compressed object 47 /// The object ID containing this compressed object
51 final int? object; 48 final int? object;
52 49
53 - /// The generation of the object, usually 0  
54 - final int generation;  
55 -  
56 final PdfCrossRefEntryType type; 50 final PdfCrossRefEntryType type;
57 51
58 /// The xref in the format of the xref section in the Pdf file 52 /// The xref in the format of the xref section in the Pdf file
59 String _legacyRef() { 53 String _legacyRef() {
60 - return '${offset.toString().padLeft(10, '0')} ${generation.toString().padLeft(5, '0')}${type == PdfCrossRefEntryType.inUse ? ' n ' : ' f '}'; 54 + return '${offset.toString().padLeft(10, '0')} ${gen.toString().padLeft(5, '0')}${type == PdfCrossRefEntryType.inUse ? ' n ' : ' f '}';
61 } 55 }
62 56
63 PdfIndirect? get container => object == null ? null : PdfIndirect(object!, 0); 57 PdfIndirect? get container => object == null ? null : PdfIndirect(object!, 0);
@@ -75,7 +69,7 @@ class PdfXref { @@ -75,7 +69,7 @@ class PdfXref {
75 69
76 setVal(w[0], type == PdfCrossRefEntryType.inUse ? 1 : 0); 70 setVal(w[0], type == PdfCrossRefEntryType.inUse ? 1 : 0);
77 setVal(w[1], offset); 71 setVal(w[1], offset);
78 - setVal(w[2], generation); 72 + setVal(w[2], gen);
79 73
80 return ofs; 74 return ofs;
81 } 75 }
@@ -90,7 +84,7 @@ class PdfXref { @@ -90,7 +84,7 @@ class PdfXref {
90 } 84 }
91 85
92 @override 86 @override
93 - String toString() => '$id $generation obj ${type.name} $offset'; 87 + String toString() => '$ser $gen obj ${type.name} $offset';
94 88
95 @override 89 @override
96 int get hashCode => offset; 90 int get hashCode => offset;
@@ -145,7 +139,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { @@ -145,7 +139,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
145 139
146 for (final ob in objects) { 140 for (final ob in objects) {
147 final offset = ob.output(s); 141 final offset = ob.output(s);
148 - _offsets.add(PdfXref(ob.objser, offset, generation: ob.objgen)); 142 + _offsets.add(PdfXref(ob.objser, offset, gen: ob.objgen));
149 } 143 }
150 144
151 final int xrefOffset; 145 final int xrefOffset;
@@ -197,8 +191,8 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { @@ -197,8 +191,8 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
197 191
198 int outputLegacy(PdfObjectBase o, PdfStream s) { 192 int outputLegacy(PdfObjectBase o, PdfStream s) {
199 // Now scan through the offsets list. They should be in sequence. 193 // Now scan through the offsets list. They should be in sequence.
200 - _offsets.sort((a, b) => a.id.compareTo(b.id));  
201 - final size = _offsets.last.id + 1; 194 + _offsets.sort((a, b) => a.ser.compareTo(b.ser));
  195 + final size = _offsets.last.ser + 1;
202 196
203 assert(() { 197 assert(() {
204 if (o.verbose) { 198 if (o.verbose) {
@@ -217,7 +211,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { @@ -217,7 +211,7 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
217 block.add(const PdfXref( 211 block.add(const PdfXref(
218 0, 212 0,
219 0, 213 0,
220 - generation: 65535, 214 + gen: 65535,
221 type: PdfCrossRefEntryType.free, 215 type: PdfCrossRefEntryType.free,
222 )); 216 ));
223 217
@@ -226,16 +220,16 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { @@ -226,16 +220,16 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
226 220
227 for (final x in _offsets) { 221 for (final x in _offsets) {
228 // check to see if block is in range 222 // check to see if block is in range
229 - if (x.id != (lastId + 1)) { 223 + if (x.ser != (lastId + 1)) {
230 // no, so write this block, and reset 224 // no, so write this block, and reset
231 _writeBlock(s, firstId, block); 225 _writeBlock(s, firstId, block);
232 block.clear(); 226 block.clear();
233 - firstId = x.id; 227 + firstId = x.ser;
234 } 228 }
235 229
236 // now add to block 230 // now add to block
237 block.add(x); 231 block.add(x);
238 - lastId = x.id; 232 + lastId = x.ser;
239 } 233 }
240 234
241 // now write the last block 235 // now write the last block
@@ -261,10 +255,10 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { @@ -261,10 +255,10 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
261 final offset = s.offset; 255 final offset = s.offset;
262 256
263 // Sort all references 257 // Sort all references
264 - _offsets.sort((a, b) => a.id.compareTo(b.id)); 258 + _offsets.sort((a, b) => a.ser.compareTo(b.ser));
265 259
266 // Write this object too 260 // Write this object too
267 - final id = _offsets.last.id + 1; 261 + final id = _offsets.last.ser + 1;
268 final size = id + 1; 262 final size = id + 1;
269 _offsets.add(PdfXref(id, offset)); 263 _offsets.add(PdfXref(id, offset));
270 264
@@ -280,13 +274,13 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic { @@ -280,13 +274,13 @@ class PdfXrefTable extends PdfDataType with PdfDiagnostic {
280 274
281 for (final x in _offsets) { 275 for (final x in _offsets) {
282 // check to see if block is in range 276 // check to see if block is in range
283 - if (x.id != (lastId + 1)) { 277 + if (x.ser != (lastId + 1)) {
284 // no, so store this block, and reset 278 // no, so store this block, and reset
285 blocks.add(lastId - firstId + 1); 279 blocks.add(lastId - firstId + 1);
286 - firstId = x.id; 280 + firstId = x.ser;
287 blocks.add(firstId); 281 blocks.add(firstId);
288 } 282 }
289 - lastId = x.id; 283 + lastId = x.ser;
290 } 284 }
291 blocks.add(lastId - firstId + 1); 285 blocks.add(lastId - firstId + 1);
292 286