From: Brendan Dahl Date: Thu, 5 Apr 2012 22:39:47 +0000 (-0700) Subject: Merge pull request #1486 from yurydelendik/issue-1466 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=449d7105c6ffb58e88e167e5e87d68df54bd0074;p=pdf.js.git Merge pull request #1486 from yurydelendik/issue-1466 Improving invalid operations syntax recovery (#1466) --- 449d7105c6ffb58e88e167e5e87d68df54bd0074 diff --cc src/evaluator.js index 203247b,bb542b7..3f54460 --- a/src/evaluator.js +++ b/src/evaluator.js @@@ -111,11 -111,20 +111,22 @@@ var PartialEvaluator = (function Partia EX: 'endCompat' }; + function splitCombinedOperations(operations) { + // Two operations can be combined together, trying to find which two + // operations were concatenated. + for (var i = operations.length - 1; i > 0; i--) { + var op1 = operations.substring(0, i), op2 = operations.substring(i); + if (op1 in OP_MAP && op2 in OP_MAP) + return [op1, op2]; // operations found + } + return null; + } + PartialEvaluator.prototype = { - getOperatorList: function partialEvaluatorGetOperatorList(stream, resources, - dependency, queue) { + getOperatorList: function PartialEvaluator_getOperatorList(stream, + resources, + dependency, + queue) { var self = this; var xref = this.xref; @@@ -250,19 -261,25 +261,25 @@@ var fnArray = queue.fnArray, argsArray = queue.argsArray; var dependencyArray = dependency || []; - resources = xref.fetchIfRef(resources) || new Dict(); - var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict(); - var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict(); - var parser = new Parser(new Lexer(stream), false); + resources = resources || new Dict(); + var xobjs = resources.get('XObject') || new Dict(); + var patterns = resources.get('Pattern') || new Dict(); + var parser = new Parser(new Lexer(stream), false, xref); var res = resources; + var hasNextObj = false, nextObj; var args = [], obj; - var getObjBt = function getObjBt() { - parser = this.oldParser; - return { name: 'BT' }; - }; var TILING_PATTERN = 1, SHADING_PATTERN = 2; - while (!isEOF(obj = parser.getObj())) { + while (true) { + if (hasNextObj) { + obj = nextObj; + hasNextObj = false; + } else { + obj = parser.getObj(); + if (isEOF(obj)) + break; + } + if (isCmd(obj)) { var cmd = obj.cmd; var fn = OP_MAP[cmd];