diff --git a/src/core/ascii_85_stream.js b/src/core/ascii_85_stream.js new file mode 100644 index 000000000..78f13afd9 --- /dev/null +++ b/src/core/ascii_85_stream.js @@ -0,0 +1,105 @@ +/* Copyright 2012 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. + */ +/* eslint-disable no-var */ + +import { DecodeStream } from "./stream.js"; +import { isWhiteSpace } from "./core_utils.js"; + +var Ascii85Stream = (function Ascii85StreamClosure() { + // eslint-disable-next-line no-shadow + function Ascii85Stream(str, maybeLength) { + this.str = str; + this.dict = str.dict; + this.input = new Uint8Array(5); + + // Most streams increase in size when decoded, but Ascii85 streams + // typically shrink by ~20%. + if (maybeLength) { + maybeLength = 0.8 * maybeLength; + } + DecodeStream.call(this, maybeLength); + } + + Ascii85Stream.prototype = Object.create(DecodeStream.prototype); + + Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { + var TILDA_CHAR = 0x7e; // '~' + var Z_LOWER_CHAR = 0x7a; // 'z' + var EOF = -1; + + var str = this.str; + + var c = str.getByte(); + while (isWhiteSpace(c)) { + c = str.getByte(); + } + + if (c === EOF || c === TILDA_CHAR) { + this.eof = true; + return; + } + + var bufferLength = this.bufferLength, + buffer; + var i; + + // special code for z + if (c === Z_LOWER_CHAR) { + buffer = this.ensureBuffer(bufferLength + 4); + for (i = 0; i < 4; ++i) { + buffer[bufferLength + i] = 0; + } + this.bufferLength += 4; + } else { + var input = this.input; + input[0] = c; + for (i = 1; i < 5; ++i) { + c = str.getByte(); + while (isWhiteSpace(c)) { + c = str.getByte(); + } + + input[i] = c; + + if (c === EOF || c === TILDA_CHAR) { + break; + } + } + buffer = this.ensureBuffer(bufferLength + i - 1); + this.bufferLength += i - 1; + + // partial ending; + if (i < 5) { + for (; i < 5; ++i) { + input[i] = 0x21 + 84; + } + this.eof = true; + } + var t = 0; + for (i = 0; i < 5; ++i) { + t = t * 85 + (input[i] - 0x21); + } + + for (i = 3; i >= 0; --i) { + buffer[bufferLength + i] = t & 0xff; + t >>= 8; + } + } + }; + + return Ascii85Stream; +})(); + +export { Ascii85Stream }; diff --git a/src/core/parser.js b/src/core/parser.js index 048deae7f..90796ad22 100644 --- a/src/core/parser.js +++ b/src/core/parser.js @@ -13,12 +13,6 @@ * limitations under the License. */ -import { - Ascii85Stream, - FlateStream, - NullStream, - PredictorStream, -} from "./stream.js"; import { assert, bytesToString, @@ -39,7 +33,9 @@ import { Name, Ref, } from "./primitives.js"; +import { FlateStream, NullStream, PredictorStream } from "./stream.js"; import { isWhiteSpace, MissingDataException } from "./core_utils.js"; +import { Ascii85Stream } from "./ascii_85_stream.js"; import { AsciiHexStream } from "./ascii_hex_stream.js"; import { CCITTFaxStream } from "./ccitt_stream.js"; import { Jbig2Stream } from "./jbig2_stream.js"; diff --git a/src/core/stream.js b/src/core/stream.js index 1c09cb8aa..9005d02bf 100644 --- a/src/core/stream.js +++ b/src/core/stream.js @@ -22,7 +22,6 @@ import { FormatError, stringToBytes, unreachable } from "../shared/util.js"; import { isDict } from "./primitives.js"; -import { isWhiteSpace } from "./core_utils.js"; var Stream = (function StreamClosure() { // eslint-disable-next-line no-shadow @@ -996,91 +995,6 @@ var DecryptStream = (function DecryptStreamClosure() { return DecryptStream; })(); -var Ascii85Stream = (function Ascii85StreamClosure() { - // eslint-disable-next-line no-shadow - function Ascii85Stream(str, maybeLength) { - this.str = str; - this.dict = str.dict; - this.input = new Uint8Array(5); - - // Most streams increase in size when decoded, but Ascii85 streams - // typically shrink by ~20%. - if (maybeLength) { - maybeLength = 0.8 * maybeLength; - } - DecodeStream.call(this, maybeLength); - } - - Ascii85Stream.prototype = Object.create(DecodeStream.prototype); - - Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { - var TILDA_CHAR = 0x7e; // '~' - var Z_LOWER_CHAR = 0x7a; // 'z' - var EOF = -1; - - var str = this.str; - - var c = str.getByte(); - while (isWhiteSpace(c)) { - c = str.getByte(); - } - - if (c === EOF || c === TILDA_CHAR) { - this.eof = true; - return; - } - - var bufferLength = this.bufferLength, - buffer; - var i; - - // special code for z - if (c === Z_LOWER_CHAR) { - buffer = this.ensureBuffer(bufferLength + 4); - for (i = 0; i < 4; ++i) { - buffer[bufferLength + i] = 0; - } - this.bufferLength += 4; - } else { - var input = this.input; - input[0] = c; - for (i = 1; i < 5; ++i) { - c = str.getByte(); - while (isWhiteSpace(c)) { - c = str.getByte(); - } - - input[i] = c; - - if (c === EOF || c === TILDA_CHAR) { - break; - } - } - buffer = this.ensureBuffer(bufferLength + i - 1); - this.bufferLength += i - 1; - - // partial ending; - if (i < 5) { - for (; i < 5; ++i) { - input[i] = 0x21 + 84; - } - this.eof = true; - } - var t = 0; - for (i = 0; i < 5; ++i) { - t = t * 85 + (input[i] - 0x21); - } - - for (i = 3; i >= 0; --i) { - buffer[bufferLength + i] = t & 0xff; - t >>= 8; - } - } - }; - - return Ascii85Stream; -})(); - var NullStream = (function NullStreamClosure() { // eslint-disable-next-line no-shadow function NullStream() { @@ -1093,7 +1007,6 @@ var NullStream = (function NullStreamClosure() { })(); export { - Ascii85Stream, DecodeStream, DecryptStream, FlateStream,