Add more debug data to error-logs.

Fix also a few gjslint errors.
This commit is contained in:
Kalervo Kujala 2011-08-22 22:30:22 +03:00
parent e5e8b5a74a
commit 8ffbf683b8
3 changed files with 79 additions and 71 deletions

View File

@ -461,9 +461,9 @@ var Font = (function Font() {
return array; return array;
}; };
function arrayToString(arr) { function arrayToString(arr) {
var str = ""; var str = '';
for (var i = 0; i < arr.length; ++i) for (var i = 0; i < arr.length; ++i)
str += String.fromCharCode(arr[i]); str += String.fromCharCode(arr[i]);
@ -789,10 +789,10 @@ var Font = (function Font() {
encoding: null, encoding: null,
checkAndRepair: function font_checkAndRepair(name, font, properties) { checkAndRepair: function font_checkAndRepair(name, font, properties) {
var kCmapGlyphOffset = 0xE000; //offset glpyhs to the Unicode Private Use Area // offset glyphs to the Unicode Private Use Area
var kCmapGlyphOffset = 0xE000;
function readTableEntry(file) { function readTableEntry(file) {
// tag
var tag = file.getBytes(4); var tag = file.getBytes(4);
tag = String.fromCharCode(tag[0]) + tag = String.fromCharCode(tag[0]) +
String.fromCharCode(tag[1]) + String.fromCharCode(tag[1]) +
@ -975,12 +975,12 @@ var Font = (function Font() {
} }
var numTables = header.numTables + requiredTables.length; var numTables = header.numTables + requiredTables.length;
// header and new offsets. Table entry information is appended to the // header and new offsets. Table entry information is appended to the
// end of file. The virtualOffset represents where to put the actual // end of file. The virtualOffset represents where to put the actual
// data of a particular table; // data of a particular table;
var ttf = { var ttf = {
file: "", file: '',
virtualOffset: numTables * (4 * 4) virtualOffset: numTables * (4 * 4)
}; };
@ -1030,8 +1030,8 @@ var Font = (function Font() {
// Type2 composite fonts map characters directly to glyphs so the cmap // Type2 composite fonts map characters directly to glyphs so the cmap
// table must be replaced. // table must be replaced.
// canvas fillText will reencode some characters even if the font has a // canvas fillText will reencode some characters even if the font has a
// glyph at that position - e.g. newline is converted to a space and U+00AD // glyph at that position - e.g. newline is converted to a space and
// (soft hypen) is not drawn. // U+00AD (soft hyphen) is not drawn.
// So, offset all the glyphs by 0xFF to avoid these cases and use // So, offset all the glyphs by 0xFF to avoid these cases and use
// the encoding to map incoming characters to the new glyph positions // the encoding to map incoming characters to the new glyph positions
@ -1126,7 +1126,7 @@ var Font = (function Font() {
var kRequiredTablesCount = 9; var kRequiredTablesCount = 9;
var otf = { var otf = {
file: "", file: '',
virtualOffset: 9 * (4 * 4) virtualOffset: 9 * (4 * 4)
}; };
@ -1584,11 +1584,11 @@ var Type1Parser = function() {
var count = eexecStr.length; var count = eexecStr.length;
for (var i = 0; i < count; i++) { for (var i = 0; i < count; i++) {
var getToken = function() { var getToken = function() {
while(i < count && (eexecStr[i] == ' ' || eexecStr[i] == '\n')) while (i < count && (eexecStr[i] == ' ' || eexecStr[i] == '\n'))
++i; ++i;
var t = ''; var t = '';
while(i < count && !(eexecStr[i] == ' ' || eexecStr[i] == '\n')) while (i < count && !(eexecStr[i] == ' ' || eexecStr[i] == '\n'))
t += eexecStr[i++]; t += eexecStr[i++];
return t; return t;

123
pdf.js
View File

@ -390,13 +390,13 @@ var FlateStream = (function() {
var cmf = bytes[bytesPos++]; var cmf = bytes[bytesPos++];
var flg = bytes[bytesPos++]; var flg = bytes[bytesPos++];
if (cmf == -1 || flg == -1) if (cmf == -1 || flg == -1)
error('Invalid header in flate stream'); error('Invalid header in flate stream: ' + cmf + ', ' + flg);
if ((cmf & 0x0f) != 0x08) if ((cmf & 0x0f) != 0x08)
error('Unknown compression method in flate stream'); error('Unknown compression method in flate stream: ' + cmf + ', ' + flg);
if ((((cmf << 8) + flg) % 31) != 0) if ((((cmf << 8) + flg) % 31) != 0)
error('Bad FCHECK in flate stream'); error('Bad FCHECK in flate stream: ' + cmf + ', ' + flg);
if (flg & 0x20) if (flg & 0x20)
error('FDICT bit set in flate stream'); error('FDICT bit set in flate stream: ' + cmf + ', ' + flg);
this.bytes = bytes; this.bytes = bytes;
this.bytesPos = bytesPos; this.bytesPos = bytesPos;
@ -635,7 +635,7 @@ var PredictorStream = (function() {
if (predictor <= 1) if (predictor <= 1)
return stream; // no prediction return stream; // no prediction
if (predictor !== 2 && (predictor < 10 || predictor > 15)) if (predictor !== 2 && (predictor < 10 || predictor > 15))
error('Unsupported predictor'); error('Unsupported predictor: ' + predictor);
if (predictor === 2) if (predictor === 2)
this.readBlock = this.readBlockTiff; this.readBlock = this.readBlockTiff;
@ -787,7 +787,7 @@ var PredictorStream = (function() {
break; break;
} }
default: default:
error('Unsupported predictor'); error('Unsupported predictor: ' + predictor);
break; break;
} }
this.bufferLength += rowBytes; this.bufferLength += rowBytes;
@ -2387,7 +2387,7 @@ var Lexer = (function() {
} while (true); } while (true);
var value = parseFloat(str); var value = parseFloat(str);
if (isNaN(value)) if (isNaN(value))
error('Invalid floating point number'); error('Invalid floating point number: ' + value);
return value; return value;
}, },
getString: function() { getString: function() {
@ -2486,7 +2486,7 @@ var Lexer = (function() {
stream.skip(); stream.skip();
var x2 = ToHexDigit(stream.getChar()); var x2 = ToHexDigit(stream.getChar());
if (x2 == -1) if (x2 == -1)
error('Illegal digit in hex char in name'); error('Illegal digit in hex char in name: ' + x2);
str += String.fromCharCode((x << 4) | x2); str += String.fromCharCode((x << 4) | x2);
} else { } else {
str += '#'; str += '#';
@ -2497,7 +2497,8 @@ var Lexer = (function() {
} }
} }
if (str.length > 128) if (str.length > 128)
error('Warning: name token is longer than allowed by the spec.'); error('Warning: name token is longer than allowed by the spec: ' +
str.length);
return new Name(str); return new Name(str);
}, },
getHexString: function(ch) { getHexString: function(ch) {
@ -2515,14 +2516,14 @@ var Lexer = (function() {
if (specialChars[ch.charCodeAt(0)] != 1) { if (specialChars[ch.charCodeAt(0)] != 1) {
var x, x2; var x, x2;
if ((x = ToHexDigit(ch)) == -1) if ((x = ToHexDigit(ch)) == -1)
error('Illegal character in hex string'); error('Illegal character in hex string: ' + ch);
ch = stream.getChar(); ch = stream.getChar();
while (specialChars[ch.charCodeAt(0)] == 1) while (specialChars[ch.charCodeAt(0)] == 1)
ch = stream.getChar(); ch = stream.getChar();
if ((x2 = ToHexDigit(ch)) == -1) if ((x2 = ToHexDigit(ch)) == -1)
error('Illegal character in hex string'); error('Illegal character in hex string: ' + ch);
str += String.fromCharCode((x << 4) | x2); str += String.fromCharCode((x << 4) | x2);
} }
@ -2582,7 +2583,7 @@ var Lexer = (function() {
return new Cmd(ch); return new Cmd(ch);
// fall through // fall through
case ')': case ')':
error('Illegal character'); error('Illegal character: ' + ch);
return Error; return Error;
} }
@ -2591,7 +2592,7 @@ var Lexer = (function() {
while (!!(ch = stream.lookChar()) && !specialChars[ch.charCodeAt(0)]) { while (!!(ch = stream.lookChar()) && !specialChars[ch.charCodeAt(0)]) {
stream.skip(); stream.skip();
if (str.length == 128) { if (str.length == 128) {
error('Command token too long'); error('Command token too long: ' + str.length);
break; break;
} }
str += ch; str += ch;
@ -2765,7 +2766,7 @@ var Parser = (function() {
if (xref) if (xref)
length = xref.fetchIfRef(length); length = xref.fetchIfRef(length);
if (!IsInt(length)) { if (!IsInt(length)) {
error("Bad 'Length' attribute in stream"); error('Bad ' + Length + ' attribute in stream');
length = 0; length = 0;
} }
@ -2774,7 +2775,7 @@ var Parser = (function() {
this.shift(); // '>>' this.shift(); // '>>'
this.shift(); // 'stream' this.shift(); // 'stream'
if (!IsCmd(this.buf1, 'endstream')) if (!IsCmd(this.buf1, 'endstream'))
error("Missing 'endstream'"); error('Missing endstream');
this.shift(); this.shift();
stream = stream.makeSubStream(pos, length, dict); stream = stream.makeSubStream(pos, length, dict);
@ -2795,7 +2796,7 @@ var Parser = (function() {
for (var i = 0, ii = filterArray.length; i < ii; ++i) { for (var i = 0, ii = filterArray.length; i < ii; ++i) {
filter = filterArray[i]; filter = filterArray[i];
if (!IsName(filter)) if (!IsName(filter))
error('Bad filter name'); error('Bad filter name: ' + filter);
else { else {
params = null; params = null;
if (IsArray(paramsArray) && (i in paramsArray)) if (IsArray(paramsArray) && (i in paramsArray))
@ -2831,7 +2832,7 @@ var Parser = (function() {
} else if (name == 'CCITTFaxDecode' || name == 'CCF') { } else if (name == 'CCITTFaxDecode' || name == 'CCF') {
return new CCITTFaxStream(stream, params); return new CCITTFaxStream(stream, params);
} else { } else {
error("filter '" + name + "' not supported yet"); error('filter "' + name + '" not supported yet');
} }
return stream; return stream;
} }
@ -2864,7 +2865,7 @@ var Linearization = (function() {
obj > 0) { obj > 0) {
return obj; return obj;
} }
error("'" + name + "' field in linearization table is invalid"); error('"' + name + '" field in linearization table is invalid');
return 0; return 0;
}, },
getHint: function(index) { getHint: function(index) {
@ -2877,7 +2878,7 @@ var Linearization = (function() {
obj2 > 0) { obj2 > 0) {
return obj2; return obj2;
} }
error('Hints table in linearization table is invalid'); error('Hints table in linearization table is invalid: ' + index);
return 0; return 0;
}, },
get length() { get length() {
@ -2952,14 +2953,14 @@ var XRef = (function() {
error('Invalid XRef table'); error('Invalid XRef table');
var n = obj; var n = obj;
if (first < 0 || n < 0 || (first + n) != ((first + n) | 0)) if (first < 0 || n < 0 || (first + n) != ((first + n) | 0))
error('Invalid XRef table'); error('Invalid XRef table: ' + first + ', ' + n);
for (var i = first; i < first + n; ++i) { for (var i = first; i < first + n; ++i) {
var entry = {}; var entry = {};
if (!IsInt(obj = parser.getObj())) if (!IsInt(obj = parser.getObj()))
error('Invalid XRef table'); error('Invalid XRef table: ' + first + ', ' + n);
entry.offset = obj; entry.offset = obj;
if (!IsInt(obj = parser.getObj())) if (!IsInt(obj = parser.getObj()))
error('Invalid XRef table'); error('Invalid XRef table: ' + first + ', ' + n);
entry.gen = obj; entry.gen = obj;
obj = parser.getObj(); obj = parser.getObj();
if (IsCmd(obj, 'n')) { if (IsCmd(obj, 'n')) {
@ -2967,7 +2968,7 @@ var XRef = (function() {
} else if (IsCmd(obj, 'f')) { } else if (IsCmd(obj, 'f')) {
entry.free = true; entry.free = true;
} else { } else {
error('Invalid XRef table'); error('Invalid XRef table: ' + first + ', ' + n);
} }
if (!this.entries[i]) { if (!this.entries[i]) {
// In some buggy PDF files the xref table claims to start at 1 // In some buggy PDF files the xref table claims to start at 1
@ -3022,13 +3023,13 @@ var XRef = (function() {
while (range.length > 0) { while (range.length > 0) {
var first = range[0], n = range[1]; var first = range[0], n = range[1];
if (!IsInt(first) || !IsInt(n)) if (!IsInt(first) || !IsInt(n))
error('Invalid XRef range fields'); error('Invalid XRef range fields: ' + first + ', ' + n);
var typeFieldWidth = byteWidths[0]; var typeFieldWidth = byteWidths[0];
var offsetFieldWidth = byteWidths[1]; var offsetFieldWidth = byteWidths[1];
var generationFieldWidth = byteWidths[2]; var generationFieldWidth = byteWidths[2];
if (!IsInt(typeFieldWidth) || !IsInt(offsetFieldWidth) || if (!IsInt(typeFieldWidth) || !IsInt(offsetFieldWidth) ||
!IsInt(generationFieldWidth)) { !IsInt(generationFieldWidth)) {
error('Invalid XRef entry fields length'); error('Invalid XRef entry fields length: ' + first + ', ' + n);
} }
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
var type = 0, offset = 0, generation = 0; var type = 0, offset = 0, generation = 0;
@ -3054,7 +3055,7 @@ var XRef = (function() {
case 2: case 2:
break; break;
default: default:
error('Invalid XRef entry type'); error('Invalid XRef entry type: ' + type);
break; break;
} }
if (!this.entries[first + i]) if (!this.entries[first + i])
@ -3155,12 +3156,12 @@ var XRef = (function() {
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
var num = parser.getObj(); var num = parser.getObj();
if (!IsInt(num)) { if (!IsInt(num)) {
error('invalid object number in the ObjStm stream'); error('invalid object number in the ObjStm stream: ' + num);
} }
nums.push(num); nums.push(num);
var offset = parser.getObj(); var offset = parser.getObj();
if (!IsInt(offset)) { if (!IsInt(offset)) {
error('invalid object offset in the ObjStm stream'); error('invalid object offset in the ObjStm stream: ' + offset);
} }
} }
// read stream objects for cache // read stream objects for cache
@ -3269,7 +3270,7 @@ var Page = (function() {
var gfx = new CanvasGraphics(canvasCtx); var gfx = new CanvasGraphics(canvasCtx);
var fonts = []; var fonts = [];
var images = new ImagesLoader() var images = new ImagesLoader();
this.compile(gfx, fonts, images); this.compile(gfx, fonts, images);
stats.compile = Date.now(); stats.compile = Date.now();
@ -3323,7 +3324,8 @@ var Page = (function() {
var i, n = this.content.length, compiledItems = []; var i, n = this.content.length, compiledItems = [];
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
content = xref.fetchIfRef(this.content[i]); content = xref.fetchIfRef(this.content[i]);
compiledItems.push(gfx.compile(content, xref, resources, fonts, images)); compiledItems.push(gfx.compile(content, xref, resources, fonts,
images));
} }
// creating the function that executes all compiled items // creating the function that executes all compiled items
this.code = function(gfx) { this.code = function(gfx) {
@ -3347,7 +3349,7 @@ var Page = (function() {
gfx.execute(this.code, xref, resources); gfx.execute(this.code, xref, resources);
gfx.endDrawing(); gfx.endDrawing();
}, },
rotatePoint: function (x, y) { rotatePoint: function(x, y) {
var rotate = this.rotate; var rotate = this.rotate;
switch (rotate) { switch (rotate) {
default: default:
@ -3384,7 +3386,7 @@ var Page = (function() {
link.height = Math.abs(topLeftCorner.y - bottomRightCorner.y); link.height = Math.abs(topLeftCorner.y - bottomRightCorner.y);
var a = this.xref.fetchIfRef(annotation.get('A')); var a = this.xref.fetchIfRef(annotation.get('A'));
if (a) { if (a) {
switch(a.get('S').name) { switch (a.get('S').name) {
case 'URI': case 'URI':
link.url = a.get('URI'); link.url = a.get('URI');
break; break;
@ -3426,8 +3428,8 @@ var Catalog = (function() {
function convertIfUnicode(str) { function convertIfUnicode(str) {
if (str[0] === '\xFE' && str[1] === '\xFF') { if (str[0] === '\xFE' && str[1] === '\xFF') {
// UTF16BE BOM // UTF16BE BOM
var i, n = str.length, str2 = ""; var i, n = str.length, str2 = '';
for (i = 2; i < n; i+=2) for (i = 2; i < n; i += 2)
str2 += String.fromCharCode( str2 += String.fromCharCode(
(str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)); (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1));
str = str2; str = str2;
@ -4146,11 +4148,12 @@ var PartialEvaluator = (function() {
var glyphsStream = xref.fetchIfRef(cidToGidMap); var glyphsStream = xref.fetchIfRef(cidToGidMap);
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
encodingMap[0] = 0; //set this to 0 to verify the font has an encoding // Set this to 0 to verify the font has an encoding.
encodingMap[0] = 0;
for (var j = 0; j < glyphsData.length; j++) { for (var j = 0; j < glyphsData.length; j++) {
var glyphID = (glyphsData[j++] << 8) | glyphsData[j]; var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
if (glyphID != 0) if (glyphID != 0)
encodingMap[j>>1] = glyphID; encodingMap[j >> 1] = glyphID;
} }
} }
} }
@ -4375,11 +4378,11 @@ var CanvasExtraState = (function() {
constructor.prototype = { constructor.prototype = {
clone: function canvasextra_clone() { clone: function canvasextra_clone() {
return Object.create(this); return Object.create(this);
}, },
setCurrentPoint: function canvasextra_setCurrentPoint(x, y) { setCurrentPoint: function canvasextra_setCurrentPoint(x, y) {
this.x = x; this.x = x;
this.y = y; this.y = y;
}, }
}; };
return constructor; return constructor;
})(); })();
@ -5106,12 +5109,12 @@ var ColorSpace = (function() {
// Input: array of size numComps representing color component values // Input: array of size numComps representing color component values
// Output: array of rgb values, each value ranging from [0.1] // Output: array of rgb values, each value ranging from [0.1]
getRgb: function cs_getRgb(color) { getRgb: function cs_getRgb(color) {
error('Should not call ColorSpace.getRgb'); error('Should not call ColorSpace.getRgb: ' + color);
}, },
// Input: Uint8Array of component values, each value scaled to [0,255] // Input: Uint8Array of component values, each value scaled to [0,255]
// Output: Uint8Array of rgb values, each value scaled to [0,255] // Output: Uint8Array of rgb values, each value scaled to [0,255]
getRgbBuffer: function cs_getRgbBuffer(input) { getRgbBuffer: function cs_getRgbBuffer(input) {
error('Should not call ColorSpace.getRgbBuffer'); error('Should not call ColorSpace.getRgbBuffer: ' + input);
} }
}; };
@ -5205,10 +5208,10 @@ var ColorSpace = (function() {
case 'Lab': case 'Lab':
case 'DeviceN': case 'DeviceN':
default: default:
error("unimplemented color space object '" + mode + "'"); error('unimplemented color space object "' + mode + '"');
} }
} else { } else {
error('unrecognized color space object: "' + cs + "'"); error('unrecognized color space object: "' + cs + '"');
} }
}; };
@ -5282,7 +5285,7 @@ var IndexedCS = (function() {
for (var i = 0; i < length; ++i) for (var i = 0; i < length; ++i)
lookupArray[i] = lookup.charCodeAt(i); lookupArray[i] = lookup.charCodeAt(i);
} else { } else {
error('Unrecognized lookup table'); error('Unrecognized lookup table: ' + lookup);
} }
this.lookup = lookupArray; this.lookup = lookupArray;
} }
@ -5457,7 +5460,7 @@ var Pattern = (function() {
// Input: current Canvas context // Input: current Canvas context
// Output: the appropriate fillStyle or strokeStyle // Output: the appropriate fillStyle or strokeStyle
getPattern: function pattern_getStyle(ctx) { getPattern: function pattern_getStyle(ctx) {
error('Should not call Pattern.getStyle'); error('Should not call Pattern.getStyle: ' + ctx);
} }
}; };
@ -5466,7 +5469,7 @@ var Pattern = (function() {
var patternName = args[length - 1]; var patternName = args[length - 1];
if (!IsName(patternName)) if (!IsName(patternName))
error('Bad args to getPattern'); error('Bad args to getPattern: ' + patternName);
var patternRes = xref.fetchIfRef(res.get('Pattern')); var patternRes = xref.fetchIfRef(res.get('Pattern'));
if (!patternRes) if (!patternRes)
@ -5496,7 +5499,7 @@ var Pattern = (function() {
var matrix = dict.get('Matrix'); var matrix = dict.get('Matrix');
return Pattern.parseShading(shading, matrix, xref, res, ctx); return Pattern.parseShading(shading, matrix, xref, res, ctx);
default: default:
error('Unknown type of pattern'); error('Unknown type of pattern: ' + typeNum);
} }
}; };
@ -5701,7 +5704,7 @@ var TilingPattern = (function() {
tmpCtx.strokeStyle = color; tmpCtx.strokeStyle = color;
break; break;
default: default:
error('Unsupported paint type'); error('Unsupported paint type: ' + paintType);
} }
var scale = [width / xstep, height / ystep]; var scale = [width / xstep, height / ystep];
@ -5764,7 +5767,8 @@ var PDFImage = (function() {
this.height = dict.get('Height', 'H'); this.height = dict.get('Height', 'H');
if (this.width < 1 || this.height < 1) if (this.width < 1 || this.height < 1)
error('Invalid image width or height'); error('Invalid image width: ' + this.width + ' or height: ' +
this.height);
this.interpolate = dict.get('Interpolate', 'I') || false; this.interpolate = dict.get('Interpolate', 'I') || false;
this.imageMask = dict.get('ImageMask', 'IM') || false; this.imageMask = dict.get('ImageMask', 'IM') || false;
@ -5776,7 +5780,7 @@ var PDFImage = (function() {
if (this.imageMask) if (this.imageMask)
bitsPerComponent = 1; bitsPerComponent = 1;
else else
error('Bits per component missing in image'); error('Bits per component missing in image: ' + this.imageMask);
} }
} }
this.bpc = bitsPerComponent; this.bpc = bitsPerComponent;
@ -5876,7 +5880,8 @@ var PDFImage = (function() {
var sw = smask.width; var sw = smask.width;
var sh = smask.height; var sh = smask.height;
if (sw != this.width || sh != this.height) if (sw != this.width || sh != this.height)
error('smask dimensions do not match image dimensions'); error('smask dimensions do not match image dimensions: ' + sw +
' != ' + this.width + ', ' + sh + ' != ' + this.height);
smask.fillGrayBuffer(buf); smask.fillGrayBuffer(buf);
return buf; return buf;
@ -5935,7 +5940,7 @@ var PDFImage = (function() {
fillGrayBuffer: function fillGrayBuffer(buffer) { fillGrayBuffer: function fillGrayBuffer(buffer) {
var numComps = this.numComps; var numComps = this.numComps;
if (numComps != 1) if (numComps != 1)
error('Reading gray scale from a color image'); error('Reading gray scale from a color image: ' + numComps);
var width = this.width; var width = this.width;
var height = this.height; var height = this.height;
@ -5987,7 +5992,8 @@ var PDFFunction = (function() {
var outputSize = range.length / 2; var outputSize = range.length / 2;
if (inputSize != 1) if (inputSize != 1)
error('No support for multi-variable inputs to functions'); error('No support for multi-variable inputs to functions: ' +
inputSize);
var size = dict.get('Size'); var size = dict.get('Size');
var bps = dict.get('BitsPerSample'); var bps = dict.get('BitsPerSample');
@ -5995,7 +6001,7 @@ var PDFFunction = (function() {
if (!order) if (!order)
order = 1; order = 1;
if (order !== 1) if (order !== 1)
error('No support for cubic spline interpolation'); error('No support for cubic spline interpolation: ' + order);
var encode = dict.get('Encode'); var encode = dict.get('Encode');
if (!encode) { if (!encode) {
@ -6021,7 +6027,8 @@ var PDFFunction = (function() {
} }
if (inputSize != args.length) if (inputSize != args.length)
error('Incorrect number of arguments'); error('Incorrect number of arguments: ' + inputSize + ' != ' +
args.length);
for (var i = 0; i < inputSize; i++) { for (var i = 0; i < inputSize; i++) {
var i2 = i * 2; var i2 = i * 2;
@ -6132,7 +6139,7 @@ var PDFFunction = (function() {
var fns = []; var fns = [];
for (var i = 0, ii = fnRefs.length; i < ii; ++i) for (var i = 0, ii = fnRefs.length; i < ii; ++i)
fns.push(new PDFFunction(xref, xref.fetchIfRef(fnRefs[i]))); fns.push(new PDFFunction(xref, xref.fetchIfRef(fnRefs[i])));
var bounds = dict.get('Bounds'); var bounds = dict.get('Bounds');
var encode = dict.get('Encode'); var encode = dict.get('Encode');
@ -6160,12 +6167,12 @@ var PDFFunction = (function() {
var dmax = domain[1]; var dmax = domain[1];
if (i < bounds.length) if (i < bounds.length)
dmax = bounds[i]; dmax = bounds[i];
var rmin = encode[2 * i]; var rmin = encode[2 * i];
var rmax = encode[2 * i + 1]; var rmax = encode[2 * i + 1];
var v2 = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); var v2 = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
// call the appropropriate function // call the appropropriate function
return fns[i].func([v2]); return fns[i].func([v2]);
} }

View File

@ -84,7 +84,7 @@ var PDFView = {
xhr.send(null); xhr.send(null);
}, },
navigateTo: function (dest) { navigateTo: function(dest) {
if (typeof dest === 'string') if (typeof dest === 'string')
dest = this.destinations[dest]; dest = this.destinations[dest];
// dest array looks like that: <page-ref> </XYZ|FitXXX> <args..> // dest array looks like that: <page-ref> </XYZ|FitXXX> <args..>
@ -92,7 +92,8 @@ var PDFView = {
var pageNumber = this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R']; var pageNumber = this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'];
if (pageNumber) { if (pageNumber) {
this.page = pageNumber; this.page = pageNumber;
// TODO scroll to specific region on the page, the precise scaling required // TODO scroll to specific region on the page, the precise scaling
// required.
} }
}, },