Flattern the IRQueue to make it easier to reexecute and have no nested state
This commit is contained in:
parent
443bb84cd6
commit
e7b636dba4
41
pdf.js
41
pdf.js
@ -3420,7 +3420,8 @@ var Page = (function() {
|
||||
}
|
||||
|
||||
var pe = this.pe = new PartialEvaluator();
|
||||
return this.IRQueue = pe.getIRQueue(content, xref, resources, fonts, images, this.pageNumber + "_");
|
||||
var IRQueue = {};
|
||||
return this.IRQueue = pe.getIRQueue(content, xref, resources, IRQueue, fonts, images, this.pageNumber + "_");
|
||||
},
|
||||
|
||||
ensureFonts: function(fonts, callback) {
|
||||
@ -4185,14 +4186,22 @@ var PartialEvaluator = (function() {
|
||||
};
|
||||
|
||||
constructor.prototype = {
|
||||
getIRQueue: function(stream, xref, resources, fonts, images, uniquePrefix) {
|
||||
getIRQueue: function(stream, xref, resources, queue, fonts, images, uniquePrefix) {
|
||||
uniquePrefix = uniquePrefix || "";
|
||||
if (!queue.argsArray) {
|
||||
queue.argsArray = []
|
||||
}
|
||||
if (!queue.fnArray) {
|
||||
queue.fnArray = [];
|
||||
}
|
||||
|
||||
var fnArray = queue.fnArray, argsArray = queue.argsArray;
|
||||
|
||||
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);
|
||||
var args = [], argsArray = [], fnArray = [], obj;
|
||||
var args = [], obj;
|
||||
var res = resources;
|
||||
|
||||
while (!IsEOF(obj = parser.getObj())) {
|
||||
@ -4217,9 +4226,10 @@ var PartialEvaluator = (function() {
|
||||
|
||||
// Type1 is TilingPattern
|
||||
if (typeNum == 1) {
|
||||
// TODO: Add dependency here.
|
||||
// Create an IR of the pattern code.
|
||||
var codeIR = this.getIRQueue(pattern, xref,
|
||||
dict.get('Resources'), fonts, images, uniquePrefix);
|
||||
dict.get('Resources'), {}, fonts, images, uniquePrefix);
|
||||
|
||||
args = TilingPattern.getIR(codeIR, dict);
|
||||
}
|
||||
@ -4249,13 +4259,19 @@ var PartialEvaluator = (function() {
|
||||
);
|
||||
|
||||
if ('Form' == type.name) {
|
||||
// console.log("got xobj that is a Form");
|
||||
var raw = this.getIRQueue(xobj, xref, xobj.dict.get('Resources'),
|
||||
fonts, images, uniquePrefix);
|
||||
var matrix = xobj.dict.get('Matrix');
|
||||
var bbox = xobj.dict.get('BBox');
|
||||
args = [ raw, matrix, bbox ];
|
||||
fn = "paintFormXObject";
|
||||
|
||||
fnArray.push("paintFormXObjectBegin");
|
||||
argsArray.push([ matrix, bbox ]);
|
||||
|
||||
// This adds the IRQueue of the xObj to the current queue.
|
||||
this.getIRQueue(xobj, xref, xobj.dict.get('Resources'), queue,
|
||||
fonts, images, uniquePrefix);
|
||||
|
||||
|
||||
fn = "paintFormXObjectEnd";
|
||||
args = [];
|
||||
} else if ('Image' == type.name) {
|
||||
var image = xobj;
|
||||
var dict = image.dict;
|
||||
@ -5333,7 +5349,7 @@ var CanvasGraphics = (function() {
|
||||
this.paintImageXObject(null, image, true);
|
||||
},
|
||||
|
||||
paintFormXObject: function(IRQueue, matrix, bbox) {
|
||||
paintFormXObjectBegin: function(matrix, bbox) {
|
||||
this.save();
|
||||
|
||||
if (matrix && IsArray(matrix) && 6 == matrix.length)
|
||||
@ -5344,10 +5360,9 @@ var CanvasGraphics = (function() {
|
||||
this.clip();
|
||||
this.endPath();
|
||||
}
|
||||
},
|
||||
|
||||
// this.execute(code, this.xref, stream.dict.get('Resources'));
|
||||
this.executeIRQueue(IRQueue);
|
||||
|
||||
paintFormXObjectEnd: function() {
|
||||
this.restore();
|
||||
},
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user