Browse Source

Address more of brendan's comments

Mack Duan 12 years ago
parent
commit
2ce00279be
  1. 4
      src/chunked_stream.js
  2. 22
      src/core.js
  3. 56
      src/evaluator.js
  4. 8
      src/obj.js
  5. 28
      src/pdf_manager.js
  6. 9
      src/worker.js
  7. 32
      test/unit/evaluator_spec.js

4
src/chunked_stream.js

@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals assert, MissingDataException, isInt, NetworkManager, PDFJS, /* globals assert, MissingDataException, isInt, NetworkManager, Promise,
isEmptyObj */ isEmptyObj */
'use strict'; 'use strict';
@ -233,7 +233,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
this.requestsByChunk = {}; this.requestsByChunk = {};
this.callbacksByRequest = {}; this.callbacksByRequest = {};
this.loadedStream = new PDFJS.Promise(); this.loadedStream = new Promise();
} }
ChunkedStreamManager.prototype = { ChunkedStreamManager.prototype = {

22
src/core.js

@ -18,7 +18,7 @@
isArrayBuffer, isDict, isName, isStream, isString, Lexer, isArrayBuffer, isDict, isName, isStream, isString, Lexer,
Linearization, NullStream, PartialEvaluator, shadow, Stream, Linearization, NullStream, PartialEvaluator, shadow, Stream,
StreamsSequenceStream, stringToPDFString, TODO, Util, warn, XRef, StreamsSequenceStream, stringToPDFString, TODO, Util, warn, XRef,
MissingDataException, PDFJS */ MissingDataException, Promise */
'use strict'; 'use strict';
@ -149,21 +149,22 @@ var Page = (function PageClosure() {
}, },
getOperatorList: function Page_getOperatorList(handler) { getOperatorList: function Page_getOperatorList(handler) {
var self = this; var self = this;
var promise = new PDFJS.Promise(); var promise = new Promise();
var pageListPromise = new PDFJS.Promise(); var pageListPromise = new Promise();
var annotationListPromise = new PDFJS.Promise(); var annotationListPromise = new Promise();
var pdfManager = this.pdfManager; var pdfManager = this.pdfManager;
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
[]); []);
var resourcesPromise = pdfManager.ensure(this, 'resources'); var resourcesPromise = pdfManager.ensure(this, 'resources');
var dataPromises = PDFJS.Promise.all( var dataPromises = Promise.all(
[contentStreamPromise, resourcesPromise]); [contentStreamPromise, resourcesPromise]);
dataPromises.then(function(data) { dataPromises.then(function(data) {
var contentStream = data[0]; var contentStream = data[0];
var resources = data[1]; var resources = data[1];
var pe = self.pe = new PartialEvaluator( var pe = self.pe = new PartialEvaluator(
pdfManager,
self.xref, handler, self.pageIndex, self.xref, handler, self.pageIndex,
'p' + self.pageIndex + '_'); 'p' + self.pageIndex + '_');
@ -180,7 +181,7 @@ var Page = (function PageClosure() {
pdfManager.ensure(this, 'getAnnotationsForDraw', []).then( pdfManager.ensure(this, 'getAnnotationsForDraw', []).then(
function(annotations) { function(annotations) {
var annotationEvaluator = new PartialEvaluator( var annotationEvaluator = new PartialEvaluator(
self.xref, handler, self.pageIndex, pdfManager, self.xref, handler, self.pageIndex,
'p' + self.pageIndex + '_annotation'); 'p' + self.pageIndex + '_annotation');
pdfManager.ensure(annotationEvaluator, 'getAnnotationsOperatorList', pdfManager.ensure(annotationEvaluator, 'getAnnotationsOperatorList',
@ -194,7 +195,7 @@ var Page = (function PageClosure() {
} }
); );
PDFJS.Promise.all([pageListPromise, annotationListPromise]).then( Promise.all([pageListPromise, annotationListPromise]).then(
function(datas) { function(datas) {
var pageData = datas[0]; var pageData = datas[0];
var pageQueue = pageData.queue; var pageQueue = pageData.queue;
@ -221,12 +222,12 @@ var Page = (function PageClosure() {
var self = this; var self = this;
var textContentPromise = new PDFJS.Promise(); var textContentPromise = new Promise();
var pdfManager = this.pdfManager; var pdfManager = this.pdfManager;
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
[]); []);
var resourcesPromise = new PDFJS.Promise(); var resourcesPromise = new Promise();
pdfManager.ensure(this, 'resources').then(function(resources) { pdfManager.ensure(this, 'resources').then(function(resources) {
pdfManager.ensure(self.xref, 'fetchIfRef', [resources]).then( pdfManager.ensure(self.xref, 'fetchIfRef', [resources]).then(
function(resources) { function(resources) {
@ -235,12 +236,13 @@ var Page = (function PageClosure() {
); );
}); });
var dataPromises = PDFJS.Promise.all([contentStreamPromise, var dataPromises = Promise.all([contentStreamPromise,
resourcesPromise]); resourcesPromise]);
dataPromises.then(function(data) { dataPromises.then(function(data) {
var contentStream = data[0]; var contentStream = data[0];
var resources = data[1]; var resources = data[1];
var pe = new PartialEvaluator( var pe = new PartialEvaluator(
pdfManager,
self.xref, handler, self.pageIndex, self.xref, handler, self.pageIndex,
'p' + self.pageIndex + '_'); 'p' + self.pageIndex + '_');

56
src/evaluator.js

@ -19,15 +19,17 @@
IDENTITY_MATRIX, info, isArray, isCmd, isDict, isEOF, isName, isNum, IDENTITY_MATRIX, info, isArray, isCmd, isDict, isEOF, isName, isNum,
isStream, isString, JpegStream, Lexer, Metrics, Name, Parser, isStream, isString, JpegStream, Lexer, Metrics, Name, Parser,
Pattern, PDFImage, PDFJS, serifFonts, stdFontMap, symbolsFonts, Pattern, PDFImage, PDFJS, serifFonts, stdFontMap, symbolsFonts,
TilingPattern, TODO, warn, Util, MissingDataException, globalScope */ TilingPattern, TODO, warn, Util, MissingDataException, Promise */
'use strict'; 'use strict';
var PartialEvaluator = (function PartialEvaluatorClosure() { var PartialEvaluator = (function PartialEvaluatorClosure() {
function PartialEvaluator(xref, handler, pageIndex, uniquePrefix) { function PartialEvaluator(pdfManager, xref, handler, pageIndex,
uniquePrefix) {
this.state = new EvalState(); this.state = new EvalState();
this.stateStack = []; this.stateStack = [];
this.pdfManager = pdfManager;
this.xref = xref; this.xref = xref;
this.handler = handler; this.handler = handler;
this.pageIndex = pageIndex; this.pageIndex = pageIndex;
@ -165,7 +167,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
buildFormXObject: function PartialEvaluator_buildFormXObject(resources, buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
xobj, smask) { xobj, smask) {
var self = this; var self = this;
var promise = new PDFJS.Promise(); var promise = new Promise();
var fnArray = []; var fnArray = [];
var argsArray = []; var argsArray = [];
@ -302,7 +304,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
fn, args, resources, pattern, patternDict) { fn, args, resources, pattern, patternDict) {
var self = this; var self = this;
// Create an IR of the pattern code. // Create an IR of the pattern code.
var promise = new PDFJS.Promise(); var promise = new Promise();
var opListPromise = this.getOperatorList(pattern, var opListPromise = this.getOperatorList(pattern,
patternDict.get('Resources') || resources); patternDict.get('Resources') || resources);
opListPromise.then(function(data) { opListPromise.then(function(data) {
@ -324,7 +326,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
handleSetFont: function PartialEvaluator_handleSetFont( handleSetFont: function PartialEvaluator_handleSetFont(
resources, fontArgs, font) { resources, fontArgs, font) {
var promise = new PDFJS.Promise(); var promise = new Promise();
// TODO(mack): Not needed? // TODO(mack): Not needed?
var fontName; var fontName;
if (fontArgs) { if (fontArgs) {
@ -413,7 +415,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
gStateObj.push([key, value]); gStateObj.push([key, value]);
break; break;
case 'Font': case 'Font':
var promise = new PDFJS.Promise(); var promise = new Promise();
self.handleSetFont(resources, null, value[0]).then(function(data) { self.handleSetFont(resources, null, value[0]).then(function(data) {
var gState = ['Font', data.loadedName, value[1]]; var gState = ['Font', data.loadedName, value[1]];
promise.resolve({ promise.resolve({
@ -478,8 +480,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
} }
} }
var promise = new PDFJS.Promise(); var promise = new Promise();
PDFJS.Promise.all(promises).then(function(datas) { Promise.all(promises).then(function(datas) {
for (var i = 0, n = datas.length; i < n; ++i) { for (var i = 0, n = datas.length; i < n; ++i) {
var data = datas[i]; var data = datas[i];
var index = indices[i]; var index = indices[i];
@ -500,7 +502,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
loadFont: function PartialEvaluator_loadFont(fontName, font, xref, loadFont: function PartialEvaluator_loadFont(fontName, font, xref,
resources) { resources) {
var promise = new PDFJS.Promise(); var promise = new Promise();
var fontRes = resources.get('Font'); var fontRes = resources.get('Font');
@ -551,7 +553,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
opListPromises.push( opListPromises.push(
this.getOperatorList(glyphStream, fontResources)); this.getOperatorList(glyphStream, fontResources));
} }
PDFJS.Promise.all(opListPromises).then(function(datas) { Promise.all(opListPromises).then(function(datas) {
var charProcOperatorList = {}; var charProcOperatorList = {};
var dependencies = {}; var dependencies = {};
for (var i = 0, n = charProcKeys.length; i < n; ++i) { for (var i = 0, n = charProcKeys.length; i < n; ++i) {
@ -606,7 +608,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// dictionary // dictionary
var parser = new Parser(new Lexer(stream, OP_MAP), false, xref); var parser = new Parser(new Lexer(stream, OP_MAP), false, xref);
var promise = new PDFJS.Promise(); var promise = new Promise();
function parseCommands() { function parseCommands() {
try { try {
parser.restoreState(); parser.restoreState();
@ -770,7 +772,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
subQueuePromises.push(argsArray[i][0]); subQueuePromises.push(argsArray[i][0]);
} }
} }
PDFJS.Promise.all(subQueuePromises).then(function(datas) { Promise.all(subQueuePromises).then(function(datas) {
// TODO(mack): Optimize by using repositioning elements // TODO(mack): Optimize by using repositioning elements
// in original queue rather than creating new queue // in original queue rather than creating new queue
@ -817,10 +819,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
throw e; throw e;
} }
var streamManager = globalScope.pdfManager.streamManager; self.pdfManager.requestRange(e.begin, e.end).then(parseCommands);
streamManager.requestRange(e.begin, e.end, function() {
parseCommands();
});
} }
} }
parser.saveState(); parser.saveState();
@ -832,7 +831,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
getAnnotationsOperatorList: getAnnotationsOperatorList:
function PartialEvaluator_getAnnotationsOperatorList(annotations, function PartialEvaluator_getAnnotationsOperatorList(annotations,
dependency) { dependency) {
var promise = new PDFJS.Promise(); var promise = new Promise();
// 12.5.5: Algorithm: Appearance streams // 12.5.5: Algorithm: Appearance streams
function getTransformMatrix(rect, bbox, matrix) { function getTransformMatrix(rect, bbox, matrix) {
@ -878,13 +877,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
annotation.resources); annotation.resources);
opListPromises.push(opListPromise); opListPromises.push(opListPromise);
} else { } else {
var opListPromise = new PDFJS.Promise(); var opListPromise = new Promise();
opListPromise.resolve(createOperatorList()); opListPromise.resolve(createOperatorList());
opListPromises.push(opListPromise); opListPromises.push(opListPromise);
} }
} }
PDFJS.Promise.all(opListPromises).then(function(datas) { Promise.all(opListPromises).then(function(datas) {
var fnArray = []; var fnArray = [];
var argsArray = []; var argsArray = [];
var dependencies = {}; var dependencies = {};
@ -923,10 +922,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var MULTI_SPACE_FACTOR = 1.5; var MULTI_SPACE_FACTOR = 1.5;
var self = this; var self = this;
var statePromise = new PDFJS.Promise(); var statePromise = new Promise();
function handleSetFont(fontName, fontRef, resources) { function handleSetFont(fontName, fontRef, resources) {
var promise = new PDFJS.Promise(); var promise = new Promise();
self.loadFont(fontName, fontRef, self.xref, resources).then( self.loadFont(fontName, fontRef, self.xref, resources).then(
function(data) { function(data) {
promise.resolve(data.font.translated); promise.resolve(data.font.translated);
@ -969,7 +968,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
//.translated; //.translated;
break; break;
case 'TJ': case 'TJ':
var chunkPromise = new PDFJS.Promise(); var chunkPromise = new Promise();
chunkPromises.push(chunkPromise); chunkPromises.push(chunkPromise);
fontPromise.then(function(items, font) { fontPromise.then(function(items, font) {
var chunk = ''; var chunk = '';
@ -994,7 +993,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}.bind(null, args[0])); }.bind(null, args[0]));
break; break;
case 'Tj': case 'Tj':
var chunkPromise = new PDFJS.Promise(); var chunkPromise = new Promise();
chunkPromises.push(chunkPromise); chunkPromises.push(chunkPromise);
fontPromise.then(function(charCodes, font) { fontPromise.then(function(charCodes, font) {
var chunk = fontCharsToUnicode(charCodes, font); var chunk = fontCharsToUnicode(charCodes, font);
@ -1006,7 +1005,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// For search, adding a extra white space for line breaks // For search, adding a extra white space for line breaks
// would be better here, but that causes too much spaces in // would be better here, but that causes too much spaces in
// the text-selection divs. // the text-selection divs.
var chunkPromise = new PDFJS.Promise(); var chunkPromise = new Promise();
chunkPromises.push(chunkPromise); chunkPromises.push(chunkPromise);
fontPromise.then(function(charCodes, font) { fontPromise.then(function(charCodes, font) {
var chunk = fontCharsToUnicode(charCodes, font); var chunk = fontCharsToUnicode(charCodes, font);
@ -1016,7 +1015,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
break; break;
case '"': case '"':
// Note comment in "'" // Note comment in "'"
var chunkPromise = new PDFJS.Promise(); var chunkPromise = new Promise();
chunkPromises.push(chunkPromise); chunkPromises.push(chunkPromise);
fontPromise.then(function(charCodes, font) { fontPromise.then(function(charCodes, font) {
var chunk = fontCharsToUnicode(charCodes, font); var chunk = fontCharsToUnicode(charCodes, font);
@ -1081,7 +1080,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
} }
} // while } // while
PDFJS.Promise.all(chunkPromises).then(function(datas) { Promise.all(chunkPromises).then(function(datas) {
var bidiTexts = []; var bidiTexts = [];
for (var i = 0, n = datas.length; i < n; ++i) { for (var i = 0, n = datas.length; i < n; ++i) {
var bidiText = datas[i]; var bidiText = datas[i];
@ -1100,10 +1099,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
throw e; throw e;
} }
var streamManager = globalScope.pdfManager.streamManager; self.pdfManager.requestRange(e.begin, e.end).then(parseCommands);
streamManager.requestRange(e.begin, e.end, function() {
parseCommands();
});
} }
} }
parser.saveState(); parser.saveState();

8
src/obj.js

@ -17,8 +17,8 @@
/* globals assertWellFormed, bytesToString, CipherTransformFactory, error, info, /* globals assertWellFormed, bytesToString, CipherTransformFactory, error, info,
InvalidPDFException, isArray, isCmd, isDict, isInt, isName, isRef, InvalidPDFException, isArray, isCmd, isDict, isInt, isName, isRef,
isStream, JpegStream, Lexer, log, Page, Parser, Promise, shadow, isStream, JpegStream, Lexer, log, Page, Parser, Promise, shadow,
stringToPDFString, stringToUTF8String, warn, isString, assert, PDFJS, stringToPDFString, stringToUTF8String, warn, isString, assert,
MissingDataException, XRefParseException, Stream */ Promise, MissingDataException, XRefParseException, Stream */
'use strict'; 'use strict';
@ -339,7 +339,7 @@ var Catalog = (function CatalogClosure() {
getPage: function Catalog_getPage(pageIndex) { getPage: function Catalog_getPage(pageIndex) {
if (!(pageIndex in this.pagePromises)) { if (!(pageIndex in this.pagePromises)) {
this.pagePromises[pageIndex] = new PDFJS.Promise(); this.pagePromises[pageIndex] = new Promise();
} }
return this.pagePromises[pageIndex]; return this.pagePromises[pageIndex];
}, },
@ -367,7 +367,7 @@ var Catalog = (function CatalogClosure() {
var page = new Page(this.pdfManager, this.xref, pageIndex, kid, var page = new Page(this.pdfManager, this.xref, pageIndex, kid,
kidRef); kidRef);
if (!(pageIndex in this.pagePromises)) { if (!(pageIndex in this.pagePromises)) {
this.pagePromises[pageIndex] = new PDFJS.Promise(); this.pagePromises[pageIndex] = new Promise();
} }
this.pagePromises[pageIndex].resolve(page); this.pagePromises[pageIndex].resolve(page);

28
src/pdf_manager.js

@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
/* globals NotImplementedException, MissingDataException, PDFJS, Stream, /* globals NotImplementedException, MissingDataException, Promise, Stream,
PDFDocument, ChunkedStream, ChunkedStreamManager */ PDFDocument, ChunkedStream, ChunkedStreamManager */
'use strict'; 'use strict';
@ -50,6 +50,10 @@ var BasePdfManager = (function BasePdfManagerClosure() {
return new NotImplementedException(); return new NotImplementedException();
}, },
requestRange: function BasePdfManager_ensure(begin, end) {
return new NotImplementedException();
},
requestLoadedStream: function BasePdfManager_requestLoadedStream() { requestLoadedStream: function BasePdfManager_requestLoadedStream() {
return new NotImplementedException(); return new NotImplementedException();
} }
@ -62,7 +66,7 @@ var LocalPdfManager = (function LocalPdfManagerClosure() {
function LocalPdfManager(data, password) { function LocalPdfManager(data, password) {
var stream = new Stream(data); var stream = new Stream(data);
this.pdfModel = new PDFDocument(this, stream, password); this.pdfModel = new PDFDocument(this, stream, password);
this.loadedStream = new PDFJS.Promise(); this.loadedStream = new Promise();
this.loadedStream.resolve(stream); this.loadedStream.resolve(stream);
} }
@ -71,7 +75,7 @@ var LocalPdfManager = (function LocalPdfManagerClosure() {
LocalPdfManager.prototype.ensure = LocalPdfManager.prototype.ensure =
function LocalPdfManager_ensure(obj, prop, args) { function LocalPdfManager_ensure(obj, prop, args) {
var promise = new PDFJS.Promise(); var promise = new Promise();
try { try {
var value = obj[prop]; var value = obj[prop];
var result; var result;
@ -88,6 +92,13 @@ var LocalPdfManager = (function LocalPdfManagerClosure() {
return promise; return promise;
}; };
LocalPdfManager.prototype.requestRange =
function LocalPdfManager_requestRange(begin, end) {
var promise = new Promise();
promise.resolve();
return promise;
};
LocalPdfManager.prototype.requestLoadedStream = LocalPdfManager.prototype.requestLoadedStream =
function LocalPdfManager_requestLoadedStream() { function LocalPdfManager_requestLoadedStream() {
}; };
@ -126,7 +137,7 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() {
NetworkPdfManager.prototype.ensure = NetworkPdfManager.prototype.ensure =
function NetworkPdfManager_ensure(obj, prop, args) { function NetworkPdfManager_ensure(obj, prop, args) {
var promise = new PDFJS.Promise(); var promise = new Promise();
this.ensureHelper(promise, obj, prop, args); this.ensureHelper(promise, obj, prop, args);
return promise; return promise;
}; };
@ -155,6 +166,15 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() {
} }
}; };
NetworkPdfManager.prototype.requestRange =
function NetworkPdfManager_requestRange(begin, end) {
var promise = new Promise();
this.streamManager.requestRange(begin, end, function() {
promise.resolve();
});
return promise;
};
NetworkPdfManager.prototype.requestLoadedStream = NetworkPdfManager.prototype.requestLoadedStream =
function NetworkPdfManager_requestLoadedStream() { function NetworkPdfManager_requestLoadedStream() {
this.streamManager.requestAllChunks(); this.streamManager.requestAllChunks();

9
src/worker.js

@ -112,7 +112,7 @@ var WorkerMessageHandler = {
var pdfManager; var pdfManager;
function loadDocument(recoveryMode) { function loadDocument(recoveryMode) {
var loadDocumentPromise = new PDFJS.Promise(); var loadDocumentPromise = new Promise();
var parseSuccess = function parseSuccess() { var parseSuccess = function parseSuccess() {
var numPagesPromise = pdfManager.ensureModel('numPages'); var numPagesPromise = pdfManager.ensureModel('numPages');
@ -122,7 +122,7 @@ var WorkerMessageHandler = {
var metadataPromise = pdfManager.ensureCatalog('metadata'); var metadataPromise = pdfManager.ensureCatalog('metadata');
var encryptedPromise = pdfManager.ensureXRef('encrypt'); var encryptedPromise = pdfManager.ensureXRef('encrypt');
var javaScriptPromise = pdfManager.ensureCatalog('javaScript'); var javaScriptPromise = pdfManager.ensureCatalog('javaScript');
PDFJS.Promise.all([numPagesPromise, fingerprintPromise, outlinePromise, Promise.all([numPagesPromise, fingerprintPromise, outlinePromise,
infoPromise, metadataPromise, encryptedPromise, infoPromise, metadataPromise, encryptedPromise,
javaScriptPromise]).then( javaScriptPromise]).then(
function onDocReady(results) { function onDocReady(results) {
@ -155,7 +155,7 @@ var WorkerMessageHandler = {
} }
function getPdfManager(data) { function getPdfManager(data) {
var pdfManagerPromise = new PDFJS.Promise(); var pdfManagerPromise = new Promise();
var source = data.source; var source = data.source;
var disableRange = data.disableRange; var disableRange = data.disableRange;
@ -285,7 +285,6 @@ var WorkerMessageHandler = {
}; };
getPdfManager(data).then(function() { getPdfManager(data).then(function() {
globalScope.pdfManager = pdfManager;
loadDocument(false).then(onSuccess, function(ex) { loadDocument(false).then(onSuccess, function(ex) {
// Try again with recoveryMode == true // Try again with recoveryMode == true
if (!(ex instanceof XRefParseException)) { if (!(ex instanceof XRefParseException)) {
@ -308,7 +307,7 @@ var WorkerMessageHandler = {
var refPromise = pdfManager.ensure(page, 'ref'); var refPromise = pdfManager.ensure(page, 'ref');
var viewPromise = pdfManager.ensure(page, 'view'); var viewPromise = pdfManager.ensure(page, 'view');
PDFJS.Promise.all([rotatePromise, refPromise, viewPromise]).then( Promise.all([rotatePromise, refPromise, viewPromise]).then(
function(results) { function(results) {
var page = { var page = {
pageIndex: data.pageIndex, pageIndex: data.pageIndex,

32
test/unit/evaluator_spec.js

@ -28,9 +28,12 @@ describe('evaluator', function() {
} }
}; };
function PdfManagerMock() { }
describe('splitCombinedOperations', function() { describe('splitCombinedOperations', function() {
it('should reject unknown operations', function() { it('should reject unknown operations', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('qTT'); var stream = new StringStream('qTT');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());
@ -44,7 +47,8 @@ describe('evaluator', function() {
}); });
it('should handle one operations', function() { it('should handle one operations', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('Q'); var stream = new StringStream('Q');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());
@ -57,7 +61,8 @@ describe('evaluator', function() {
}); });
it('should handle two glued operations', function() { it('should handle two glued operations', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var resources = new ResourcesMock(); var resources = new ResourcesMock();
resources.Res1 = {}; resources.Res1 = {};
@ -73,7 +78,8 @@ describe('evaluator', function() {
}); });
it('should handle tree glued operations', function() { it('should handle tree glued operations', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('qqq'); var stream = new StringStream('qqq');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());
@ -88,7 +94,8 @@ describe('evaluator', function() {
}); });
it('should handle three glued operations #2', function() { it('should handle three glued operations #2', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var resources = new ResourcesMock(); var resources = new ResourcesMock();
resources.Res1 = {}; resources.Res1 = {};
@ -105,7 +112,8 @@ describe('evaluator', function() {
}); });
it('should handle glued operations and operands', function() { it('should handle glued operations and operands', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('q5 Ts'); var stream = new StringStream('q5 Ts');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());
@ -122,7 +130,8 @@ describe('evaluator', function() {
}); });
it('should handle glued operations and literals', function() { it('should handle glued operations and literals', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('trueifalserinullq'); var stream = new StringStream('trueifalserinullq');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());
@ -145,7 +154,8 @@ describe('evaluator', function() {
describe('validateNumberOfArgs', function() { describe('validateNumberOfArgs', function() {
it('should execute if correct number of arguments', function() { it('should execute if correct number of arguments', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('5 1 d0'); var stream = new StringStream('5 1 d0');
console.log('here!'); console.log('here!');
@ -158,7 +168,8 @@ describe('evaluator', function() {
}); });
}); });
it('should execute if too many arguments', function() { it('should execute if too many arguments', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('5 1 4 d0'); var stream = new StringStream('5 1 4 d0');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());
@ -171,7 +182,8 @@ describe('evaluator', function() {
}); });
}); });
it('should skip if too few arguments', function() { it('should skip if too few arguments', function() {
var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), var evaluator = new PartialEvaluator(new PdfManagerMock(),
new XrefMock(), new HandlerMock(),
'prefix'); 'prefix');
var stream = new StringStream('5 d0'); var stream = new StringStream('5 d0');
var promise = evaluator.getOperatorList(stream, new ResourcesMock()); var promise = evaluator.getOperatorList(stream, new ResourcesMock());

Loading…
Cancel
Save