|
|
@ -545,13 +545,14 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
// 6.5.10 Exported symbols
|
|
|
|
// 6.5.10 Exported symbols
|
|
|
|
var exportedSymbols = []; |
|
|
|
var exportedSymbols = []; |
|
|
|
var flags = [], currentFlag = false; |
|
|
|
var flags = [], currentFlag = false; |
|
|
|
while (flags.length < symbols.length + numberOfNewSymbols) { |
|
|
|
var totalSymbolsLength = symbols.length + numberOfNewSymbols; |
|
|
|
|
|
|
|
while (flags.length < totalSymbolsLength) { |
|
|
|
var runLength = decodeInteger(contextCache, 'IAEX', decoder); |
|
|
|
var runLength = decodeInteger(contextCache, 'IAEX', decoder); |
|
|
|
while (runLength--) |
|
|
|
while (runLength--) |
|
|
|
flags.push(currentFlag); |
|
|
|
flags.push(currentFlag); |
|
|
|
currentFlag = !currentFlag; |
|
|
|
currentFlag = !currentFlag; |
|
|
|
} |
|
|
|
} |
|
|
|
for (var i = 0; i < symbols.length; i++) |
|
|
|
for (var i = 0, ii = symbols.length; i < ii; i++) |
|
|
|
if (flags[i]) exportedSymbols.push(symbols[i]); |
|
|
|
if (flags[i]) exportedSymbols.push(symbols[i]); |
|
|
|
for (var j = 0; j < numberOfNewSymbols; i++, j++) |
|
|
|
for (var j = 0; j < numberOfNewSymbols; i++, j++) |
|
|
|
if (flags[i]) exportedSymbols.push(newSymbols[j]); |
|
|
|
if (flags[i]) exportedSymbols.push(newSymbols[j]); |
|
|
@ -721,7 +722,7 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
break; // end of file is found
|
|
|
|
break; // end of file is found
|
|
|
|
} |
|
|
|
} |
|
|
|
if (header.randomAccess) { |
|
|
|
if (header.randomAccess) { |
|
|
|
for (var i = 0; i < segments.length; i++) { |
|
|
|
for (var i = 0, ii = segments.length; i < ii; i++) { |
|
|
|
segments[i].start = position; |
|
|
|
segments[i].start = position; |
|
|
|
position += segments[i].header.length; |
|
|
|
position += segments[i].header.length; |
|
|
|
segments[i].end = position; |
|
|
|
segments[i].end = position; |
|
|
@ -888,12 +889,13 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
error('JBIG2 error: segment type ' + header.typeName + '(' + |
|
|
|
error('JBIG2 error: segment type ' + header.typeName + '(' + |
|
|
|
header.type + ') is not implemented'); |
|
|
|
header.type + ') is not implemented'); |
|
|
|
} |
|
|
|
} |
|
|
|
if (header.typeName in visitor) |
|
|
|
var callbackName = 'on' + header.typeName; |
|
|
|
visitor[header.typeName].apply(visitor, args); |
|
|
|
if (callbackName in visitor) |
|
|
|
|
|
|
|
visitor[callbackName].apply(visitor, args); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function processSegments(segments, visitor) { |
|
|
|
function processSegments(segments, visitor) { |
|
|
|
for (var i = 0; i < segments.length; i++) |
|
|
|
for (var i = 0, ii = segments.length; i < ii; i++) |
|
|
|
processSegment(segments[i], visitor); |
|
|
|
processSegment(segments[i], visitor); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -919,7 +921,7 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
|
|
|
|
|
|
|
|
function parseJbig2Chunks(chunks) { |
|
|
|
function parseJbig2Chunks(chunks) { |
|
|
|
var visitor = new SimpleSegmentVisitor(); |
|
|
|
var visitor = new SimpleSegmentVisitor(); |
|
|
|
for (var i = 0; i < chunks.length; i++) { |
|
|
|
for (var i = 0, ii = chunks.length; i < ii; i++) { |
|
|
|
var chunk = chunks[i]; |
|
|
|
var chunk = chunks[i]; |
|
|
|
var segments = readSegments({}, chunk.data, chunk.start, chunk.end); |
|
|
|
var segments = readSegments({}, chunk.data, chunk.start, chunk.end); |
|
|
|
processSegments(segments, visitor); |
|
|
|
processSegments(segments, visitor); |
|
|
@ -930,12 +932,12 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
function SimpleSegmentVisitor() {} |
|
|
|
function SimpleSegmentVisitor() {} |
|
|
|
|
|
|
|
|
|
|
|
SimpleSegmentVisitor.prototype = { |
|
|
|
SimpleSegmentVisitor.prototype = { |
|
|
|
PageInformation: function SimpleSegmentVisitor_PageInformation(info) { |
|
|
|
onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { |
|
|
|
this.currentPageInfo = info; |
|
|
|
this.currentPageInfo = info; |
|
|
|
var rowSize = (info.width + 7) >> 3; |
|
|
|
var rowSize = (info.width + 7) >> 3; |
|
|
|
var buffer = new Uint8Array(rowSize * info.height); |
|
|
|
var buffer = new Uint8Array(rowSize * info.height); |
|
|
|
var fill = info.defaultPixelValue ? 0xFF : 0; |
|
|
|
var fill = info.defaultPixelValue ? 0xFF : 0; |
|
|
|
for (var i = 0; i < buffer.length; i++) |
|
|
|
for (var i = 0, ii = buffer.length; i < ii; i++) |
|
|
|
buffer[i] = fill; |
|
|
|
buffer[i] = fill; |
|
|
|
this.buffer = buffer; |
|
|
|
this.buffer = buffer; |
|
|
|
}, |
|
|
|
}, |
|
|
@ -976,8 +978,8 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
ImmediateGenericRegion: |
|
|
|
onImmediateGenericRegion: |
|
|
|
function SimpleSegmentVisitor_ImmediateGenericRegion(region, data, |
|
|
|
function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, |
|
|
|
start, end) { |
|
|
|
start, end) { |
|
|
|
var regionInfo = region.info; |
|
|
|
var regionInfo = region.info; |
|
|
|
var decodingContext = new DecodingContext(data, start, end); |
|
|
|
var decodingContext = new DecodingContext(data, start, end); |
|
|
@ -986,8 +988,9 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
region.at, decodingContext); |
|
|
|
region.at, decodingContext); |
|
|
|
this.drawBitmap(regionInfo, bitmap); |
|
|
|
this.drawBitmap(regionInfo, bitmap); |
|
|
|
}, |
|
|
|
}, |
|
|
|
SymbolDictionary: |
|
|
|
onSymbolDictionary: |
|
|
|
function SimpleSegmentVisitor_SymbolDictionary(dictionary, currentSegment, |
|
|
|
function SimpleSegmentVisitor_onSymbolDictionary(dictionary, |
|
|
|
|
|
|
|
currentSegment, |
|
|
|
referredSegments, |
|
|
|
referredSegments, |
|
|
|
data, start, end) { |
|
|
|
data, start, end) { |
|
|
|
var huffmanTables; |
|
|
|
var huffmanTables; |
|
|
@ -1000,7 +1003,7 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
this.symbols = symbols = {}; |
|
|
|
this.symbols = symbols = {}; |
|
|
|
|
|
|
|
|
|
|
|
var inputSymbols = []; |
|
|
|
var inputSymbols = []; |
|
|
|
for (var i = 0; i < referredSegments.length; i++) |
|
|
|
for (var i = 0, ii = referredSegments.length; i < ii; i++) |
|
|
|
inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); |
|
|
|
inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); |
|
|
|
|
|
|
|
|
|
|
|
var decodingContext = new DecodingContext(data, start, end); |
|
|
|
var decodingContext = new DecodingContext(data, start, end); |
|
|
@ -1011,8 +1014,8 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
dictionary.refinementTemplate, dictionary.refinementAt, |
|
|
|
dictionary.refinementTemplate, dictionary.refinementAt, |
|
|
|
decodingContext); |
|
|
|
decodingContext); |
|
|
|
}, |
|
|
|
}, |
|
|
|
ImmediateTextRegion: |
|
|
|
onImmediateTextRegion: |
|
|
|
function SimpleSegmentVisitor_ImmediateTextRegion(region, |
|
|
|
function SimpleSegmentVisitor_onImmediateTextRegion(region, |
|
|
|
referredSegments, |
|
|
|
referredSegments, |
|
|
|
data, start, end) { |
|
|
|
data, start, end) { |
|
|
|
var regionInfo = region.info; |
|
|
|
var regionInfo = region.info; |
|
|
@ -1021,7 +1024,7 @@ var Jbig2Image = (function Jbig2ImageClosure() { |
|
|
|
// Combines exported symbols from all referred segments
|
|
|
|
// Combines exported symbols from all referred segments
|
|
|
|
var symbols = this.symbols; |
|
|
|
var symbols = this.symbols; |
|
|
|
var inputSymbols = []; |
|
|
|
var inputSymbols = []; |
|
|
|
for (var i = 0; i < referredSegments.length; i++) |
|
|
|
for (var i = 0, ii = referredSegments.length; i < ii; i++) |
|
|
|
inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); |
|
|
|
inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]); |
|
|
|
var symbolCodeLength = log2(inputSymbols.length); |
|
|
|
var symbolCodeLength = log2(inputSymbols.length); |
|
|
|
|
|
|
|
|
|
|
|