MCPcopy Create free account
hub / github.com/LibPDF-js/core / parseObject

Method parseObject

src/parser/indirect-object-parser.ts:61–132  ·  view source on GitHub ↗

* Parse indirect object at current scanner position.

()

Source from the content-addressed store, hash-verified

59 * Parse indirect object at current scanner position.
60 */
61 parseObject(): IndirectObject {
62 const reader = new TokenReader(this.scanner);
63
64 // Read object number
65 const objNumToken = reader.nextToken();
66
67 if (objNumToken.type !== "number" || !objNumToken.isInteger) {
68 throw new ObjectParseError("Expected integer object number");
69 }
70
71 const objNum = objNumToken.value;
72
73 // Read generation number
74 const genNumToken = reader.nextToken();
75
76 if (genNumToken.type !== "number" || !genNumToken.isInteger) {
77 throw new ObjectParseError("Expected integer generation number");
78 }
79
80 const genNum = genNumToken.value;
81
82 // Read "obj" keyword
83 const objKeyword = reader.nextToken();
84
85 if (objKeyword.type !== "keyword" || objKeyword.value !== "obj") {
86 throw new ObjectParseError(`Expected 'obj' keyword, got ${objKeyword.type}`);
87 }
88
89 // Parse the object value
90 const objectParser = new ObjectParser(reader);
91
92 objectParser.recoveryMode = this.options.recoveryMode ?? false;
93 objectParser.onWarning = this.options.onWarning ?? null;
94
95 const result = objectParser.parseObject();
96
97 if (result === null) {
98 throw new ObjectParseError("Expected object value");
99 }
100
101 let value: PdfObject;
102
103 if (result.hasStream) {
104 // It's a stream object - read the stream data
105 // Position scanner right after "stream" keyword
106 this.scanner.moveTo(result.streamKeywordPosition + 6); // 6 = length of "stream"
107
108 // After this, scanner position is right after "endstream"
109 value = this.readStream(result.object);
110
111 // Consume "endobj" directly from scanner (reader state is out of sync)
112 try {
113 this.expectKeyword("endobj");
114 } catch {
115 // Be lenient - some PDFs have issues with endobj
116 }
117 } else {
118 value = result.object;

Callers 2

parseObjectAtMethod · 0.95
parseStreamMethod · 0.95

Calls 5

nextTokenMethod · 0.95
parseObjectMethod · 0.95
readStreamMethod · 0.95
expectKeywordMethod · 0.95
moveToMethod · 0.65

Tested by

no test coverage detected