123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- /**
- * @licstart The following is the entire license notice for the
- * Javascript code in this page
- *
- * Copyright 2017 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';
- var _fonts = require('../../core/fonts');
- var checkProblematicCharRanges = function checkProblematicCharRanges() {
- function printRange(limits) {
- return '[' + limits.lower.toString('16').toUpperCase() + ', ' + limits.upper.toString('16').toUpperCase() + ')';
- }
- var numRanges = _fonts.ProblematicCharRanges.length;
- if (numRanges % 2 !== 0) {
- throw new Error('Char ranges must contain an even number of elements.');
- }
- var prevLimits,
- numChars = 0;
- for (var i = 0; i < numRanges; i += 2) {
- var limits = {
- lower: _fonts.ProblematicCharRanges[i],
- upper: _fonts.ProblematicCharRanges[i + 1]
- };
- if (!Number.isInteger(limits.lower) || !Number.isInteger(limits.upper)) {
- throw new Error('Range endpoints must be integers: ' + printRange(limits));
- }
- if (limits.lower < 0 || limits.upper < 0) {
- throw new Error('Range endpoints must be non-negative: ' + printRange(limits));
- }
- var range = limits.upper - limits.lower;
- if (range < 1) {
- throw new Error('Range must contain at least one element: ' + printRange(limits));
- }
- if (prevLimits) {
- if (limits.lower < prevLimits.lower) {
- throw new Error('Ranges must be sorted in ascending order: ' + printRange(limits) + ', ' + printRange(prevLimits));
- }
- if (limits.lower < prevLimits.upper) {
- throw new Error('Ranges must not overlap: ' + printRange(limits) + ', ' + printRange(prevLimits));
- }
- }
- prevLimits = {
- lower: limits.lower,
- upper: limits.upper
- };
- numChars += range;
- }
- var puaLength = _fonts.PRIVATE_USE_OFFSET_END + 1 - _fonts.PRIVATE_USE_OFFSET_START;
- if (numChars > puaLength) {
- throw new Error('Total number of chars must not exceed the PUA length.');
- }
- return {
- numChars: numChars,
- puaLength: puaLength,
- percentage: 100 * (numChars / puaLength)
- };
- };
- describe('Fonts', function () {
- it('checkProblematicCharRanges', function () {
- var EXPECTED_PERCENTAGE = 100;
- var result = checkProblematicCharRanges();
- expect(result.percentage).toBeLessThan(EXPECTED_PERCENTAGE);
- });
- });
|