]> git.parisson.com Git - pdf.js.git/commitdiff
Merge pull request #1486 from yurydelendik/issue-1466
authorBrendan Dahl <brendan.dahl@gmail.com>
Thu, 5 Apr 2012 22:39:47 +0000 (15:39 -0700)
committerBrendan Dahl <brendan.dahl@gmail.com>
Thu, 5 Apr 2012 22:39:47 +0000 (15:39 -0700)
Improving invalid operations syntax recovery (#1466)

1  2 
src/evaluator.js

index 203247bb86dfc1858432675d42308af1a3e03600,bb542b7d2e03328813f919533ae78fd0fa9699f5..3f544603f07ecf09451bc0a73aaef02627d3d4f4
@@@ -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;
        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];