Skip to content

Commit 1971299

Browse files
Snuffleupagusbackstroke-bot
authored andcommitted
Change the signature of the Parser constructor to take a parameter object
A lot of the `new Parser()` call-sites look quite unwieldy/ugly as-is, with a bunch of somewhat randomly ordered arguments, which we can avoid by changing the constructor to accept an object instead. As an added bonus, this provides better documentation without having to add inline argument comments in the code.
1 parent a026240 commit 1971299

File tree

5 files changed

+53
-21
lines changed

5 files changed

+53
-21
lines changed

src/core/evaluator.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2960,7 +2960,10 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
29602960
this.opMap = getOPMap();
29612961
// TODO(mduan): pass array of knownCommands rather than this.opMap
29622962
// dictionary
2963-
this.parser = new Parser(new Lexer(stream, this.opMap), false, xref);
2963+
this.parser = new Parser({
2964+
lexer: new Lexer(stream, this.opMap),
2965+
xref,
2966+
});
29642967
this.stateManager = stateManager;
29652968
this.nonProcessedArgs = [];
29662969
this._numInvalidPathOPS = 0;

src/core/obj.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,8 +1477,12 @@ var XRef = (function XRefClosure() {
14771477
let trailerDict;
14781478
for (i = 0, ii = trailers.length; i < ii; ++i) {
14791479
stream.pos = trailers[i];
1480-
var parser = new Parser(new Lexer(stream), /* allowStreams = */ true,
1481-
/* xref = */ this, /* recoveryMode = */ true);
1480+
const parser = new Parser({
1481+
lexer: new Lexer(stream),
1482+
xref: this,
1483+
allowStreams: true,
1484+
recoveryMode: true,
1485+
});
14821486
var obj = parser.getObj();
14831487
if (!isCmd(obj, 'trailer')) {
14841488
continue;
@@ -1536,7 +1540,11 @@ var XRef = (function XRefClosure() {
15361540

15371541
stream.pos = startXRef + stream.start;
15381542

1539-
var parser = new Parser(new Lexer(stream), true, this);
1543+
const parser = new Parser({
1544+
lexer: new Lexer(stream),
1545+
xref: this,
1546+
allowStreams: true,
1547+
});
15401548
var obj = parser.getObj();
15411549
var dict;
15421550

@@ -1662,7 +1670,11 @@ var XRef = (function XRefClosure() {
16621670
}
16631671
var stream = this.stream.makeSubStream(xrefEntry.offset +
16641672
this.stream.start);
1665-
var parser = new Parser(new Lexer(stream), true, this);
1673+
const parser = new Parser({
1674+
lexer: new Lexer(stream),
1675+
xref: this,
1676+
allowStreams: true,
1677+
});
16661678
var obj1 = parser.getObj();
16671679
var obj2 = parser.getObj();
16681680
var obj3 = parser.getObj();
@@ -1709,8 +1721,11 @@ var XRef = (function XRefClosure() {
17091721
throw new FormatError(
17101722
'invalid first and n parameters for ObjStm stream');
17111723
}
1712-
var parser = new Parser(new Lexer(stream), false, this);
1713-
parser.allowStreams = true;
1724+
const parser = new Parser({
1725+
lexer: new Lexer(stream),
1726+
xref: this,
1727+
allowStreams: true,
1728+
});
17141729
var i, entries = [], num, nums = [];
17151730
// read the object numbers to populate cache
17161731
for (i = 0; i < n; ++i) {

src/core/parser.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ function computeAdler32(bytes) {
5151
}
5252

5353
class Parser {
54-
constructor(lexer, allowStreams, xref, recoveryMode = false) {
54+
constructor({ lexer, xref, allowStreams = false, recoveryMode = false, }) {
5555
this.lexer = lexer;
56-
this.allowStreams = allowStreams;
5756
this.xref = xref;
57+
this.allowStreams = allowStreams;
5858
this.recoveryMode = recoveryMode;
5959

6060
this.imageCache = Object.create(null);
@@ -748,7 +748,7 @@ function toHexDigit(ch) {
748748
}
749749

750750
class Lexer {
751-
constructor(stream, knownCommands) {
751+
constructor(stream, knownCommands = null) {
752752
this.stream = stream;
753753
this.nextChar();
754754

@@ -1202,7 +1202,10 @@ class Linearization {
12021202
throw new Error('Hint array in the linearization dictionary is invalid.');
12031203
}
12041204

1205-
const parser = new Parser(new Lexer(stream), false, null);
1205+
const parser = new Parser({
1206+
lexer: new Lexer(stream),
1207+
xref: null,
1208+
});
12061209
const obj1 = parser.getObj();
12071210
const obj2 = parser.getObj();
12081211
const obj3 = parser.getObj();

test/unit/annotation_spec.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -409,8 +409,10 @@ describe('annotation', function() {
409409
'/URI (http://www.example.com/\\303\\274\\303\\266\\303\\244)\n' +
410410
'>>\n'
411411
);
412-
const lexer = new Lexer(actionStream);
413-
const parser = new Parser(lexer);
412+
const parser = new Parser({
413+
lexer: new Lexer(actionStream),
414+
xref: null,
415+
});
414416
const actionDict = parser.getObj();
415417

416418
const annotationDict = new Dict();
@@ -1412,8 +1414,11 @@ describe('annotation', function() {
14121414
'Test attachment' +
14131415
'endstream\n'
14141416
);
1415-
const lexer = new Lexer(fileStream);
1416-
const parser = new Parser(lexer, /* allowStreams = */ true);
1417+
const parser = new Parser({
1418+
lexer: new Lexer(fileStream),
1419+
xref: null,
1420+
allowStreams: true,
1421+
});
14171422

14181423
const fileStreamRef = Ref.get(18, 0);
14191424
const fileStreamDict = parser.getObj();

test/unit/parser_spec.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,12 @@ describe('parser', function() {
2626
const string = 'q 1 0 0 1 0 0 cm BI /W 10 /H 10 /BPC 1 ' +
2727
'/F /A85 ID abc123~> EI Q';
2828
const input = new StringStream(string);
29-
const lexer = new Lexer(input);
30-
const parser = new Parser(lexer, /* allowStreams = */ true,
31-
/* xref = */ null);
29+
const parser = new Parser({
30+
lexer: new Lexer(input),
31+
xref: null,
32+
allowStreams: true,
33+
});
34+
3235
parser.inlineStreamSkipEI(input);
3336
expect(input.pos).toEqual(string.indexOf('Q'));
3437
expect(input.peekByte()).toEqual(0x51); // 'Q'
@@ -39,9 +42,12 @@ describe('parser', function() {
3942
const string = 'q 1 0 0 1 0 0 cm BI /W 10 /H 10 /BPC 1 ' +
4043
'/F /A85 ID abc123~> Q';
4144
const input = new StringStream(string);
42-
const lexer = new Lexer(input);
43-
const parser = new Parser(lexer, /* allowStreams = */ true,
44-
/* xref = */ null);
45+
const parser = new Parser({
46+
lexer: new Lexer(input),
47+
xref: null,
48+
allowStreams: true,
49+
});
50+
4551
parser.inlineStreamSkipEI(input);
4652
expect(input.pos).toEqual(string.length);
4753
expect(input.peekByte()).toEqual(-1);

0 commit comments

Comments
 (0)