diff --git a/bower.json b/bower.json index e68524358..44a7d909d 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.0.209", + "version": "1.0.213", "keywords": [ "Mozilla", "pdf", diff --git a/build/pdf.combined.js b/build/pdf.combined.js index 59f545af2..ff5f81d80 100644 --- a/build/pdf.combined.js +++ b/build/pdf.combined.js @@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.0.209'; -PDFJS.build = '0d8e3cc'; +PDFJS.version = '1.0.213'; +PDFJS.build = '7f6cb0e'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -1941,6 +1941,7 @@ var AlternateCS = (function AlternateCSClosure() { getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var tinted; var tintFn = this.tintFn; var base = this.base; var scale = 1 / ((1 << bits) - 1); @@ -1954,16 +1955,22 @@ var AlternateCS = (function AlternateCSClosure() { var scaled = new Float32Array(numComps); var i, j; - for (i = 0; i < count; i++) { - for (j = 0; j < numComps; j++) { - scaled[j] = src[srcOffset++] * scale; - } - var tinted = tintFn(scaled); - if (usesZeroToOneRange) { + if (usesZeroToOneRange) { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tinted = tintFn(scaled); for (j = 0; j < baseNumComps; j++) { baseBuf[pos++] = tinted[j] * 255; } - } else { + } + } else { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tinted = tintFn(scaled); base.getRgbItem(tinted, 0, baseBuf, pos); pos += baseNumComps; } @@ -2843,66 +2850,57 @@ var PDFFunction = (function PDFFunctionClosure() { var domain = IR[1]; var range = IR[2]; var code = IR[3]; - var numOutputs = range.length / 2; + var numOutputs = range.length >> 1; + var numInputs = domain.length >> 1; var evaluator = new PostScriptEvaluator(code); // Cache the values for a big speed up, the cache size is limited though // since the number of possible values can be huge from a PS function. - var cache = new FunctionCache(); + var cache = {}; + // The MAX_CACHE_SIZE is set to ~4x the maximum number of distinct values + // seen in our tests. + var MAX_CACHE_SIZE = 2048 * 4; + var cache_available = MAX_CACHE_SIZE; return function constructPostScriptFromIRResult(args) { - var initialStack = []; - for (var i = 0, ii = (domain.length / 2); i < ii; ++i) { - initialStack.push(args[i]); - } - - var key = initialStack.join('_'); - if (cache.has(key)) { - return cache.get(key); - } - - var stack = evaluator.execute(initialStack); - var transformed = []; - for (i = numOutputs - 1; i >= 0; --i) { - var out = stack.pop(); - var rangeIndex = 2 * i; - if (out < range[rangeIndex]) { - out = range[rangeIndex]; - } else if (out > range[rangeIndex + 1]) { - out = range[rangeIndex + 1]; + var i, value; + var key = ''; + var input = new Array(numInputs); + for (i = 0; i < numInputs; i++) { + value = args[i]; + input[i] = value; + key += value + '_'; + } + + var cachedValue = cache[key]; + if (cachedValue !== undefined) { + return cachedValue; + } + + var output = new Array(numOutputs); + var stack = evaluator.execute(input); + var stackIndex = stack.length - numOutputs; + for (i = 0; i < numOutputs; i++) { + value = stack[stackIndex + i]; + var bound = range[i * 2]; + if (value < bound) { + value = bound; + } else { + bound = range[i * 2 +1]; + if (value > bound) { + value = bound; + } } - transformed[i] = out; + output[i] = value; + } + if (cache_available > 0) { + cache_available--; + cache[key] = output; } - cache.set(key, transformed); - return transformed; + return output; }; } }; })(); -var FunctionCache = (function FunctionCacheClosure() { - // Of 10 PDF's with type4 functions the maxium number of distinct values seen - // was 256. This still may need some tweaking in the future though. - var MAX_CACHE_SIZE = 1024; - function FunctionCache() { - this.cache = {}; - this.total = 0; - } - FunctionCache.prototype = { - has: function FunctionCache_has(key) { - return key in this.cache; - }, - get: function FunctionCache_get(key) { - return this.cache[key]; - }, - set: function FunctionCache_set(key, value) { - if (this.total < MAX_CACHE_SIZE) { - this.cache[key] = value; - this.total++; - } - } - }; - return FunctionCache; -})(); - var PostScriptStack = (function PostScriptStackClosure() { var MAX_STACK_SIZE = 100; function PostScriptStack(initialStack) { @@ -39746,8 +39744,8 @@ var DecodeStream = (function DecodeStreamClosure() { size *= 2; } var buffer2 = new Uint8Array(size); - for (var i = 0; i < current; ++i) { - buffer2[i] = buffer[i]; + if (buffer) { + buffer2.set(buffer); } return (this.buffer = buffer2); }, diff --git a/build/pdf.js b/build/pdf.js index d5368fb78..60b0f8472 100644 --- a/build/pdf.js +++ b/build/pdf.js @@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.0.209'; -PDFJS.build = '0d8e3cc'; +PDFJS.version = '1.0.213'; +PDFJS.build = '7f6cb0e'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -1941,6 +1941,7 @@ var AlternateCS = (function AlternateCSClosure() { getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var tinted; var tintFn = this.tintFn; var base = this.base; var scale = 1 / ((1 << bits) - 1); @@ -1954,16 +1955,22 @@ var AlternateCS = (function AlternateCSClosure() { var scaled = new Float32Array(numComps); var i, j; - for (i = 0; i < count; i++) { - for (j = 0; j < numComps; j++) { - scaled[j] = src[srcOffset++] * scale; - } - var tinted = tintFn(scaled); - if (usesZeroToOneRange) { + if (usesZeroToOneRange) { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tinted = tintFn(scaled); for (j = 0; j < baseNumComps; j++) { baseBuf[pos++] = tinted[j] * 255; } - } else { + } + } else { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tinted = tintFn(scaled); base.getRgbItem(tinted, 0, baseBuf, pos); pos += baseNumComps; } @@ -2843,66 +2850,57 @@ var PDFFunction = (function PDFFunctionClosure() { var domain = IR[1]; var range = IR[2]; var code = IR[3]; - var numOutputs = range.length / 2; + var numOutputs = range.length >> 1; + var numInputs = domain.length >> 1; var evaluator = new PostScriptEvaluator(code); // Cache the values for a big speed up, the cache size is limited though // since the number of possible values can be huge from a PS function. - var cache = new FunctionCache(); + var cache = {}; + // The MAX_CACHE_SIZE is set to ~4x the maximum number of distinct values + // seen in our tests. + var MAX_CACHE_SIZE = 2048 * 4; + var cache_available = MAX_CACHE_SIZE; return function constructPostScriptFromIRResult(args) { - var initialStack = []; - for (var i = 0, ii = (domain.length / 2); i < ii; ++i) { - initialStack.push(args[i]); + var i, value; + var key = ''; + var input = new Array(numInputs); + for (i = 0; i < numInputs; i++) { + value = args[i]; + input[i] = value; + key += value + '_'; } - var key = initialStack.join('_'); - if (cache.has(key)) { - return cache.get(key); + var cachedValue = cache[key]; + if (cachedValue !== undefined) { + return cachedValue; } - var stack = evaluator.execute(initialStack); - var transformed = []; - for (i = numOutputs - 1; i >= 0; --i) { - var out = stack.pop(); - var rangeIndex = 2 * i; - if (out < range[rangeIndex]) { - out = range[rangeIndex]; - } else if (out > range[rangeIndex + 1]) { - out = range[rangeIndex + 1]; + var output = new Array(numOutputs); + var stack = evaluator.execute(input); + var stackIndex = stack.length - numOutputs; + for (i = 0; i < numOutputs; i++) { + value = stack[stackIndex + i]; + var bound = range[i * 2]; + if (value < bound) { + value = bound; + } else { + bound = range[i * 2 +1]; + if (value > bound) { + value = bound; + } } - transformed[i] = out; + output[i] = value; + } + if (cache_available > 0) { + cache_available--; + cache[key] = output; } - cache.set(key, transformed); - return transformed; + return output; }; } }; })(); -var FunctionCache = (function FunctionCacheClosure() { - // Of 10 PDF's with type4 functions the maxium number of distinct values seen - // was 256. This still may need some tweaking in the future though. - var MAX_CACHE_SIZE = 1024; - function FunctionCache() { - this.cache = {}; - this.total = 0; - } - FunctionCache.prototype = { - has: function FunctionCache_has(key) { - return key in this.cache; - }, - get: function FunctionCache_get(key) { - return this.cache[key]; - }, - set: function FunctionCache_set(key, value) { - if (this.total < MAX_CACHE_SIZE) { - this.cache[key] = value; - this.total++; - } - } - }; - return FunctionCache; -})(); - var PostScriptStack = (function PostScriptStackClosure() { var MAX_STACK_SIZE = 100; function PostScriptStack(initialStack) { diff --git a/build/pdf.worker.js b/build/pdf.worker.js index fc1bc7f7f..e3a2b2942 100644 --- a/build/pdf.worker.js +++ b/build/pdf.worker.js @@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') { (typeof window !== 'undefined' ? window : this).PDFJS = {}; } -PDFJS.version = '1.0.209'; -PDFJS.build = '0d8e3cc'; +PDFJS.version = '1.0.213'; +PDFJS.build = '7f6cb0e'; (function pdfjsWrapper() { // Use strict in our context only - users might not want it @@ -1941,6 +1941,7 @@ var AlternateCS = (function AlternateCSClosure() { getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { + var tinted; var tintFn = this.tintFn; var base = this.base; var scale = 1 / ((1 << bits) - 1); @@ -1954,16 +1955,22 @@ var AlternateCS = (function AlternateCSClosure() { var scaled = new Float32Array(numComps); var i, j; - for (i = 0; i < count; i++) { - for (j = 0; j < numComps; j++) { - scaled[j] = src[srcOffset++] * scale; - } - var tinted = tintFn(scaled); - if (usesZeroToOneRange) { + if (usesZeroToOneRange) { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tinted = tintFn(scaled); for (j = 0; j < baseNumComps; j++) { baseBuf[pos++] = tinted[j] * 255; } - } else { + } + } else { + for (i = 0; i < count; i++) { + for (j = 0; j < numComps; j++) { + scaled[j] = src[srcOffset++] * scale; + } + tinted = tintFn(scaled); base.getRgbItem(tinted, 0, baseBuf, pos); pos += baseNumComps; } @@ -2843,66 +2850,57 @@ var PDFFunction = (function PDFFunctionClosure() { var domain = IR[1]; var range = IR[2]; var code = IR[3]; - var numOutputs = range.length / 2; + var numOutputs = range.length >> 1; + var numInputs = domain.length >> 1; var evaluator = new PostScriptEvaluator(code); // Cache the values for a big speed up, the cache size is limited though // since the number of possible values can be huge from a PS function. - var cache = new FunctionCache(); + var cache = {}; + // The MAX_CACHE_SIZE is set to ~4x the maximum number of distinct values + // seen in our tests. + var MAX_CACHE_SIZE = 2048 * 4; + var cache_available = MAX_CACHE_SIZE; return function constructPostScriptFromIRResult(args) { - var initialStack = []; - for (var i = 0, ii = (domain.length / 2); i < ii; ++i) { - initialStack.push(args[i]); - } - - var key = initialStack.join('_'); - if (cache.has(key)) { - return cache.get(key); - } - - var stack = evaluator.execute(initialStack); - var transformed = []; - for (i = numOutputs - 1; i >= 0; --i) { - var out = stack.pop(); - var rangeIndex = 2 * i; - if (out < range[rangeIndex]) { - out = range[rangeIndex]; - } else if (out > range[rangeIndex + 1]) { - out = range[rangeIndex + 1]; + var i, value; + var key = ''; + var input = new Array(numInputs); + for (i = 0; i < numInputs; i++) { + value = args[i]; + input[i] = value; + key += value + '_'; + } + + var cachedValue = cache[key]; + if (cachedValue !== undefined) { + return cachedValue; + } + + var output = new Array(numOutputs); + var stack = evaluator.execute(input); + var stackIndex = stack.length - numOutputs; + for (i = 0; i < numOutputs; i++) { + value = stack[stackIndex + i]; + var bound = range[i * 2]; + if (value < bound) { + value = bound; + } else { + bound = range[i * 2 +1]; + if (value > bound) { + value = bound; + } } - transformed[i] = out; + output[i] = value; + } + if (cache_available > 0) { + cache_available--; + cache[key] = output; } - cache.set(key, transformed); - return transformed; + return output; }; } }; })(); -var FunctionCache = (function FunctionCacheClosure() { - // Of 10 PDF's with type4 functions the maxium number of distinct values seen - // was 256. This still may need some tweaking in the future though. - var MAX_CACHE_SIZE = 1024; - function FunctionCache() { - this.cache = {}; - this.total = 0; - } - FunctionCache.prototype = { - has: function FunctionCache_has(key) { - return key in this.cache; - }, - get: function FunctionCache_get(key) { - return this.cache[key]; - }, - set: function FunctionCache_set(key, value) { - if (this.total < MAX_CACHE_SIZE) { - this.cache[key] = value; - this.total++; - } - } - }; - return FunctionCache; -})(); - var PostScriptStack = (function PostScriptStackClosure() { var MAX_STACK_SIZE = 100; function PostScriptStack(initialStack) { @@ -35153,8 +35151,8 @@ var DecodeStream = (function DecodeStreamClosure() { size *= 2; } var buffer2 = new Uint8Array(size); - for (var i = 0; i < current; ++i) { - buffer2[i] = buffer[i]; + if (buffer) { + buffer2.set(buffer); } return (this.buffer = buffer2); }, diff --git a/package.json b/package.json index 3ee5ac532..3a0272382 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pdfjs-dist", - "version": "1.0.209", + "version": "1.0.213", "description": "Generic build of Mozilla's PDF.js library.", "keywords": [ "Mozilla",