|
|
@ -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'; |
|
|
@ -18,6 +18,16 @@ function warn(msg) { |
|
|
|
log('Warning: ' + msg); |
|
|
|
log('Warning: ' + msg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function backtrace() { |
|
|
|
|
|
|
|
var stackStr; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
throw new Error(); |
|
|
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
|
|
stackStr = e.stack; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return stackStr.split('\n').slice(1).join('\n'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function error(msg) { |
|
|
|
function error(msg) { |
|
|
|
log(backtrace()); |
|
|
|
log(backtrace()); |
|
|
|
throw new Error(msg); |
|
|
|
throw new Error(msg); |
|
|
@ -44,16 +54,6 @@ function assertWellFormed(cond, msg) { |
|
|
|
malformed(msg); |
|
|
|
malformed(msg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function backtrace() { |
|
|
|
|
|
|
|
var stackStr; |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
throw new Error(); |
|
|
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
|
|
stackStr = e.stack; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return stackStr.split('\n').slice(1).join('\n'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function shadow(obj, prop, value) { |
|
|
|
function shadow(obj, prop, value) { |
|
|
|
try { |
|
|
|
try { |
|
|
|
Object.defineProperty(obj, prop, { value: value, |
|
|
|
Object.defineProperty(obj, prop, { value: value, |
|
|
@ -185,7 +185,7 @@ var DecodeStream = (function() { |
|
|
|
var buffer2 = new Uint8Array(size); |
|
|
|
var buffer2 = new Uint8Array(size); |
|
|
|
for (var i = 0; i < current; ++i) |
|
|
|
for (var i = 0; i < current; ++i) |
|
|
|
buffer2[i] = buffer[i]; |
|
|
|
buffer2[i] = buffer[i]; |
|
|
|
return this.buffer = buffer2; |
|
|
|
return (this.buffer = buffer2); |
|
|
|
}, |
|
|
|
}, |
|
|
|
getByte: function decodestream_getByte() { |
|
|
|
getByte: function decodestream_getByte() { |
|
|
|
var pos = this.pos; |
|
|
|
var pos = this.pos; |
|
|
@ -197,11 +197,11 @@ var DecodeStream = (function() { |
|
|
|
return this.buffer[this.pos++]; |
|
|
|
return this.buffer[this.pos++]; |
|
|
|
}, |
|
|
|
}, |
|
|
|
getBytes: function decodestream_getBytes(length) { |
|
|
|
getBytes: function decodestream_getBytes(length) { |
|
|
|
var pos = this.pos; |
|
|
|
var end, pos = this.pos; |
|
|
|
|
|
|
|
|
|
|
|
if (length) { |
|
|
|
if (length) { |
|
|
|
this.ensureBuffer(pos + length); |
|
|
|
this.ensureBuffer(pos + length); |
|
|
|
var end = pos + length; |
|
|
|
end = pos + length; |
|
|
|
|
|
|
|
|
|
|
|
while (!this.eof && this.bufferLength < end) |
|
|
|
while (!this.eof && this.bufferLength < end) |
|
|
|
this.readBlock(); |
|
|
|
this.readBlock(); |
|
|
@ -213,7 +213,7 @@ var DecodeStream = (function() { |
|
|
|
while (!this.eof) |
|
|
|
while (!this.eof) |
|
|
|
this.readBlock(); |
|
|
|
this.readBlock(); |
|
|
|
|
|
|
|
|
|
|
|
var end = this.bufferLength; |
|
|
|
end = this.bufferLength; |
|
|
|
|
|
|
|
|
|
|
|
// checking if bufferLength is still 0 then
|
|
|
|
// checking if bufferLength is still 0 then
|
|
|
|
// the buffer has to be initialized
|
|
|
|
// the buffer has to be initialized
|
|
|
@ -265,7 +265,7 @@ var FakeStream = (function() { |
|
|
|
function constructor(stream) { |
|
|
|
function constructor(stream) { |
|
|
|
this.dict = stream.dict; |
|
|
|
this.dict = stream.dict; |
|
|
|
DecodeStream.call(this); |
|
|
|
DecodeStream.call(this); |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
constructor.prototype = Object.create(DecodeStream.prototype); |
|
|
|
constructor.prototype = Object.create(DecodeStream.prototype); |
|
|
|
constructor.prototype.readBlock = function() { |
|
|
|
constructor.prototype.readBlock = function() { |
|
|
@ -532,8 +532,8 @@ var FlateStream = (function() { |
|
|
|
|
|
|
|
|
|
|
|
constructor.prototype.readBlock = function() { |
|
|
|
constructor.prototype.readBlock = function() { |
|
|
|
function repeat(stream, array, len, offset, what) { |
|
|
|
function repeat(stream, array, len, offset, what) { |
|
|
|
var repeat = stream.getBits(len) + offset; |
|
|
|
var repeatLength = stream.getBits(len) + offset; |
|
|
|
while (repeat-- > 0) |
|
|
|
while (repeatLength-- > 0) |
|
|
|
array[i++] = what; |
|
|
|
array[i++] = what; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -821,8 +821,8 @@ var PredictorStream = (function() { |
|
|
|
currentRow[i] = up + c; |
|
|
|
currentRow[i] = up + c; |
|
|
|
else |
|
|
|
else |
|
|
|
currentRow[i] = upLeft + c; |
|
|
|
currentRow[i] = upLeft + c; |
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
default: |
|
|
|
default: |
|
|
|
error('Unsupported predictor: ' + predictor); |
|
|
|
error('Unsupported predictor: ' + predictor); |
|
|
|
break; |
|
|
|
break; |
|
|
@ -1621,6 +1621,7 @@ var CCITTFaxStream = (function() { |
|
|
|
|
|
|
|
|
|
|
|
this.err = false; |
|
|
|
this.err = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var code1, code2, code3; |
|
|
|
if (this.nextLine2D) { |
|
|
|
if (this.nextLine2D) { |
|
|
|
for (var i = 0; codingLine[i] < columns; ++i) |
|
|
|
for (var i = 0; codingLine[i] < columns; ++i) |
|
|
|
refLine[i] = codingLine[i]; |
|
|
|
refLine[i] = codingLine[i]; |
|
|
@ -1633,7 +1634,7 @@ var CCITTFaxStream = (function() { |
|
|
|
blackPixels = 0; |
|
|
|
blackPixels = 0; |
|
|
|
|
|
|
|
|
|
|
|
while (codingLine[this.codingPos] < columns) { |
|
|
|
while (codingLine[this.codingPos] < columns) { |
|
|
|
var code1 = this.getTwoDimCode(); |
|
|
|
code1 = this.getTwoDimCode(); |
|
|
|
switch (code1) { |
|
|
|
switch (code1) { |
|
|
|
case twoDimPass: |
|
|
|
case twoDimPass: |
|
|
|
this.addPixels(refLine[refPos + 1], blackPixels); |
|
|
|
this.addPixels(refLine[refPos + 1], blackPixels); |
|
|
@ -1641,9 +1642,8 @@ var CCITTFaxStream = (function() { |
|
|
|
refPos += 2; |
|
|
|
refPos += 2; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case twoDimHoriz: |
|
|
|
case twoDimHoriz: |
|
|
|
var code1 = 0, code2 = 0; |
|
|
|
code1 = code2 = 0; |
|
|
|
if (blackPixels) { |
|
|
|
if (blackPixels) { |
|
|
|
var code3; |
|
|
|
|
|
|
|
do { |
|
|
|
do { |
|
|
|
code1 += (code3 = this.getBlackCode()); |
|
|
|
code1 += (code3 = this.getBlackCode()); |
|
|
|
} while (code3 >= 64); |
|
|
|
} while (code3 >= 64); |
|
|
@ -1651,7 +1651,6 @@ var CCITTFaxStream = (function() { |
|
|
|
code2 += (code3 = this.getWhiteCode()); |
|
|
|
code2 += (code3 = this.getWhiteCode()); |
|
|
|
} while (code3 >= 64); |
|
|
|
} while (code3 >= 64); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
var code3; |
|
|
|
|
|
|
|
do { |
|
|
|
do { |
|
|
|
code1 += (code3 = this.getWhiteCode()); |
|
|
|
code1 += (code3 = this.getWhiteCode()); |
|
|
|
} while (code3 >= 64); |
|
|
|
} while (code3 >= 64); |
|
|
@ -1831,7 +1830,6 @@ var CCITTFaxStream = (function() { |
|
|
|
this.eof = true; |
|
|
|
this.eof = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} else if (this.err && this.eoline) { |
|
|
|
} else if (this.err && this.eoline) { |
|
|
|
var code1; |
|
|
|
|
|
|
|
while (true) { |
|
|
|
while (true) { |
|
|
|
code1 = this.lookBits(13); |
|
|
|
code1 = this.lookBits(13); |
|
|
|
if (code1 == EOF) { |
|
|
|
if (code1 == EOF) { |
|
|
@ -2403,7 +2401,7 @@ var Lexer = (function() { |
|
|
|
var floating = false; |
|
|
|
var floating = false; |
|
|
|
var str = ch; |
|
|
|
var str = ch; |
|
|
|
var stream = this.stream; |
|
|
|
var stream = this.stream; |
|
|
|
do { |
|
|
|
for (;;) { |
|
|
|
ch = stream.lookChar(); |
|
|
|
ch = stream.lookChar(); |
|
|
|
if (ch == '.' && !floating) { |
|
|
|
if (ch == '.' && !floating) { |
|
|
|
str += ch; |
|
|
|
str += ch; |
|
|
@ -2421,7 +2419,7 @@ var Lexer = (function() { |
|
|
|
break; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
stream.skip(); |
|
|
|
stream.skip(); |
|
|
|
} while (true); |
|
|
|
} |
|
|
|
var value = parseFloat(str); |
|
|
|
var value = parseFloat(str); |
|
|
|
if (isNaN(value)) |
|
|
|
if (isNaN(value)) |
|
|
|
error('Invalid floating point number: ' + value); |
|
|
|
error('Invalid floating point number: ' + value); |
|
|
@ -2541,7 +2539,7 @@ var Lexer = (function() { |
|
|
|
getHexString: function(ch) { |
|
|
|
getHexString: function(ch) { |
|
|
|
var str = ''; |
|
|
|
var str = ''; |
|
|
|
var stream = this.stream; |
|
|
|
var stream = this.stream; |
|
|
|
while (1) { |
|
|
|
for (;;) { |
|
|
|
ch = stream.getChar(); |
|
|
|
ch = stream.getChar(); |
|
|
|
if (ch == '>') { |
|
|
|
if (ch == '>') { |
|
|
|
break; |
|
|
|
break; |
|
|
@ -3378,15 +3376,15 @@ var Page = (function() { |
|
|
|
rotatePoint: function(x, y) { |
|
|
|
rotatePoint: function(x, y) { |
|
|
|
var rotate = this.rotate; |
|
|
|
var rotate = this.rotate; |
|
|
|
switch (rotate) { |
|
|
|
switch (rotate) { |
|
|
|
default: |
|
|
|
|
|
|
|
case 0: |
|
|
|
|
|
|
|
return {x: x, y: this.height - y}; |
|
|
|
|
|
|
|
case 180: |
|
|
|
case 180: |
|
|
|
return {x: this.width - x, y: y}; |
|
|
|
return {x: this.width - x, y: y}; |
|
|
|
case 90: |
|
|
|
case 90: |
|
|
|
return {x: this.width - y, y: this.height - x}; |
|
|
|
return {x: this.width - y, y: this.height - x}; |
|
|
|
case 270: |
|
|
|
case 270: |
|
|
|
return {x: y, y: x}; |
|
|
|
return {x: y, y: x}; |
|
|
|
|
|
|
|
case 0: |
|
|
|
|
|
|
|
default: |
|
|
|
|
|
|
|
return {x: x, y: this.height - y}; |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
getLinks: function() { |
|
|
|
getLinks: function() { |
|
|
@ -4268,7 +4266,7 @@ var PartialEvaluator = (function() { |
|
|
|
} else if (IsName(encoding)) { |
|
|
|
} else if (IsName(encoding)) { |
|
|
|
baseEncoding = Encodings[encoding.name].slice(); |
|
|
|
baseEncoding = Encodings[encoding.name].slice(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
error("Encoding is not a Name nor a Dict"); |
|
|
|
error('Encoding is not a Name nor a Dict'); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -4307,11 +4305,11 @@ var PartialEvaluator = (function() { |
|
|
|
var kCmapGlyphOffset = 0xE000; |
|
|
|
var kCmapGlyphOffset = 0xE000; |
|
|
|
if (index <= 0x1f || (index >= 127 && index <= 255)) |
|
|
|
if (index <= 0x1f || (index >= 127 && index <= 255)) |
|
|
|
glyphsMap[glyph] = encodingMap[i] += kCmapGlyphOffset; |
|
|
|
glyphsMap[glyph] = encodingMap[i] += kCmapGlyphOffset; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (fontType == 'TrueType' && fontDict.has('ToUnicode') && differences) { |
|
|
|
if (fontType == 'TrueType' && fontDict.has('ToUnicode') && |
|
|
|
|
|
|
|
differences) { |
|
|
|
var cmapObj = xref.fetchIfRef(fontDict.get('ToUnicode')); |
|
|
|
var cmapObj = xref.fetchIfRef(fontDict.get('ToUnicode')); |
|
|
|
if (IsName(cmapObj)) { |
|
|
|
if (IsName(cmapObj)) { |
|
|
|
error('ToUnicode file cmap translation not implemented'); |
|
|
|
error('ToUnicode file cmap translation not implemented'); |
|
|
@ -4810,8 +4808,8 @@ var CanvasGraphics = (function() { |
|
|
|
|
|
|
|
|
|
|
|
size = (size <= kRasterizerMin) ? size * kScalePrecision : size; |
|
|
|
size = (size <= kRasterizerMin) ? size * kScalePrecision : size; |
|
|
|
|
|
|
|
|
|
|
|
var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') |
|
|
|
var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') : |
|
|
|
: (fontObj.bold ? 'bold' : 'normal'); |
|
|
|
(fontObj.bold ? 'bold' : 'normal'); |
|
|
|
|
|
|
|
|
|
|
|
var italic = fontObj.italic ? 'italic' : 'normal'; |
|
|
|
var italic = fontObj.italic ? 'italic' : 'normal'; |
|
|
|
var rule = italic + ' ' + bold + ' ' + size + 'px "' + name + '"'; |
|
|
|
var rule = italic + ' ' + bold + ' ' + size + 'px "' + name + '"'; |
|
|
|