Merge branch 'master' of https://github.com/andreasgal/pdf.js.git into charstoglyphs

Conflicts:
	fonts.js
This commit is contained in:
notmasteryet 2011-09-12 18:14:18 -05:00
commit 40e0cb40a6
15 changed files with 100 additions and 103 deletions

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';
@ -434,7 +434,7 @@ var Font = (function Font() {
// Use 'name' instead of 'fontName' here because the original // Use 'name' instead of 'fontName' here because the original
// name ArialBlack for example will be replaced by Helvetica. // name ArialBlack for example will be replaced by Helvetica.
this.black = (name.search(/Black/g) != -1) this.black = (name.search(/Black/g) != -1);
this.loadedName = fontName.split('-')[0]; this.loadedName = fontName.split('-')[0];
this.loading = false; this.loading = false;
@ -986,7 +986,7 @@ var Font = (function Font() {
font.pos = (font.start ? font.start : 0) + header.offset; font.pos = (font.start ? font.start : 0) + header.offset;
font.pos += header.length - 2; font.pos += header.length - 2;
var numOfMetrics = int16(font.getBytes(2)); var numOfMetrics = int16(font.getBytes(2));
var numOfSidebearings = numGlyphs - numOfMetrics; var numOfSidebearings = numGlyphs - numOfMetrics;
var numMissing = numOfSidebearings - var numMissing = numOfSidebearings -
((hmtx.length - numOfMetrics * 4) >> 1); ((hmtx.length - numOfMetrics * 4) >> 1);
@ -1056,7 +1056,7 @@ var Font = (function Font() {
// Ensure the [h/v]mtx tables contains the advance width and // Ensure the [h/v]mtx tables contains the advance width and
// sidebearings information for numGlyphs in the maxp table // sidebearings information for numGlyphs in the maxp table
font.pos = (font.start ? font.start : 0) + maxp.offset; font.pos = (font.start || 0) + maxp.offset;
var version = int16(font.getBytes(4)); var version = int16(font.getBytes(4));
var numGlyphs = int16(font.getBytes(2)); var numGlyphs = int16(font.getBytes(2));
@ -1165,7 +1165,7 @@ var Font = (function Font() {
return false; return false;
} }
return true; return true;
}; }
// The offsets object holds at the same time a representation of where // The offsets object holds at the same time a representation of where
// to write the table entry information about a table and another offset // to write the table entry information about a table and another offset
@ -1347,7 +1347,7 @@ var Font = (function Font() {
} }
// Enter the translated string into the cache // Enter the translated string into the cache
return charsCache[chars] = glyphs; return (charsCache[chars] = glyphs);
} }
}; };
@ -1380,7 +1380,7 @@ var Type1Parser = function() {
r = ((value + r) * c1 + c2) & ((1 << 16) - 1); r = ((value + r) * c1 + c2) & ((1 << 16) - 1);
} }
return decryptedString.slice(discardNumber); return decryptedString.slice(discardNumber);
}; }
/* /*
* CharStrings are encoded following the the CharString Encoding sequence * CharStrings are encoded following the the CharString Encoding sequence
@ -1583,7 +1583,7 @@ var Type1Parser = function() {
} }
return { charstring: charstring, width: width, lsb: lsb }; return { charstring: charstring, width: width, lsb: lsb };
}; }
/* /*
* Returns an object containing a Subrs array and a CharStrings * Returns an object containing a Subrs array and a CharStrings
@ -1603,7 +1603,7 @@ var Type1Parser = function() {
for (var i = 0; i < array.length; i++) for (var i = 0; i < array.length; i++)
array[i] = parseFloat(array[i] || 0); array[i] = parseFloat(array[i] || 0);
return array; return array;
}; }
function readNumber(str, index) { function readNumber(str, index) {
while (str[index] == ' ') while (str[index] == ' ')
@ -1616,11 +1616,11 @@ var Type1Parser = function() {
count++; count++;
return parseFloat(str.substr(start, count) || 0); return parseFloat(str.substr(start, count) || 0);
}; }
function isSeparator(c) { function isSeparator(c) {
return c == ' ' || c == '\n' || c == '\x0d'; return c == ' ' || c == '\n' || c == '\x0d';
}; }
this.extractFontProgram = function t1_extractFontProgram(stream) { this.extractFontProgram = function t1_extractFontProgram(stream) {
var eexec = decrypt(stream, kEexecEncryptionKey, 4); var eexec = decrypt(stream, kEexecEncryptionKey, 4);
@ -1745,7 +1745,7 @@ var Type1Parser = function() {
} }
return program; return program;
}, };
this.extractFontHeader = function t1_extractFontHeader(stream, properties) { this.extractFontHeader = function t1_extractFontHeader(stream, properties) {
var headerString = ''; var headerString = '';
@ -1797,7 +1797,8 @@ var Type1Parser = function() {
if ('undefined' == typeof(properties.differences[index])) { if ('undefined' == typeof(properties.differences[index])) {
var mapping = properties.encoding[index] || {}; var mapping = properties.encoding[index] || {};
mapping.unicode = GlyphsUnicode[glyph] || index; mapping.unicode = GlyphsUnicode[glyph] || index;
properties.glyphs[glyph] = properties.encoding[index] = mapping; properties.glyphs[glyph] = properties.encoding[index] =
mapping;
} }
getToken(); // read the in 'put' getToken(); // read the in 'put'
} }
@ -2143,7 +2144,7 @@ CFF.prototype = {
'globalSubrs': this.createCFFIndexHeader([]), 'globalSubrs': this.createCFFIndexHeader([]),
'charset': (function charset(self) { 'charset': (function charset(self) {
var charset = '\x00'; // Encoding var charsetString = '\x00'; // Encoding
var count = glyphs.length; var count = glyphs.length;
for (var i = 0; i < count; i++) { for (var i = 0; i < count; i++) {
@ -2155,9 +2156,9 @@ CFF.prototype = {
if (index == -1) if (index == -1)
index = 0; index = 0;
charset += String.fromCharCode(index >> 8, index & 0xff); charsetString += String.fromCharCode(index >> 8, index & 0xff);
} }
return charset; return charsetString;
})(this), })(this),
'charstrings': this.createCFFIndexHeader([[0x8B, 0x0E]].concat(glyphs), 'charstrings': this.createCFFIndexHeader([[0x8B, 0x0E]].concat(glyphs),
@ -2224,7 +2225,7 @@ var Type2CFF = (function() {
this.properties = properties; this.properties = properties;
this.data = this.parse(); this.data = this.parse();
}; }
constructor.prototype = { constructor.prototype = {
parse: function cff_parse() { parse: function cff_parse() {
@ -2447,7 +2448,7 @@ var Type2CFF = (function() {
case 21: case 21:
dict['nominalWidthX'] = value[0]; dict['nominalWidthX'] = value[0];
default: default:
TODO('interpret top dict key'); TODO('interpret top dict key: ' + key);
} }
} }
return dict; return dict;
@ -2559,7 +2560,7 @@ var Type2CFF = (function() {
error('Incorrect byte'); error('Incorrect byte');
} }
return -1; return -1;
}; }
function parseFloatOperand() { function parseFloatOperand() {
var str = ''; var str = '';
@ -2581,7 +2582,7 @@ var Type2CFF = (function() {
str += lookup[b2]; str += lookup[b2];
} }
return parseFloat(str); return parseFloat(str);
}; }
var operands = []; var operands = [];
var entries = []; var entries = [];
@ -2607,15 +2608,14 @@ var Type2CFF = (function() {
parseIndex: function cff_parseIndex(pos) { parseIndex: function cff_parseIndex(pos) {
var bytes = this.bytes; var bytes = this.bytes;
var count = bytes[pos++] << 8 | bytes[pos++]; var count = bytes[pos++] << 8 | bytes[pos++];
if (count == 0) { var offsets = [];
var offsets = []; var end = pos;
var end = pos;
} else { if (count != 0) {
var offsetSize = bytes[pos++]; var offsetSize = bytes[pos++];
// add 1 for offset to determine size of last object // add 1 for offset to determine size of last object
var startPos = pos + ((count + 1) * offsetSize) - 1; var startPos = pos + ((count + 1) * offsetSize) - 1;
var offsets = [];
for (var i = 0, ii = count + 1; i < ii; ++i) { for (var i = 0, ii = count + 1; i < ii; ++i) {
var offset = 0; var offset = 0;
for (var j = 0; j < offsetSize; ++j) { for (var j = 0; j < offsetSize; ++j) {
@ -2624,7 +2624,7 @@ var Type2CFF = (function() {
} }
offsets.push(startPos + offset); offsets.push(startPos + offset);
} }
var end = offsets[count]; end = offsets[count];
} }
return { return {

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,3 +1,6 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
var Metrics = { var Metrics = {
'Courier': 600, 'Courier': 600,
'Courier-Bold': 600, 'Courier-Bold': 600,

124
pdf.js
View File

@ -710,9 +710,9 @@ var PredictorStream = (function() {
var bits = this.bits = params.get('BitsPerComponent') || 8; var bits = this.bits = params.get('BitsPerComponent') || 8;
var columns = this.columns = params.get('Columns') || 1; var columns = this.columns = params.get('Columns') || 1;
var pixBytes = this.pixBytes = (colors * bits + 7) >> 3; this.pixBytes = (colors * bits + 7) >> 3;
// add an extra pixByte to represent the pixel left of column 0 // add an extra pixByte to represent the pixel left of column 0
var rowBytes = this.rowBytes = (columns * colors * bits + 7) >> 3; this.rowBytes = (columns * colors * bits + 7) >> 3;
DecodeStream.call(this); DecodeStream.call(this);
return this; return this;
@ -722,7 +722,6 @@ var PredictorStream = (function() {
constructor.prototype.readBlockTiff = function() { constructor.prototype.readBlockTiff = function() {
var rowBytes = this.rowBytes; var rowBytes = this.rowBytes;
var pixBytes = this.pixBytes;
var bufferLength = this.bufferLength; var bufferLength = this.bufferLength;
var buffer = this.ensureBuffer(bufferLength + rowBytes); var buffer = this.ensureBuffer(bufferLength + rowBytes);
@ -733,16 +732,18 @@ var PredictorStream = (function() {
var rawBytes = this.stream.getBytes(rowBytes); var rawBytes = this.stream.getBytes(rowBytes);
var inbuf = 0, outbuf = 0;
var inbits = 0, outbits = 0;
if (bits === 1) { if (bits === 1) {
var inbuf = 0;
for (var i = 0; i < rowBytes; ++i) { for (var i = 0; i < rowBytes; ++i) {
var c = rawBytes[i]; var c = rawBytes[i];
inBuf = (inBuf << 8) | c; inbuf = (inbuf << 8) | c;
// bitwise addition is exclusive or // bitwise addition is exclusive or
// first shift inBuf and then add // first shift inbuf and then add
currentRow[i] = (c ^ (inBuf >> colors)) & 0xFF; currentRow[i] = (c ^ (inbuf >> colors)) & 0xFF;
// truncate inBuf (assumes colors < 16) // truncate inbuf (assumes colors < 16)
inBuf &= 0xFFFF; inbuf &= 0xFFFF;
} }
} else if (bits === 8) { } else if (bits === 8) {
for (var i = 0; i < colors; ++i) for (var i = 0; i < colors; ++i)
@ -752,8 +753,6 @@ var PredictorStream = (function() {
} else { } else {
var compArray = new Uint8Array(colors + 1); var compArray = new Uint8Array(colors + 1);
var bitMask = (1 << bits) - 1; var bitMask = (1 << bits) - 1;
var inbuf = 0, outbut = 0;
var inbits = 0, outbits = 0;
var j = 0, k = 0; var j = 0, k = 0;
var columns = this.columns; var columns = this.columns;
for (var i = 0; i < columns; ++i) { for (var i = 0; i < columns; ++i) {
@ -877,8 +876,8 @@ var JpegStream = (function() {
function fixYcckImage(bytes) { function fixYcckImage(bytes) {
// Inserting 'EMBED' marker after JPEG signature // Inserting 'EMBED' marker after JPEG signature
var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8, var embedMarker = new Uint8Array([0xFF, 0xEC, 0, 8, 0x45, 0x4D, 0x42, 0x45,
0x45, 0x4D, 0x42, 0x45, 0x44, 0]); 0x44, 0]);
var newBytes = new Uint8Array(bytes.length + embedMarker.length); var newBytes = new Uint8Array(bytes.length + embedMarker.length);
newBytes.set(bytes, embedMarker.length); newBytes.set(bytes, embedMarker.length);
// copy JPEG header // copy JPEG header
@ -1015,11 +1014,11 @@ var Ascii85Stream = (function() {
return; return;
} }
var bufferLength = this.bufferLength; var bufferLength = this.bufferLength, buffer;
// special code for z // special code for z
if (c == zCode) { if (c == zCode) {
var buffer = this.ensureBuffer(bufferLength + 4); buffer = this.ensureBuffer(bufferLength + 4);
for (var i = 0; i < 4; ++i) for (var i = 0; i < 4; ++i)
buffer[bufferLength + i] = 0; buffer[bufferLength + i] = 0;
this.bufferLength += 4; this.bufferLength += 4;
@ -1036,7 +1035,7 @@ var Ascii85Stream = (function() {
if (!c || c == tildaCode) if (!c || c == tildaCode)
break; break;
} }
var buffer = this.ensureBuffer(bufferLength + i - 1); buffer = this.ensureBuffer(bufferLength + i - 1);
this.bufferLength += i - 1; this.bufferLength += i - 1;
// partial ending; // partial ending;
@ -1874,7 +1873,7 @@ var CCITTFaxStream = (function() {
for (var i = 0; i < 4; ++i) { for (var i = 0; i < 4; ++i) {
code1 = this.lookBits(12); code1 = this.lookBits(12);
if (code1 != 1) if (code1 != 1)
warning('bad rtc code'); warn('bad rtc code: ' + code1);
this.eatBits(12); this.eatBits(12);
if (this.encoding > 0) { if (this.encoding > 0) {
this.lookBits(1); this.lookBits(1);
@ -2013,7 +2012,7 @@ var CCITTFaxStream = (function() {
} }
} }
for (var n = 11; n <= 12; ++n) { for (var n = 11; n <= 12; ++n) {
code == this.lookBits(n); code = this.lookBits(n);
if (code == EOF) if (code == EOF)
return 1; return 1;
if (n < 12) if (n < 12)
@ -2437,11 +2436,6 @@ var Lexer = (function() {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // fx
]; ];
var MIN_INT = (1 << 31) | 0;
var MAX_INT = (MIN_INT - 1) | 0;
var MIN_UINT = 0;
var MAX_UINT = ((1 << 30) * 4) - 1;
function ToHexDigit(ch) { function ToHexDigit(ch) {
if (ch >= '0' && ch <= '9') if (ch >= '0' && ch <= '9')
return ch.charCodeAt(0) - 48; return ch.charCodeAt(0) - 48;
@ -3107,7 +3101,6 @@ var XRef = (function() {
}, },
readXRefStream: function readXRefStream(stream) { readXRefStream: function readXRefStream(stream) {
var streamParameters = stream.parameters; var streamParameters = stream.parameters;
var length = streamParameters.get('Length');
var byteWidths = streamParameters.get('W'); var byteWidths = streamParameters.get('W');
var range = streamParameters.get('Index'); var range = streamParameters.get('Index');
if (!range) if (!range)
@ -3356,7 +3349,7 @@ var Page = (function() {
} }
return shadow(this, 'rotate', rotate); return shadow(this, 'rotate', rotate);
}, },
startRendering: function(canvasCtx, continuation, onerror) { startRendering: function(canvasCtx, continuation) {
var self = this; var self = this;
var stats = self.stats; var stats = self.stats;
stats.compile = stats.fonts = stats.render = 0; stats.compile = stats.fonts = stats.render = 0;
@ -3754,8 +3747,6 @@ var PDFDoc = (function() {
return shadow(this, 'numPages', num); return shadow(this, 'numPages', num);
}, },
getPage: function(n) { getPage: function(n) {
var linearization = this.linearization;
// assert(!linearization, "linearized page access not implemented");
return this.catalog.getPage(n); return this.catalog.getPage(n);
} }
}; };
@ -4141,7 +4132,7 @@ var PartialEvaluator = (function() {
}; };
constructor.prototype = { constructor.prototype = {
eval: function(stream, xref, resources, fonts, images) { evaluate: function(stream, xref, resources, fonts, images) {
resources = xref.fetchIfRef(resources) || new Dict(); resources = xref.fetchIfRef(resources) || new Dict();
var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict(); var xobjs = xref.fetchIfRef(resources.get('XObject')) || new Dict();
var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict(); var patterns = xref.fetchIfRef(resources.get('Pattern')) || new Dict();
@ -4165,8 +4156,9 @@ var PartialEvaluator = (function() {
var dict = IsStream(pattern) ? pattern.dict : pattern; var dict = IsStream(pattern) ? pattern.dict : pattern;
var typeNum = dict.get('PatternType'); var typeNum = dict.get('PatternType');
if (typeNum == 1) { if (typeNum == 1) {
patternName.code = this.eval(pattern, xref, patternName.code = this.evaluate(pattern, xref,
dict.get('Resources'), fonts); dict.get('Resources'),
fonts);
} }
} }
} }
@ -4185,8 +4177,9 @@ var PartialEvaluator = (function() {
); );
if ('Form' == type.name) { if ('Form' == type.name) {
args[0].code = this.eval(xobj, xref, xobj.dict.get('Resources'), args[0].code = this.evaluate(xobj, xref,
fonts, images); xobj.dict.get('Resources'), fonts,
images);
} }
if (xobj instanceof JpegStream) if (xobj instanceof JpegStream)
images.bind(xobj); // monitoring image load images.bind(xobj); // monitoring image load
@ -4224,7 +4217,7 @@ var PartialEvaluator = (function() {
}, },
extractEncoding: function(dict, xref, properties) { extractEncoding: function(dict, xref, properties) {
var type = properties.type; var type = properties.type, encoding;
if (properties.composite) { if (properties.composite) {
if (type == 'CIDFontType2') { if (type == 'CIDFontType2') {
var defaultWidth = xref.fetchIfRef(dict.get('DW')) || 1000; var defaultWidth = xref.fetchIfRef(dict.get('DW')) || 1000;
@ -4261,7 +4254,7 @@ var PartialEvaluator = (function() {
var glyphsData = glyphsStream.getBytes(0); var glyphsData = glyphsStream.getBytes(0);
// Glyph ids are big-endian 2-byte values // Glyph ids are big-endian 2-byte values
var encoding = properties.encoding; encoding = properties.encoding;
// Set encoding 0 to later verify the font has an encoding // Set encoding 0 to later verify the font has an encoding
encoding[0] = { unicode: 0, width: 0 }; encoding[0] = { unicode: 0, width: 0 };
@ -4278,7 +4271,7 @@ var PartialEvaluator = (function() {
}; };
} }
} else if (type == 'CIDFontType0') { } else if (type == 'CIDFontType0') {
var encoding = xref.fetchIfRef(dict.get('Encoding')); encoding = xref.fetchIfRef(dict.get('Encoding'));
if (IsName(encoding)) { if (IsName(encoding)) {
// Encoding is a predefined CMap // Encoding is a predefined CMap
if (encoding.name == 'Identity-H') { if (encoding.name == 'Identity-H') {
@ -4299,7 +4292,7 @@ var PartialEvaluator = (function() {
var map = properties.encoding; var map = properties.encoding;
var baseEncoding = null; var baseEncoding = null;
if (dict.has('Encoding')) { if (dict.has('Encoding')) {
var encoding = xref.fetchIfRef(dict.get('Encoding')); encoding = xref.fetchIfRef(dict.get('Encoding'));
if (IsDict(encoding)) { if (IsDict(encoding)) {
var baseName = encoding.get('BaseEncoding'); var baseName = encoding.get('BaseEncoding');
if (baseName) if (baseName)
@ -4685,7 +4678,7 @@ var CanvasGraphics = (function() {
compile: function(stream, xref, resources, fonts, images) { compile: function(stream, xref, resources, fonts, images) {
var pe = new PartialEvaluator(); var pe = new PartialEvaluator();
return pe.eval(stream, xref, resources, fonts, images); return pe.evaluate(stream, xref, resources, fonts, images);
}, },
execute: function(code, xref, resources) { execute: function(code, xref, resources) {
@ -4724,13 +4717,13 @@ var CanvasGraphics = (function() {
this.ctx.mozDashOffset = dashPhase; this.ctx.mozDashOffset = dashPhase;
}, },
setRenderingIntent: function(intent) { setRenderingIntent: function(intent) {
TODO('set rendering intent'); TODO('set rendering intent: ' + intent);
}, },
setFlatness: function(flatness) { setFlatness: function(flatness) {
TODO('set flatness'); TODO('set flatness: ' + flatness);
}, },
setGState: function(dictName) { setGState: function(dictName) {
TODO('set graphics state from dict'); TODO('set graphics state from dict: ' + dictName);
}, },
save: function() { save: function() {
this.ctx.save(); this.ctx.save();
@ -4925,10 +4918,10 @@ var CanvasGraphics = (function() {
} }
}, },
setTextRenderingMode: function(mode) { setTextRenderingMode: function(mode) {
TODO('text rendering mode'); TODO('text rendering mode: ' + mode);
}, },
setTextRise: function(rise) { setTextRise: function(rise) {
TODO('text rise'); TODO('text rise: ' + rise);
}, },
moveText: function(x, y) { moveText: function(x, y) {
this.current.x = this.current.lineX += x; this.current.x = this.current.lineX += x;
@ -5022,10 +5015,13 @@ var CanvasGraphics = (function() {
// Type3 fonts // Type3 fonts
setCharWidth: function(xWidth, yWidth) { setCharWidth: function(xWidth, yWidth) {
TODO("type 3 fonts ('d0' operator)"); TODO('type 3 fonts ("d0" operator) xWidth: ' + xWidth + ' yWidth: ' +
yWidth);
}, },
setCharWidthAndBounds: function(xWidth, yWidth, llx, lly, urx, ury) { setCharWidthAndBounds: function(xWidth, yWidth, llx, lly, urx, ury) {
TODO("type 3 fonts ('d1' operator)"); TODO('type 3 fonts ("d1" operator) xWidth: ' + xWidth + ' yWidth: ' +
yWidth + ' llx: ' + llx + ' lly: ' + lly + ' urx: ' + urx +
' ury ' + ury);
}, },
// Color // Color
@ -5424,7 +5420,6 @@ var ColorSpace = (function() {
var lookup = xref.fetchIfRef(cs[3]); var lookup = xref.fetchIfRef(cs[3]);
return new IndexedCS(base, hiVal, lookup); return new IndexedCS(base, hiVal, lookup);
case 'Separation': case 'Separation':
var name = cs[1];
var alt = ColorSpace.parse(cs[2], xref, res); var alt = ColorSpace.parse(cs[2], xref, res);
var tintFn = new PDFFunction(xref, xref.fetchIfRef(cs[3])); var tintFn = new PDFFunction(xref, xref.fetchIfRef(cs[3]));
return new SeparationCS(alt, tintFn); return new SeparationCS(alt, tintFn);
@ -5462,12 +5457,12 @@ var SeparationCS = (function() {
var base = this.base; var base = this.base;
var scale = 1 / ((1 << bits) - 1); var scale = 1 / ((1 << bits) - 1);
var length = 3 * input.length; var length = input.length;
var pos = 0; var pos = 0;
var numComps = base.numComps; var numComps = base.numComps;
var baseBuf = new Uint8Array(numComps * input.length); var baseBuf = new Uint8Array(numComps * length);
for (var i = 0, ii = input.length; i < ii; ++i) { for (var i = 0; i < length; ++i) {
var scaled = input[i] * scale; var scaled = input[i] * scale;
var tinted = tintFn.func([scaled]); var tinted = tintFn.func([scaled]);
for (var j = 0; j < numComps; ++j) for (var j = 0; j < numComps; ++j)
@ -5773,8 +5768,6 @@ var DummyShading = (function() {
var RadialAxialShading = (function() { var RadialAxialShading = (function() {
function constructor(dict, matrix, xref, res, ctx) { function constructor(dict, matrix, xref, res, ctx) {
this.matrix = matrix; this.matrix = matrix;
var bbox = dict.get('BBox');
var background = dict.get('Background');
this.coordsArr = dict.get('Coords'); this.coordsArr = dict.get('Coords');
this.shadingType = dict.get('ShadingType'); this.shadingType = dict.get('ShadingType');
this.type = 'Pattern'; this.type = 'Pattern';
@ -5832,15 +5825,17 @@ var RadialAxialShading = (function() {
getPattern: function() { getPattern: function() {
var coordsArr = this.coordsArr; var coordsArr = this.coordsArr;
var type = this.shadingType; var type = this.shadingType;
var p0, p1, r0, r1;
if (type == 2) { if (type == 2) {
var p0 = [coordsArr[0], coordsArr[1]]; p0 = [coordsArr[0], coordsArr[1]];
var p1 = [coordsArr[2], coordsArr[3]]; p1 = [coordsArr[2], coordsArr[3]];
} else if (type == 3) { } else if (type == 3) {
var p0 = [coordsArr[0], coordsArr[1]]; p0 = [coordsArr[0], coordsArr[1]];
var p1 = [coordsArr[3], coordsArr[4]]; p1 = [coordsArr[3], coordsArr[4]];
var r0 = coordsArr[2], r1 = coordsArr[5]; r0 = coordsArr[2];
r1 = coordsArr[5];
} else { } else {
error(); error('getPattern type unknown: ' + type);
} }
var matrix = this.matrix; var matrix = this.matrix;
@ -5863,11 +5858,11 @@ var RadialAxialShading = (function() {
p1 = Util.applyTransform(p1, userMatrix); p1 = Util.applyTransform(p1, userMatrix);
} }
var colorStops = this.colorStops; var colorStops = this.colorStops, grad;
if (type == 2) if (type == 2)
var grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
else if (type == 3) else if (type == 3)
var grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
for (var i = 0, ii = colorStops.length; i < ii; ++i) { for (var i = 0, ii = colorStops.length; i < ii; ++i) {
var c = colorStops[i]; var c = colorStops[i];
@ -6058,6 +6053,7 @@ var PDFImage = (function() {
var bufferPos = 0; var bufferPos = 0;
var output = bpc <= 8 ? new Uint8Array(length) : var output = bpc <= 8 ? new Uint8Array(length) :
bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length);
var rowComps = width * numComps;
if (bpc == 1) { if (bpc == 1) {
var valueZero = 0, valueOne = 1; var valueZero = 0, valueOne = 1;
@ -6065,7 +6061,6 @@ var PDFImage = (function() {
valueZero = decodeMap[0] ? 1 : 0; valueZero = decodeMap[0] ? 1 : 0;
valueOne = decodeMap[1] ? 1 : 0; valueOne = decodeMap[1] ? 1 : 0;
} }
var rowComps = width * numComps;
var mask = 0; var mask = 0;
var buf = 0; var buf = 0;
@ -6087,8 +6082,7 @@ var PDFImage = (function() {
} else { } else {
if (decodeMap != null) if (decodeMap != null)
TODO('interpolate component values'); TODO('interpolate component values');
var rowComps = width * numComps; var bits = 0, buf = 0;
var bits, buf;
for (var i = 0, ii = length; i < ii; ++i) { for (var i = 0, ii = length; i < ii; ++i) {
if (i % rowComps == 0) { if (i % rowComps == 0) {
buf = 0; buf = 0;
@ -6293,14 +6287,14 @@ var PDFFunction = (function() {
floor *= outputSize; floor *= outputSize;
ceil *= outputSize; ceil *= outputSize;
var output = []; var output = [], v = 0;
for (var i = 0; i < outputSize; ++i) { for (var i = 0; i < outputSize; ++i) {
if (ceil == floor) { if (ceil == floor) {
var v = samples[ceil + i]; v = samples[ceil + i];
} else { } else {
var low = samples[floor + i]; var low = samples[floor + i];
var high = samples[ceil + i]; var high = samples[ceil + i];
var v = low * scale + high * (1 - scale); v = low * scale + high * (1 - scale);
} }
var i2 = i * 2; var i2 = i * 2;

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
/* /*

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
// Checking if the typed arrays are supported // Checking if the typed arrays are supported

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';

View File

@ -1,4 +1,4 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict'; 'use strict';