You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
4.3 KiB
147 lines
4.3 KiB
6 years ago
|
/**
|
||
|
* @licstart The following is the entire license notice for the
|
||
|
* Javascript code in this page
|
||
|
*
|
||
|
* Copyright 2019 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.getLookupTableFactory = getLookupTableFactory;
|
||
|
exports.getInheritableProperty = getInheritableProperty;
|
||
|
exports.toRomanNumerals = toRomanNumerals;
|
||
|
exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;
|
||
|
|
||
|
var _util = require("../shared/util");
|
||
|
|
||
|
function getLookupTableFactory(initializer) {
|
||
|
var lookup;
|
||
|
return function () {
|
||
|
if (initializer) {
|
||
|
lookup = Object.create(null);
|
||
|
initializer(lookup);
|
||
|
initializer = null;
|
||
|
}
|
||
|
|
||
|
return lookup;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
var MissingDataException = function MissingDataExceptionClosure() {
|
||
|
function MissingDataException(begin, end) {
|
||
|
this.begin = begin;
|
||
|
this.end = end;
|
||
|
this.message = "Missing data [".concat(begin, ", ").concat(end, ")");
|
||
|
}
|
||
|
|
||
|
MissingDataException.prototype = new Error();
|
||
|
MissingDataException.prototype.name = 'MissingDataException';
|
||
|
MissingDataException.constructor = MissingDataException;
|
||
|
return MissingDataException;
|
||
|
}();
|
||
|
|
||
|
exports.MissingDataException = MissingDataException;
|
||
|
|
||
|
var XRefEntryException = function XRefEntryExceptionClosure() {
|
||
|
function XRefEntryException(msg) {
|
||
|
this.message = msg;
|
||
|
}
|
||
|
|
||
|
XRefEntryException.prototype = new Error();
|
||
|
XRefEntryException.prototype.name = 'XRefEntryException';
|
||
|
XRefEntryException.constructor = XRefEntryException;
|
||
|
return XRefEntryException;
|
||
|
}();
|
||
|
|
||
|
exports.XRefEntryException = XRefEntryException;
|
||
|
|
||
|
var XRefParseException = function XRefParseExceptionClosure() {
|
||
|
function XRefParseException(msg) {
|
||
|
this.message = msg;
|
||
|
}
|
||
|
|
||
|
XRefParseException.prototype = new Error();
|
||
|
XRefParseException.prototype.name = 'XRefParseException';
|
||
|
XRefParseException.constructor = XRefParseException;
|
||
|
return XRefParseException;
|
||
|
}();
|
||
|
|
||
|
exports.XRefParseException = XRefParseException;
|
||
|
|
||
|
function getInheritableProperty(_ref) {
|
||
|
var dict = _ref.dict,
|
||
|
key = _ref.key,
|
||
|
_ref$getArray = _ref.getArray,
|
||
|
getArray = _ref$getArray === void 0 ? false : _ref$getArray,
|
||
|
_ref$stopWhenFound = _ref.stopWhenFound,
|
||
|
stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound;
|
||
|
var LOOP_LIMIT = 100;
|
||
|
var loopCount = 0;
|
||
|
var values;
|
||
|
|
||
|
while (dict) {
|
||
|
var value = getArray ? dict.getArray(key) : dict.get(key);
|
||
|
|
||
|
if (value !== undefined) {
|
||
|
if (stopWhenFound) {
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
if (!values) {
|
||
|
values = [];
|
||
|
}
|
||
|
|
||
|
values.push(value);
|
||
|
}
|
||
|
|
||
|
if (++loopCount > LOOP_LIMIT) {
|
||
|
(0, _util.warn)("getInheritableProperty: maximum loop count exceeded for \"".concat(key, "\""));
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
dict = dict.get('Parent');
|
||
|
}
|
||
|
|
||
|
return values;
|
||
|
}
|
||
|
|
||
|
var ROMAN_NUMBER_MAP = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];
|
||
|
|
||
|
function toRomanNumerals(number) {
|
||
|
var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
||
|
(0, _util.assert)(Number.isInteger(number) && number > 0, 'The number should be a positive integer.');
|
||
|
var pos,
|
||
|
romanBuf = [];
|
||
|
|
||
|
while (number >= 1000) {
|
||
|
number -= 1000;
|
||
|
romanBuf.push('M');
|
||
|
}
|
||
|
|
||
|
pos = number / 100 | 0;
|
||
|
number %= 100;
|
||
|
romanBuf.push(ROMAN_NUMBER_MAP[pos]);
|
||
|
pos = number / 10 | 0;
|
||
|
number %= 10;
|
||
|
romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);
|
||
|
romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);
|
||
|
var romanStr = romanBuf.join('');
|
||
|
return lowerCase ? romanStr.toLowerCase() : romanStr;
|
||
|
}
|