| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548 | /** * @licstart The following is the entire license notice for the * JavaScript code in this page * * Copyright 2022 Mozilla Foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * JavaScript code in this page */"use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports.CCITTFaxDecoder = void 0;var _util = require("../shared/util.js");const ccittEOL = -2;const ccittEOF = -1;const twoDimPass = 0;const twoDimHoriz = 1;const twoDimVert0 = 2;const twoDimVertR1 = 3;const twoDimVertL1 = 4;const twoDimVertR2 = 5;const twoDimVertL2 = 6;const twoDimVertR3 = 7;const twoDimVertL3 = 8;const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];class CCITTFaxDecoder {  constructor(source, options = {}) {    if (!source || typeof source.next !== "function") {      throw new Error('CCITTFaxDecoder - invalid "source" parameter.');    }    this.source = source;    this.eof = false;    this.encoding = options.K || 0;    this.eoline = options.EndOfLine || false;    this.byteAlign = options.EncodedByteAlign || false;    this.columns = options.Columns || 1728;    this.rows = options.Rows || 0;    let eoblock = options.EndOfBlock;    if (eoblock === null || eoblock === undefined) {      eoblock = true;    }    this.eoblock = eoblock;    this.black = options.BlackIs1 || false;    this.codingLine = new Uint32Array(this.columns + 1);    this.refLine = new Uint32Array(this.columns + 2);    this.codingLine[0] = this.columns;    this.codingPos = 0;    this.row = 0;    this.nextLine2D = this.encoding < 0;    this.inputBits = 0;    this.inputBuf = 0;    this.outputBits = 0;    this.rowsDone = false;    let code1;    while ((code1 = this._lookBits(12)) === 0) {      this._eatBits(1);    }    if (code1 === 1) {      this._eatBits(12);    }    if (this.encoding > 0) {      this.nextLine2D = !this._lookBits(1);      this._eatBits(1);    }  }  readNextChar() {    if (this.eof) {      return -1;    }    const refLine = this.refLine;    const codingLine = this.codingLine;    const columns = this.columns;    let refPos, blackPixels, bits, i;    if (this.outputBits === 0) {      if (this.rowsDone) {        this.eof = true;      }      if (this.eof) {        return -1;      }      this.err = false;      let code1, code2, code3;      if (this.nextLine2D) {        for (i = 0; codingLine[i] < columns; ++i) {          refLine[i] = codingLine[i];        }        refLine[i++] = columns;        refLine[i] = columns;        codingLine[0] = 0;        this.codingPos = 0;        refPos = 0;        blackPixels = 0;        while (codingLine[this.codingPos] < columns) {          code1 = this._getTwoDimCode();          switch (code1) {            case twoDimPass:              this._addPixels(refLine[refPos + 1], blackPixels);              if (refLine[refPos + 1] < columns) {                refPos += 2;              }              break;            case twoDimHoriz:              code1 = code2 = 0;              if (blackPixels) {                do {                  code1 += code3 = this._getBlackCode();                } while (code3 >= 64);                do {                  code2 += code3 = this._getWhiteCode();                } while (code3 >= 64);              } else {                do {                  code1 += code3 = this._getWhiteCode();                } while (code3 >= 64);                do {                  code2 += code3 = this._getBlackCode();                } while (code3 >= 64);              }              this._addPixels(codingLine[this.codingPos] + code1, blackPixels);              if (codingLine[this.codingPos] < columns) {                this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);              }              while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                refPos += 2;              }              break;            case twoDimVertR3:              this._addPixels(refLine[refPos] + 3, blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                ++refPos;                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case twoDimVertR2:              this._addPixels(refLine[refPos] + 2, blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                ++refPos;                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case twoDimVertR1:              this._addPixels(refLine[refPos] + 1, blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                ++refPos;                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case twoDimVert0:              this._addPixels(refLine[refPos], blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                ++refPos;                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case twoDimVertL3:              this._addPixelsNeg(refLine[refPos] - 3, blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                if (refPos > 0) {                  --refPos;                } else {                  ++refPos;                }                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case twoDimVertL2:              this._addPixelsNeg(refLine[refPos] - 2, blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                if (refPos > 0) {                  --refPos;                } else {                  ++refPos;                }                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case twoDimVertL1:              this._addPixelsNeg(refLine[refPos] - 1, blackPixels);              blackPixels ^= 1;              if (codingLine[this.codingPos] < columns) {                if (refPos > 0) {                  --refPos;                } else {                  ++refPos;                }                while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {                  refPos += 2;                }              }              break;            case ccittEOF:              this._addPixels(columns, 0);              this.eof = true;              break;            default:              (0, _util.info)("bad 2d code");              this._addPixels(columns, 0);              this.err = true;          }        }      } else {        codingLine[0] = 0;        this.codingPos = 0;        blackPixels = 0;        while (codingLine[this.codingPos] < columns) {          code1 = 0;          if (blackPixels) {            do {              code1 += code3 = this._getBlackCode();            } while (code3 >= 64);          } else {            do {              code1 += code3 = this._getWhiteCode();            } while (code3 >= 64);          }          this._addPixels(codingLine[this.codingPos] + code1, blackPixels);          blackPixels ^= 1;        }      }      let gotEOL = false;      if (this.byteAlign) {        this.inputBits &= ~7;      }      if (!this.eoblock && this.row === this.rows - 1) {        this.rowsDone = true;      } else {        code1 = this._lookBits(12);        if (this.eoline) {          while (code1 !== ccittEOF && code1 !== 1) {            this._eatBits(1);            code1 = this._lookBits(12);          }        } else {          while (code1 === 0) {            this._eatBits(1);            code1 = this._lookBits(12);          }        }        if (code1 === 1) {          this._eatBits(12);          gotEOL = true;        } else if (code1 === ccittEOF) {          this.eof = true;        }      }      if (!this.eof && this.encoding > 0 && !this.rowsDone) {        this.nextLine2D = !this._lookBits(1);        this._eatBits(1);      }      if (this.eoblock && gotEOL && this.byteAlign) {        code1 = this._lookBits(12);        if (code1 === 1) {          this._eatBits(12);          if (this.encoding > 0) {            this._lookBits(1);            this._eatBits(1);          }          if (this.encoding >= 0) {            for (i = 0; i < 4; ++i) {              code1 = this._lookBits(12);              if (code1 !== 1) {                (0, _util.info)("bad rtc code: " + code1);              }              this._eatBits(12);              if (this.encoding > 0) {                this._lookBits(1);                this._eatBits(1);              }            }          }          this.eof = true;        }      } else if (this.err && this.eoline) {        while (true) {          code1 = this._lookBits(13);          if (code1 === ccittEOF) {            this.eof = true;            return -1;          }          if (code1 >> 1 === 1) {            break;          }          this._eatBits(1);        }        this._eatBits(12);        if (this.encoding > 0) {          this._eatBits(1);          this.nextLine2D = !(code1 & 1);        }      }      if (codingLine[0] > 0) {        this.outputBits = codingLine[this.codingPos = 0];      } else {        this.outputBits = codingLine[this.codingPos = 1];      }      this.row++;    }    let c;    if (this.outputBits >= 8) {      c = this.codingPos & 1 ? 0 : 0xff;      this.outputBits -= 8;      if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {        this.codingPos++;        this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];      }    } else {      bits = 8;      c = 0;      do {        if (typeof this.outputBits !== "number") {          throw new _util.FormatError('Invalid /CCITTFaxDecode data, "outputBits" must be a number.');        }        if (this.outputBits > bits) {          c <<= bits;          if (!(this.codingPos & 1)) {            c |= 0xff >> 8 - bits;          }          this.outputBits -= bits;          bits = 0;        } else {          c <<= this.outputBits;          if (!(this.codingPos & 1)) {            c |= 0xff >> 8 - this.outputBits;          }          bits -= this.outputBits;          this.outputBits = 0;          if (codingLine[this.codingPos] < columns) {            this.codingPos++;            this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];          } else if (bits > 0) {            c <<= bits;            bits = 0;          }        }      } while (bits);    }    if (this.black) {      c ^= 0xff;    }    return c;  }  _addPixels(a1, blackPixels) {    const codingLine = this.codingLine;    let codingPos = this.codingPos;    if (a1 > codingLine[codingPos]) {      if (a1 > this.columns) {        (0, _util.info)("row is wrong length");        this.err = true;        a1 = this.columns;      }      if (codingPos & 1 ^ blackPixels) {        ++codingPos;      }      codingLine[codingPos] = a1;    }    this.codingPos = codingPos;  }  _addPixelsNeg(a1, blackPixels) {    const codingLine = this.codingLine;    let codingPos = this.codingPos;    if (a1 > codingLine[codingPos]) {      if (a1 > this.columns) {        (0, _util.info)("row is wrong length");        this.err = true;        a1 = this.columns;      }      if (codingPos & 1 ^ blackPixels) {        ++codingPos;      }      codingLine[codingPos] = a1;    } else if (a1 < codingLine[codingPos]) {      if (a1 < 0) {        (0, _util.info)("invalid code");        this.err = true;        a1 = 0;      }      while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {        --codingPos;      }      codingLine[codingPos] = a1;    }    this.codingPos = codingPos;  }  _findTableCode(start, end, table, limit) {    const limitValue = limit || 0;    for (let i = start; i <= end; ++i) {      let code = this._lookBits(i);      if (code === ccittEOF) {        return [true, 1, false];      }      if (i < end) {        code <<= end - i;      }      if (!limitValue || code >= limitValue) {        const p = table[code - limitValue];        if (p[0] === i) {          this._eatBits(i);          return [true, p[1], true];        }      }    }    return [false, 0, false];  }  _getTwoDimCode() {    let code = 0;    let p;    if (this.eoblock) {      code = this._lookBits(7);      p = twoDimTable[code];      if (p && p[0] > 0) {        this._eatBits(p[0]);        return p[1];      }    } else {      const result = this._findTableCode(1, 7, twoDimTable);      if (result[0] && result[2]) {        return result[1];      }    }    (0, _util.info)("Bad two dim code");    return ccittEOF;  }  _getWhiteCode() {    let code = 0;    let p;    if (this.eoblock) {      code = this._lookBits(12);      if (code === ccittEOF) {        return 1;      }      if (code >> 5 === 0) {        p = whiteTable1[code];      } else {        p = whiteTable2[code >> 3];      }      if (p[0] > 0) {        this._eatBits(p[0]);        return p[1];      }    } else {      let result = this._findTableCode(1, 9, whiteTable2);      if (result[0]) {        return result[1];      }      result = this._findTableCode(11, 12, whiteTable1);      if (result[0]) {        return result[1];      }    }    (0, _util.info)("bad white code");    this._eatBits(1);    return 1;  }  _getBlackCode() {    let code, p;    if (this.eoblock) {      code = this._lookBits(13);      if (code === ccittEOF) {        return 1;      }      if (code >> 7 === 0) {        p = blackTable1[code];      } else if (code >> 9 === 0 && code >> 7 !== 0) {        p = blackTable2[(code >> 1) - 64];      } else {        p = blackTable3[code >> 7];      }      if (p[0] > 0) {        this._eatBits(p[0]);        return p[1];      }    } else {      let result = this._findTableCode(2, 6, blackTable3);      if (result[0]) {        return result[1];      }      result = this._findTableCode(7, 12, blackTable2, 64);      if (result[0]) {        return result[1];      }      result = this._findTableCode(10, 13, blackTable1);      if (result[0]) {        return result[1];      }    }    (0, _util.info)("bad black code");    this._eatBits(1);    return 1;  }  _lookBits(n) {    let c;    while (this.inputBits < n) {      if ((c = this.source.next()) === -1) {        if (this.inputBits === 0) {          return ccittEOF;        }        return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;      }      this.inputBuf = this.inputBuf << 8 | c;      this.inputBits += 8;    }    return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;  }  _eatBits(n) {    if ((this.inputBits -= n) < 0) {      this.inputBits = 0;    }  }}exports.CCITTFaxDecoder = CCITTFaxDecoder;
 |