Browse Source

Replaces throw to error() and uses shadow()

Yury Delendik 13 years ago
parent
commit
f014481149
  1. 57
      src/jbig2.js

57
src/jbig2.js

@ -188,23 +188,11 @@ var Jbig2Image = (function Jbig2ImageClosure() {
DecodingContext.prototype = { DecodingContext.prototype = {
get decoder() { get decoder() {
var decoder = new ArithmeticDecoder(this.data, this.start, this.end); var decoder = new ArithmeticDecoder(this.data, this.start, this.end);
Object.defineProperty(this, 'decoder', { return shadow(this, 'decoder', decoder);
value: decoder,
writable: false,
configurable: true,
enumerable: true
});
return decoder;
}, },
get contextCache() { get contextCache() {
var cache = new ContextCache(); var cache = new ContextCache();
Object.defineProperty(this, 'contextCache', { return shadow(this, 'contextCache', cache);
value: cache,
writable: false,
configurable: true,
enumerable: true
});
return cache;
} }
}; };
@ -374,7 +362,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at,
decodingContext) { decodingContext) {
if (mmr) if (mmr)
throw 'MMR encoding is not supported'; error('JBIG2 error: MMR encoding is not supported');
var useskip = !!skip; var useskip = !!skip;
var template = CodingTemplates[templateIndex].concat(at); var template = CodingTemplates[templateIndex].concat(at);
@ -476,7 +464,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
bitmap.push(row); bitmap.push(row);
for (var j = 0; j < width; j++) { for (var j = 0; j < width; j++) {
if (ltp) if (ltp)
throw 'prediction is not supported'; error('JBIG2 error: prediction is not supported');
var contextLabel = 0; var contextLabel = 0;
for (var k = 0; k < codingTemplateLength; k++) { for (var k = 0; k < codingTemplateLength; k++) {
@ -512,7 +500,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
refinementTemplateIndex, refinementAt, refinementTemplateIndex, refinementAt,
decodingContext) { decodingContext) {
if (huffman) if (huffman)
throw 'huffman is not supported'; error('JBIG2 error: huffman is not supported');
var newSymbols = []; var newSymbols = [];
var currentHeight = 0; var currentHeight = 0;
@ -537,7 +525,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
// 6.5.8.2 Refinement/aggregate-coded symbol bitmap // 6.5.8.2 Refinement/aggregate-coded symbol bitmap
var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder); var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder);
if (numberOfInstances > 1) if (numberOfInstances > 1)
throw 'number of instances > 1 is not supported'; error('JBIG2 error: number of instances > 1 is not supported');
var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3 var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3
var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4 var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4
@ -578,7 +566,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
refinementTemplateIndex, refinementAt, refinementTemplateIndex, refinementAt,
decodingContext) { decodingContext) {
if (huffman) if (huffman)
throw 'huffman is not supported'; error('JBIG2 error: huffman is not supported');
// Prepare bitmap // Prepare bitmap
var bitmap = []; var bitmap = [];
@ -595,9 +583,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
var contextCache = decodingContext.contextCache; var contextCache = decodingContext.contextCache;
if (transposed) if (transposed)
throw 'transposed!=0 is not supported'; error('JBIG2 error: transposed is not supported');
if (combinationOperator != 0 && combinationOperator != 2)
throw 'combinationOperator==' + combinationOperator + ' is not supported';
var stripT = -decodeInteger(contextCache, 'IADT', decoder); // 6.4.6 var stripT = -decodeInteger(contextCache, 'IADT', decoder); // 6.4.6
var firstS = 0; var firstS = 0;
@ -646,6 +632,9 @@ var Jbig2Image = (function Jbig2ImageClosure() {
for (var s2 = 0; s2 < symbolWidth; s2++) for (var s2 = 0; s2 < symbolWidth; s2++)
row[offsetS + s2] ^= symbolRow[s2]; row[offsetS + s2] ^= symbolRow[s2];
break; break;
default:
error('JBIG2 error: operator ' + combinationOperator +
' is not supported');
} }
} }
@ -667,7 +656,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
var flags = data[start + 4]; var flags = data[start + 4];
var segmentType = flags & 0x3F; var segmentType = flags & 0x3F;
if (!SegmentTypes[segmentType]) if (!SegmentTypes[segmentType])
throw 'Invalid segment type: ' + segmentType; error('JBIG2 error: invalid segment type: ' + segmentType);
segmentHeader.type = segmentType; segmentHeader.type = segmentType;
segmentHeader.typeName = SegmentTypes[segmentType]; segmentHeader.typeName = SegmentTypes[segmentType];
segmentHeader.deferredNonRetain = !!(flags & 0x80); segmentHeader.deferredNonRetain = !!(flags & 0x80);
@ -685,7 +674,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
retainBits.push(data[position++]); retainBits.push(data[position++]);
} }
} else if (referredFlags == 5 || referredFlags == 6) } else if (referredFlags == 5 || referredFlags == 6)
throw 'Invalid referred-to flags'; error('JBIG2 error: invalid referred-to flags');
segmentHeader.retainBits = retainBits; segmentHeader.retainBits = retainBits;
var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 :
segmentHeader.number <= 65536 ? 2 : 4; segmentHeader.number <= 65536 ? 2 : 4;
@ -706,7 +695,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
} }
segmentHeader.length = readUint32(data, position); segmentHeader.length = readUint32(data, position);
if (segmentHeader.length == 0xFFFFFFFF) if (segmentHeader.length == 0xFFFFFFFF)
throw 'Unsupported unknown segment length'; error('JBIG2 error: unknown segment length is not supported');
position += 4; position += 4;
segmentHeader.headerEnd = position; segmentHeader.headerEnd = position;
return segmentHeader; return segmentHeader;
@ -847,7 +836,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
position += 4; position += 4;
// TODO 7.4.3.1.7 Symbol ID Huffman table decoding // TODO 7.4.3.1.7 Symbol ID Huffman table decoding
if (textRegion.huffman) if (textRegion.huffman)
throw 'huffman is not supported'; error('JBIG2 error: huffman is not supported');
args = [textRegion, header.referredTo, data, position, end]; args = [textRegion, header.referredTo, data, position, end];
break; break;
case 38: // ImmediateGenericRegion case 38: // ImmediateGenericRegion
@ -896,8 +885,8 @@ var Jbig2Image = (function Jbig2ImageClosure() {
case 51: // EndOfFile case 51: // EndOfFile
break; break;
default: default:
throw 'Segment type is not implemented: ' + error('JBIG2 error: segment type ' + header.typeName + '(' +
header.type + '/' + header.typeName; header.type + ') is not implemented');
} }
if (header.typeName in visitor) if (header.typeName in visitor)
visitor[header.typeName].apply(visitor, args); visitor[header.typeName].apply(visitor, args);
@ -914,7 +903,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
data[position + 2] != 0x42 || data[position + 3] != 0x32 || data[position + 2] != 0x42 || data[position + 3] != 0x32 ||
data[position + 4] != 0x0D || data[position + 5] != 0x0A || data[position + 4] != 0x0D || data[position + 5] != 0x0A ||
data[position + 6] != 0x1A || data[position + 7] != 0x0A) data[position + 6] != 0x1A || data[position + 7] != 0x0A)
throw 'JBIG2 invalid header'; error('JBIG2 error: invalid header');
var header = {}; var header = {};
position += 8; position += 8;
var flags = data[position++]; var flags = data[position++];
@ -924,6 +913,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
position += 4; position += 4;
} }
var segments = readSegments(header, data, position, end); var segments = readSegments(header, data, position, end);
error('Not implemented');
// processSegments(segments, new SimpleSegmentVisitor()); // processSegments(segments, new SimpleSegmentVisitor());
} }
@ -953,13 +943,13 @@ var Jbig2Image = (function Jbig2ImageClosure() {
var pageInfo = this.currentPageInfo; var pageInfo = this.currentPageInfo;
var width = regionInfo.width, height = regionInfo.height; var width = regionInfo.width, height = regionInfo.height;
var rowSize = (pageInfo.width + 7) >> 3; var rowSize = (pageInfo.width + 7) >> 3;
var operator = pageInfo.combinationOperatorOverride ? var combinationOperator = pageInfo.combinationOperatorOverride ?
regionInfo.combinationOperator : pageInfo.combinationOperator; regionInfo.combinationOperator : pageInfo.combinationOperator;
var buffer = this.buffer; var buffer = this.buffer;
for (var i = 0; i < height; i++) { for (var i = 0; i < height; i++) {
var mask = 128 >> (regionInfo.x & 7); var mask = 128 >> (regionInfo.x & 7);
var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3); var offset = (i + regionInfo.y) * rowSize + (regionInfo.x >> 3);
switch (operator) { switch (combinationOperator) {
case 0: // OR case 0: // OR
for (var j = 0; j < width; j++) { for (var j = 0; j < width; j++) {
buffer[offset] |= bitmap[i][j] ? mask : 0; buffer[offset] |= bitmap[i][j] ? mask : 0;
@ -981,7 +971,8 @@ var Jbig2Image = (function Jbig2ImageClosure() {
} }
break; break;
default: default:
throw 'Unimplemented operator: ' + operator; error('JBIG2 error: operator ' + combinationOperator +
' is not supported');
} }
} }
}, },
@ -1001,7 +992,7 @@ var Jbig2Image = (function Jbig2ImageClosure() {
data, start, end) { data, start, end) {
var huffmanTables; var huffmanTables;
if (dictionary.huffman) if (dictionary.huffman)
throw 'huffman is not supported'; error('JBIG2 error: huffman is not supported');
// Combines exported symbols from all referred segments // Combines exported symbols from all referred segments
var symbols = this.symbols; var symbols = this.symbols;

Loading…
Cancel
Save