2012-09-01 07:48:21 +09:00
|
|
|
/* 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.
|
|
|
|
*/
|
2011-06-12 10:00:45 +09:00
|
|
|
|
2017-04-02 23:14:30 +09:00
|
|
|
import {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
assert,
|
|
|
|
bytesToString,
|
|
|
|
FONT_IDENTITY_MATRIX,
|
|
|
|
FontType,
|
|
|
|
FormatError,
|
|
|
|
info,
|
|
|
|
isNum,
|
|
|
|
shadow,
|
|
|
|
string32,
|
|
|
|
unreachable,
|
|
|
|
warn,
|
2020-01-02 20:00:16 +09:00
|
|
|
} from "../shared/util.js";
|
2017-04-02 23:14:30 +09:00
|
|
|
import {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
CFF,
|
|
|
|
CFFCharset,
|
|
|
|
CFFCompiler,
|
|
|
|
CFFHeader,
|
|
|
|
CFFIndex,
|
|
|
|
CFFParser,
|
|
|
|
CFFPrivateDict,
|
|
|
|
CFFStandardStrings,
|
|
|
|
CFFStrings,
|
|
|
|
CFFTopDict,
|
2020-01-02 20:00:16 +09:00
|
|
|
} from "./cff_parser.js";
|
|
|
|
import { getDingbatsGlyphsUnicode, getGlyphsUnicode } from "./glyphlist.js";
|
2017-04-02 23:14:30 +09:00
|
|
|
import {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
getEncoding,
|
|
|
|
MacRomanEncoding,
|
|
|
|
StandardEncoding,
|
|
|
|
SymbolSetEncoding,
|
|
|
|
ZapfDingbatsEncoding,
|
2020-01-02 20:00:16 +09:00
|
|
|
} from "./encodings.js";
|
2017-04-02 23:14:30 +09:00
|
|
|
import {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
getGlyphMapForStandardFonts,
|
|
|
|
getNonStdFontMap,
|
|
|
|
getStdFontMap,
|
|
|
|
getSupplementalGlyphMapForArialBlack,
|
|
|
|
getSupplementalGlyphMapForCalibri,
|
2020-01-02 20:00:16 +09:00
|
|
|
} from "./standard_fonts.js";
|
2017-04-02 23:14:30 +09:00
|
|
|
import {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
getUnicodeForGlyph,
|
|
|
|
getUnicodeRangeFor,
|
|
|
|
mapSpecialUnicodeValues,
|
2020-01-02 20:00:16 +09:00
|
|
|
} from "./unicode.js";
|
2020-02-10 17:38:57 +09:00
|
|
|
import {
|
|
|
|
isWhiteSpace,
|
|
|
|
MissingDataException,
|
|
|
|
readUint32,
|
|
|
|
} from "./core_utils.js";
|
2020-01-02 20:00:16 +09:00
|
|
|
import { FontRendererFactory } from "./font_renderer.js";
|
|
|
|
import { IdentityCMap } from "./cmap.js";
|
|
|
|
import { Stream } from "./stream.js";
|
|
|
|
import { Type1Parser } from "./type1_parser.js";
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
|
|
|
|
// Unicode Private Use Areas:
|
2018-01-05 07:43:07 +09:00
|
|
|
const PRIVATE_USE_AREAS = [
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
[0xe000, 0xf8ff], // BMP (0)
|
|
|
|
[0x100000, 0x10fffd], // PUP (16)
|
2018-01-05 07:43:07 +09:00
|
|
|
];
|
2011-10-03 18:16:18 +09:00
|
|
|
|
2011-09-17 09:53:52 +09:00
|
|
|
// PDF Glyph Space Units are one Thousandth of a TextSpace Unit
|
|
|
|
// except for Type 3 fonts
|
2012-11-10 06:34:11 +09:00
|
|
|
var PDF_GLYPH_SPACE_UNITS = 1000;
|
2011-09-05 21:35:03 +09:00
|
|
|
|
2018-01-05 07:43:07 +09:00
|
|
|
// Accented characters have issues on Windows and Linux. When this flag is
|
|
|
|
// enabled glyphs that use seac and seac style endchar operators are truncated
|
|
|
|
// and we instead just store the glyph id's of the base glyph and its accent to
|
|
|
|
// be drawn individually.
|
|
|
|
// Linux (freetype) requires that when a seac style endchar is used
|
|
|
|
// that the charset must be a predefined one, however we build a
|
|
|
|
// custom one. Windows just refuses to draw glyphs with seac operators.
|
|
|
|
var SEAC_ANALYSIS_ENABLED = true;
|
2013-02-27 03:00:20 +09:00
|
|
|
|
2012-01-28 09:53:05 +09:00
|
|
|
var FontFlags = {
|
|
|
|
FixedPitch: 1,
|
|
|
|
Serif: 2,
|
|
|
|
Symbolic: 4,
|
|
|
|
Script: 8,
|
|
|
|
Nonsymbolic: 32,
|
|
|
|
Italic: 64,
|
|
|
|
AllCap: 65536,
|
|
|
|
SmallCap: 131072,
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
ForceBold: 262144,
|
2012-01-28 09:53:05 +09:00
|
|
|
};
|
|
|
|
|
2020-01-11 19:41:18 +09:00
|
|
|
// prettier-ignore
|
2011-10-29 10:38:31 +09:00
|
|
|
var MacStandardGlyphOrdering = [
|
2020-01-11 19:41:18 +09:00
|
|
|
".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl",
|
|
|
|
"numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft",
|
|
|
|
"parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash",
|
|
|
|
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
|
|
|
|
"nine", "colon", "semicolon", "less", "equal", "greater", "question", "at",
|
|
|
|
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
|
|
|
|
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft",
|
|
|
|
"backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b",
|
|
|
|
"c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q",
|
|
|
|
"r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright",
|
|
|
|
"asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde",
|
|
|
|
"Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis",
|
|
|
|
"atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis",
|
|
|
|
"iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve",
|
|
|
|
"ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex",
|
|
|
|
"udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet",
|
|
|
|
"paragraph", "germandbls", "registered", "copyright", "trademark", "acute",
|
|
|
|
"dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal",
|
|
|
|
"greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi",
|
|
|
|
"integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash",
|
|
|
|
"questiondown", "exclamdown", "logicalnot", "radical", "florin",
|
|
|
|
"approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis",
|
|
|
|
"nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash",
|
|
|
|
"emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright",
|
|
|
|
"divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency",
|
|
|
|
"guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered",
|
|
|
|
"quotesinglbase", "quotedblbase", "perthousand", "Acircumflex",
|
|
|
|
"Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex",
|
|
|
|
"Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute",
|
|
|
|
"Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron",
|
|
|
|
"breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron",
|
|
|
|
"Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar",
|
|
|
|
"Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply",
|
|
|
|
"onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter",
|
|
|
|
"threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla",
|
|
|
|
"scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"];
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2013-01-04 09:39:06 +09:00
|
|
|
function adjustWidths(properties) {
|
2015-12-08 06:30:09 +09:00
|
|
|
if (!properties.fontMatrix) {
|
|
|
|
return;
|
|
|
|
}
|
2013-01-04 09:39:06 +09:00
|
|
|
if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
// adjusting width to fontMatrix scale
|
|
|
|
var scale = 0.001 / properties.fontMatrix[0];
|
|
|
|
var glyphsWidths = properties.widths;
|
|
|
|
for (var glyph in glyphsWidths) {
|
|
|
|
glyphsWidths[glyph] *= scale;
|
|
|
|
}
|
|
|
|
properties.defaultWidth *= scale;
|
|
|
|
}
|
|
|
|
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
function adjustToUnicode(properties, builtInEncoding) {
|
|
|
|
if (properties.hasIncludedToUnicodeMap) {
|
|
|
|
return; // The font dictionary has a `ToUnicode` entry.
|
|
|
|
}
|
|
|
|
if (properties.hasEncoding) {
|
|
|
|
return; // The font dictionary has an `Encoding` entry.
|
|
|
|
}
|
|
|
|
if (builtInEncoding === properties.defaultEncoding) {
|
|
|
|
return; // No point in trying to adjust `toUnicode` if the encodings match.
|
|
|
|
}
|
|
|
|
if (properties.toUnicode instanceof IdentityToUnicodeMap) {
|
|
|
|
return;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var toUnicode = [],
|
|
|
|
glyphsUnicodeMap = getGlyphsUnicode();
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
for (var charCode in builtInEncoding) {
|
|
|
|
var glyphName = builtInEncoding[charCode];
|
|
|
|
var unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);
|
|
|
|
if (unicode !== -1) {
|
|
|
|
toUnicode[charCode] = String.fromCharCode(unicode);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
properties.toUnicode.amend(toUnicode);
|
|
|
|
}
|
|
|
|
|
2014-06-16 23:52:04 +09:00
|
|
|
function getFontType(type, subtype) {
|
|
|
|
switch (type) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "Type1":
|
|
|
|
return subtype === "Type1C" ? FontType.TYPE1C : FontType.TYPE1;
|
|
|
|
case "CIDFontType0":
|
|
|
|
return subtype === "CIDFontType0C"
|
|
|
|
? FontType.CIDFONTTYPE0C
|
|
|
|
: FontType.CIDFONTTYPE0;
|
|
|
|
case "OpenType":
|
2014-06-16 23:52:04 +09:00
|
|
|
return FontType.OPENTYPE;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "TrueType":
|
2014-06-16 23:52:04 +09:00
|
|
|
return FontType.TRUETYPE;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "CIDFontType2":
|
2014-06-16 23:52:04 +09:00
|
|
|
return FontType.CIDFONTTYPE2;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "MMType1":
|
2014-06-16 23:52:04 +09:00
|
|
|
return FontType.MMTYPE1;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "Type0":
|
2014-06-16 23:52:04 +09:00
|
|
|
return FontType.TYPE0;
|
|
|
|
default:
|
|
|
|
return FontType.UNKNOWN;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-06-25 19:41:26 +09:00
|
|
|
// Some bad PDF generators, e.g. Scribus PDF, include glyph names
|
|
|
|
// in a 'uniXXXX' format -- attempting to recover proper ones.
|
|
|
|
function recoverGlyphName(name, glyphsUnicodeMap) {
|
|
|
|
if (glyphsUnicodeMap[name] !== undefined) {
|
|
|
|
return name;
|
|
|
|
}
|
|
|
|
// The glyph name is non-standard, trying to recover.
|
|
|
|
var unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);
|
|
|
|
if (unicode !== -1) {
|
|
|
|
for (var key in glyphsUnicodeMap) {
|
|
|
|
if (glyphsUnicodeMap[key] === unicode) {
|
|
|
|
return key;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
info("Unable to recover a standard glyph name for: " + name);
|
2016-06-25 19:41:26 +09:00
|
|
|
return name;
|
|
|
|
}
|
|
|
|
|
2014-03-13 21:56:12 +09:00
|
|
|
var Glyph = (function GlyphClosure() {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
function Glyph(
|
|
|
|
fontChar,
|
|
|
|
unicode,
|
|
|
|
accent,
|
|
|
|
width,
|
|
|
|
vmetric,
|
|
|
|
operatorListId,
|
|
|
|
isSpace,
|
|
|
|
isInFont
|
|
|
|
) {
|
2014-03-13 21:56:12 +09:00
|
|
|
this.fontChar = fontChar;
|
|
|
|
this.unicode = unicode;
|
|
|
|
this.accent = accent;
|
|
|
|
this.width = width;
|
|
|
|
this.vmetric = vmetric;
|
2014-05-20 06:27:54 +09:00
|
|
|
this.operatorListId = operatorListId;
|
2015-11-02 23:54:15 +09:00
|
|
|
this.isSpace = isSpace;
|
2016-02-25 03:48:02 +09:00
|
|
|
this.isInFont = isInFont;
|
2014-03-13 21:56:12 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
Glyph.prototype.matchesForCache = function(
|
|
|
|
fontChar,
|
|
|
|
unicode,
|
|
|
|
accent,
|
|
|
|
width,
|
|
|
|
vmetric,
|
|
|
|
operatorListId,
|
|
|
|
isSpace,
|
|
|
|
isInFont
|
|
|
|
) {
|
|
|
|
return (
|
|
|
|
this.fontChar === fontChar &&
|
|
|
|
this.unicode === unicode &&
|
|
|
|
this.accent === accent &&
|
|
|
|
this.width === width &&
|
|
|
|
this.vmetric === vmetric &&
|
|
|
|
this.operatorListId === operatorListId &&
|
|
|
|
this.isSpace === isSpace &&
|
|
|
|
this.isInFont === isInFont
|
|
|
|
);
|
2014-03-13 21:56:12 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
return Glyph;
|
|
|
|
})();
|
|
|
|
|
2014-08-07 10:02:11 +09:00
|
|
|
var ToUnicodeMap = (function ToUnicodeMapClosure() {
|
Build a fallback `ToUnicode` map for simple fonts (issue 8229)
In some fonts, the included `ToUnicode` data is incomplete causing text-selection to not work properly. For simple fonts that contain encoding data, we can manually build a `ToUnicode` map to attempt to improve things.
Please note that since we're currently using the `ToUnicode` data during glyph mapping, in an attempt to avoid rendering regressions, I purposely didn't want to amend to original `ToUnicode` data for this text-selection edge-case.
Instead, I opted for the current solution, which will (hopefully) give slightly better text-extraction results in PDF file with incomplete `ToUnicode` data.
According to the PDF specification, see [section 9.10.2](http://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G8.1873172):
> A conforming reader can use these methods, in the priority given, to map a character code to a Unicode value.
> ...
Reading that paragraph literally, it doesn't seem too unreasonable to use *different* methods for different charcodes.
Fixes 8229.
2017-11-26 21:29:43 +09:00
|
|
|
function ToUnicodeMap(cmap = []) {
|
2014-08-07 10:02:11 +09:00
|
|
|
// The elements of this._map can be integers or strings, depending on how
|
Build a fallback `ToUnicode` map for simple fonts (issue 8229)
In some fonts, the included `ToUnicode` data is incomplete causing text-selection to not work properly. For simple fonts that contain encoding data, we can manually build a `ToUnicode` map to attempt to improve things.
Please note that since we're currently using the `ToUnicode` data during glyph mapping, in an attempt to avoid rendering regressions, I purposely didn't want to amend to original `ToUnicode` data for this text-selection edge-case.
Instead, I opted for the current solution, which will (hopefully) give slightly better text-extraction results in PDF file with incomplete `ToUnicode` data.
According to the PDF specification, see [section 9.10.2](http://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G8.1873172):
> A conforming reader can use these methods, in the priority given, to map a character code to a Unicode value.
> ...
Reading that paragraph literally, it doesn't seem too unreasonable to use *different* methods for different charcodes.
Fixes 8229.
2017-11-26 21:29:43 +09:00
|
|
|
// `cmap` was created.
|
2014-08-07 10:02:11 +09:00
|
|
|
this._map = cmap;
|
|
|
|
}
|
|
|
|
|
|
|
|
ToUnicodeMap.prototype = {
|
|
|
|
get length() {
|
|
|
|
return this._map.length;
|
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
forEach(callback) {
|
2014-08-07 10:02:11 +09:00
|
|
|
for (var charCode in this._map) {
|
|
|
|
callback(charCode, this._map[charCode].charCodeAt(0));
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
has(i) {
|
2015-01-02 22:21:56 +09:00
|
|
|
return this._map[i] !== undefined;
|
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
get(i) {
|
2014-08-07 10:02:11 +09:00
|
|
|
return this._map[i];
|
|
|
|
},
|
|
|
|
|
2017-05-25 00:36:39 +09:00
|
|
|
charCodeOf(value) {
|
|
|
|
// `Array.prototype.indexOf` is *extremely* inefficient for arrays which
|
|
|
|
// are both very sparse and very large (see issue8372.pdf).
|
2020-01-24 17:48:21 +09:00
|
|
|
const map = this._map;
|
2017-05-25 00:36:39 +09:00
|
|
|
if (map.length <= 0x10000) {
|
|
|
|
return map.indexOf(value);
|
|
|
|
}
|
2020-01-24 17:48:21 +09:00
|
|
|
for (const charCode in map) {
|
2017-05-25 00:36:39 +09:00
|
|
|
if (map[charCode] === value) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return charCode | 0;
|
2017-05-25 00:36:39 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
amend(map) {
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
for (var charCode in map) {
|
|
|
|
this._map[charCode] = map[charCode];
|
|
|
|
}
|
|
|
|
},
|
2014-08-07 10:02:11 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
return ToUnicodeMap;
|
|
|
|
})();
|
|
|
|
|
2014-08-08 10:29:53 +09:00
|
|
|
var IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() {
|
|
|
|
function IdentityToUnicodeMap(firstChar, lastChar) {
|
|
|
|
this.firstChar = firstChar;
|
|
|
|
this.lastChar = lastChar;
|
|
|
|
}
|
|
|
|
|
|
|
|
IdentityToUnicodeMap.prototype = {
|
|
|
|
get length() {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return this.lastChar + 1 - this.firstChar;
|
2014-08-08 10:29:53 +09:00
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
forEach(callback) {
|
2014-08-08 10:29:53 +09:00
|
|
|
for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
|
|
|
|
callback(i, i);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
has(i) {
|
2015-01-02 22:21:56 +09:00
|
|
|
return this.firstChar <= i && i <= this.lastChar;
|
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
get(i) {
|
2014-08-08 10:29:53 +09:00
|
|
|
if (this.firstChar <= i && i <= this.lastChar) {
|
|
|
|
return String.fromCharCode(i);
|
|
|
|
}
|
|
|
|
return undefined;
|
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
charCodeOf(v) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar
|
|
|
|
? v
|
|
|
|
: -1;
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
},
|
|
|
|
|
2017-04-27 19:58:44 +09:00
|
|
|
amend(map) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
unreachable("Should not call amend()");
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
},
|
2014-08-08 10:29:53 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
return IdentityToUnicodeMap;
|
|
|
|
})();
|
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
var OpenTypeFileBuilder = (function OpenTypeFileBuilderClosure() {
|
|
|
|
function writeInt16(dest, offset, num) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
dest[offset] = (num >> 8) & 0xff;
|
|
|
|
dest[offset + 1] = num & 0xff;
|
2014-08-10 08:18:41 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function writeInt32(dest, offset, num) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
dest[offset] = (num >> 24) & 0xff;
|
|
|
|
dest[offset + 1] = (num >> 16) & 0xff;
|
|
|
|
dest[offset + 2] = (num >> 8) & 0xff;
|
|
|
|
dest[offset + 3] = num & 0xff;
|
2014-08-10 08:18:41 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function writeData(dest, offset, data) {
|
|
|
|
var i, ii;
|
|
|
|
if (data instanceof Uint8Array) {
|
|
|
|
dest.set(data, offset);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (typeof data === "string") {
|
2014-08-10 08:18:41 +09:00
|
|
|
for (i = 0, ii = data.length; i < ii; i++) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
dest[offset++] = data.charCodeAt(i) & 0xff;
|
2014-08-10 08:18:41 +09:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// treating everything else as array
|
|
|
|
for (i = 0, ii = data.length; i < ii; i++) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
dest[offset++] = data[i] & 0xff;
|
2014-08-10 08:18:41 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function OpenTypeFileBuilder(sfnt) {
|
|
|
|
this.sfnt = sfnt;
|
|
|
|
this.tables = Object.create(null);
|
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(
|
|
|
|
entriesCount,
|
|
|
|
entrySize
|
|
|
|
) {
|
|
|
|
var maxPower2 = 1,
|
|
|
|
log2 = 0;
|
2014-08-11 03:51:09 +09:00
|
|
|
while ((maxPower2 ^ entriesCount) > maxPower2) {
|
|
|
|
maxPower2 <<= 1;
|
|
|
|
log2++;
|
|
|
|
}
|
|
|
|
var searchRange = maxPower2 * entrySize;
|
2014-08-10 08:18:41 +09:00
|
|
|
return {
|
|
|
|
range: searchRange,
|
2014-08-11 03:51:09 +09:00
|
|
|
entry: log2,
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
rangeShift: entrySize * entriesCount - searchRange,
|
2014-08-10 08:18:41 +09:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
var OTF_HEADER_SIZE = 12;
|
|
|
|
var OTF_TABLE_ENTRY_SIZE = 16;
|
|
|
|
|
|
|
|
OpenTypeFileBuilder.prototype = {
|
|
|
|
toArray: function OpenTypeFileBuilder_toArray() {
|
|
|
|
var sfnt = this.sfnt;
|
|
|
|
|
|
|
|
// Tables needs to be written by ascendant alphabetic order
|
|
|
|
var tables = this.tables;
|
|
|
|
var tablesNames = Object.keys(tables);
|
|
|
|
tablesNames.sort();
|
|
|
|
var numTables = tablesNames.length;
|
|
|
|
|
|
|
|
var i, j, jj, table, tableName;
|
|
|
|
// layout the tables data
|
|
|
|
var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
|
|
|
|
var tableOffsets = [offset];
|
|
|
|
for (i = 0; i < numTables; i++) {
|
|
|
|
table = tables[tablesNames[i]];
|
|
|
|
var paddedLength = ((table.length + 3) & ~3) >>> 0;
|
|
|
|
offset += paddedLength;
|
|
|
|
tableOffsets.push(offset);
|
|
|
|
}
|
|
|
|
|
|
|
|
var file = new Uint8Array(offset);
|
|
|
|
// write the table data first (mostly for checksum)
|
|
|
|
for (i = 0; i < numTables; i++) {
|
|
|
|
table = tables[tablesNames[i]];
|
|
|
|
writeData(file, tableOffsets[i], table);
|
|
|
|
}
|
|
|
|
|
|
|
|
// sfnt version (4 bytes)
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (sfnt === "true") {
|
2014-08-10 08:18:41 +09:00
|
|
|
// Windows hates the Mac TrueType sfnt version number
|
|
|
|
sfnt = string32(0x00010000);
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
file[0] = sfnt.charCodeAt(0) & 0xff;
|
|
|
|
file[1] = sfnt.charCodeAt(1) & 0xff;
|
|
|
|
file[2] = sfnt.charCodeAt(2) & 0xff;
|
|
|
|
file[3] = sfnt.charCodeAt(3) & 0xff;
|
2014-08-10 08:18:41 +09:00
|
|
|
|
|
|
|
// numTables (2 bytes)
|
|
|
|
writeInt16(file, 4, numTables);
|
|
|
|
|
|
|
|
var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
|
|
|
|
|
|
|
|
// searchRange (2 bytes)
|
|
|
|
writeInt16(file, 6, searchParams.range);
|
|
|
|
// entrySelector (2 bytes)
|
|
|
|
writeInt16(file, 8, searchParams.entry);
|
|
|
|
// rangeShift (2 bytes)
|
|
|
|
writeInt16(file, 10, searchParams.rangeShift);
|
|
|
|
|
|
|
|
offset = OTF_HEADER_SIZE;
|
|
|
|
// writing table entries
|
|
|
|
for (i = 0; i < numTables; i++) {
|
|
|
|
tableName = tablesNames[i];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
file[offset] = tableName.charCodeAt(0) & 0xff;
|
|
|
|
file[offset + 1] = tableName.charCodeAt(1) & 0xff;
|
|
|
|
file[offset + 2] = tableName.charCodeAt(2) & 0xff;
|
|
|
|
file[offset + 3] = tableName.charCodeAt(3) & 0xff;
|
2014-08-10 08:18:41 +09:00
|
|
|
|
|
|
|
// checksum
|
|
|
|
var checksum = 0;
|
|
|
|
for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
|
2016-03-22 21:16:08 +09:00
|
|
|
var quad = readUint32(file, j);
|
|
|
|
checksum = (checksum + quad) >>> 0;
|
2014-08-10 08:18:41 +09:00
|
|
|
}
|
|
|
|
writeInt32(file, offset + 4, checksum);
|
|
|
|
|
|
|
|
// offset
|
|
|
|
writeInt32(file, offset + 8, tableOffsets[i]);
|
|
|
|
// length
|
|
|
|
writeInt32(file, offset + 12, tables[tableName].length);
|
|
|
|
|
|
|
|
offset += OTF_TABLE_ENTRY_SIZE;
|
|
|
|
}
|
|
|
|
return file;
|
|
|
|
},
|
|
|
|
|
|
|
|
addTable: function OpenTypeFileBuilder_addTable(tag, data) {
|
|
|
|
if (tag in this.tables) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
throw new Error("Table " + tag + " already exists");
|
2014-08-10 08:18:41 +09:00
|
|
|
}
|
|
|
|
this.tables[tag] = data;
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
},
|
2014-08-10 08:18:41 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
return OpenTypeFileBuilder;
|
|
|
|
})();
|
|
|
|
|
2011-06-10 08:20:00 +09:00
|
|
|
/**
|
2011-06-13 08:38:05 +09:00
|
|
|
* 'Font' is the class the outside world should use, it encapsulate all the font
|
|
|
|
* decoding logics whatever type it is (assuming the font type is supported).
|
|
|
|
*
|
|
|
|
* For example to read a Type1 font and to attach it to the document:
|
2011-06-17 20:55:42 +09:00
|
|
|
* var type1Font = new Font("MyFontName", binaryFile, propertiesObject);
|
2011-06-13 08:38:05 +09:00
|
|
|
* type1Font.bind();
|
2011-06-04 00:54:40 +09:00
|
|
|
*/
|
2011-12-09 07:18:43 +09:00
|
|
|
var Font = (function FontClosure() {
|
|
|
|
function Font(name, file, properties) {
|
2017-07-21 09:30:22 +09:00
|
|
|
var charCode;
|
2012-09-13 09:31:04 +09:00
|
|
|
|
2011-06-21 13:49:59 +09:00
|
|
|
this.name = name;
|
2012-09-14 00:09:46 +09:00
|
|
|
this.loadedName = properties.loadedName;
|
2014-05-20 06:27:54 +09:00
|
|
|
this.isType3Font = properties.isType3Font;
|
2011-07-21 09:10:04 +09:00
|
|
|
this.sizes = [];
|
2016-02-25 03:48:02 +09:00
|
|
|
this.missingFile = false;
|
2011-06-20 07:46:58 +09:00
|
|
|
|
2016-01-28 02:04:13 +09:00
|
|
|
this.glyphCache = Object.create(null);
|
2014-03-13 21:56:12 +09:00
|
|
|
|
2012-01-28 09:53:05 +09:00
|
|
|
this.isSerifFont = !!(properties.flags & FontFlags.Serif);
|
|
|
|
this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
|
2012-09-15 02:58:33 +09:00
|
|
|
this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
|
2011-09-07 07:29:08 +09:00
|
|
|
|
2011-10-29 10:38:31 +09:00
|
|
|
var type = properties.type;
|
2014-06-16 23:52:04 +09:00
|
|
|
var subtype = properties.subtype;
|
2011-10-29 10:38:31 +09:00
|
|
|
this.type = type;
|
2017-07-21 09:30:22 +09:00
|
|
|
this.subtype = subtype;
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2020-01-13 03:47:13 +09:00
|
|
|
let fallbackName = "sans-serif";
|
|
|
|
if (this.isMonospace) {
|
|
|
|
fallbackName = "monospace";
|
|
|
|
} else if (this.isSerifFont) {
|
|
|
|
fallbackName = "serif";
|
|
|
|
}
|
|
|
|
this.fallbackName = fallbackName;
|
2011-10-29 10:38:31 +09:00
|
|
|
|
|
|
|
this.differences = properties.differences;
|
|
|
|
this.widths = properties.widths;
|
|
|
|
this.defaultWidth = properties.defaultWidth;
|
|
|
|
this.composite = properties.composite;
|
2014-02-12 03:27:09 +09:00
|
|
|
this.cMap = properties.cMap;
|
2014-01-09 04:50:52 +09:00
|
|
|
this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
|
|
|
|
this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
|
2011-10-04 08:36:01 +09:00
|
|
|
this.fontMatrix = properties.fontMatrix;
|
2015-04-03 22:49:06 +09:00
|
|
|
this.bbox = properties.bbox;
|
2017-07-21 09:30:22 +09:00
|
|
|
this.defaultEncoding = properties.defaultEncoding;
|
2014-02-12 03:27:09 +09:00
|
|
|
|
2016-02-29 01:20:29 +09:00
|
|
|
this.toUnicode = properties.toUnicode;
|
Build a fallback `ToUnicode` map for simple fonts (issue 8229)
In some fonts, the included `ToUnicode` data is incomplete causing text-selection to not work properly. For simple fonts that contain encoding data, we can manually build a `ToUnicode` map to attempt to improve things.
Please note that since we're currently using the `ToUnicode` data during glyph mapping, in an attempt to avoid rendering regressions, I purposely didn't want to amend to original `ToUnicode` data for this text-selection edge-case.
Instead, I opted for the current solution, which will (hopefully) give slightly better text-extraction results in PDF file with incomplete `ToUnicode` data.
According to the PDF specification, see [section 9.10.2](http://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf#G8.1873172):
> A conforming reader can use these methods, in the priority given, to map a character code to a Unicode value.
> ...
Reading that paragraph literally, it doesn't seem too unreasonable to use *different* methods for different charcodes.
Fixes 8229.
2017-11-26 21:29:43 +09:00
|
|
|
this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();
|
2014-02-12 03:27:09 +09:00
|
|
|
|
|
|
|
this.toFontChar = [];
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (properties.type === "Type3") {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (charCode = 0; charCode < 256; charCode++) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.toFontChar[charCode] =
|
|
|
|
this.differences[charCode] || properties.defaultEncoding[charCode];
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
2014-06-16 23:52:04 +09:00
|
|
|
this.fontType = FontType.TYPE3;
|
2011-10-04 08:36:01 +09:00
|
|
|
return;
|
2011-12-05 04:51:12 +09:00
|
|
|
}
|
2011-07-25 23:42:46 +09:00
|
|
|
|
2013-01-15 23:20:58 +09:00
|
|
|
this.cidEncoding = properties.cidEncoding;
|
2013-02-08 21:29:22 +09:00
|
|
|
this.vertical = properties.vertical;
|
|
|
|
if (this.vertical) {
|
|
|
|
this.vmetrics = properties.vmetrics;
|
|
|
|
this.defaultVMetrics = properties.defaultVMetrics;
|
|
|
|
}
|
2017-07-21 09:30:22 +09:00
|
|
|
|
2014-05-18 07:57:06 +09:00
|
|
|
if (!file || file.isEmpty) {
|
|
|
|
if (file) {
|
|
|
|
// Some bad PDF generators will include empty font files,
|
|
|
|
// attempting to recover by assuming that no file exists.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn('Font file is empty in "' + name + '" (' + this.loadedName + ")");
|
2014-05-18 07:57:06 +09:00
|
|
|
}
|
2017-07-21 09:30:22 +09:00
|
|
|
this.fallbackToSystemFont();
|
2011-06-21 09:35:14 +09:00
|
|
|
return;
|
|
|
|
}
|
2011-06-13 08:38:05 +09:00
|
|
|
|
2018-08-05 17:34:14 +09:00
|
|
|
// Parse the font file to determine the correct type/subtype, rather than
|
|
|
|
// relying on the (often incorrect) data in the font dictionary; (see e.g.
|
|
|
|
// issue6782.pdf, issue7598.pdf, and issue9949.pdf).
|
|
|
|
[type, subtype] = getFontFileType(file, properties);
|
|
|
|
|
|
|
|
if (type !== this.type || subtype !== this.subtype) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
info(
|
|
|
|
"Inconsistent font file Type/SubType, expected: " +
|
|
|
|
`${this.type}/${this.subtype} but found: ${type}/${subtype}.`
|
|
|
|
);
|
2017-06-10 01:26:57 +09:00
|
|
|
}
|
2012-08-30 06:11:56 +09:00
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
try {
|
|
|
|
var data;
|
|
|
|
switch (type) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "MMType1":
|
|
|
|
info("MMType1 font (" + name + "), falling back to Type1.");
|
|
|
|
/* falls through */
|
|
|
|
case "Type1":
|
|
|
|
case "CIDFontType0":
|
|
|
|
this.mimetype = "font/opentype";
|
|
|
|
|
|
|
|
var cff =
|
|
|
|
subtype === "Type1C" || subtype === "CIDFontType0C"
|
|
|
|
? new CFFFont(file, properties)
|
|
|
|
: new Type1Font(name, file, properties);
|
2011-06-14 11:35:46 +09:00
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
adjustWidths(properties);
|
2013-01-04 09:39:06 +09:00
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
// Wrap the CFF data inside an OTF font file
|
|
|
|
data = this.convert(name, cff, properties);
|
|
|
|
break;
|
2011-06-13 08:38:05 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "OpenType":
|
|
|
|
case "TrueType":
|
|
|
|
case "CIDFontType2":
|
|
|
|
this.mimetype = "font/opentype";
|
2011-07-12 01:41:47 +09:00
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
// Repair the TrueType file. It is can be damaged in the point of
|
|
|
|
// view of the sanitizer
|
|
|
|
data = this.checkAndRepair(name, file, properties);
|
|
|
|
if (this.isOpenType) {
|
|
|
|
adjustWidths(properties);
|
2015-12-08 06:30:09 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
type = "OpenType";
|
2017-07-21 09:30:22 +09:00
|
|
|
}
|
|
|
|
break;
|
2011-07-12 01:41:47 +09:00
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
default:
|
|
|
|
throw new FormatError(`Font ${type} is not supported`);
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
warn(e);
|
|
|
|
this.fallbackToSystemFont();
|
|
|
|
return;
|
2011-06-16 08:30:47 +09:00
|
|
|
}
|
2011-07-16 00:58:09 +09:00
|
|
|
|
2011-06-27 03:55:27 +09:00
|
|
|
this.data = data;
|
2014-06-16 23:52:04 +09:00
|
|
|
this.fontType = getFontType(type, subtype);
|
2013-01-04 09:39:06 +09:00
|
|
|
|
|
|
|
// Transfer some properties again that could change during font conversion
|
2011-10-04 08:36:01 +09:00
|
|
|
this.fontMatrix = properties.fontMatrix;
|
2013-01-04 09:39:06 +09:00
|
|
|
this.widths = properties.widths;
|
|
|
|
this.defaultWidth = properties.defaultWidth;
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
this.toUnicode = properties.toUnicode;
|
2011-10-29 10:38:31 +09:00
|
|
|
this.encoding = properties.baseEncoding;
|
2013-02-27 03:00:20 +09:00
|
|
|
this.seacMap = properties.seacMap;
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-14 11:35:46 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
Font.getFontID = (function() {
|
2014-03-04 02:44:45 +09:00
|
|
|
var ID = 1;
|
|
|
|
return function Font_getFontID() {
|
|
|
|
return String(ID++);
|
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
2014-03-12 13:09:49 +09:00
|
|
|
function int16(b0, b1) {
|
|
|
|
return (b0 << 8) + b1;
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2016-03-08 04:56:15 +09:00
|
|
|
|
2017-10-30 11:07:02 +09:00
|
|
|
function writeSignedInt16(bytes, index, value) {
|
|
|
|
bytes[index + 1] = value;
|
|
|
|
bytes[index] = value >>> 8;
|
|
|
|
}
|
|
|
|
|
2016-03-03 11:10:15 +09:00
|
|
|
function signedInt16(b0, b1) {
|
|
|
|
var value = (b0 << 8) + b1;
|
|
|
|
return value & (1 << 15) ? value - 0x10000 : value;
|
|
|
|
}
|
2011-07-02 14:54:28 +09:00
|
|
|
|
2014-03-12 13:09:49 +09:00
|
|
|
function int32(b0, b1, b2, b3) {
|
|
|
|
return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-07-02 14:54:28 +09:00
|
|
|
|
2011-06-28 20:06:31 +09:00
|
|
|
function string16(value) {
|
2014-03-27 21:01:43 +09:00
|
|
|
return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
|
2011-12-07 13:13:14 +09:00
|
|
|
function safeString16(value) {
|
|
|
|
// clamp value to the 16-bit int range
|
2020-01-13 03:47:13 +09:00
|
|
|
if (value > 0x7fff) {
|
|
|
|
value = 0x7fff;
|
|
|
|
} else if (value < -0x8000) {
|
|
|
|
value = -0x8000;
|
|
|
|
}
|
2014-03-27 21:01:43 +09:00
|
|
|
return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
|
2014-04-25 01:48:18 +09:00
|
|
|
function isTrueTypeFile(file) {
|
|
|
|
var header = file.peekBytes(4);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return (
|
|
|
|
readUint32(header, 0) === 0x00010000 || bytesToString(header) === "true"
|
|
|
|
);
|
2014-04-25 01:48:18 +09:00
|
|
|
}
|
|
|
|
|
2017-12-15 08:23:56 +09:00
|
|
|
function isTrueTypeCollectionFile(file) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const header = file.peekBytes(4);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return bytesToString(header) === "ttcf";
|
2017-12-15 08:23:56 +09:00
|
|
|
}
|
|
|
|
|
2016-01-06 10:07:21 +09:00
|
|
|
function isOpenTypeFile(file) {
|
|
|
|
var header = file.peekBytes(4);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return bytesToString(header) === "OTTO";
|
2016-01-06 10:07:21 +09:00
|
|
|
}
|
|
|
|
|
2015-02-24 00:01:08 +09:00
|
|
|
function isType1File(file) {
|
|
|
|
var header = file.peekBytes(2);
|
|
|
|
// All Type1 font programs must begin with the comment '%!' (0x25 + 0x21).
|
|
|
|
if (header[0] === 0x25 && header[1] === 0x21) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
// ... obviously some fonts violate that part of the specification,
|
2019-12-26 04:03:46 +09:00
|
|
|
// please refer to the comment in |Type1Font| below (pfb file header).
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (header[0] === 0x80 && header[1] === 0x01) {
|
2015-02-24 00:01:08 +09:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2018-08-05 17:34:06 +09:00
|
|
|
/**
|
|
|
|
* Compared to other font formats, the header in CFF files is not constant
|
|
|
|
* but contains version numbers. To reduce the possibility of misclassifying
|
|
|
|
* font files as CFF, it's recommended to check for other font formats first.
|
|
|
|
*/
|
|
|
|
function isCFFFile(file) {
|
|
|
|
const header = file.peekBytes(4);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
/* major version, [1, 255] */ header[0] >= 1 &&
|
|
|
|
/* minor version, [0, 255]; header[1] */
|
|
|
|
/* header size, [0, 255]; header[2] */
|
|
|
|
/* offset(0) size, [1, 4] */ header[3] >= 1 &&
|
|
|
|
header[3] <= 4
|
|
|
|
) {
|
2018-08-05 17:34:06 +09:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
function getFontFileType(file, { type, subtype, composite }) {
|
2018-08-05 17:34:14 +09:00
|
|
|
let fileType, fileSubtype;
|
|
|
|
|
|
|
|
if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {
|
|
|
|
if (composite) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = "CIDFontType2";
|
2018-08-05 17:34:14 +09:00
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = "TrueType";
|
2018-08-05 17:34:14 +09:00
|
|
|
}
|
|
|
|
} else if (isOpenTypeFile(file)) {
|
|
|
|
if (composite) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = "CIDFontType2";
|
2018-08-05 17:34:14 +09:00
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = "OpenType";
|
2018-08-05 17:34:14 +09:00
|
|
|
}
|
|
|
|
} else if (isType1File(file)) {
|
|
|
|
if (composite) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = "CIDFontType0";
|
2018-08-05 17:34:14 +09:00
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = type === "MMType1" ? "MMType1" : "Type1";
|
2018-08-05 17:34:14 +09:00
|
|
|
}
|
|
|
|
} else if (isCFFFile(file)) {
|
|
|
|
if (composite) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = "CIDFontType0";
|
|
|
|
fileSubtype = "CIDFontType0C";
|
2018-08-05 17:34:14 +09:00
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
fileType = type === "MMType1" ? "MMType1" : "Type1";
|
|
|
|
fileSubtype = "Type1C";
|
2018-08-05 17:34:14 +09:00
|
|
|
}
|
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("getFontFileType: Unable to detect correct font file Type/Subtype.");
|
2018-08-05 17:34:14 +09:00
|
|
|
fileType = type;
|
|
|
|
fileSubtype = subtype;
|
|
|
|
}
|
|
|
|
|
|
|
|
return [fileType, fileSubtype];
|
|
|
|
}
|
|
|
|
|
2016-03-11 02:08:17 +09:00
|
|
|
function buildToFontChar(encoding, glyphsUnicodeMap, differences) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var toFontChar = [],
|
|
|
|
unicode;
|
2016-03-11 02:08:17 +09:00
|
|
|
for (var i = 0, ii = encoding.length; i < ii; i++) {
|
|
|
|
unicode = getUnicodeForGlyph(encoding[i], glyphsUnicodeMap);
|
|
|
|
if (unicode !== -1) {
|
|
|
|
toFontChar[i] = unicode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for (var charCode in differences) {
|
|
|
|
unicode = getUnicodeForGlyph(differences[charCode], glyphsUnicodeMap);
|
|
|
|
if (unicode !== -1) {
|
|
|
|
toFontChar[+charCode] = unicode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return toFontChar;
|
|
|
|
}
|
|
|
|
|
2015-04-09 19:56:29 +09:00
|
|
|
/**
|
2018-01-05 07:43:07 +09:00
|
|
|
* Rebuilds the char code to glyph ID map by moving all char codes to the
|
|
|
|
* private use area. This is done to avoid issues with various problematic
|
|
|
|
* unicode areas where either a glyph won't be drawn or is deformed by a
|
|
|
|
* shaper.
|
2019-10-13 01:14:29 +09:00
|
|
|
* @returns {Object} Two properties:
|
2014-02-12 03:27:09 +09:00
|
|
|
* 'toFontChar' - maps original char codes(the value that will be read
|
|
|
|
* from commands such as show text) to the char codes that will be used in the
|
|
|
|
* font that we build
|
|
|
|
* 'charCodeToGlyphId' - maps the new font char codes to glyph ids
|
|
|
|
*/
|
2018-01-05 07:43:07 +09:00
|
|
|
function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {
|
2014-02-12 03:27:09 +09:00
|
|
|
var newMap = Object.create(null);
|
|
|
|
var toFontChar = [];
|
2018-01-05 07:43:07 +09:00
|
|
|
var privateUseAreaIndex = 0;
|
|
|
|
var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
|
|
|
|
var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
|
2014-02-12 03:27:09 +09:00
|
|
|
for (var originalCharCode in charCodeToGlyphId) {
|
|
|
|
originalCharCode |= 0;
|
|
|
|
var glyphId = charCodeToGlyphId[originalCharCode];
|
2017-07-21 09:30:22 +09:00
|
|
|
// For missing glyphs don't create the mappings so the glyph isn't
|
|
|
|
// drawn.
|
2018-01-05 07:43:07 +09:00
|
|
|
if (!hasGlyph(glyphId)) {
|
2017-07-21 09:30:22 +09:00
|
|
|
continue;
|
|
|
|
}
|
2018-01-05 07:43:07 +09:00
|
|
|
if (nextAvailableFontCharCode > privateUseOffetEnd) {
|
|
|
|
privateUseAreaIndex++;
|
|
|
|
if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Ran out of space in font private use area.");
|
2018-01-05 07:43:07 +09:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
|
|
|
|
privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
|
|
|
|
}
|
|
|
|
var fontCharCode = nextAvailableFontCharCode++;
|
|
|
|
if (glyphId === 0) {
|
|
|
|
glyphId = newGlyphZeroId;
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
newMap[fontCharCode] = glyphId;
|
|
|
|
toFontChar[originalCharCode] = fontCharCode;
|
|
|
|
}
|
|
|
|
return {
|
2017-04-27 19:58:44 +09:00
|
|
|
toFontChar,
|
2014-04-12 01:55:39 +09:00
|
|
|
charCodeToGlyphId: newMap,
|
2017-04-27 19:58:44 +09:00
|
|
|
nextAvailableFontCharCode,
|
2014-02-12 03:27:09 +09:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2015-12-03 09:47:20 +09:00
|
|
|
function getRanges(glyphs, numGlyphs) {
|
2011-06-21 13:49:59 +09:00
|
|
|
// Array.sort() sorts by characters, not numerically, so convert to an
|
|
|
|
// array of characters.
|
|
|
|
var codes = [];
|
2014-02-12 03:27:09 +09:00
|
|
|
for (var charCode in glyphs) {
|
2015-12-03 09:47:20 +09:00
|
|
|
// Remove an invalid glyph ID mappings to make OTS happy.
|
|
|
|
if (glyphs[charCode] >= numGlyphs) {
|
|
|
|
continue;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] });
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
2017-07-21 09:30:22 +09:00
|
|
|
// Some fonts have zero glyphs and are used only for text selection, but
|
|
|
|
// there needs to be at least one to build a valid cmap table.
|
|
|
|
if (codes.length === 0) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
codes.push({ fontCharCode: 0, glyphId: 0 });
|
2017-07-21 09:30:22 +09:00
|
|
|
}
|
2011-09-24 02:44:48 +09:00
|
|
|
codes.sort(function fontGetRangesSort(a, b) {
|
2014-02-12 03:27:09 +09:00
|
|
|
return a.fontCharCode - b.fontCharCode;
|
2011-09-18 07:13:22 +09:00
|
|
|
});
|
2011-06-21 13:49:59 +09:00
|
|
|
|
|
|
|
// Split the sorted codes into ranges.
|
|
|
|
var ranges = [];
|
2014-02-12 03:27:09 +09:00
|
|
|
var length = codes.length;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
for (var n = 0; n < length; ) {
|
2014-02-12 03:27:09 +09:00
|
|
|
var start = codes[n].fontCharCode;
|
|
|
|
var codeIndices = [codes[n].glyphId];
|
2011-09-18 07:13:22 +09:00
|
|
|
++n;
|
2011-06-21 13:49:59 +09:00
|
|
|
var end = start;
|
2014-08-02 03:57:43 +09:00
|
|
|
while (n < length && end + 1 === codes[n].fontCharCode) {
|
2014-02-12 03:27:09 +09:00
|
|
|
codeIndices.push(codes[n].glyphId);
|
2011-06-21 13:49:59 +09:00
|
|
|
++end;
|
|
|
|
++n;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (end === 0xffff) {
|
2014-03-18 01:34:30 +09:00
|
|
|
break;
|
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
}
|
2011-11-28 11:43:23 +09:00
|
|
|
ranges.push([start, end, codeIndices]);
|
2011-06-21 13:49:59 +09:00
|
|
|
}
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-06-21 13:49:59 +09:00
|
|
|
return ranges;
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
|
2015-12-03 09:47:20 +09:00
|
|
|
function createCmapTable(glyphs, numGlyphs) {
|
|
|
|
var ranges = getRanges(glyphs, numGlyphs);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;
|
|
|
|
var cmap =
|
|
|
|
"\x00\x00" + // version
|
|
|
|
string16(numTables) + // numTables
|
|
|
|
"\x00\x03" + // platformID
|
|
|
|
"\x00\x01" + // encodingID
|
|
|
|
string32(4 + numTables * 8); // start of the table record
|
2011-07-02 09:44:57 +09:00
|
|
|
|
2014-04-08 06:42:54 +09:00
|
|
|
var i, ii, j, jj;
|
|
|
|
for (i = ranges.length - 1; i >= 0; --i) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (ranges[i][0] <= 0xffff) {
|
2017-02-03 20:58:08 +09:00
|
|
|
break;
|
|
|
|
}
|
2013-02-05 06:20:33 +09:00
|
|
|
}
|
|
|
|
var bmpLength = i + 1;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {
|
|
|
|
ranges[i][1] = 0xfffe;
|
2013-03-19 21:37:31 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;
|
2013-03-19 21:37:31 +09:00
|
|
|
var segCount = bmpLength + trailingRangesCount;
|
2014-08-10 08:18:41 +09:00
|
|
|
var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);
|
2011-06-21 13:49:59 +09:00
|
|
|
|
|
|
|
// Fill up the 4 parallel arrays describing the segments.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var startCount = "";
|
|
|
|
var endCount = "";
|
|
|
|
var idDeltas = "";
|
|
|
|
var idRangeOffsets = "";
|
|
|
|
var glyphsIds = "";
|
2011-06-21 13:49:59 +09:00
|
|
|
var bias = 0;
|
2014-04-17 04:31:16 +09:00
|
|
|
|
2014-04-08 06:42:54 +09:00
|
|
|
var range, start, end, codes;
|
|
|
|
for (i = 0, ii = bmpLength; i < ii; i++) {
|
|
|
|
range = ranges[i];
|
|
|
|
start = range[0];
|
|
|
|
end = range[1];
|
2013-03-19 21:37:31 +09:00
|
|
|
startCount += string16(start);
|
|
|
|
endCount += string16(end);
|
2014-04-08 06:42:54 +09:00
|
|
|
codes = range[2];
|
2013-03-19 21:37:31 +09:00
|
|
|
var contiguous = true;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 1, jj = codes.length; j < jj; ++j) {
|
2013-03-19 21:37:31 +09:00
|
|
|
if (codes[j] !== codes[j - 1] + 1) {
|
|
|
|
contiguous = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!contiguous) {
|
2011-09-18 07:13:22 +09:00
|
|
|
var offset = (segCount - i) * 2 + bias * 2;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
bias += end - start + 1;
|
2011-09-18 07:13:22 +09:00
|
|
|
|
|
|
|
idDeltas += string16(0);
|
|
|
|
idRangeOffsets += string16(offset);
|
|
|
|
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0, jj = codes.length; j < jj; ++j) {
|
2013-03-19 21:37:31 +09:00
|
|
|
glyphsIds += string16(codes[j]);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
var startCode = codes[0];
|
2011-09-18 07:13:22 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
idDeltas += string16((startCode - start) & 0xffff);
|
2011-09-18 07:13:22 +09:00
|
|
|
idRangeOffsets += string16(0);
|
|
|
|
}
|
|
|
|
}
|
2011-07-20 21:29:07 +09:00
|
|
|
|
2013-03-19 21:37:31 +09:00
|
|
|
if (trailingRangesCount > 0) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
endCount += "\xFF\xFF";
|
|
|
|
startCount += "\xFF\xFF";
|
|
|
|
idDeltas += "\x00\x01";
|
|
|
|
idRangeOffsets += "\x00\x00";
|
2013-03-19 21:37:31 +09:00
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var format314 =
|
|
|
|
"\x00\x00" + // language
|
|
|
|
string16(2 * segCount) +
|
|
|
|
string16(searchParams.range) +
|
|
|
|
string16(searchParams.entry) +
|
|
|
|
string16(searchParams.rangeShift) +
|
|
|
|
endCount +
|
|
|
|
"\x00\x00" +
|
|
|
|
startCount +
|
|
|
|
idDeltas +
|
|
|
|
idRangeOffsets +
|
|
|
|
glyphsIds;
|
|
|
|
|
|
|
|
var format31012 = "";
|
|
|
|
var header31012 = "";
|
2013-02-05 06:20:33 +09:00
|
|
|
if (numTables > 1) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
cmap +=
|
|
|
|
"\x00\x03" + // platformID
|
|
|
|
"\x00\x0A" + // encodingID
|
|
|
|
string32(4 + numTables * 8 + 4 + format314.length); // start of the table record
|
|
|
|
format31012 = "";
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0, ii = ranges.length; i < ii; i++) {
|
|
|
|
range = ranges[i];
|
|
|
|
start = range[0];
|
|
|
|
codes = range[2];
|
2013-03-19 21:37:31 +09:00
|
|
|
var code = codes[0];
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 1, jj = codes.length; j < jj; ++j) {
|
2013-03-19 21:37:31 +09:00
|
|
|
if (codes[j] !== codes[j - 1] + 1) {
|
2014-04-08 06:42:54 +09:00
|
|
|
end = range[0] + j - 1;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
format31012 +=
|
|
|
|
string32(start) + // startCharCode
|
|
|
|
string32(end) + // endCharCode
|
|
|
|
string32(code); // startGlyphID
|
2013-03-19 21:37:31 +09:00
|
|
|
start = end + 1;
|
|
|
|
code = codes[j];
|
2013-02-05 06:20:33 +09:00
|
|
|
}
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
format31012 +=
|
|
|
|
string32(start) + // startCharCode
|
|
|
|
string32(range[1]) + // endCharCode
|
|
|
|
string32(code); // startGlyphID
|
|
|
|
}
|
|
|
|
header31012 =
|
|
|
|
"\x00\x0C" + // format
|
|
|
|
"\x00\x00" + // reserved
|
|
|
|
string32(format31012.length + 16) + // length
|
|
|
|
"\x00\x00\x00\x00" + // language
|
|
|
|
string32(format31012.length / 12); // nGroups
|
2013-02-05 06:20:33 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return (
|
|
|
|
cmap +
|
|
|
|
"\x00\x04" + // format
|
|
|
|
string16(format314.length + 4) + // length
|
|
|
|
format314 +
|
|
|
|
header31012 +
|
|
|
|
format31012
|
|
|
|
);
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
|
2012-11-08 02:11:36 +09:00
|
|
|
function validateOS2Table(os2) {
|
|
|
|
var stream = new Stream(os2.data);
|
2014-03-12 13:09:49 +09:00
|
|
|
var version = stream.getUint16();
|
2012-11-08 02:11:36 +09:00
|
|
|
// TODO verify all OS/2 tables fields, but currently we validate only those
|
|
|
|
// that give us issues
|
|
|
|
stream.getBytes(60); // skipping type, misc sizes, panose, unicode ranges
|
2014-03-12 13:09:49 +09:00
|
|
|
var selection = stream.getUint16();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (version < 4 && selection & 0x0300) {
|
2012-11-08 02:11:36 +09:00
|
|
|
return false;
|
|
|
|
}
|
2014-03-12 13:09:49 +09:00
|
|
|
var firstChar = stream.getUint16();
|
|
|
|
var lastChar = stream.getUint16();
|
2012-11-08 02:11:36 +09:00
|
|
|
if (firstChar > lastChar) {
|
|
|
|
return false;
|
|
|
|
}
|
2013-03-09 05:11:12 +09:00
|
|
|
stream.getBytes(6); // skipping sTypoAscender/Descender/LineGap
|
2014-03-12 13:09:49 +09:00
|
|
|
var usWinAscent = stream.getUint16();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (usWinAscent === 0) {
|
|
|
|
// makes font unreadable by windows
|
2013-03-09 05:11:12 +09:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// OS/2 appears to be valid, resetting some fields
|
|
|
|
os2.data[8] = os2.data[9] = 0; // IE rejects fonts if fsType != 0
|
2012-11-08 02:11:36 +09:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2011-10-29 10:38:31 +09:00
|
|
|
function createOS2Table(properties, charstrings, override) {
|
2011-10-20 03:14:13 +09:00
|
|
|
override = override || {
|
|
|
|
unitsPerEm: 0,
|
|
|
|
yMax: 0,
|
|
|
|
yMin: 0,
|
|
|
|
ascent: 0,
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
descent: 0,
|
2011-10-20 03:14:13 +09:00
|
|
|
};
|
2011-09-17 07:55:06 +09:00
|
|
|
|
2011-06-30 09:52:47 +09:00
|
|
|
var ulUnicodeRange1 = 0;
|
|
|
|
var ulUnicodeRange2 = 0;
|
|
|
|
var ulUnicodeRange3 = 0;
|
|
|
|
var ulUnicodeRange4 = 0;
|
|
|
|
|
2011-08-30 07:56:02 +09:00
|
|
|
var firstCharIndex = null;
|
|
|
|
var lastCharIndex = 0;
|
|
|
|
|
2011-10-29 10:38:31 +09:00
|
|
|
if (charstrings) {
|
2014-02-12 03:27:09 +09:00
|
|
|
for (var code in charstrings) {
|
|
|
|
code |= 0;
|
2014-03-18 01:34:30 +09:00
|
|
|
if (firstCharIndex > code || !firstCharIndex) {
|
2011-10-29 10:38:31 +09:00
|
|
|
firstCharIndex = code;
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
|
|
|
if (lastCharIndex < code) {
|
2011-10-29 10:38:31 +09:00
|
|
|
lastCharIndex = code;
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
|
|
|
|
var position = getUnicodeRangeFor(code);
|
|
|
|
if (position < 32) {
|
|
|
|
ulUnicodeRange1 |= 1 << position;
|
|
|
|
} else if (position < 64) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
ulUnicodeRange2 |= 1 << (position - 32);
|
2011-10-29 10:38:31 +09:00
|
|
|
} else if (position < 96) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
ulUnicodeRange3 |= 1 << (position - 64);
|
2011-10-29 10:38:31 +09:00
|
|
|
} else if (position < 123) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
ulUnicodeRange4 |= 1 << (position - 96);
|
2011-10-29 10:38:31 +09:00
|
|
|
} else {
|
2017-06-29 05:51:31 +09:00
|
|
|
throw new FormatError(
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
"Unicode ranges Bits > 123 are reserved for internal usage"
|
|
|
|
);
|
2011-10-29 10:38:31 +09:00
|
|
|
}
|
2011-06-30 09:52:47 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (lastCharIndex > 0xffff) {
|
2018-01-05 07:43:07 +09:00
|
|
|
// OS2 only supports a 16 bit int. The spec says if supplementary
|
|
|
|
// characters are used the field should just be set to 0xFFFF.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
lastCharIndex = 0xffff;
|
2018-01-05 07:43:07 +09:00
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
} else {
|
|
|
|
// TODO
|
|
|
|
firstCharIndex = 0;
|
|
|
|
lastCharIndex = 255;
|
2011-06-30 09:52:47 +09:00
|
|
|
}
|
|
|
|
|
2013-01-05 02:41:24 +09:00
|
|
|
var bbox = properties.bbox || [0, 0, 0, 0];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var unitsPerEm =
|
|
|
|
override.unitsPerEm ||
|
|
|
|
1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];
|
2013-01-05 02:41:24 +09:00
|
|
|
|
|
|
|
// if the font units differ to the PDF glyph space units
|
|
|
|
// then scale up the values
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var scale = properties.ascentScaled
|
|
|
|
? 1.0
|
|
|
|
: unitsPerEm / PDF_GLYPH_SPACE_UNITS;
|
|
|
|
|
|
|
|
var typoAscent =
|
|
|
|
override.ascent || Math.round(scale * (properties.ascent || bbox[3]));
|
|
|
|
var typoDescent =
|
|
|
|
override.descent || Math.round(scale * (properties.descent || bbox[1]));
|
2013-01-05 02:41:24 +09:00
|
|
|
if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
|
|
|
|
typoDescent = -typoDescent; // fixing incorrect descent
|
|
|
|
}
|
2011-09-17 07:55:06 +09:00
|
|
|
var winAscent = override.yMax || typoAscent;
|
|
|
|
var winDescent = -override.yMin || -typoDescent;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return (
|
|
|
|
"\x00\x03" + // version
|
|
|
|
"\x02\x24" + // xAvgCharWidth
|
|
|
|
"\x01\xF4" + // usWeightClass
|
|
|
|
"\x00\x05" + // usWidthClass
|
|
|
|
"\x00\x00" + // fstype (0 to let the font loads via font-face on IE)
|
|
|
|
"\x02\x8A" + // ySubscriptXSize
|
|
|
|
"\x02\xBB" + // ySubscriptYSize
|
|
|
|
"\x00\x00" + // ySubscriptXOffset
|
|
|
|
"\x00\x8C" + // ySubscriptYOffset
|
|
|
|
"\x02\x8A" + // ySuperScriptXSize
|
|
|
|
"\x02\xBB" + // ySuperScriptYSize
|
|
|
|
"\x00\x00" + // ySuperScriptXOffset
|
|
|
|
"\x01\xDF" + // ySuperScriptYOffset
|
|
|
|
"\x00\x31" + // yStrikeOutSize
|
|
|
|
"\x01\x02" + // yStrikeOutPosition
|
|
|
|
"\x00\x00" + // sFamilyClass
|
|
|
|
"\x00\x00\x06" +
|
|
|
|
String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) +
|
|
|
|
"\x00\x00\x00\x00\x00\x00" + // Panose
|
|
|
|
string32(ulUnicodeRange1) + // ulUnicodeRange1 (Bits 0-31)
|
|
|
|
string32(ulUnicodeRange2) + // ulUnicodeRange2 (Bits 32-63)
|
|
|
|
string32(ulUnicodeRange3) + // ulUnicodeRange3 (Bits 64-95)
|
|
|
|
string32(ulUnicodeRange4) + // ulUnicodeRange4 (Bits 96-127)
|
|
|
|
"\x2A\x32\x31\x2A" + // achVendID
|
|
|
|
string16(properties.italicAngle ? 1 : 0) + // fsSelection
|
|
|
|
string16(firstCharIndex || properties.firstChar) + // usFirstCharIndex
|
|
|
|
string16(lastCharIndex || properties.lastChar) + // usLastCharIndex
|
|
|
|
string16(typoAscent) + // sTypoAscender
|
|
|
|
string16(typoDescent) + // sTypoDescender
|
|
|
|
"\x00\x64" + // sTypoLineGap (7%-10% of the unitsPerEM value)
|
|
|
|
string16(winAscent) + // usWinAscent
|
|
|
|
string16(winDescent) + // usWinDescent
|
|
|
|
"\x00\x00\x00\x00" + // ulCodePageRange1 (Bits 0-31)
|
|
|
|
"\x00\x00\x00\x00" + // ulCodePageRange2 (Bits 32-63)
|
|
|
|
string16(properties.xHeight) + // sxHeight
|
|
|
|
string16(properties.capHeight) + // sCapHeight
|
|
|
|
string16(0) + // usDefaultChar
|
|
|
|
string16(firstCharIndex || properties.firstChar) + // usBreakChar
|
|
|
|
"\x00\x03"
|
|
|
|
); // usMaxContext
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-24 05:11:16 +09:00
|
|
|
|
2011-06-24 06:15:22 +09:00
|
|
|
function createPostTable(properties) {
|
2020-03-19 20:36:25 +09:00
|
|
|
var angle = Math.floor(properties.italicAngle * 2 ** 16);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return (
|
|
|
|
"\x00\x03\x00\x00" + // Version number
|
|
|
|
string32(angle) + // italicAngle
|
|
|
|
"\x00\x00" + // underlinePosition
|
|
|
|
"\x00\x00" + // underlineThickness
|
|
|
|
string32(properties.fixedPitch) + // isFixedPitch
|
|
|
|
"\x00\x00\x00\x00" + // minMemType42
|
|
|
|
"\x00\x00\x00\x00" + // maxMemType42
|
|
|
|
"\x00\x00\x00\x00" + // minMemType1
|
|
|
|
"\x00\x00\x00\x00"
|
|
|
|
); // maxMemType1
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-21 13:49:59 +09:00
|
|
|
|
2012-11-08 09:24:13 +09:00
|
|
|
function createNameTable(name, proto) {
|
|
|
|
if (!proto) {
|
|
|
|
proto = [[], []]; // no strings and unicode strings
|
|
|
|
}
|
|
|
|
|
2011-07-13 17:31:34 +09:00
|
|
|
var strings = [
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
proto[0][0] || "Original licence", // 0.Copyright
|
|
|
|
proto[0][1] || name, // 1.Font family
|
|
|
|
proto[0][2] || "Unknown", // 2.Font subfamily (font weight)
|
|
|
|
proto[0][3] || "uniqueID", // 3.Unique ID
|
|
|
|
proto[0][4] || name, // 4.Full font name
|
|
|
|
proto[0][5] || "Version 0.11", // 5.Version
|
|
|
|
proto[0][6] || "", // 6.Postscript name
|
|
|
|
proto[0][7] || "Unknown", // 7.Trademark
|
|
|
|
proto[0][8] || "Unknown", // 8.Manufacturer
|
|
|
|
proto[0][9] || "Unknown", // 9.Designer
|
2011-07-13 17:31:34 +09:00
|
|
|
];
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-07-13 17:31:34 +09:00
|
|
|
// Mac want 1-byte per character strings while Windows want
|
|
|
|
// 2-bytes per character, so duplicate the names table
|
|
|
|
var stringsUnicode = [];
|
2014-04-08 06:42:54 +09:00
|
|
|
var i, ii, j, jj, str;
|
|
|
|
for (i = 0, ii = strings.length; i < ii; i++) {
|
|
|
|
str = proto[1][i] || strings[i];
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2014-02-28 08:23:56 +09:00
|
|
|
var strBufUnicode = [];
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0, jj = str.length; j < jj; j++) {
|
2014-02-28 08:23:56 +09:00
|
|
|
strBufUnicode.push(string16(str.charCodeAt(j)));
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
stringsUnicode.push(strBufUnicode.join(""));
|
2011-07-13 17:31:34 +09:00
|
|
|
}
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-07-13 17:31:34 +09:00
|
|
|
var names = [strings, stringsUnicode];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var platforms = ["\x00\x01", "\x00\x03"];
|
|
|
|
var encodings = ["\x00\x00", "\x00\x01"];
|
|
|
|
var languages = ["\x00\x00", "\x04\x09"];
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-07-13 17:31:34 +09:00
|
|
|
var namesRecordCount = strings.length * platforms.length;
|
|
|
|
var nameTable =
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
"\x00\x00" + // format
|
|
|
|
string16(namesRecordCount) + // Number of names Record
|
|
|
|
string16(namesRecordCount * 12 + 6); // Storage
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-07-13 17:31:34 +09:00
|
|
|
// Build the name records field
|
|
|
|
var strOffset = 0;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0, ii = platforms.length; i < ii; i++) {
|
2011-07-13 17:31:34 +09:00
|
|
|
var strs = names[i];
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0, jj = strs.length; j < jj; j++) {
|
|
|
|
str = strs[j];
|
2011-07-13 17:31:34 +09:00
|
|
|
var nameRecord =
|
|
|
|
platforms[i] + // platform ID
|
|
|
|
encodings[i] + // encoding ID
|
|
|
|
languages[i] + // language ID
|
|
|
|
string16(j) + // name ID
|
|
|
|
string16(str.length) +
|
|
|
|
string16(strOffset);
|
|
|
|
nameTable += nameRecord;
|
|
|
|
strOffset += str.length;
|
|
|
|
}
|
|
|
|
}
|
2011-08-09 05:13:32 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
nameTable += strings.join("") + stringsUnicode.join("");
|
2011-07-13 17:31:34 +09:00
|
|
|
return nameTable;
|
|
|
|
}
|
|
|
|
|
2011-12-09 07:18:43 +09:00
|
|
|
Font.prototype = {
|
2011-06-20 07:46:58 +09:00
|
|
|
name: null,
|
|
|
|
font: null,
|
|
|
|
mimetype: null,
|
2011-06-21 09:35:14 +09:00
|
|
|
encoding: null,
|
Fallback to the built-in font renderer when font loading fails
After PR 9340 all glyphs are now re-mapped to a Private Use Area (PUA) which means that if a font fails to load, for whatever reason[1], all glyphs in the font will now render as Unicode glyph outlines.
This obviously doesn't look good, to say the least, and might be seen as a "regression" since previously many glyphs were left in their original positions which provided a slightly better fallback[2].
Hence this patch, which implements a *general* fallback to the PDF.js built-in font renderer for fonts that fail to load (i.e. are rejected by the sanitizer). One caveat here is that this only works for the Font Loading API, since it's easy to handle errors in that case[3].
The solution implemented in this patch does *not* in any way delay the loading of valid fonts, which was the problem with my previous attempt at a solution, and will only require a bit of extra work/waiting for those fonts that actually fail to load.
*Please note:* This patch doesn't fix any of the underlying PDF.js font conversion bugs that's responsible for creating corrupt font files, however it does *improve* rendering in a number of cases; refer to this possibly incomplete list:
[Bug 1524888](https://bugzilla.mozilla.org/show_bug.cgi?id=1524888)
Issue 10175
Issue 10232
---
[1] Usually because the PDF.js font conversion code wasn't able to parse the font file correctly.
[2] Glyphs fell back to some default font, which while not accurate was more useful than the current state.
[3] Furthermore I'm not sure how to implement this generally, assuming that's even possible, and don't really have time/interest to look into it either.
2019-02-11 08:47:56 +09:00
|
|
|
disableFontFace: false,
|
|
|
|
|
2013-08-20 08:33:20 +09:00
|
|
|
get renderer() {
|
2016-04-01 02:53:07 +09:00
|
|
|
var renderer = FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return shadow(this, "renderer", renderer);
|
2013-08-20 08:33:20 +09:00
|
|
|
},
|
2011-06-20 07:46:58 +09:00
|
|
|
|
2012-09-20 23:38:59 +09:00
|
|
|
exportData: function Font_exportData() {
|
2016-01-28 02:04:13 +09:00
|
|
|
// TODO remove enumerating of the properties, e.g. hardcode exact names.
|
2012-09-13 09:31:04 +09:00
|
|
|
var data = {};
|
|
|
|
for (var i in this) {
|
2014-03-18 01:34:30 +09:00
|
|
|
if (this.hasOwnProperty(i)) {
|
2012-09-13 09:31:04 +09:00
|
|
|
data[i] = this[i];
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2012-09-13 09:31:04 +09:00
|
|
|
}
|
|
|
|
return data;
|
|
|
|
},
|
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
fallbackToSystemFont: function Font_fallbackToSystemFont() {
|
|
|
|
this.missingFile = true;
|
|
|
|
var charCode, unicode;
|
|
|
|
// The file data is not specified. Trying to fix the font name
|
|
|
|
// to be used with the canvas.font.
|
|
|
|
var name = this.name;
|
|
|
|
var type = this.type;
|
|
|
|
var subtype = this.subtype;
|
2020-02-09 03:51:16 +09:00
|
|
|
let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, "");
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var stdFontMap = getStdFontMap(),
|
|
|
|
nonStdFontMap = getNonStdFontMap();
|
|
|
|
var isStandardFont =
|
|
|
|
!!stdFontMap[fontName] ||
|
2017-07-21 09:30:22 +09:00
|
|
|
!!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
|
|
|
|
fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.bold = fontName.search(/bold/gi) !== -1;
|
|
|
|
this.italic =
|
|
|
|
fontName.search(/oblique/gi) !== -1 ||
|
|
|
|
fontName.search(/italic/gi) !== -1;
|
2017-07-21 09:30:22 +09:00
|
|
|
|
|
|
|
// Use 'name' instead of 'fontName' here because the original
|
|
|
|
// name ArialBlack for example will be replaced by Helvetica.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.black = name.search(/Black/g) !== -1;
|
2017-07-21 09:30:22 +09:00
|
|
|
|
|
|
|
// if at least one width is present, remeasure all chars when exists
|
|
|
|
this.remeasure = Object.keys(this.widths).length > 0;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
isStandardFont &&
|
|
|
|
type === "CIDFontType2" &&
|
|
|
|
this.cidEncoding.startsWith("Identity-")
|
|
|
|
) {
|
2019-10-15 21:06:54 +09:00
|
|
|
const GlyphMapForStandardFonts = getGlyphMapForStandardFonts();
|
2017-07-21 09:30:22 +09:00
|
|
|
// Standard fonts might be embedded as CID font without glyph mapping.
|
|
|
|
// Building one based on GlyphMapForStandardFonts.
|
2019-10-15 21:06:54 +09:00
|
|
|
const map = [];
|
2017-07-21 09:30:22 +09:00
|
|
|
for (charCode in GlyphMapForStandardFonts) {
|
|
|
|
map[+charCode] = GlyphMapForStandardFonts[charCode];
|
|
|
|
}
|
|
|
|
if (/Arial-?Black/i.test(name)) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var SupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack();
|
2017-07-21 09:30:22 +09:00
|
|
|
for (charCode in SupplementalGlyphMapForArialBlack) {
|
|
|
|
map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
|
|
|
|
}
|
Add basic support for non-embedded Calibri fonts (issue 9195)
There's a number of issues with the fonts in the referenced PDF file. First of all, they contain broken `ToUnicode` data (`NUL` bytes all over the place). However even if you skip those, the `ToUnicode` data appears to contain nothing but a `IdentityH` CMap which won't help provide a proper glyph mapping.
The real issue actually turns out to be that the PDF file uses the "Calibri" font[1], but doesn't include any font files. Since that one isn't a standard font, and uses a fairly different CID to GID map compared to the standard fonts, we're not able to render the file even remotely correct.
To work around this, I'm thus proposing that we include a (incomplete) glyph map for Calibri, and fallback to the standard Helvetica font. Obviously this isn't going to look perfect, but it's really the best that we can hope to achieve given that the PDF file is missing the necessary font data.
Finally, please note that none of the PDF readers I've tried (Adobe Reader, PDFium in Chrome) were able to extract the text (which isn't very surprising, given the broken `ToUnicode` data).
Fixes 9195.
---
[1] According to Wikipedia, see https://en.wikipedia.org/wiki/Calibri, Calibri is (primarily) a Windows font.
2017-12-03 22:02:22 +09:00
|
|
|
} else if (/Calibri/i.test(name)) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const SupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri();
|
Add basic support for non-embedded Calibri fonts (issue 9195)
There's a number of issues with the fonts in the referenced PDF file. First of all, they contain broken `ToUnicode` data (`NUL` bytes all over the place). However even if you skip those, the `ToUnicode` data appears to contain nothing but a `IdentityH` CMap which won't help provide a proper glyph mapping.
The real issue actually turns out to be that the PDF file uses the "Calibri" font[1], but doesn't include any font files. Since that one isn't a standard font, and uses a fairly different CID to GID map compared to the standard fonts, we're not able to render the file even remotely correct.
To work around this, I'm thus proposing that we include a (incomplete) glyph map for Calibri, and fallback to the standard Helvetica font. Obviously this isn't going to look perfect, but it's really the best that we can hope to achieve given that the PDF file is missing the necessary font data.
Finally, please note that none of the PDF readers I've tried (Adobe Reader, PDFium in Chrome) were able to extract the text (which isn't very surprising, given the broken `ToUnicode` data).
Fixes 9195.
---
[1] According to Wikipedia, see https://en.wikipedia.org/wiki/Calibri, Calibri is (primarily) a Windows font.
2017-12-03 22:02:22 +09:00
|
|
|
for (charCode in SupplementalGlyphMapForCalibri) {
|
|
|
|
map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
|
|
|
|
}
|
2017-07-21 09:30:22 +09:00
|
|
|
}
|
Add basic support for non-embedded Calibri fonts (issue 9195)
There's a number of issues with the fonts in the referenced PDF file. First of all, they contain broken `ToUnicode` data (`NUL` bytes all over the place). However even if you skip those, the `ToUnicode` data appears to contain nothing but a `IdentityH` CMap which won't help provide a proper glyph mapping.
The real issue actually turns out to be that the PDF file uses the "Calibri" font[1], but doesn't include any font files. Since that one isn't a standard font, and uses a fairly different CID to GID map compared to the standard fonts, we're not able to render the file even remotely correct.
To work around this, I'm thus proposing that we include a (incomplete) glyph map for Calibri, and fallback to the standard Helvetica font. Obviously this isn't going to look perfect, but it's really the best that we can hope to achieve given that the PDF file is missing the necessary font data.
Finally, please note that none of the PDF readers I've tried (Adobe Reader, PDFium in Chrome) were able to extract the text (which isn't very surprising, given the broken `ToUnicode` data).
Fixes 9195.
---
[1] According to Wikipedia, see https://en.wikipedia.org/wiki/Calibri, Calibri is (primarily) a Windows font.
2017-12-03 22:02:22 +09:00
|
|
|
|
2017-07-21 09:30:22 +09:00
|
|
|
var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
|
|
|
|
if (!isIdentityUnicode) {
|
|
|
|
this.toUnicode.forEach(function(charCode, unicodeCharCode) {
|
|
|
|
map[+charCode] = unicodeCharCode;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
this.toFontChar = map;
|
|
|
|
this.toUnicode = new ToUnicodeMap(map);
|
|
|
|
} else if (/Symbol/i.test(fontName)) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.toFontChar = buildToFontChar(
|
|
|
|
SymbolSetEncoding,
|
|
|
|
getGlyphsUnicode(),
|
|
|
|
this.differences
|
|
|
|
);
|
2017-07-21 09:30:22 +09:00
|
|
|
} else if (/Dingbats/i.test(fontName)) {
|
|
|
|
if (/Wingdings/i.test(name)) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Non-embedded Wingdings font, falling back to ZapfDingbats.");
|
2017-07-21 09:30:22 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.toFontChar = buildToFontChar(
|
|
|
|
ZapfDingbatsEncoding,
|
|
|
|
getDingbatsGlyphsUnicode(),
|
|
|
|
this.differences
|
|
|
|
);
|
2017-07-21 09:30:22 +09:00
|
|
|
} else if (isStandardFont) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.toFontChar = buildToFontChar(
|
|
|
|
this.defaultEncoding,
|
|
|
|
getGlyphsUnicode(),
|
|
|
|
this.differences
|
|
|
|
);
|
2017-07-21 09:30:22 +09:00
|
|
|
} else {
|
2019-10-15 21:06:54 +09:00
|
|
|
const glyphsUnicodeMap = getGlyphsUnicode();
|
|
|
|
const map = [];
|
2017-07-21 09:30:22 +09:00
|
|
|
this.toUnicode.forEach((charCode, unicodeCharCode) => {
|
|
|
|
if (!this.composite) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var glyphName =
|
|
|
|
this.differences[charCode] || this.defaultEncoding[charCode];
|
2017-07-21 09:30:22 +09:00
|
|
|
unicode = getUnicodeForGlyph(glyphName, glyphsUnicodeMap);
|
|
|
|
if (unicode !== -1) {
|
|
|
|
unicodeCharCode = unicode;
|
|
|
|
}
|
|
|
|
}
|
2019-10-15 21:06:54 +09:00
|
|
|
map[+charCode] = unicodeCharCode;
|
2017-07-21 09:30:22 +09:00
|
|
|
});
|
2019-10-15 21:06:54 +09:00
|
|
|
|
|
|
|
// Attempt to improve the glyph mapping for (some) composite fonts that
|
|
|
|
// appear to lack meaningful ToUnicode data.
|
|
|
|
if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (/Verdana/i.test(name)) {
|
|
|
|
// Fixes issue11242_reduced.pdf
|
2019-10-15 21:06:54 +09:00
|
|
|
const GlyphMapForStandardFonts = getGlyphMapForStandardFonts();
|
|
|
|
for (charCode in GlyphMapForStandardFonts) {
|
|
|
|
map[+charCode] = GlyphMapForStandardFonts[charCode];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
this.toFontChar = map;
|
2017-07-21 09:30:22 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.loadedName = fontName.split("-")[0];
|
2017-07-21 09:30:22 +09:00
|
|
|
this.fontType = getFontType(type, subtype);
|
|
|
|
},
|
|
|
|
|
2012-04-05 05:43:26 +09:00
|
|
|
checkAndRepair: function Font_checkAndRepair(name, font, properties) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
const VALID_TABLES = [
|
|
|
|
"OS/2",
|
|
|
|
"cmap",
|
|
|
|
"head",
|
|
|
|
"hhea",
|
|
|
|
"hmtx",
|
|
|
|
"maxp",
|
|
|
|
"name",
|
|
|
|
"post",
|
|
|
|
"loca",
|
|
|
|
"glyf",
|
|
|
|
"fpgm",
|
|
|
|
"prep",
|
|
|
|
"cvt ",
|
|
|
|
"CFF ",
|
|
|
|
];
|
2017-12-15 08:23:56 +09:00
|
|
|
|
|
|
|
function readTables(file, numTables) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const tables = Object.create(null);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
tables["OS/2"] = null;
|
|
|
|
tables["cmap"] = null;
|
|
|
|
tables["head"] = null;
|
|
|
|
tables["hhea"] = null;
|
|
|
|
tables["hmtx"] = null;
|
|
|
|
tables["maxp"] = null;
|
|
|
|
tables["name"] = null;
|
|
|
|
tables["post"] = null;
|
2017-12-15 08:23:56 +09:00
|
|
|
|
|
|
|
for (let i = 0; i < numTables; i++) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const table = readTableEntry(font);
|
2018-02-04 22:50:58 +09:00
|
|
|
if (!VALID_TABLES.includes(table.tag)) {
|
2017-12-15 08:23:56 +09:00
|
|
|
continue; // skipping table if it's not a required or optional table
|
|
|
|
}
|
|
|
|
if (table.length === 0) {
|
|
|
|
continue; // skipping empty tables
|
|
|
|
}
|
|
|
|
tables[table.tag] = table;
|
|
|
|
}
|
|
|
|
return tables;
|
|
|
|
}
|
|
|
|
|
2011-06-21 13:49:59 +09:00
|
|
|
function readTableEntry(file) {
|
2014-03-27 21:01:43 +09:00
|
|
|
var tag = bytesToString(file.getBytes(4));
|
2011-06-21 13:49:59 +09:00
|
|
|
|
2016-03-22 21:16:08 +09:00
|
|
|
var checksum = file.getInt32() >>> 0;
|
2014-04-17 04:31:16 +09:00
|
|
|
var offset = file.getInt32() >>> 0;
|
|
|
|
var length = file.getInt32() >>> 0;
|
2011-06-21 13:49:59 +09:00
|
|
|
|
|
|
|
// Read the table associated data
|
2011-06-22 04:11:59 +09:00
|
|
|
var previousPosition = file.pos;
|
|
|
|
file.pos = file.start ? file.start : 0;
|
|
|
|
file.skip(offset);
|
2011-06-21 13:49:59 +09:00
|
|
|
var data = file.getBytes(length);
|
2011-06-22 04:11:59 +09:00
|
|
|
file.pos = previousPosition;
|
2011-06-21 13:49:59 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (tag === "head") {
|
2011-08-12 03:41:03 +09:00
|
|
|
// clearing checksum adjustment
|
|
|
|
data[8] = data[9] = data[10] = data[11] = 0;
|
2017-01-20 00:26:32 +09:00
|
|
|
data[17] |= 0x20; // Set font optimized for cleartype flag.
|
2011-09-16 07:23:22 +09:00
|
|
|
}
|
2011-07-11 06:47:09 +09:00
|
|
|
|
2011-06-21 13:49:59 +09:00
|
|
|
return {
|
2017-04-27 19:58:44 +09:00
|
|
|
tag,
|
|
|
|
checksum,
|
|
|
|
length,
|
|
|
|
offset,
|
|
|
|
data,
|
2011-07-06 15:06:45 +09:00
|
|
|
};
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-14 11:35:46 +09:00
|
|
|
|
2011-06-21 13:49:59 +09:00
|
|
|
function readOpenTypeHeader(ttf) {
|
|
|
|
return {
|
2014-03-27 21:01:43 +09:00
|
|
|
version: bytesToString(ttf.getBytes(4)),
|
2014-03-12 13:09:49 +09:00
|
|
|
numTables: ttf.getUint16(),
|
|
|
|
searchRange: ttf.getUint16(),
|
|
|
|
entrySelector: ttf.getUint16(),
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
rangeShift: ttf.getUint16(),
|
2011-07-06 15:06:45 +09:00
|
|
|
};
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-10 09:07:41 +09:00
|
|
|
|
2017-12-15 08:23:56 +09:00
|
|
|
function readTrueTypeCollectionHeader(ttc) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const ttcTag = bytesToString(ttc.getBytes(4));
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
assert(ttcTag === "ttcf", "Must be a TrueType Collection font.");
|
2017-12-15 08:23:56 +09:00
|
|
|
|
2020-01-24 17:48:21 +09:00
|
|
|
const majorVersion = ttc.getUint16();
|
|
|
|
const minorVersion = ttc.getUint16();
|
|
|
|
const numFonts = ttc.getInt32() >>> 0;
|
|
|
|
const offsetTable = [];
|
2017-12-15 08:23:56 +09:00
|
|
|
for (let i = 0; i < numFonts; i++) {
|
|
|
|
offsetTable.push(ttc.getInt32() >>> 0);
|
|
|
|
}
|
|
|
|
|
2020-01-24 17:48:21 +09:00
|
|
|
const header = {
|
2017-12-15 08:23:56 +09:00
|
|
|
ttcTag,
|
|
|
|
majorVersion,
|
|
|
|
minorVersion,
|
|
|
|
numFonts,
|
|
|
|
offsetTable,
|
|
|
|
};
|
|
|
|
switch (majorVersion) {
|
|
|
|
case 1:
|
|
|
|
return header;
|
|
|
|
case 2:
|
|
|
|
header.dsigTag = ttc.getInt32() >>> 0;
|
|
|
|
header.dsigLength = ttc.getInt32() >>> 0;
|
|
|
|
header.dsigOffset = ttc.getInt32() >>> 0;
|
|
|
|
return header;
|
|
|
|
}
|
|
|
|
throw new FormatError(
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
`Invalid TrueType Collection majorVersion: ${majorVersion}.`
|
|
|
|
);
|
2017-12-15 08:23:56 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function readTrueTypeCollectionData(ttc, fontName) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const { numFonts, offsetTable } = readTrueTypeCollectionHeader(ttc);
|
2017-12-15 08:23:56 +09:00
|
|
|
|
|
|
|
for (let i = 0; i < numFonts; i++) {
|
|
|
|
ttc.pos = (ttc.start || 0) + offsetTable[i];
|
2020-01-24 17:48:21 +09:00
|
|
|
const potentialHeader = readOpenTypeHeader(ttc);
|
|
|
|
const potentialTables = readTables(ttc, potentialHeader.numTables);
|
2017-12-15 08:23:56 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!potentialTables["name"]) {
|
2017-12-15 08:23:56 +09:00
|
|
|
throw new FormatError(
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
'TrueType Collection font must contain a "name" table.'
|
|
|
|
);
|
2017-12-15 08:23:56 +09:00
|
|
|
}
|
2020-01-24 17:48:21 +09:00
|
|
|
const nameTable = readNameTable(potentialTables["name"]);
|
2017-12-15 08:23:56 +09:00
|
|
|
|
|
|
|
for (let j = 0, jj = nameTable.length; j < jj; j++) {
|
|
|
|
for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const nameEntry = nameTable[j][k];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (nameEntry && nameEntry.replace(/\s/g, "") === fontName) {
|
2017-12-15 08:23:56 +09:00
|
|
|
return {
|
|
|
|
header: potentialHeader,
|
|
|
|
tables: potentialTables,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
throw new FormatError(
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
`TrueType Collection does not contain "${fontName}" font.`
|
|
|
|
);
|
2017-12-15 08:23:56 +09:00
|
|
|
}
|
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
/**
|
|
|
|
* Read the appropriate subtable from the cmap according to 9.6.6.4 from
|
|
|
|
* PDF spec
|
|
|
|
*/
|
2015-09-07 00:16:31 +09:00
|
|
|
function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) {
|
2015-11-08 21:18:23 +09:00
|
|
|
if (!cmap) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("No cmap table available.");
|
2015-11-08 21:18:23 +09:00
|
|
|
return {
|
|
|
|
platformId: -1,
|
|
|
|
encodingId: -1,
|
|
|
|
mappings: [],
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
hasShortCmap: false,
|
2015-11-08 21:18:23 +09:00
|
|
|
};
|
|
|
|
}
|
2014-04-08 06:42:54 +09:00
|
|
|
var segment;
|
2011-07-15 23:02:32 +09:00
|
|
|
var start = (font.start ? font.start : 0) + cmap.offset;
|
2011-07-15 21:58:14 +09:00
|
|
|
font.pos = start;
|
2011-07-02 07:19:24 +09:00
|
|
|
|
2017-01-19 22:00:36 +09:00
|
|
|
font.getUint16(); // version
|
2014-03-12 13:09:49 +09:00
|
|
|
var numTables = font.getUint16();
|
2013-01-31 03:01:32 +09:00
|
|
|
|
|
|
|
var potentialTable;
|
2014-02-12 03:27:09 +09:00
|
|
|
var canBreak = false;
|
|
|
|
// There's an order of preference in terms of which cmap subtable to
|
|
|
|
// use:
|
|
|
|
// - non-symbolic fonts the preference is a 3,1 table then a 1,0 table
|
|
|
|
// - symbolic fonts the preference is a 3,0 table then a 1,0 table
|
|
|
|
// The following takes advantage of the fact that the tables are sorted
|
|
|
|
// to work.
|
2013-01-31 03:01:32 +09:00
|
|
|
for (var i = 0; i < numTables; i++) {
|
2014-03-12 13:09:49 +09:00
|
|
|
var platformId = font.getUint16();
|
|
|
|
var encodingId = font.getUint16();
|
2014-04-17 04:31:16 +09:00
|
|
|
var offset = font.getInt32() >>> 0;
|
2013-01-31 03:01:32 +09:00
|
|
|
var useTable = false;
|
|
|
|
|
2017-08-04 14:19:36 +09:00
|
|
|
// Sometimes there are multiple of the same type of table. Default
|
|
|
|
// to choosing the first table and skip the rest.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
potentialTable &&
|
|
|
|
potentialTable.platformId === platformId &&
|
|
|
|
potentialTable.encodingId === encodingId
|
|
|
|
) {
|
2017-08-04 14:19:36 +09:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2015-01-11 22:54:12 +09:00
|
|
|
if (platformId === 0 && encodingId === 0) {
|
|
|
|
useTable = true;
|
|
|
|
// Continue the loop since there still may be a higher priority
|
|
|
|
// table.
|
|
|
|
} else if (platformId === 1 && encodingId === 0) {
|
2013-01-31 03:01:32 +09:00
|
|
|
useTable = true;
|
2014-02-12 03:27:09 +09:00
|
|
|
// Continue the loop since there still may be a higher priority
|
|
|
|
// table.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (
|
|
|
|
platformId === 3 &&
|
|
|
|
encodingId === 1 &&
|
|
|
|
(hasEncoding || !potentialTable)
|
|
|
|
) {
|
2013-01-31 03:01:32 +09:00
|
|
|
useTable = true;
|
2015-02-05 23:25:23 +09:00
|
|
|
if (!isSymbolicFont) {
|
|
|
|
canBreak = true;
|
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
} else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
|
2013-01-31 03:01:32 +09:00
|
|
|
useTable = true;
|
2014-02-12 03:27:09 +09:00
|
|
|
canBreak = true;
|
2013-01-31 03:01:32 +09:00
|
|
|
}
|
2011-07-15 21:58:14 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
if (useTable) {
|
|
|
|
potentialTable = {
|
2017-04-27 19:58:44 +09:00
|
|
|
platformId,
|
|
|
|
encodingId,
|
|
|
|
offset,
|
2013-01-31 03:01:32 +09:00
|
|
|
};
|
|
|
|
}
|
|
|
|
if (canBreak) {
|
|
|
|
break;
|
|
|
|
}
|
2011-08-09 05:13:32 +09:00
|
|
|
}
|
2011-06-22 11:41:31 +09:00
|
|
|
|
2015-04-02 22:31:21 +09:00
|
|
|
if (potentialTable) {
|
|
|
|
font.pos = start + potentialTable.offset;
|
|
|
|
}
|
|
|
|
if (!potentialTable || font.peekByte() === -1) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Could not find a preferred cmap table.");
|
2014-05-24 18:29:52 +09:00
|
|
|
return {
|
|
|
|
platformId: -1,
|
|
|
|
encodingId: -1,
|
|
|
|
mappings: [],
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
hasShortCmap: false,
|
2014-05-24 18:29:52 +09:00
|
|
|
};
|
2011-09-06 22:12:33 +09:00
|
|
|
}
|
|
|
|
|
2014-03-12 13:09:49 +09:00
|
|
|
var format = font.getUint16();
|
2017-01-19 22:00:36 +09:00
|
|
|
font.getUint16(); // length
|
|
|
|
font.getUint16(); // language
|
2011-09-05 21:35:03 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
var hasShortCmap = false;
|
|
|
|
var mappings = [];
|
2014-04-08 06:42:54 +09:00
|
|
|
var j, glyphId;
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
// TODO(mack): refactor this cmap subtable reading logic out
|
|
|
|
if (format === 0) {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < 256; j++) {
|
2013-01-31 03:01:32 +09:00
|
|
|
var index = font.getByte();
|
|
|
|
if (!index) {
|
|
|
|
continue;
|
2011-07-20 22:18:44 +09:00
|
|
|
}
|
2013-01-31 03:01:32 +09:00
|
|
|
mappings.push({
|
2014-02-12 03:27:09 +09:00
|
|
|
charCode: j,
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
glyphId: index,
|
2013-01-31 03:01:32 +09:00
|
|
|
});
|
|
|
|
}
|
|
|
|
hasShortCmap = true;
|
|
|
|
} else if (format === 4) {
|
|
|
|
// re-creating the table in format 4 since the encoding
|
|
|
|
// might be changed
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var segCount = font.getUint16() >> 1;
|
2013-01-31 03:01:32 +09:00
|
|
|
font.getBytes(6); // skipping range fields
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var segIndex,
|
|
|
|
segments = [];
|
2013-01-31 03:01:32 +09:00
|
|
|
for (segIndex = 0; segIndex < segCount; segIndex++) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
segments.push({ end: font.getUint16() });
|
2013-01-31 03:01:32 +09:00
|
|
|
}
|
2014-03-12 13:09:49 +09:00
|
|
|
font.getUint16();
|
2013-01-31 03:01:32 +09:00
|
|
|
for (segIndex = 0; segIndex < segCount; segIndex++) {
|
2014-03-12 13:09:49 +09:00
|
|
|
segments[segIndex].start = font.getUint16();
|
2013-01-31 03:01:32 +09:00
|
|
|
}
|
2011-09-09 04:37:35 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
for (segIndex = 0; segIndex < segCount; segIndex++) {
|
2014-03-12 13:09:49 +09:00
|
|
|
segments[segIndex].delta = font.getUint16();
|
2013-01-31 03:01:32 +09:00
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
var offsetsCount = 0;
|
|
|
|
for (segIndex = 0; segIndex < segCount; segIndex++) {
|
2014-04-08 06:42:54 +09:00
|
|
|
segment = segments[segIndex];
|
2014-03-12 13:09:49 +09:00
|
|
|
var rangeOffset = font.getUint16();
|
2013-01-31 03:01:32 +09:00
|
|
|
if (!rangeOffset) {
|
|
|
|
segment.offsetIndex = -1;
|
|
|
|
continue;
|
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
|
|
|
|
segment.offsetIndex = offsetIndex;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
offsetsCount = Math.max(
|
|
|
|
offsetsCount,
|
|
|
|
offsetIndex + segment.end - segment.start + 1
|
|
|
|
);
|
2013-01-31 03:01:32 +09:00
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
var offsets = [];
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < offsetsCount; j++) {
|
2014-03-12 13:09:49 +09:00
|
|
|
offsets.push(font.getUint16());
|
2013-01-31 03:01:32 +09:00
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
for (segIndex = 0; segIndex < segCount; segIndex++) {
|
2014-04-08 06:42:54 +09:00
|
|
|
segment = segments[segIndex];
|
|
|
|
start = segment.start;
|
|
|
|
var end = segment.end;
|
|
|
|
var delta = segment.delta;
|
|
|
|
offsetIndex = segment.offsetIndex;
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = start; j <= end; j++) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (j === 0xffff) {
|
2013-01-31 03:01:32 +09:00
|
|
|
continue;
|
2011-10-29 10:38:31 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];
|
|
|
|
glyphId = (glyphId + delta) & 0xffff;
|
2013-01-31 03:01:32 +09:00
|
|
|
mappings.push({
|
2014-02-12 03:27:09 +09:00
|
|
|
charCode: j,
|
2017-04-27 19:58:44 +09:00
|
|
|
glyphId,
|
2013-01-31 03:01:32 +09:00
|
|
|
});
|
2011-09-08 10:16:33 +09:00
|
|
|
}
|
2011-06-22 11:41:31 +09:00
|
|
|
}
|
2014-08-02 03:57:43 +09:00
|
|
|
} else if (format === 6) {
|
2013-01-31 03:01:32 +09:00
|
|
|
// Format 6 is a 2-bytes dense mapping, which means the font data
|
|
|
|
// lives glue together even if they are pretty far in the unicode
|
|
|
|
// table. (This looks weird, so I can have missed something), this
|
|
|
|
// works on Linux but seems to fails on Mac so let's rewrite the
|
|
|
|
// cmap table to a 3-1-4 style
|
2014-03-12 13:09:49 +09:00
|
|
|
var firstCode = font.getUint16();
|
|
|
|
var entryCount = font.getUint16();
|
2013-01-31 03:01:32 +09:00
|
|
|
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < entryCount; j++) {
|
|
|
|
glyphId = font.getUint16();
|
2014-02-12 03:27:09 +09:00
|
|
|
var charCode = firstCode + j;
|
2013-01-31 03:01:32 +09:00
|
|
|
|
|
|
|
mappings.push({
|
2017-04-27 19:58:44 +09:00
|
|
|
charCode,
|
|
|
|
glyphId,
|
2013-01-31 03:01:32 +09:00
|
|
|
});
|
|
|
|
}
|
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("cmap table has unsupported format: " + format);
|
2015-09-01 20:31:02 +09:00
|
|
|
return {
|
|
|
|
platformId: -1,
|
|
|
|
encodingId: -1,
|
|
|
|
mappings: [],
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
hasShortCmap: false,
|
2015-09-01 20:31:02 +09:00
|
|
|
};
|
2011-06-22 11:41:31 +09:00
|
|
|
}
|
2013-01-31 03:01:32 +09:00
|
|
|
|
2013-11-02 06:30:28 +09:00
|
|
|
// removing duplicate entries
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
mappings.sort(function(a, b) {
|
2014-02-12 03:27:09 +09:00
|
|
|
return a.charCode - b.charCode;
|
2013-11-02 06:30:28 +09:00
|
|
|
});
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 1; i < mappings.length; i++) {
|
2014-02-12 03:27:09 +09:00
|
|
|
if (mappings[i - 1].charCode === mappings[i].charCode) {
|
2013-11-02 06:30:28 +09:00
|
|
|
mappings.splice(i, 1);
|
|
|
|
i--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-01-31 03:01:32 +09:00
|
|
|
return {
|
|
|
|
platformId: potentialTable.platformId,
|
|
|
|
encodingId: potentialTable.encodingId,
|
2017-04-27 19:58:44 +09:00
|
|
|
mappings,
|
|
|
|
hasShortCmap,
|
2013-01-31 03:01:32 +09:00
|
|
|
};
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-06-22 11:41:31 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
function sanitizeMetrics(
|
|
|
|
font,
|
|
|
|
header,
|
|
|
|
metrics,
|
|
|
|
numGlyphs,
|
|
|
|
dupFirstEntry
|
|
|
|
) {
|
2012-11-08 02:32:55 +09:00
|
|
|
if (!header) {
|
|
|
|
if (metrics) {
|
|
|
|
metrics.data = null;
|
|
|
|
}
|
2011-09-09 23:37:56 +09:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
font.pos = (font.start ? font.start : 0) + header.offset;
|
2019-01-05 08:13:13 +09:00
|
|
|
font.pos += 4; // version
|
|
|
|
font.pos += 2; // ascent
|
|
|
|
font.pos += 2; // descent
|
|
|
|
font.pos += 2; // linegap
|
|
|
|
font.pos += 2; // adv_width_max
|
|
|
|
font.pos += 2; // min_sb1
|
|
|
|
font.pos += 2; // min_sb2
|
|
|
|
font.pos += 2; // max_extent
|
|
|
|
font.pos += 2; // caret_slope_rise
|
|
|
|
font.pos += 2; // caret_slope_run
|
|
|
|
font.pos += 2; // caret_offset
|
|
|
|
font.pos += 8; // reserved
|
|
|
|
font.pos += 2; // format
|
2014-03-12 13:09:49 +09:00
|
|
|
var numOfMetrics = font.getUint16();
|
2011-09-13 02:42:55 +09:00
|
|
|
|
2013-01-23 03:46:54 +09:00
|
|
|
if (numOfMetrics > numGlyphs) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
info(
|
|
|
|
"The numOfMetrics (" +
|
|
|
|
numOfMetrics +
|
|
|
|
") should not be " +
|
|
|
|
"greater than the numGlyphs (" +
|
|
|
|
numGlyphs +
|
|
|
|
")"
|
|
|
|
);
|
2013-01-23 03:46:54 +09:00
|
|
|
// Reduce numOfMetrics if it is greater than numGlyphs
|
|
|
|
numOfMetrics = numGlyphs;
|
|
|
|
header.data[34] = (numOfMetrics & 0xff00) >> 8;
|
|
|
|
header.data[35] = numOfMetrics & 0x00ff;
|
|
|
|
}
|
|
|
|
|
2011-09-09 23:37:56 +09:00
|
|
|
var numOfSidebearings = numGlyphs - numOfMetrics;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var numMissing =
|
|
|
|
numOfSidebearings - ((metrics.length - numOfMetrics * 4) >> 1);
|
2013-01-23 03:46:54 +09:00
|
|
|
|
2011-09-09 23:37:56 +09:00
|
|
|
if (numMissing > 0) {
|
2014-08-20 20:54:35 +09:00
|
|
|
// For each missing glyph, we set both the width and lsb to 0 (zero).
|
|
|
|
// Since we need to add two properties for each glyph, this explains
|
|
|
|
// the use of |numMissing * 2| when initializing the typed array.
|
|
|
|
var entries = new Uint8Array(metrics.length + numMissing * 2);
|
|
|
|
entries.set(metrics.data);
|
2019-05-08 00:44:37 +09:00
|
|
|
if (dupFirstEntry) {
|
|
|
|
// Set the sidebearing value of the duplicated glyph.
|
|
|
|
entries[metrics.length] = metrics.data[2];
|
|
|
|
entries[metrics.length + 1] = metrics.data[3];
|
|
|
|
}
|
2014-08-10 13:34:01 +09:00
|
|
|
metrics.data = entries;
|
2011-09-09 23:37:56 +09:00
|
|
|
}
|
2013-02-01 08:31:41 +09:00
|
|
|
}
|
2011-09-09 23:37:56 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
function sanitizeGlyph(
|
|
|
|
source,
|
|
|
|
sourceStart,
|
|
|
|
sourceEnd,
|
|
|
|
dest,
|
|
|
|
destStart,
|
|
|
|
hintsValid
|
|
|
|
) {
|
2017-09-26 09:24:21 +09:00
|
|
|
var glyphProfile = {
|
|
|
|
length: 0,
|
|
|
|
sizeOfInstructions: 0,
|
|
|
|
};
|
2012-02-13 12:11:44 +09:00
|
|
|
if (sourceEnd - sourceStart <= 12) {
|
|
|
|
// glyph with data less than 12 is invalid one
|
2017-09-26 09:24:21 +09:00
|
|
|
return glyphProfile;
|
2012-02-13 12:11:44 +09:00
|
|
|
}
|
|
|
|
var glyf = source.subarray(sourceStart, sourceEnd);
|
2017-10-30 11:07:02 +09:00
|
|
|
var contoursCount = signedInt16(glyf[0], glyf[1]);
|
|
|
|
if (contoursCount < 0) {
|
|
|
|
// OTS doesn't like contour count to be less than -1.
|
|
|
|
contoursCount = -1;
|
|
|
|
writeSignedInt16(glyf, 0, contoursCount);
|
2012-02-13 12:11:44 +09:00
|
|
|
// complex glyph, writing as is
|
|
|
|
dest.set(glyf, destStart);
|
2017-09-26 09:24:21 +09:00
|
|
|
glyphProfile.length = glyf.length;
|
|
|
|
return glyphProfile;
|
2012-02-13 12:11:44 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var i,
|
|
|
|
j = 10,
|
|
|
|
flagsCount = 0;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0; i < contoursCount; i++) {
|
2012-02-13 12:11:44 +09:00
|
|
|
var endPoint = (glyf[j] << 8) | glyf[j + 1];
|
|
|
|
flagsCount = endPoint + 1;
|
|
|
|
j += 2;
|
|
|
|
}
|
|
|
|
// skipping instructions
|
2013-03-18 22:06:59 +09:00
|
|
|
var instructionsStart = j;
|
2012-02-13 12:11:44 +09:00
|
|
|
var instructionsLength = (glyf[j] << 8) | glyf[j + 1];
|
2017-09-26 09:24:21 +09:00
|
|
|
glyphProfile.sizeOfInstructions = instructionsLength;
|
2012-02-13 12:11:44 +09:00
|
|
|
j += 2 + instructionsLength;
|
2013-03-18 22:06:59 +09:00
|
|
|
var instructionsEnd = j;
|
2012-02-13 12:11:44 +09:00
|
|
|
// validating flags
|
|
|
|
var coordinatesLength = 0;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0; i < flagsCount; i++) {
|
2012-02-13 12:11:44 +09:00
|
|
|
var flag = glyf[j++];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (flag & 0xc0) {
|
2013-11-14 04:45:59 +09:00
|
|
|
// reserved flags must be zero, cleaning up
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
glyf[j - 1] = flag & 0x3f;
|
2012-02-13 12:11:44 +09:00
|
|
|
}
|
2020-01-13 03:47:13 +09:00
|
|
|
let xLength = 2;
|
|
|
|
if (flag & 2) {
|
|
|
|
xLength = 1;
|
|
|
|
} else if (flag & 16) {
|
|
|
|
xLength = 0;
|
|
|
|
}
|
|
|
|
let yLength = 2;
|
|
|
|
if (flag & 4) {
|
|
|
|
yLength = 1;
|
|
|
|
} else if (flag & 32) {
|
|
|
|
yLength = 0;
|
|
|
|
}
|
|
|
|
const xyLength = xLength + yLength;
|
2012-02-13 12:11:44 +09:00
|
|
|
coordinatesLength += xyLength;
|
|
|
|
if (flag & 8) {
|
|
|
|
var repeat = glyf[j++];
|
|
|
|
i += repeat;
|
|
|
|
coordinatesLength += repeat * xyLength;
|
|
|
|
}
|
|
|
|
}
|
2013-11-03 07:07:13 +09:00
|
|
|
// glyph without coordinates will be rejected
|
|
|
|
if (coordinatesLength === 0) {
|
2017-09-26 09:24:21 +09:00
|
|
|
return glyphProfile;
|
2013-11-03 07:07:13 +09:00
|
|
|
}
|
2012-02-13 12:11:44 +09:00
|
|
|
var glyphDataLength = j + coordinatesLength;
|
|
|
|
if (glyphDataLength > glyf.length) {
|
|
|
|
// not enough data for coordinates
|
2017-09-26 09:24:21 +09:00
|
|
|
return glyphProfile;
|
2012-02-13 12:11:44 +09:00
|
|
|
}
|
2013-03-18 22:06:59 +09:00
|
|
|
if (!hintsValid && instructionsLength > 0) {
|
|
|
|
dest.set(glyf.subarray(0, instructionsStart), destStart);
|
|
|
|
dest.set([0, 0], destStart + instructionsStart);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
dest.set(
|
|
|
|
glyf.subarray(instructionsEnd, glyphDataLength),
|
|
|
|
destStart + instructionsStart + 2
|
|
|
|
);
|
2013-03-18 22:06:59 +09:00
|
|
|
glyphDataLength -= instructionsLength;
|
|
|
|
if (glyf.length - glyphDataLength > 3) {
|
|
|
|
glyphDataLength = (glyphDataLength + 3) & ~3;
|
|
|
|
}
|
2017-09-26 09:24:21 +09:00
|
|
|
glyphProfile.length = glyphDataLength;
|
|
|
|
return glyphProfile;
|
2013-03-18 22:06:59 +09:00
|
|
|
}
|
2012-02-13 12:11:44 +09:00
|
|
|
if (glyf.length - glyphDataLength > 3) {
|
|
|
|
// truncating and aligning to 4 bytes the long glyph data
|
|
|
|
glyphDataLength = (glyphDataLength + 3) & ~3;
|
|
|
|
dest.set(glyf.subarray(0, glyphDataLength), destStart);
|
2017-09-26 09:24:21 +09:00
|
|
|
glyphProfile.length = glyphDataLength;
|
|
|
|
return glyphProfile;
|
2012-02-13 12:11:44 +09:00
|
|
|
}
|
|
|
|
// glyph data is fine
|
|
|
|
dest.set(glyf, destStart);
|
2017-09-26 09:24:21 +09:00
|
|
|
glyphProfile.length = glyf.length;
|
|
|
|
return glyphProfile;
|
2012-02-13 12:11:44 +09:00
|
|
|
}
|
|
|
|
|
2013-01-23 03:46:54 +09:00
|
|
|
function sanitizeHead(head, numGlyphs, locaLength) {
|
2013-01-19 08:06:12 +09:00
|
|
|
var data = head.data;
|
|
|
|
|
|
|
|
// Validate version:
|
|
|
|
// Should always be 0x00010000
|
2014-03-12 13:09:49 +09:00
|
|
|
var version = int32(data[0], data[1], data[2], data[3]);
|
2013-01-19 08:06:12 +09:00
|
|
|
if (version >> 16 !== 1) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
info("Attempting to fix invalid version in head table: " + version);
|
2013-01-19 08:06:12 +09:00
|
|
|
data[0] = 0;
|
|
|
|
data[1] = 1;
|
|
|
|
data[2] = 0;
|
|
|
|
data[3] = 0;
|
|
|
|
}
|
2013-01-23 03:46:54 +09:00
|
|
|
|
2014-03-12 13:09:49 +09:00
|
|
|
var indexToLocFormat = int16(data[50], data[51]);
|
2013-01-23 03:46:54 +09:00
|
|
|
if (indexToLocFormat < 0 || indexToLocFormat > 1) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
info(
|
|
|
|
"Attempting to fix invalid indexToLocFormat in head table: " +
|
|
|
|
indexToLocFormat
|
|
|
|
);
|
2013-01-23 03:46:54 +09:00
|
|
|
|
|
|
|
// The value of indexToLocFormat should be 0 if the loca table
|
|
|
|
// consists of short offsets, and should be 1 if the loca table
|
|
|
|
// consists of long offsets.
|
|
|
|
//
|
|
|
|
// The number of entries in the loca table should be numGlyphs + 1.
|
|
|
|
//
|
|
|
|
// Using this information, we can work backwards to deduce if the
|
|
|
|
// size of each offset in the loca table, and thus figure out the
|
|
|
|
// appropriate value for indexToLocFormat.
|
|
|
|
|
|
|
|
var numGlyphsPlusOne = numGlyphs + 1;
|
|
|
|
if (locaLength === numGlyphsPlusOne << 1) {
|
|
|
|
// 0x0000 indicates the loca table consists of short offsets
|
|
|
|
data[50] = 0;
|
|
|
|
data[51] = 0;
|
|
|
|
} else if (locaLength === numGlyphsPlusOne << 2) {
|
|
|
|
// 0x0001 indicates the loca table consists of long offsets
|
|
|
|
data[50] = 0;
|
|
|
|
data[51] = 1;
|
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
throw new FormatError(
|
|
|
|
"Could not fix indexToLocFormat: " + indexToLocFormat
|
|
|
|
);
|
2013-01-23 03:46:54 +09:00
|
|
|
}
|
|
|
|
}
|
2013-01-19 08:06:12 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
function sanitizeGlyphLocations(
|
|
|
|
loca,
|
|
|
|
glyf,
|
|
|
|
numGlyphs,
|
|
|
|
isGlyphLocationsLong,
|
|
|
|
hintsValid,
|
|
|
|
dupFirstEntry,
|
|
|
|
maxSizeOfInstructions
|
|
|
|
) {
|
2011-09-19 11:25:05 +09:00
|
|
|
var itemSize, itemDecode, itemEncode;
|
|
|
|
if (isGlyphLocationsLong) {
|
|
|
|
itemSize = 4;
|
2011-09-24 02:44:48 +09:00
|
|
|
itemDecode = function fontItemDecodeLong(data, offset) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return (
|
|
|
|
(data[offset] << 24) |
|
|
|
|
(data[offset + 1] << 16) |
|
|
|
|
(data[offset + 2] << 8) |
|
|
|
|
data[offset + 3]
|
|
|
|
);
|
2011-09-19 11:25:05 +09:00
|
|
|
};
|
2011-09-24 02:44:48 +09:00
|
|
|
itemEncode = function fontItemEncodeLong(data, offset, value) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
data[offset] = (value >>> 24) & 0xff;
|
|
|
|
data[offset + 1] = (value >> 16) & 0xff;
|
|
|
|
data[offset + 2] = (value >> 8) & 0xff;
|
|
|
|
data[offset + 3] = value & 0xff;
|
2011-09-19 11:25:05 +09:00
|
|
|
};
|
|
|
|
} else {
|
|
|
|
itemSize = 2;
|
2011-09-24 02:44:48 +09:00
|
|
|
itemDecode = function fontItemDecode(data, offset) {
|
2011-09-19 12:44:25 +09:00
|
|
|
return (data[offset] << 9) | (data[offset + 1] << 1);
|
2011-09-19 11:25:05 +09:00
|
|
|
};
|
2011-09-24 02:44:48 +09:00
|
|
|
itemEncode = function fontItemEncode(data, offset, value) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
data[offset] = (value >> 9) & 0xff;
|
|
|
|
data[offset + 1] = (value >> 1) & 0xff;
|
2011-09-19 11:25:05 +09:00
|
|
|
};
|
|
|
|
}
|
2018-01-05 07:43:07 +09:00
|
|
|
// The first glyph is duplicated.
|
|
|
|
var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;
|
|
|
|
var locaDataSize = itemSize * (1 + numGlyphsOut);
|
|
|
|
// Resize loca table to account for duplicated glyph.
|
2019-10-16 07:39:25 +09:00
|
|
|
var locaData = new Uint8Array(locaDataSize);
|
2018-01-05 07:43:07 +09:00
|
|
|
locaData.set(loca.data.subarray(0, locaDataSize));
|
|
|
|
loca.data = locaData;
|
2012-02-13 12:11:44 +09:00
|
|
|
// removing the invalid glyphs
|
|
|
|
var oldGlyfData = glyf.data;
|
2012-02-20 11:12:57 +09:00
|
|
|
var oldGlyfDataLength = oldGlyfData.length;
|
|
|
|
var newGlyfData = new Uint8Array(oldGlyfDataLength);
|
2011-09-19 11:25:05 +09:00
|
|
|
var startOffset = itemDecode(locaData, 0);
|
2012-02-13 12:11:44 +09:00
|
|
|
var writeOffset = 0;
|
2017-09-26 09:24:21 +09:00
|
|
|
var missingGlyphs = Object.create(null);
|
2012-02-13 12:11:44 +09:00
|
|
|
itemEncode(locaData, 0, writeOffset);
|
2014-04-08 06:42:54 +09:00
|
|
|
var i, j;
|
2018-01-05 07:43:07 +09:00
|
|
|
for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
|
2012-02-13 12:11:44 +09:00
|
|
|
var endOffset = itemDecode(locaData, j);
|
2017-12-14 09:10:14 +09:00
|
|
|
// The spec says the offsets should be in ascending order, however
|
|
|
|
// some fonts use the offset of 0 to mark a glyph as missing.
|
|
|
|
if (endOffset === 0) {
|
|
|
|
endOffset = startOffset;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
endOffset > oldGlyfDataLength &&
|
|
|
|
((oldGlyfDataLength + 3) & ~3) === endOffset
|
|
|
|
) {
|
2014-03-12 04:16:27 +09:00
|
|
|
// Aspose breaks fonts by aligning the glyphs to the qword, but not
|
|
|
|
// the glyf table size, which makes last glyph out of range.
|
|
|
|
endOffset = oldGlyfDataLength;
|
|
|
|
}
|
2012-02-20 11:12:57 +09:00
|
|
|
if (endOffset > oldGlyfDataLength) {
|
|
|
|
// glyph end offset points outside glyf data, rejecting the glyph
|
|
|
|
startOffset = endOffset;
|
2014-10-04 02:35:49 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var glyphProfile = sanitizeGlyph(
|
|
|
|
oldGlyfData,
|
|
|
|
startOffset,
|
|
|
|
endOffset,
|
|
|
|
newGlyfData,
|
|
|
|
writeOffset,
|
|
|
|
hintsValid
|
|
|
|
);
|
2017-09-26 09:24:21 +09:00
|
|
|
var newLength = glyphProfile.length;
|
2017-06-29 02:34:36 +09:00
|
|
|
if (newLength === 0) {
|
2017-09-26 09:24:21 +09:00
|
|
|
missingGlyphs[i] = true;
|
|
|
|
}
|
|
|
|
if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {
|
|
|
|
maxSizeOfInstructions = glyphProfile.sizeOfInstructions;
|
2017-06-29 02:34:36 +09:00
|
|
|
}
|
2012-02-13 12:11:44 +09:00
|
|
|
writeOffset += newLength;
|
|
|
|
itemEncode(locaData, j, writeOffset);
|
|
|
|
startOffset = endOffset;
|
2011-09-19 11:25:05 +09:00
|
|
|
}
|
2012-02-19 06:01:53 +09:00
|
|
|
|
2013-02-01 08:31:41 +09:00
|
|
|
if (writeOffset === 0) {
|
2012-02-19 06:01:53 +09:00
|
|
|
// glyf table cannot be empty -- redoing the glyf and loca tables
|
|
|
|
// to have single glyph with one point
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var simpleGlyph = new Uint8Array([
|
|
|
|
0,
|
|
|
|
1,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
49,
|
|
|
|
0,
|
|
|
|
]);
|
2018-01-05 07:43:07 +09:00
|
|
|
for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {
|
2012-02-19 06:01:53 +09:00
|
|
|
itemEncode(locaData, j, simpleGlyph.length);
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2012-02-19 06:01:53 +09:00
|
|
|
glyf.data = simpleGlyph;
|
2017-09-26 09:24:21 +09:00
|
|
|
} else if (dupFirstEntry) {
|
2018-01-05 07:43:07 +09:00
|
|
|
// Browsers will not display a glyph at position 0. Typically glyph 0
|
|
|
|
// is notdef, but a number of fonts put a valid glyph there so it must
|
|
|
|
// be duplicated and appended.
|
2013-07-30 05:24:32 +09:00
|
|
|
var firstEntryLength = itemDecode(locaData, itemSize);
|
|
|
|
if (newGlyfData.length > firstEntryLength + writeOffset) {
|
|
|
|
glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
|
|
|
|
} else {
|
|
|
|
glyf.data = new Uint8Array(firstEntryLength + writeOffset);
|
|
|
|
glyf.data.set(newGlyfData.subarray(0, writeOffset));
|
|
|
|
}
|
|
|
|
glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
itemEncode(
|
|
|
|
loca.data,
|
|
|
|
locaData.length - itemSize,
|
|
|
|
writeOffset + firstEntryLength
|
|
|
|
);
|
2013-07-30 05:24:32 +09:00
|
|
|
} else {
|
|
|
|
glyf.data = newGlyfData.subarray(0, writeOffset);
|
|
|
|
}
|
2017-09-26 09:24:21 +09:00
|
|
|
return {
|
|
|
|
missingGlyphs,
|
|
|
|
maxSizeOfInstructions,
|
|
|
|
};
|
2011-09-19 11:25:05 +09:00
|
|
|
}
|
|
|
|
|
2012-11-15 07:17:06 +09:00
|
|
|
function readPostScriptTable(post, properties, maxpNumGlyphs) {
|
2011-10-29 10:38:31 +09:00
|
|
|
var start = (font.start ? font.start : 0) + post.offset;
|
|
|
|
font.pos = start;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var length = post.length,
|
|
|
|
end = start + length;
|
2014-04-17 04:31:16 +09:00
|
|
|
var version = font.getInt32();
|
2011-10-29 10:38:31 +09:00
|
|
|
// skip rest to the tables
|
|
|
|
font.getBytes(28);
|
|
|
|
|
|
|
|
var glyphNames;
|
2012-11-08 02:03:08 +09:00
|
|
|
var valid = true;
|
2014-04-08 06:42:54 +09:00
|
|
|
var i;
|
|
|
|
|
2011-10-29 10:38:31 +09:00
|
|
|
switch (version) {
|
|
|
|
case 0x00010000:
|
|
|
|
glyphNames = MacStandardGlyphOrdering;
|
|
|
|
break;
|
|
|
|
case 0x00020000:
|
2014-03-12 13:09:49 +09:00
|
|
|
var numGlyphs = font.getUint16();
|
2014-08-02 03:57:43 +09:00
|
|
|
if (numGlyphs !== maxpNumGlyphs) {
|
2012-11-15 07:17:06 +09:00
|
|
|
valid = false;
|
|
|
|
break;
|
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
var glyphNameIndexes = [];
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0; i < numGlyphs; ++i) {
|
2014-03-12 13:09:49 +09:00
|
|
|
var index = font.getUint16();
|
2012-11-08 02:03:08 +09:00
|
|
|
if (index >= 32768) {
|
|
|
|
valid = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
glyphNameIndexes.push(index);
|
|
|
|
}
|
|
|
|
if (!valid) {
|
|
|
|
break;
|
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
var customNames = [];
|
2014-07-24 14:17:56 +09:00
|
|
|
var strBuf = [];
|
2011-10-29 10:38:31 +09:00
|
|
|
while (font.pos < end) {
|
|
|
|
var stringLength = font.getByte();
|
2014-07-24 14:17:56 +09:00
|
|
|
strBuf.length = stringLength;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0; i < stringLength; ++i) {
|
2014-07-24 14:17:56 +09:00
|
|
|
strBuf[i] = String.fromCharCode(font.getByte());
|
2013-07-01 05:45:15 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
customNames.push(strBuf.join(""));
|
2011-10-29 10:38:31 +09:00
|
|
|
}
|
|
|
|
glyphNames = [];
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0; i < numGlyphs; ++i) {
|
2011-10-29 10:38:31 +09:00
|
|
|
var j = glyphNameIndexes[i];
|
|
|
|
if (j < 258) {
|
|
|
|
glyphNames.push(MacStandardGlyphOrdering[j]);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
glyphNames.push(customNames[j - 258]);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 0x00030000:
|
|
|
|
break;
|
|
|
|
default:
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Unknown/unsupported post table version " + version);
|
2012-11-08 02:03:08 +09:00
|
|
|
valid = false;
|
2015-04-02 23:26:14 +09:00
|
|
|
if (properties.defaultEncoding) {
|
|
|
|
glyphNames = properties.defaultEncoding;
|
|
|
|
}
|
2011-10-29 10:38:31 +09:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
properties.glyphNames = glyphNames;
|
2012-11-08 02:03:08 +09:00
|
|
|
return valid;
|
2011-10-29 10:38:31 +09:00
|
|
|
}
|
|
|
|
|
2012-11-08 09:24:13 +09:00
|
|
|
function readNameTable(nameTable) {
|
|
|
|
var start = (font.start ? font.start : 0) + nameTable.offset;
|
|
|
|
font.pos = start;
|
|
|
|
|
|
|
|
var names = [[], []];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var length = nameTable.length,
|
|
|
|
end = start + length;
|
2014-03-12 13:09:49 +09:00
|
|
|
var format = font.getUint16();
|
2012-11-08 09:24:13 +09:00
|
|
|
var FORMAT_0_HEADER_LENGTH = 6;
|
|
|
|
if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
|
|
|
|
// unsupported name table format or table "too" small
|
|
|
|
return names;
|
|
|
|
}
|
2014-03-12 13:09:49 +09:00
|
|
|
var numRecords = font.getUint16();
|
|
|
|
var stringsStart = font.getUint16();
|
2012-11-08 09:24:13 +09:00
|
|
|
var records = [];
|
|
|
|
var NAME_RECORD_LENGTH = 12;
|
2014-04-08 06:42:54 +09:00
|
|
|
var i, ii;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
for (
|
|
|
|
i = 0;
|
|
|
|
i < numRecords && font.pos + NAME_RECORD_LENGTH <= end;
|
|
|
|
i++
|
|
|
|
) {
|
2012-11-08 09:24:13 +09:00
|
|
|
var r = {
|
2014-03-12 13:09:49 +09:00
|
|
|
platform: font.getUint16(),
|
|
|
|
encoding: font.getUint16(),
|
|
|
|
language: font.getUint16(),
|
|
|
|
name: font.getUint16(),
|
|
|
|
length: font.getUint16(),
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
offset: font.getUint16(),
|
2012-11-08 09:24:13 +09:00
|
|
|
};
|
|
|
|
// using only Macintosh and Windows platform/encoding names
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
(r.platform === 1 && r.encoding === 0 && r.language === 0) ||
|
|
|
|
(r.platform === 3 && r.encoding === 1 && r.language === 0x409)
|
|
|
|
) {
|
2012-11-08 09:24:13 +09:00
|
|
|
records.push(r);
|
|
|
|
}
|
|
|
|
}
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0, ii = records.length; i < ii; i++) {
|
2012-11-08 09:24:13 +09:00
|
|
|
var record = records[i];
|
2016-03-02 05:39:33 +09:00
|
|
|
if (record.length <= 0) {
|
|
|
|
continue; // Nothing to process, ignoring.
|
|
|
|
}
|
2012-11-08 09:24:13 +09:00
|
|
|
var pos = start + stringsStart + record.offset;
|
|
|
|
if (pos + record.length > end) {
|
|
|
|
continue; // outside of name table, ignoring
|
|
|
|
}
|
|
|
|
font.pos = pos;
|
|
|
|
var nameIndex = record.name;
|
|
|
|
if (record.encoding) {
|
|
|
|
// unicode
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var str = "";
|
2012-11-08 09:24:13 +09:00
|
|
|
for (var j = 0, jj = record.length; j < jj; j += 2) {
|
2014-03-12 13:09:49 +09:00
|
|
|
str += String.fromCharCode(font.getUint16());
|
2012-11-08 09:24:13 +09:00
|
|
|
}
|
|
|
|
names[1][nameIndex] = str;
|
|
|
|
} else {
|
|
|
|
names[0][nameIndex] = bytesToString(font.getBytes(record.length));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return names;
|
|
|
|
}
|
|
|
|
|
2019-12-25 23:54:34 +09:00
|
|
|
// prettier-ignore
|
2012-11-08 02:32:55 +09:00
|
|
|
var TTOpsStackDeltas = [
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5,
|
|
|
|
-1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1,
|
2013-03-23 18:08:18 +09:00
|
|
|
1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1,
|
2013-03-18 22:06:59 +09:00
|
|
|
0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2,
|
2012-11-08 02:32:55 +09:00
|
|
|
0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1,
|
|
|
|
-1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1,
|
2013-03-23 18:08:18 +09:00
|
|
|
-1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
2012-11-08 02:32:55 +09:00
|
|
|
-2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1,
|
2013-03-23 18:08:18 +09:00
|
|
|
-999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
// 0xC0-DF == -1 and 0xE0-FF == -2
|
2012-11-08 02:32:55 +09:00
|
|
|
|
|
|
|
function sanitizeTTProgram(table, ttContext) {
|
|
|
|
var data = table.data;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var i = 0,
|
|
|
|
j,
|
|
|
|
n,
|
|
|
|
b,
|
|
|
|
funcId,
|
|
|
|
pc,
|
|
|
|
lastEndf = 0,
|
|
|
|
lastDeff = 0;
|
2012-11-08 02:32:55 +09:00
|
|
|
var stack = [];
|
2013-03-23 18:08:18 +09:00
|
|
|
var callstack = [];
|
|
|
|
var functionsCalled = [];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;
|
|
|
|
var inFDEF = false,
|
|
|
|
ifLevel = 0,
|
|
|
|
inELSE = 0;
|
|
|
|
for (var ii = data.length; i < ii; ) {
|
2012-11-08 02:32:55 +09:00
|
|
|
var op = data[i++];
|
|
|
|
// The TrueType instruction set docs can be found at
|
|
|
|
// https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (op === 0x40) {
|
|
|
|
// NPUSHB - pushes n bytes
|
2012-11-08 02:32:55 +09:00
|
|
|
n = data[i++];
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF || inELSE) {
|
|
|
|
i += n;
|
|
|
|
} else {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < n; j++) {
|
2013-03-23 18:08:18 +09:00
|
|
|
stack.push(data[i++]);
|
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x41) {
|
|
|
|
// NPUSHW - pushes n words
|
2012-11-08 02:32:55 +09:00
|
|
|
n = data[i++];
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF || inELSE) {
|
|
|
|
i += n * 2;
|
|
|
|
} else {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < n; j++) {
|
|
|
|
b = data[i++];
|
2013-03-23 18:08:18 +09:00
|
|
|
stack.push((b << 8) | data[i++]);
|
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if ((op & 0xf8) === 0xb0) {
|
|
|
|
// PUSHB - pushes bytes
|
|
|
|
n = op - 0xb0 + 1;
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF || inELSE) {
|
|
|
|
i += n;
|
|
|
|
} else {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < n; j++) {
|
2013-03-23 18:08:18 +09:00
|
|
|
stack.push(data[i++]);
|
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if ((op & 0xf8) === 0xb8) {
|
|
|
|
// PUSHW - pushes words
|
|
|
|
n = op - 0xb8 + 1;
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF || inELSE) {
|
|
|
|
i += n * 2;
|
|
|
|
} else {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0; j < n; j++) {
|
|
|
|
b = data[i++];
|
2013-03-23 18:08:18 +09:00
|
|
|
stack.push((b << 8) | data[i++]);
|
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x2b && !tooComplexToFollowFunctions) {
|
|
|
|
// CALL
|
2013-03-23 18:08:18 +09:00
|
|
|
if (!inFDEF && !inELSE) {
|
2018-04-02 06:20:41 +09:00
|
|
|
// collecting information about which functions are used
|
2014-04-08 06:42:54 +09:00
|
|
|
funcId = stack[stack.length - 1];
|
2018-07-10 05:11:46 +09:00
|
|
|
if (isNaN(funcId)) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
info("TT: CALL empty stack (or invalid entry).");
|
2018-07-10 05:11:46 +09:00
|
|
|
} else {
|
|
|
|
ttContext.functionsUsed[funcId] = true;
|
|
|
|
if (funcId in ttContext.functionsStackDeltas) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const newStackLength =
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
stack.length + ttContext.functionsStackDeltas[funcId];
|
2018-07-10 05:11:46 +09:00
|
|
|
if (newStackLength < 0) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: CALL invalid functions stack delta.");
|
2018-07-10 05:11:46 +09:00
|
|
|
ttContext.hintsValid = false;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
stack.length = newStackLength;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (
|
|
|
|
funcId in ttContext.functionsDefined &&
|
|
|
|
!functionsCalled.includes(funcId)
|
|
|
|
) {
|
|
|
|
callstack.push({ data, i, stackTop: stack.length - 1 });
|
2018-07-10 05:11:46 +09:00
|
|
|
functionsCalled.push(funcId);
|
|
|
|
pc = ttContext.functionsDefined[funcId];
|
|
|
|
if (!pc) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: CALL non-existent function");
|
2018-07-10 05:11:46 +09:00
|
|
|
ttContext.hintsValid = false;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
data = pc.data;
|
|
|
|
i = pc.i;
|
2013-10-31 00:54:19 +09:00
|
|
|
}
|
2013-03-23 18:08:18 +09:00
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x2c && !tooComplexToFollowFunctions) {
|
|
|
|
// FDEF
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF || inELSE) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: nested FDEFs not allowed");
|
2012-11-08 02:32:55 +09:00
|
|
|
tooComplexToFollowFunctions = true;
|
|
|
|
}
|
2013-03-23 18:08:18 +09:00
|
|
|
inFDEF = true;
|
2018-04-02 06:20:41 +09:00
|
|
|
// collecting information about which functions are defined
|
2013-03-23 18:08:18 +09:00
|
|
|
lastDeff = i;
|
2014-04-08 06:42:54 +09:00
|
|
|
funcId = stack.pop();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
ttContext.functionsDefined[funcId] = { data, i };
|
|
|
|
} else if (op === 0x2d) {
|
|
|
|
// ENDF - end of function
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF) {
|
|
|
|
inFDEF = false;
|
|
|
|
lastEndf = i;
|
|
|
|
} else {
|
2014-04-08 06:42:54 +09:00
|
|
|
pc = callstack.pop();
|
2013-10-31 00:54:19 +09:00
|
|
|
if (!pc) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: ENDF bad stack");
|
2013-10-31 00:54:19 +09:00
|
|
|
ttContext.hintsValid = false;
|
|
|
|
return;
|
|
|
|
}
|
2014-04-08 06:42:54 +09:00
|
|
|
funcId = functionsCalled.pop();
|
2013-03-23 18:08:18 +09:00
|
|
|
data = pc.data;
|
|
|
|
i = pc.i;
|
|
|
|
ttContext.functionsStackDeltas[funcId] =
|
|
|
|
stack.length - pc.stackTop;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x89) {
|
|
|
|
// IDEF - instruction definition
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inFDEF || inELSE) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: nested IDEFs not allowed");
|
2013-03-23 18:08:18 +09:00
|
|
|
tooComplexToFollowFunctions = true;
|
|
|
|
}
|
|
|
|
inFDEF = true;
|
2012-11-08 02:32:55 +09:00
|
|
|
// recording it as a function to track ENDF
|
|
|
|
lastDeff = i;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x58) {
|
|
|
|
// IF
|
2013-03-23 18:08:18 +09:00
|
|
|
++ifLevel;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x1b) {
|
|
|
|
// ELSE
|
2013-03-23 18:08:18 +09:00
|
|
|
inELSE = ifLevel;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x59) {
|
|
|
|
// EIF
|
2013-03-23 18:08:18 +09:00
|
|
|
if (inELSE === ifLevel) {
|
|
|
|
inELSE = 0;
|
|
|
|
}
|
|
|
|
--ifLevel;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (op === 0x1c) {
|
|
|
|
// JMPR
|
2014-03-13 10:19:04 +09:00
|
|
|
if (!inFDEF && !inELSE) {
|
|
|
|
var offset = stack[stack.length - 1];
|
|
|
|
// only jumping forward to prevent infinite loop
|
2014-03-18 01:34:30 +09:00
|
|
|
if (offset > 0) {
|
|
|
|
i += offset - 1;
|
|
|
|
}
|
2014-03-13 10:19:04 +09:00
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
|
|
|
// Adjusting stack not extactly, but just enough to get function id
|
2013-03-23 18:08:18 +09:00
|
|
|
if (!inFDEF && !inELSE) {
|
2020-01-13 03:47:13 +09:00
|
|
|
let stackDelta = 0;
|
|
|
|
if (op <= 0x8e) {
|
|
|
|
stackDelta = TTOpsStackDeltas[op];
|
|
|
|
} else if (op >= 0xc0 && op <= 0xdf) {
|
|
|
|
stackDelta = -1;
|
|
|
|
} else if (op >= 0xe0) {
|
|
|
|
stackDelta = -2;
|
|
|
|
}
|
2013-03-23 18:08:18 +09:00
|
|
|
if (op >= 0x71 && op <= 0x75) {
|
|
|
|
n = stack.pop();
|
2017-01-23 22:49:38 +09:00
|
|
|
if (!isNaN(n)) {
|
2013-03-23 18:08:18 +09:00
|
|
|
stackDelta = -n * 2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
while (stackDelta < 0 && stack.length > 0) {
|
|
|
|
stack.pop();
|
|
|
|
stackDelta++;
|
|
|
|
}
|
|
|
|
while (stackDelta > 0) {
|
|
|
|
stack.push(NaN); // pushing any number into stack
|
|
|
|
stackDelta--;
|
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
|
|
|
|
var content = [data];
|
|
|
|
if (i > data.length) {
|
|
|
|
content.push(new Uint8Array(i - data.length));
|
|
|
|
}
|
|
|
|
if (lastDeff > lastEndf) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: complementing a missing function tail");
|
2012-11-08 02:32:55 +09:00
|
|
|
// new function definition started, but not finished
|
|
|
|
// complete function by [CLEAR, ENDF]
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
content.push(new Uint8Array([0x22, 0x2d]));
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
2013-03-23 18:08:18 +09:00
|
|
|
foldTTTable(table, content);
|
|
|
|
}
|
|
|
|
|
2013-03-18 22:06:59 +09:00
|
|
|
function checkInvalidFunctions(ttContext, maxFunctionDefs) {
|
|
|
|
if (ttContext.tooComplexToFollowFunctions) {
|
|
|
|
return;
|
|
|
|
}
|
2014-03-03 06:40:48 +09:00
|
|
|
if (ttContext.functionsDefined.length > maxFunctionDefs) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: more functions defined than expected");
|
2014-03-03 06:40:48 +09:00
|
|
|
ttContext.hintsValid = false;
|
|
|
|
return;
|
|
|
|
}
|
2013-03-18 22:06:59 +09:00
|
|
|
for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
|
|
|
|
if (j > maxFunctionDefs) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: invalid function id: " + j);
|
2013-03-18 22:06:59 +09:00
|
|
|
ttContext.hintsValid = false;
|
|
|
|
return;
|
2013-03-23 18:08:18 +09:00
|
|
|
}
|
2013-03-18 22:06:59 +09:00
|
|
|
if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("TT: undefined function: " + j);
|
2013-03-18 22:06:59 +09:00
|
|
|
ttContext.hintsValid = false;
|
|
|
|
return;
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
|
|
|
}
|
2013-03-23 18:08:18 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function foldTTTable(table, content) {
|
2012-11-08 02:32:55 +09:00
|
|
|
if (content.length > 1) {
|
|
|
|
// concatenating the content items
|
|
|
|
var newLength = 0;
|
2014-04-08 06:42:54 +09:00
|
|
|
var j, jj;
|
|
|
|
for (j = 0, jj = content.length; j < jj; j++) {
|
2012-11-08 02:32:55 +09:00
|
|
|
newLength += content[j].length;
|
|
|
|
}
|
|
|
|
newLength = (newLength + 3) & ~3;
|
|
|
|
var result = new Uint8Array(newLength);
|
|
|
|
var pos = 0;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (j = 0, jj = content.length; j < jj; j++) {
|
2012-11-08 02:32:55 +09:00
|
|
|
result.set(content[j], pos);
|
|
|
|
pos += content[j].length;
|
|
|
|
}
|
|
|
|
table.data = result;
|
|
|
|
table.length = newLength;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-03 07:34:58 +09:00
|
|
|
function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {
|
2012-11-08 02:32:55 +09:00
|
|
|
var ttContext = {
|
|
|
|
functionsDefined: [],
|
|
|
|
functionsUsed: [],
|
2013-03-23 18:08:18 +09:00
|
|
|
functionsStackDeltas: [],
|
2013-03-18 22:06:59 +09:00
|
|
|
tooComplexToFollowFunctions: false,
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
hintsValid: true,
|
2012-11-08 02:32:55 +09:00
|
|
|
};
|
2013-03-23 18:08:18 +09:00
|
|
|
if (fpgm) {
|
|
|
|
sanitizeTTProgram(fpgm, ttContext);
|
|
|
|
}
|
2012-11-08 02:32:55 +09:00
|
|
|
if (prep) {
|
|
|
|
sanitizeTTProgram(prep, ttContext);
|
|
|
|
}
|
|
|
|
if (fpgm) {
|
2013-03-18 22:06:59 +09:00
|
|
|
checkInvalidFunctions(ttContext, maxFunctionDefs);
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (cvt && cvt.length & 1) {
|
2013-11-09 02:38:36 +09:00
|
|
|
var cvtData = new Uint8Array(cvt.length + 1);
|
|
|
|
cvtData.set(cvt.data);
|
|
|
|
cvt.data = cvtData;
|
|
|
|
}
|
2013-03-18 22:06:59 +09:00
|
|
|
return ttContext.hintsValid;
|
2012-11-08 02:32:55 +09:00
|
|
|
}
|
|
|
|
|
2013-05-16 22:56:22 +09:00
|
|
|
// The following steps modify the original font data, making copy
|
|
|
|
font = new Stream(new Uint8Array(font.getBytes()));
|
|
|
|
|
2017-12-15 08:23:56 +09:00
|
|
|
let header, tables;
|
|
|
|
if (isTrueTypeCollectionFile(font)) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const ttcData = readTrueTypeCollectionData(font, this.name);
|
2017-12-15 08:23:56 +09:00
|
|
|
header = ttcData.header;
|
|
|
|
tables = ttcData.tables;
|
|
|
|
} else {
|
|
|
|
header = readOpenTypeHeader(font);
|
|
|
|
tables = readTables(font, header.numTables);
|
2011-06-13 09:30:16 +09:00
|
|
|
}
|
2017-12-15 08:23:56 +09:00
|
|
|
let cff, cffFile;
|
2011-06-01 03:22:05 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var isTrueType = !tables["CFF "];
|
2013-06-25 05:33:50 +09:00
|
|
|
if (!isTrueType) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
const isComposite =
|
|
|
|
properties.composite &&
|
|
|
|
((properties.cidToGidMap || []).length > 0 ||
|
|
|
|
!(properties.cMap instanceof IdentityCMap));
|
2018-07-27 23:33:30 +09:00
|
|
|
// OpenType font (skip composite fonts with non-default glyph mapping).
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
(header.version === "OTTO" && !isComposite) ||
|
|
|
|
!tables["head"] ||
|
|
|
|
!tables["hhea"] ||
|
|
|
|
!tables["maxp"] ||
|
|
|
|
!tables["post"]
|
|
|
|
) {
|
2017-06-10 01:51:31 +09:00
|
|
|
// No major tables: throwing everything at `CFFFont`.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
cffFile = new Stream(tables["CFF "].data);
|
2014-04-08 06:42:54 +09:00
|
|
|
cff = new CFFFont(cffFile, properties);
|
2013-06-25 08:45:31 +09:00
|
|
|
|
2015-12-08 06:30:09 +09:00
|
|
|
adjustWidths(properties);
|
|
|
|
|
2013-06-25 08:45:31 +09:00
|
|
|
return this.convert(name, cff, properties);
|
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
delete tables["glyf"];
|
|
|
|
delete tables["loca"];
|
|
|
|
delete tables["fpgm"];
|
|
|
|
delete tables["prep"];
|
|
|
|
delete tables["cvt "];
|
2014-06-16 23:52:04 +09:00
|
|
|
this.isOpenType = true;
|
2013-06-25 05:33:50 +09:00
|
|
|
} else {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!tables["loca"]) {
|
2017-06-29 05:51:31 +09:00
|
|
|
throw new FormatError('Required "loca" table is not found');
|
2016-01-09 19:50:48 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!tables["glyf"]) {
|
2016-01-09 19:50:48 +09:00
|
|
|
warn('Required "glyf" table is not found -- trying to recover.');
|
|
|
|
// Note: We use `sanitizeGlyphLocations` to add dummy glyf data below.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
tables["glyf"] = {
|
|
|
|
tag: "glyf",
|
2016-01-09 19:50:48 +09:00
|
|
|
data: new Uint8Array(0),
|
|
|
|
};
|
2013-06-25 05:33:50 +09:00
|
|
|
}
|
2014-06-16 23:52:04 +09:00
|
|
|
this.isOpenType = false;
|
2013-06-25 05:33:50 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!tables["maxp"]) {
|
2017-06-29 05:51:31 +09:00
|
|
|
throw new FormatError('Required "maxp" table is not found');
|
2013-06-25 08:45:31 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
font.pos = (font.start || 0) + tables["maxp"].offset;
|
2014-04-17 04:31:16 +09:00
|
|
|
var version = font.getInt32();
|
2018-01-05 07:43:07 +09:00
|
|
|
const numGlyphs = font.getUint16();
|
|
|
|
// Glyph 0 is duplicated and appended.
|
|
|
|
let numGlyphsOut = numGlyphs + 1;
|
|
|
|
let dupFirstEntry = true;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (numGlyphsOut > 0xffff) {
|
2018-01-05 07:43:07 +09:00
|
|
|
dupFirstEntry = false;
|
|
|
|
numGlyphsOut = numGlyphs;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Not enough space in glyfs to duplicate first glyph.");
|
2018-01-05 07:43:07 +09:00
|
|
|
}
|
2013-03-18 22:06:59 +09:00
|
|
|
var maxFunctionDefs = 0;
|
2017-09-26 09:24:21 +09:00
|
|
|
var maxSizeOfInstructions = 0;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (version >= 0x00010000 && tables["maxp"].length >= 22) {
|
2013-11-03 08:16:24 +09:00
|
|
|
// maxZones can be invalid
|
|
|
|
font.pos += 8;
|
2014-03-12 13:09:49 +09:00
|
|
|
var maxZones = font.getUint16();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (maxZones > 2) {
|
|
|
|
// reset to 2 if font has invalid maxZones
|
|
|
|
tables["maxp"].data[14] = 0;
|
|
|
|
tables["maxp"].data[15] = 2;
|
2013-11-03 08:16:24 +09:00
|
|
|
}
|
|
|
|
font.pos += 4;
|
2014-03-12 13:09:49 +09:00
|
|
|
maxFunctionDefs = font.getUint16();
|
2018-02-08 04:53:44 +09:00
|
|
|
font.pos += 4;
|
2017-09-26 09:24:21 +09:00
|
|
|
maxSizeOfInstructions = font.getUint16();
|
2013-03-18 22:06:59 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
tables["maxp"].data[4] = numGlyphsOut >> 8;
|
|
|
|
tables["maxp"].data[5] = numGlyphsOut & 255;
|
2013-07-30 05:24:32 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var hintsValid = sanitizeTTPrograms(
|
|
|
|
tables["fpgm"],
|
|
|
|
tables["prep"],
|
|
|
|
tables["cvt "],
|
|
|
|
maxFunctionDefs
|
|
|
|
);
|
2013-03-18 22:06:59 +09:00
|
|
|
if (!hintsValid) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
delete tables["fpgm"];
|
|
|
|
delete tables["prep"];
|
|
|
|
delete tables["cvt "];
|
2013-03-18 22:06:59 +09:00
|
|
|
}
|
|
|
|
|
2013-06-25 05:33:50 +09:00
|
|
|
// Ensure the hmtx table contains the advance width and
|
|
|
|
// sidebearings information for numGlyphs in the maxp table
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
sanitizeMetrics(
|
|
|
|
font,
|
|
|
|
tables["hhea"],
|
|
|
|
tables["hmtx"],
|
|
|
|
numGlyphsOut,
|
|
|
|
dupFirstEntry
|
|
|
|
);
|
|
|
|
|
|
|
|
if (!tables["head"]) {
|
2017-06-29 05:51:31 +09:00
|
|
|
throw new FormatError('Required "head" table is not found');
|
2013-01-19 08:06:12 +09:00
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
sanitizeHead(
|
|
|
|
tables["head"],
|
|
|
|
numGlyphs,
|
|
|
|
isTrueType ? tables["loca"].length : 0
|
|
|
|
);
|
2013-06-25 05:33:50 +09:00
|
|
|
|
2016-01-28 02:04:13 +09:00
|
|
|
var missingGlyphs = Object.create(null);
|
2013-06-25 05:33:50 +09:00
|
|
|
if (isTrueType) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var isGlyphLocationsLong = int16(
|
|
|
|
tables["head"].data[50],
|
|
|
|
tables["head"].data[51]
|
|
|
|
);
|
|
|
|
var glyphsInfo = sanitizeGlyphLocations(
|
|
|
|
tables["loca"],
|
|
|
|
tables["glyf"],
|
|
|
|
numGlyphs,
|
|
|
|
isGlyphLocationsLong,
|
|
|
|
hintsValid,
|
|
|
|
dupFirstEntry,
|
|
|
|
maxSizeOfInstructions
|
|
|
|
);
|
2017-09-26 09:24:21 +09:00
|
|
|
missingGlyphs = glyphsInfo.missingGlyphs;
|
|
|
|
|
|
|
|
// Some fonts have incorrect maxSizeOfInstructions values, so we use
|
|
|
|
// the computed value instead.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (version >= 0x00010000 && tables["maxp"].length >= 22) {
|
|
|
|
tables["maxp"].data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
|
|
|
|
tables["maxp"].data[27] = glyphsInfo.maxSizeOfInstructions & 255;
|
2017-09-26 09:24:21 +09:00
|
|
|
}
|
2011-09-19 11:25:05 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!tables["hhea"]) {
|
2017-06-29 05:51:31 +09:00
|
|
|
throw new FormatError('Required "hhea" table is not found');
|
2013-06-25 08:45:31 +09:00
|
|
|
}
|
2012-03-14 08:59:16 +09:00
|
|
|
|
2011-08-01 12:56:41 +09:00
|
|
|
// Sanitizer reduces the glyph advanceWidth to the maxAdvanceWidth
|
|
|
|
// Sometimes it's 0. That needs to be fixed
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (tables["hhea"].data[10] === 0 && tables["hhea"].data[11] === 0) {
|
|
|
|
tables["hhea"].data[10] = 0xff;
|
|
|
|
tables["hhea"].data[11] = 0xff;
|
2011-08-01 12:56:41 +09:00
|
|
|
}
|
2011-06-13 09:30:16 +09:00
|
|
|
|
2015-11-07 05:47:10 +09:00
|
|
|
// Extract some more font properties from the OpenType head and
|
|
|
|
// hhea tables; yMin and descent value are always negative.
|
|
|
|
var metricsOverride = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
unitsPerEm: int16(tables["head"].data[18], tables["head"].data[19]),
|
|
|
|
yMax: int16(tables["head"].data[42], tables["head"].data[43]),
|
|
|
|
yMin: signedInt16(tables["head"].data[38], tables["head"].data[39]),
|
|
|
|
ascent: int16(tables["hhea"].data[4], tables["hhea"].data[5]),
|
|
|
|
descent: signedInt16(tables["hhea"].data[6], tables["hhea"].data[7]),
|
2015-11-07 05:47:10 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
// PDF FontDescriptor metrics lie -- using data from actual font.
|
|
|
|
this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
|
|
|
|
this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
|
|
|
|
|
2011-10-29 10:38:31 +09:00
|
|
|
// The 'post' table has glyphs names.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (tables["post"]) {
|
|
|
|
readPostScriptTable(tables["post"], properties, numGlyphs);
|
2011-10-29 10:38:31 +09:00
|
|
|
}
|
|
|
|
|
2018-01-05 07:43:07 +09:00
|
|
|
// The original 'post' table is not needed, replace it.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
tables["post"] = {
|
|
|
|
tag: "post",
|
2018-01-05 07:43:07 +09:00
|
|
|
data: createPostTable(properties),
|
|
|
|
};
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var charCodeToGlyphId = [],
|
|
|
|
charCode;
|
2015-02-07 08:13:41 +09:00
|
|
|
|
2015-06-19 04:53:15 +09:00
|
|
|
// Helper function to try to skip mapping of empty glyphs.
|
2017-06-29 02:34:36 +09:00
|
|
|
function hasGlyph(glyphId) {
|
|
|
|
return !missingGlyphs[glyphId];
|
2015-02-07 08:13:41 +09:00
|
|
|
}
|
|
|
|
|
2016-12-21 00:42:15 +09:00
|
|
|
if (properties.composite) {
|
2011-11-29 12:54:07 +09:00
|
|
|
var cidToGidMap = properties.cidToGidMap || [];
|
2015-01-02 22:21:56 +09:00
|
|
|
var isCidToGidMapEmpty = cidToGidMap.length === 0;
|
|
|
|
|
2014-07-30 12:30:16 +09:00
|
|
|
properties.cMap.forEach(function(charCode, cid) {
|
2017-07-20 21:04:54 +09:00
|
|
|
if (cid > 0xffff) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
throw new FormatError("Max size of CID is 65,535");
|
2017-07-20 21:04:54 +09:00
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
var glyphId = -1;
|
2015-01-02 22:21:56 +09:00
|
|
|
if (isCidToGidMapEmpty) {
|
2016-03-02 10:05:33 +09:00
|
|
|
glyphId = cid;
|
2014-06-26 03:56:43 +09:00
|
|
|
} else if (cidToGidMap[cid] !== undefined) {
|
2014-02-12 03:27:09 +09:00
|
|
|
glyphId = cidToGidMap[cid];
|
2013-07-30 05:24:32 +09:00
|
|
|
}
|
2014-10-04 02:35:49 +09:00
|
|
|
|
2017-06-29 02:34:36 +09:00
|
|
|
if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {
|
2014-02-12 03:27:09 +09:00
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
2011-11-28 11:43:23 +09:00
|
|
|
}
|
2014-07-30 12:30:16 +09:00
|
|
|
});
|
2011-07-15 21:58:14 +09:00
|
|
|
} else {
|
2013-01-31 03:01:32 +09:00
|
|
|
// Most of the following logic in this code branch is based on the
|
|
|
|
// 9.6.6.4 of the PDF spec.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var cmapTable = readCmapTable(
|
|
|
|
tables["cmap"],
|
|
|
|
font,
|
|
|
|
this.isSymbolicFont,
|
|
|
|
properties.hasEncoding
|
|
|
|
);
|
2013-01-31 03:01:32 +09:00
|
|
|
var cmapPlatformId = cmapTable.platformId;
|
|
|
|
var cmapEncodingId = cmapTable.encodingId;
|
|
|
|
var cmapMappings = cmapTable.mappings;
|
|
|
|
var cmapMappingsLength = cmapMappings.length;
|
2014-02-12 03:27:09 +09:00
|
|
|
|
|
|
|
// The spec seems to imply that if the font is symbolic the encoding
|
|
|
|
// should be ignored, this doesn't appear to work for 'preistabelle.pdf'
|
|
|
|
// where the the font is symbolic and it has an encoding.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
(properties.hasEncoding &&
|
|
|
|
((cmapPlatformId === 3 && cmapEncodingId === 1) ||
|
|
|
|
(cmapPlatformId === 1 && cmapEncodingId === 0))) ||
|
|
|
|
(cmapPlatformId === -1 &&
|
|
|
|
cmapEncodingId === -1 && // Temporary hack
|
|
|
|
!!getEncoding(properties.baseEncodingName))
|
|
|
|
) {
|
|
|
|
// Temporary hack
|
2014-08-23 07:03:13 +09:00
|
|
|
// When no preferred cmap table was found and |baseEncodingName| is
|
|
|
|
// one of the predefined encodings, we seem to obtain a better
|
|
|
|
// |charCodeToGlyphId| map from the code below (fixes bug 1057544).
|
|
|
|
// TODO: Note that this is a hack which should be removed as soon as
|
|
|
|
// we have proper support for more exotic cmap tables.
|
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
var baseEncoding = [];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
properties.baseEncodingName === "MacRomanEncoding" ||
|
|
|
|
properties.baseEncodingName === "WinAnsiEncoding"
|
|
|
|
) {
|
2016-01-22 06:18:46 +09:00
|
|
|
baseEncoding = getEncoding(properties.baseEncodingName);
|
2011-11-28 11:43:23 +09:00
|
|
|
}
|
2016-01-22 05:47:48 +09:00
|
|
|
var glyphsUnicodeMap = getGlyphsUnicode();
|
2014-04-08 06:42:54 +09:00
|
|
|
for (charCode = 0; charCode < 256; charCode++) {
|
2016-03-08 04:56:15 +09:00
|
|
|
var glyphName, standardGlyphName;
|
2014-02-12 03:27:09 +09:00
|
|
|
if (this.differences && charCode in this.differences) {
|
|
|
|
glyphName = this.differences[charCode];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (
|
|
|
|
charCode in baseEncoding &&
|
|
|
|
baseEncoding[charCode] !== ""
|
|
|
|
) {
|
2014-02-12 03:27:09 +09:00
|
|
|
glyphName = baseEncoding[charCode];
|
|
|
|
} else {
|
2016-01-22 06:18:46 +09:00
|
|
|
glyphName = StandardEncoding[charCode];
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
|
|
|
if (!glyphName) {
|
2013-01-31 03:01:32 +09:00
|
|
|
continue;
|
2012-01-11 13:01:24 +09:00
|
|
|
}
|
2016-03-08 04:56:15 +09:00
|
|
|
// Ensure that non-standard glyph names are resolved to valid ones.
|
|
|
|
standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
|
|
|
|
|
2017-06-29 02:34:36 +09:00
|
|
|
var unicodeOrCharCode;
|
2014-02-12 03:27:09 +09:00
|
|
|
if (cmapPlatformId === 3 && cmapEncodingId === 1) {
|
2016-03-08 04:56:15 +09:00
|
|
|
unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];
|
2014-02-12 03:27:09 +09:00
|
|
|
} else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
|
|
|
|
// TODO: the encoding needs to be updated with mac os table.
|
2016-03-08 04:56:15 +09:00
|
|
|
unicodeOrCharCode = MacRomanEncoding.indexOf(standardGlyphName);
|
2012-03-01 13:11:32 +09:00
|
|
|
}
|
2013-01-31 03:01:32 +09:00
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
var found = false;
|
2017-12-15 08:23:56 +09:00
|
|
|
for (let i = 0; i < cmapMappingsLength; ++i) {
|
2015-08-09 19:31:05 +09:00
|
|
|
if (cmapMappings[i].charCode !== unicodeOrCharCode) {
|
|
|
|
continue;
|
|
|
|
}
|
2017-08-04 14:19:36 +09:00
|
|
|
charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
|
|
|
|
found = true;
|
|
|
|
break;
|
2012-03-18 13:05:22 +09:00
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
if (!found && properties.glyphNames) {
|
2015-06-07 01:00:14 +09:00
|
|
|
// Try to map using the post table.
|
2014-07-30 12:30:16 +09:00
|
|
|
var glyphId = properties.glyphNames.indexOf(glyphName);
|
2016-03-08 04:56:15 +09:00
|
|
|
// The post table ought to use the same kind of glyph names as the
|
|
|
|
// `differences` array, but check the standard ones as a fallback.
|
|
|
|
if (glyphId === -1 && standardGlyphName !== glyphName) {
|
|
|
|
glyphId = properties.glyphNames.indexOf(standardGlyphName);
|
|
|
|
}
|
2017-06-29 02:34:36 +09:00
|
|
|
if (glyphId > 0 && hasGlyph(glyphId)) {
|
2014-02-12 03:27:09 +09:00
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-01-11 22:54:12 +09:00
|
|
|
} else if (cmapPlatformId === 0 && cmapEncodingId === 0) {
|
|
|
|
// Default Unicode semantics, use the charcodes as is.
|
2017-12-15 08:23:56 +09:00
|
|
|
for (let i = 0; i < cmapMappingsLength; ++i) {
|
2015-01-11 22:54:12 +09:00
|
|
|
charCodeToGlyphId[cmapMappings[i].charCode] =
|
|
|
|
cmapMappings[i].glyphId;
|
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
} else {
|
2017-06-30 09:14:58 +09:00
|
|
|
// When there is only a (1, 0) cmap table, the char code is a single
|
|
|
|
// byte and it is used directly as the char code.
|
|
|
|
|
|
|
|
// When a (3, 0) cmap table is present, it is used instead but the
|
|
|
|
// spec has special rules for char codes in the range of 0xF000 to
|
|
|
|
// 0xF0FF and it says the (3, 0) table should map the values from
|
|
|
|
// the (1, 0) table by prepending 0xF0 to the char codes. To reverse
|
|
|
|
// this, the upper bits of the char code are cleared, but only for the
|
|
|
|
// special range since some PDFs have char codes outside of this range
|
|
|
|
// (e.g. 0x2013) which when masked would overwrite other values in the
|
|
|
|
// cmap.
|
2017-12-15 08:23:56 +09:00
|
|
|
for (let i = 0; i < cmapMappingsLength; ++i) {
|
2017-06-30 09:14:58 +09:00
|
|
|
charCode = cmapMappings[i].charCode;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
cmapPlatformId === 3 &&
|
|
|
|
charCode >= 0xf000 &&
|
|
|
|
charCode <= 0xf0ff
|
|
|
|
) {
|
|
|
|
charCode &= 0xff;
|
2017-06-30 09:14:58 +09:00
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
|
2012-02-21 08:19:12 +09:00
|
|
|
}
|
|
|
|
}
|
2012-03-26 04:15:40 +09:00
|
|
|
}
|
2011-11-28 11:43:23 +09:00
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
if (charCodeToGlyphId.length === 0) {
|
2012-10-16 00:01:18 +09:00
|
|
|
// defines at least one glyph
|
2014-02-12 03:27:09 +09:00
|
|
|
charCodeToGlyphId[0] = 0;
|
2012-10-16 00:01:18 +09:00
|
|
|
}
|
|
|
|
|
2018-01-05 07:43:07 +09:00
|
|
|
// Typically glyph 0 is duplicated and the mapping must be updated, but if
|
|
|
|
// there isn't enough room to duplicate, the glyph id is left the same. In
|
|
|
|
// this case, glyph 0 may not work correctly, but that is better than
|
|
|
|
// having the whole font fail.
|
|
|
|
let glyphZeroId = numGlyphsOut - 1;
|
|
|
|
if (!dupFirstEntry) {
|
|
|
|
glyphZeroId = 0;
|
|
|
|
}
|
|
|
|
|
2012-03-26 04:15:40 +09:00
|
|
|
// Converting glyphs and ids into font's cmap table
|
2018-01-05 07:43:07 +09:00
|
|
|
var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);
|
2014-02-12 03:27:09 +09:00
|
|
|
this.toFontChar = newMapping.toFontChar;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
tables["cmap"] = {
|
|
|
|
tag: "cmap",
|
2018-01-05 07:43:07 +09:00
|
|
|
data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut),
|
2014-02-12 03:27:09 +09:00
|
|
|
};
|
2011-07-13 17:31:34 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"])) {
|
|
|
|
tables["OS/2"] = {
|
|
|
|
tag: "OS/2",
|
|
|
|
data: createOS2Table(
|
|
|
|
properties,
|
|
|
|
newMapping.charCodeToGlyphId,
|
|
|
|
metricsOverride
|
|
|
|
),
|
2013-06-25 05:33:50 +09:00
|
|
|
};
|
2012-04-07 07:52:57 +09:00
|
|
|
}
|
|
|
|
|
2013-06-25 08:45:31 +09:00
|
|
|
if (!isTrueType) {
|
|
|
|
try {
|
|
|
|
// Trying to repair CFF file
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
cffFile = new Stream(tables["CFF "].data);
|
|
|
|
var parser = new CFFParser(
|
|
|
|
cffFile,
|
|
|
|
properties,
|
|
|
|
SEAC_ANALYSIS_ENABLED
|
|
|
|
);
|
2014-04-08 06:42:54 +09:00
|
|
|
cff = parser.parse();
|
2018-01-05 07:43:07 +09:00
|
|
|
cff.duplicateFirstGlyph();
|
2013-06-25 08:45:31 +09:00
|
|
|
var compiler = new CFFCompiler(cff);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
tables["CFF "].data = compiler.compile();
|
2013-06-25 08:45:31 +09:00
|
|
|
} catch (e) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Failed to compile font " + properties.loadedName);
|
2013-06-25 08:45:31 +09:00
|
|
|
}
|
2011-07-15 21:58:14 +09:00
|
|
|
}
|
2011-06-01 18:52:10 +09:00
|
|
|
|
2012-11-08 09:24:13 +09:00
|
|
|
// Re-creating 'name' table
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!tables["name"]) {
|
|
|
|
tables["name"] = {
|
|
|
|
tag: "name",
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
data: createNameTable(this.name),
|
2013-06-25 05:33:50 +09:00
|
|
|
};
|
2012-11-08 09:24:13 +09:00
|
|
|
} else {
|
|
|
|
// ... using existing 'name' table as prototype
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var namePrototype = readNameTable(tables["name"]);
|
|
|
|
tables["name"].data = createNameTable(name, namePrototype);
|
2011-07-15 21:58:14 +09:00
|
|
|
}
|
2011-06-13 10:35:56 +09:00
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
var builder = new OpenTypeFileBuilder(header.version);
|
|
|
|
for (var tableTag in tables) {
|
|
|
|
builder.addTable(tableTag, tables[tableTag].data);
|
2011-07-15 21:58:14 +09:00
|
|
|
}
|
2014-08-10 08:18:41 +09:00
|
|
|
return builder.toArray();
|
2011-06-21 13:49:59 +09:00
|
|
|
},
|
2011-06-21 11:30:28 +09:00
|
|
|
|
2012-04-05 05:43:26 +09:00
|
|
|
convert: function Font_convert(fontName, font, properties) {
|
2014-02-25 10:39:51 +09:00
|
|
|
// TODO: Check the charstring widths to determine this.
|
|
|
|
properties.fixedPitch = false;
|
2011-07-23 01:57:26 +09:00
|
|
|
|
For embedded Type1 fonts without included `ToUnicode`/`Encoding` data, attempt to improve text selection by using the `builtInEncoding` to amend the `toUnicode` map (issue 6901, issue 7182, issue 7217, bug 917796, bug 1242142)
Note that in order to prevent any possible issues, this patch does *not* try to amend the `toUnicode` data for Type1 fonts that contain either `ToUnicode` or `Encoding` entries in the font dictionary.
Fixes, or at least improves, issues/bugs such as e.g. 6658, 6901, 7182, 7217, bug 917796, bug 1242142.
2016-08-18 01:33:06 +09:00
|
|
|
if (properties.builtInEncoding) {
|
|
|
|
// For Type1 fonts that do not include either `ToUnicode` or `Encoding`
|
|
|
|
// data, attempt to use the `builtInEncoding` to improve text selection.
|
|
|
|
adjustToUnicode(properties, properties.builtInEncoding);
|
|
|
|
}
|
|
|
|
|
2018-01-05 07:43:07 +09:00
|
|
|
// Type 1 fonts have a notdef inserted at the beginning, so glyph 0
|
|
|
|
// becomes glyph 1. In a CFF font glyph 0 is appended to the end of the
|
|
|
|
// char strings.
|
|
|
|
let glyphZeroId = 1;
|
|
|
|
if (font instanceof CFFFont) {
|
|
|
|
glyphZeroId = font.numGlyphs - 1;
|
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
var mapping = font.getGlyphMapping(properties);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var newMapping = adjustMapping(
|
|
|
|
mapping,
|
|
|
|
font.hasGlyphId.bind(font),
|
|
|
|
glyphZeroId
|
|
|
|
);
|
2014-02-12 03:27:09 +09:00
|
|
|
this.toFontChar = newMapping.toFontChar;
|
|
|
|
var numGlyphs = font.numGlyphs;
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2014-06-24 03:55:51 +09:00
|
|
|
function getCharCodes(charCodeToGlyphId, glyphId) {
|
|
|
|
var charCodes = null;
|
2014-04-12 01:55:39 +09:00
|
|
|
for (var charCode in charCodeToGlyphId) {
|
|
|
|
if (glyphId === charCodeToGlyphId[charCode]) {
|
2014-06-24 03:55:51 +09:00
|
|
|
if (!charCodes) {
|
|
|
|
charCodes = [];
|
|
|
|
}
|
|
|
|
charCodes.push(charCode | 0);
|
2014-04-12 01:55:39 +09:00
|
|
|
}
|
|
|
|
}
|
2014-06-24 03:55:51 +09:00
|
|
|
return charCodes;
|
|
|
|
}
|
|
|
|
|
|
|
|
function createCharCode(charCodeToGlyphId, glyphId) {
|
|
|
|
for (var charCode in charCodeToGlyphId) {
|
|
|
|
if (glyphId === charCodeToGlyphId[charCode]) {
|
|
|
|
return charCode | 0;
|
|
|
|
}
|
2014-04-12 01:55:39 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
newMapping.charCodeToGlyphId[
|
|
|
|
newMapping.nextAvailableFontCharCode
|
|
|
|
] = glyphId;
|
2014-06-24 03:55:51 +09:00
|
|
|
return newMapping.nextAvailableFontCharCode++;
|
2014-04-12 01:55:39 +09:00
|
|
|
}
|
|
|
|
|
2013-02-27 03:00:20 +09:00
|
|
|
var seacs = font.seacs;
|
2014-02-12 03:27:09 +09:00
|
|
|
if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
|
2013-02-27 03:00:20 +09:00
|
|
|
var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX;
|
2014-02-12 03:27:09 +09:00
|
|
|
var charset = font.getCharset();
|
|
|
|
var seacMap = Object.create(null);
|
|
|
|
for (var glyphId in seacs) {
|
|
|
|
glyphId |= 0;
|
|
|
|
var seac = seacs[glyphId];
|
2016-01-22 06:18:46 +09:00
|
|
|
var baseGlyphName = StandardEncoding[seac[2]];
|
|
|
|
var accentGlyphName = StandardEncoding[seac[3]];
|
2014-02-12 03:27:09 +09:00
|
|
|
var baseGlyphId = charset.indexOf(baseGlyphName);
|
|
|
|
var accentGlyphId = charset.indexOf(accentGlyphName);
|
|
|
|
if (baseGlyphId < 0 || accentGlyphId < 0) {
|
2013-02-27 03:00:20 +09:00
|
|
|
continue;
|
|
|
|
}
|
|
|
|
var accentOffset = {
|
|
|
|
x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5],
|
2013-02-27 03:00:20 +09:00
|
|
|
};
|
2014-04-12 01:55:39 +09:00
|
|
|
|
2014-06-24 03:55:51 +09:00
|
|
|
var charCodes = getCharCodes(mapping, glyphId);
|
|
|
|
if (!charCodes) {
|
2014-04-12 01:55:39 +09:00
|
|
|
// There's no point in mapping it if the char code was never mapped
|
|
|
|
// to begin with.
|
|
|
|
continue;
|
|
|
|
}
|
2014-06-24 03:55:51 +09:00
|
|
|
for (var i = 0, ii = charCodes.length; i < ii; i++) {
|
|
|
|
var charCode = charCodes[i];
|
|
|
|
// Find a fontCharCode that maps to the base and accent glyphs.
|
|
|
|
// If one doesn't exists, create it.
|
|
|
|
var charCodeToGlyphId = newMapping.charCodeToGlyphId;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var baseFontCharCode = createCharCode(
|
|
|
|
charCodeToGlyphId,
|
|
|
|
baseGlyphId
|
|
|
|
);
|
|
|
|
var accentFontCharCode = createCharCode(
|
|
|
|
charCodeToGlyphId,
|
|
|
|
accentGlyphId
|
|
|
|
);
|
2014-06-24 03:55:51 +09:00
|
|
|
seacMap[charCode] = {
|
2017-04-27 19:58:44 +09:00
|
|
|
baseFontCharCode,
|
|
|
|
accentFontCharCode,
|
|
|
|
accentOffset,
|
2014-06-24 03:55:51 +09:00
|
|
|
};
|
|
|
|
}
|
2013-02-27 03:00:20 +09:00
|
|
|
}
|
|
|
|
properties.seacMap = seacMap;
|
|
|
|
}
|
|
|
|
|
2013-01-04 09:39:06 +09:00
|
|
|
var unitsPerEm = 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];
|
2011-10-29 10:38:31 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F");
|
2014-08-10 08:18:41 +09:00
|
|
|
// PostScript Font Program
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable("CFF ", font.data);
|
2014-08-10 08:18:41 +09:00
|
|
|
// OS/2 and Windows Specific metrics
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable(
|
|
|
|
"OS/2",
|
|
|
|
createOS2Table(properties, newMapping.charCodeToGlyphId)
|
|
|
|
);
|
2014-08-10 08:18:41 +09:00
|
|
|
// Character to glyphs mapping
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable(
|
|
|
|
"cmap",
|
|
|
|
createCmapTable(newMapping.charCodeToGlyphId, numGlyphs)
|
|
|
|
);
|
2014-08-10 08:18:41 +09:00
|
|
|
// Font header
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable(
|
|
|
|
"head",
|
|
|
|
"\x00\x01\x00\x00" + // Version number
|
|
|
|
"\x00\x00\x10\x00" + // fontRevision
|
|
|
|
"\x00\x00\x00\x00" + // checksumAdjustement
|
|
|
|
"\x5F\x0F\x3C\xF5" + // magicNumber
|
|
|
|
"\x00\x00" + // Flags
|
|
|
|
safeString16(unitsPerEm) + // unitsPerEM
|
|
|
|
"\x00\x00\x00\x00\x9e\x0b\x7e\x27" + // creation date
|
|
|
|
"\x00\x00\x00\x00\x9e\x0b\x7e\x27" + // modifification date
|
|
|
|
"\x00\x00" + // xMin
|
|
|
|
safeString16(properties.descent) + // yMin
|
|
|
|
"\x0F\xFF" + // xMax
|
|
|
|
safeString16(properties.ascent) + // yMax
|
|
|
|
string16(properties.italicAngle ? 2 : 0) + // macStyle
|
|
|
|
"\x00\x11" + // lowestRecPPEM
|
|
|
|
"\x00\x00" + // fontDirectionHint
|
|
|
|
"\x00\x00" + // indexToLocFormat
|
|
|
|
"\x00\x00"
|
|
|
|
); // glyphDataFormat
|
2011-07-03 08:17:28 +09:00
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
// Horizontal header
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable(
|
|
|
|
"hhea",
|
|
|
|
"\x00\x01\x00\x00" + // Version number
|
|
|
|
safeString16(properties.ascent) + // Typographic Ascent
|
|
|
|
safeString16(properties.descent) + // Typographic Descent
|
|
|
|
"\x00\x00" + // Line Gap
|
|
|
|
"\xFF\xFF" + // advanceWidthMax
|
|
|
|
"\x00\x00" + // minLeftSidebearing
|
|
|
|
"\x00\x00" + // minRightSidebearing
|
|
|
|
"\x00\x00" + // xMaxExtent
|
|
|
|
safeString16(properties.capHeight) + // caretSlopeRise
|
|
|
|
safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + // caretSlopeRun
|
|
|
|
"\x00\x00" + // caretOffset
|
|
|
|
"\x00\x00" + // -reserved-
|
|
|
|
"\x00\x00" + // -reserved-
|
|
|
|
"\x00\x00" + // -reserved-
|
|
|
|
"\x00\x00" + // -reserved-
|
|
|
|
"\x00\x00" + // metricDataFormat
|
|
|
|
string16(numGlyphs)
|
|
|
|
); // Number of HMetrics
|
2011-07-03 08:17:28 +09:00
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
// Horizontal metrics
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable(
|
|
|
|
"hmtx",
|
|
|
|
(function fontFieldsHmtx() {
|
2014-02-12 03:27:09 +09:00
|
|
|
var charstrings = font.charstrings;
|
2014-08-15 06:11:09 +09:00
|
|
|
var cffWidths = font.cff ? font.cff.widths : null;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var hmtx = "\x00\x00\x00\x00"; // Fake .notdef
|
2014-04-13 03:25:13 +09:00
|
|
|
for (var i = 1, ii = numGlyphs; i < ii; i++) {
|
2014-08-15 06:11:09 +09:00
|
|
|
var width = 0;
|
|
|
|
if (charstrings) {
|
|
|
|
var charstring = charstrings[i - 1];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
width = "width" in charstring ? charstring.width : 0;
|
2014-08-15 06:11:09 +09:00
|
|
|
} else if (cffWidths) {
|
|
|
|
width = Math.ceil(cffWidths[i] || 0);
|
|
|
|
}
|
2011-11-28 11:43:23 +09:00
|
|
|
hmtx += string16(width) + string16(0);
|
|
|
|
}
|
2014-08-10 13:34:01 +09:00
|
|
|
return hmtx;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
})()
|
|
|
|
);
|
2011-07-03 08:17:28 +09:00
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
// Maximum profile
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable(
|
|
|
|
"maxp",
|
|
|
|
"\x00\x00\x50\x00" + string16(numGlyphs) // Version number
|
|
|
|
); // Num of glyphs
|
2011-07-03 08:17:28 +09:00
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
// Naming tables
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable("name", createNameTable(fontName));
|
2011-07-03 08:17:28 +09:00
|
|
|
|
2016-07-17 21:33:41 +09:00
|
|
|
// PostScript information
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
builder.addTable("post", createPostTable(properties));
|
2011-06-04 00:48:32 +09:00
|
|
|
|
2014-08-10 08:18:41 +09:00
|
|
|
return builder.toArray();
|
2011-06-21 13:49:59 +09:00
|
|
|
},
|
|
|
|
|
2011-12-13 12:32:20 +09:00
|
|
|
get spaceWidth() {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if ("_shadowWidth" in this) {
|
2012-09-16 23:46:13 +09:00
|
|
|
return this._shadowWidth;
|
|
|
|
}
|
|
|
|
|
2011-12-13 12:32:20 +09:00
|
|
|
// trying to estimate space character width
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
|
2011-12-13 12:32:20 +09:00
|
|
|
var width;
|
|
|
|
for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
|
|
|
|
var glyphName = possibleSpaceReplacements[i];
|
|
|
|
// if possible, getting width by glyph name
|
|
|
|
if (glyphName in this.widths) {
|
|
|
|
width = this.widths[glyphName];
|
|
|
|
break;
|
|
|
|
}
|
2016-01-22 05:47:48 +09:00
|
|
|
var glyphsUnicodeMap = getGlyphsUnicode();
|
|
|
|
var glyphUnicode = glyphsUnicodeMap[glyphName];
|
2011-12-13 12:32:20 +09:00
|
|
|
// finding the charcode via unicodeToCID map
|
|
|
|
var charcode = 0;
|
2014-02-12 03:27:09 +09:00
|
|
|
if (this.composite) {
|
2014-07-30 12:30:16 +09:00
|
|
|
if (this.cMap.contains(glyphUnicode)) {
|
2014-08-01 15:46:37 +09:00
|
|
|
charcode = this.cMap.lookup(glyphUnicode);
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
|
|
|
}
|
2011-12-13 12:32:20 +09:00
|
|
|
// ... via toUnicode map
|
2015-12-05 20:22:09 +09:00
|
|
|
if (!charcode && this.toUnicode) {
|
2014-08-07 10:02:11 +09:00
|
|
|
charcode = this.toUnicode.charCodeOf(glyphUnicode);
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2011-12-13 12:32:20 +09:00
|
|
|
// setting it to unicode if negative or undefined
|
2014-03-18 01:34:30 +09:00
|
|
|
if (charcode <= 0) {
|
2011-12-13 12:32:20 +09:00
|
|
|
charcode = glyphUnicode;
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2011-12-13 12:32:20 +09:00
|
|
|
// trying to get width via charcode
|
|
|
|
width = this.widths[charcode];
|
2014-03-18 01:34:30 +09:00
|
|
|
if (width) {
|
2011-12-13 12:32:20 +09:00
|
|
|
break; // the non-zero width found
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2011-12-13 12:32:20 +09:00
|
|
|
}
|
2013-01-04 09:39:06 +09:00
|
|
|
width = width || this.defaultWidth;
|
2012-09-22 18:18:26 +09:00
|
|
|
// Do not shadow the property here. See discussion:
|
|
|
|
// https://github.com/mozilla/pdf.js/pull/2127#discussion_r1662280
|
2012-09-16 23:46:13 +09:00
|
|
|
this._shadowWidth = width;
|
|
|
|
return width;
|
2011-12-13 12:32:20 +09:00
|
|
|
},
|
|
|
|
|
2015-11-02 23:54:15 +09:00
|
|
|
charToGlyph: function Font_charToGlyph(charcode, isSpace) {
|
2014-05-20 06:27:54 +09:00
|
|
|
var fontCharCode, width, operatorListId;
|
2012-04-09 00:57:55 +09:00
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
var widthCode = charcode;
|
2014-07-30 12:30:16 +09:00
|
|
|
if (this.cMap && this.cMap.contains(charcode)) {
|
2014-08-01 15:46:37 +09:00
|
|
|
widthCode = this.cMap.lookup(charcode);
|
2011-10-29 10:38:31 +09:00
|
|
|
}
|
2014-04-08 06:42:54 +09:00
|
|
|
width = this.widths[widthCode];
|
2014-02-12 03:27:09 +09:00
|
|
|
width = isNum(width) ? width : this.defaultWidth;
|
|
|
|
var vmetric = this.vmetrics && this.vmetrics[widthCode];
|
2011-11-25 00:38:09 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
let unicode =
|
|
|
|
this.toUnicode.get(charcode) ||
|
|
|
|
this.fallbackToUnicode.get(charcode) ||
|
|
|
|
charcode;
|
|
|
|
if (typeof unicode === "number") {
|
2014-03-13 21:56:12 +09:00
|
|
|
unicode = String.fromCharCode(unicode);
|
2013-02-27 03:00:20 +09:00
|
|
|
}
|
2011-11-25 00:38:09 +09:00
|
|
|
|
2016-02-25 03:48:02 +09:00
|
|
|
var isInFont = charcode in this.toFontChar;
|
2014-02-12 03:27:09 +09:00
|
|
|
// First try the toFontChar map, if it's not there then try falling
|
|
|
|
// back to the char code.
|
|
|
|
fontCharCode = this.toFontChar[charcode] || charcode;
|
|
|
|
if (this.missingFile) {
|
2020-01-22 03:36:41 +09:00
|
|
|
const glyphName =
|
|
|
|
this.differences[charcode] || this.defaultEncoding[charcode];
|
|
|
|
if (
|
|
|
|
(glyphName === ".notdef" || glyphName === "") &&
|
|
|
|
this.type === "Type1"
|
|
|
|
) {
|
|
|
|
// .notdef glyphs should be invisible in non-embedded Type1 fonts, so
|
|
|
|
// replace them with spaces.
|
|
|
|
fontCharCode = 0x20;
|
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
fontCharCode = mapSpecialUnicodeValues(fontCharCode);
|
|
|
|
}
|
|
|
|
|
2014-05-20 06:27:54 +09:00
|
|
|
if (this.isType3Font) {
|
2014-02-12 03:27:09 +09:00
|
|
|
// Font char code in this case is actually a glyph name.
|
2014-05-20 06:27:54 +09:00
|
|
|
operatorListId = fontCharCode;
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
2011-11-30 13:06:00 +09:00
|
|
|
|
2013-02-27 03:00:20 +09:00
|
|
|
var accent = null;
|
2014-02-12 03:27:09 +09:00
|
|
|
if (this.seacMap && this.seacMap[charcode]) {
|
2016-02-25 03:48:02 +09:00
|
|
|
isInFont = true;
|
2014-02-12 03:27:09 +09:00
|
|
|
var seac = this.seacMap[charcode];
|
|
|
|
fontCharCode = seac.baseFontCharCode;
|
2013-02-27 03:00:20 +09:00
|
|
|
accent = {
|
2018-01-05 07:43:07 +09:00
|
|
|
fontChar: String.fromCodePoint(seac.accentFontCharCode),
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
offset: seac.accentOffset,
|
2013-02-27 03:00:20 +09:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var fontChar =
|
|
|
|
typeof fontCharCode === "number"
|
|
|
|
? String.fromCodePoint(fontCharCode)
|
|
|
|
: "";
|
2014-03-13 21:56:12 +09:00
|
|
|
|
|
|
|
var glyph = this.glyphCache[charcode];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
!glyph ||
|
|
|
|
!glyph.matchesForCache(
|
|
|
|
fontChar,
|
|
|
|
unicode,
|
|
|
|
accent,
|
|
|
|
width,
|
|
|
|
vmetric,
|
|
|
|
operatorListId,
|
|
|
|
isSpace,
|
|
|
|
isInFont
|
|
|
|
)
|
|
|
|
) {
|
|
|
|
glyph = new Glyph(
|
|
|
|
fontChar,
|
|
|
|
unicode,
|
|
|
|
accent,
|
|
|
|
width,
|
|
|
|
vmetric,
|
|
|
|
operatorListId,
|
|
|
|
isSpace,
|
|
|
|
isInFont
|
|
|
|
);
|
2014-03-13 21:56:12 +09:00
|
|
|
this.glyphCache[charcode] = glyph;
|
|
|
|
}
|
|
|
|
return glyph;
|
2011-10-29 10:38:31 +09:00
|
|
|
},
|
|
|
|
|
2012-04-05 05:43:26 +09:00
|
|
|
charsToGlyphs: function Font_charsToGlyphs(chars) {
|
2011-07-09 08:36:50 +09:00
|
|
|
var charsCache = this.charsCache;
|
2014-04-08 06:42:54 +09:00
|
|
|
var glyphs, glyph, charcode;
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-07-09 08:36:50 +09:00
|
|
|
// if we translated this string before, just grab it from the cache
|
|
|
|
if (charsCache) {
|
2011-09-16 09:26:32 +09:00
|
|
|
glyphs = charsCache[chars];
|
2014-03-18 01:34:30 +09:00
|
|
|
if (glyphs) {
|
2011-09-16 09:26:32 +09:00
|
|
|
return glyphs;
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2011-07-09 08:36:50 +09:00
|
|
|
}
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-07-09 08:36:50 +09:00
|
|
|
// lazily create the translation cache
|
2014-03-18 01:34:30 +09:00
|
|
|
if (!charsCache) {
|
2011-07-09 08:36:50 +09:00
|
|
|
charsCache = this.charsCache = Object.create(null);
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2011-09-16 09:26:32 +09:00
|
|
|
glyphs = [];
|
2013-01-15 23:20:58 +09:00
|
|
|
var charsCacheKey = chars;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var i = 0,
|
|
|
|
ii;
|
2013-01-15 23:20:58 +09:00
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
if (this.cMap) {
|
2011-08-12 03:41:03 +09:00
|
|
|
// composite fonts have multi-byte strings convert the string from
|
2011-08-19 22:04:34 +09:00
|
|
|
// single-byte to multi-byte
|
2016-01-28 02:04:13 +09:00
|
|
|
var c = Object.create(null);
|
2013-09-26 02:32:04 +09:00
|
|
|
while (i < chars.length) {
|
2014-08-11 14:27:04 +09:00
|
|
|
this.cMap.readCharCode(chars, i, c);
|
|
|
|
charcode = c.charcode;
|
|
|
|
var length = c.length;
|
2013-09-26 02:32:04 +09:00
|
|
|
i += length;
|
2015-11-02 23:54:15 +09:00
|
|
|
// Space is char with code 0x20 and length 1 in multiple-byte codes.
|
|
|
|
var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;
|
|
|
|
glyph = this.charToGlyph(charcode, isSpace);
|
2011-09-16 09:26:32 +09:00
|
|
|
glyphs.push(glyph);
|
2011-07-10 14:12:42 +09:00
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
} else {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (i = 0, ii = chars.length; i < ii; ++i) {
|
|
|
|
charcode = chars.charCodeAt(i);
|
2015-11-02 23:54:15 +09:00
|
|
|
glyph = this.charToGlyph(charcode, charcode === 0x20);
|
2011-09-16 09:26:32 +09:00
|
|
|
glyphs.push(glyph);
|
2011-07-09 08:36:50 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Enter the translated string into the cache
|
2013-01-15 23:20:58 +09:00
|
|
|
return (charsCache[charsCacheKey] = glyphs);
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
},
|
Fallback to the built-in font renderer when font loading fails
After PR 9340 all glyphs are now re-mapped to a Private Use Area (PUA) which means that if a font fails to load, for whatever reason[1], all glyphs in the font will now render as Unicode glyph outlines.
This obviously doesn't look good, to say the least, and might be seen as a "regression" since previously many glyphs were left in their original positions which provided a slightly better fallback[2].
Hence this patch, which implements a *general* fallback to the PDF.js built-in font renderer for fonts that fail to load (i.e. are rejected by the sanitizer). One caveat here is that this only works for the Font Loading API, since it's easy to handle errors in that case[3].
The solution implemented in this patch does *not* in any way delay the loading of valid fonts, which was the problem with my previous attempt at a solution, and will only require a bit of extra work/waiting for those fonts that actually fail to load.
*Please note:* This patch doesn't fix any of the underlying PDF.js font conversion bugs that's responsible for creating corrupt font files, however it does *improve* rendering in a number of cases; refer to this possibly incomplete list:
[Bug 1524888](https://bugzilla.mozilla.org/show_bug.cgi?id=1524888)
Issue 10175
Issue 10232
---
[1] Usually because the PDF.js font conversion code wasn't able to parse the font file correctly.
[2] Glyphs fell back to some default font, which while not accurate was more useful than the current state.
[3] Furthermore I'm not sure how to implement this generally, assuming that's even possible, and don't really have time/interest to look into it either.
2019-02-11 08:47:56 +09:00
|
|
|
|
|
|
|
get glyphCacheValues() {
|
|
|
|
return Object.values(this.glyphCache);
|
|
|
|
},
|
2011-06-20 07:46:58 +09:00
|
|
|
};
|
2011-06-04 00:48:32 +09:00
|
|
|
|
2011-12-09 07:18:43 +09:00
|
|
|
return Font;
|
2011-06-20 07:46:58 +09:00
|
|
|
})();
|
2011-06-04 00:48:32 +09:00
|
|
|
|
2012-08-30 06:11:56 +09:00
|
|
|
var ErrorFont = (function ErrorFontClosure() {
|
|
|
|
function ErrorFont(error) {
|
|
|
|
this.error = error;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.loadedName = "g_font_error";
|
2018-08-17 03:34:37 +09:00
|
|
|
this.missingFile = true;
|
2012-08-30 06:11:56 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
ErrorFont.prototype = {
|
|
|
|
charsToGlyphs: function ErrorFont_charsToGlyphs() {
|
|
|
|
return [];
|
2012-10-16 01:48:45 +09:00
|
|
|
},
|
|
|
|
exportData: function ErrorFont_exportData() {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return { error: this.error };
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
},
|
2012-08-30 06:11:56 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
return ErrorFont;
|
|
|
|
})();
|
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
/**
|
|
|
|
* Shared logic for building a char code to glyph id mapping for Type1 and
|
|
|
|
* simple CFF fonts. See section 9.6.6.2 of the spec.
|
|
|
|
* @param {Object} properties Font properties object.
|
|
|
|
* @param {Object} builtInEncoding The encoding contained within the actual font
|
|
|
|
* data.
|
2016-05-03 07:34:58 +09:00
|
|
|
* @param {Array} glyphNames Array of glyph names where the index is the
|
|
|
|
* glyph ID.
|
2014-02-12 03:27:09 +09:00
|
|
|
* @returns {Object} A char code to glyph ID map.
|
|
|
|
*/
|
|
|
|
function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
|
|
|
|
var charCodeToGlyphId = Object.create(null);
|
2014-04-08 06:42:54 +09:00
|
|
|
var glyphId, charCode, baseEncoding;
|
2016-12-11 01:01:32 +09:00
|
|
|
var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
|
2014-04-08 06:42:54 +09:00
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
if (properties.baseEncodingName) {
|
|
|
|
// If a valid base encoding name was used, the mapping is initialized with
|
|
|
|
// that.
|
2016-01-22 06:18:46 +09:00
|
|
|
baseEncoding = getEncoding(properties.baseEncodingName);
|
2014-04-08 06:42:54 +09:00
|
|
|
for (charCode = 0; charCode < baseEncoding.length; charCode++) {
|
|
|
|
glyphId = glyphNames.indexOf(baseEncoding[charCode]);
|
2014-02-12 03:27:09 +09:00
|
|
|
if (glyphId >= 0) {
|
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
2014-10-04 04:11:20 +09:00
|
|
|
} else {
|
|
|
|
charCodeToGlyphId[charCode] = 0; // notdef
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
|
|
|
}
|
2016-12-11 01:01:32 +09:00
|
|
|
} else if (isSymbolicFont) {
|
|
|
|
// For a symbolic font the encoding should be the fonts built-in encoding.
|
2014-04-08 06:42:54 +09:00
|
|
|
for (charCode in builtInEncoding) {
|
2014-02-12 03:27:09 +09:00
|
|
|
charCodeToGlyphId[charCode] = builtInEncoding[charCode];
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// For non-symbolic fonts that don't have a base encoding the standard
|
|
|
|
// encoding should be used.
|
2016-01-22 06:18:46 +09:00
|
|
|
baseEncoding = StandardEncoding;
|
2014-04-08 06:42:54 +09:00
|
|
|
for (charCode = 0; charCode < baseEncoding.length; charCode++) {
|
|
|
|
glyphId = glyphNames.indexOf(baseEncoding[charCode]);
|
2014-02-12 03:27:09 +09:00
|
|
|
if (glyphId >= 0) {
|
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
2014-10-04 04:11:20 +09:00
|
|
|
} else {
|
|
|
|
charCodeToGlyphId[charCode] = 0; // notdef
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lastly, merge in the differences.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var differences = properties.differences,
|
|
|
|
glyphsUnicodeMap;
|
2014-02-12 03:27:09 +09:00
|
|
|
if (differences) {
|
2014-04-08 06:42:54 +09:00
|
|
|
for (charCode in differences) {
|
2014-02-12 03:27:09 +09:00
|
|
|
var glyphName = differences[charCode];
|
2014-04-08 06:42:54 +09:00
|
|
|
glyphId = glyphNames.indexOf(glyphName);
|
2016-06-25 19:41:26 +09:00
|
|
|
|
|
|
|
if (glyphId === -1) {
|
|
|
|
if (!glyphsUnicodeMap) {
|
|
|
|
glyphsUnicodeMap = getGlyphsUnicode();
|
|
|
|
}
|
|
|
|
var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
|
|
|
|
if (standardGlyphName !== glyphName) {
|
|
|
|
glyphId = glyphNames.indexOf(standardGlyphName);
|
|
|
|
}
|
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
if (glyphId >= 0) {
|
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
2014-10-04 04:11:20 +09:00
|
|
|
} else {
|
|
|
|
charCodeToGlyphId[charCode] = 0; // notdef
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return charCodeToGlyphId;
|
|
|
|
}
|
|
|
|
|
2012-03-11 12:12:33 +09:00
|
|
|
// Type1Font is also a CIDFontType0.
|
2016-03-06 00:11:17 +09:00
|
|
|
var Type1Font = (function Type1FontClosure() {
|
2016-03-06 06:32:54 +09:00
|
|
|
function findBlock(streamBytes, signature, startIndex) {
|
|
|
|
var streamBytesLength = streamBytes.length;
|
|
|
|
var signatureLength = signature.length;
|
|
|
|
var scanLength = streamBytesLength - signatureLength;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var i = startIndex,
|
|
|
|
j,
|
|
|
|
found = false;
|
2016-03-06 06:32:54 +09:00
|
|
|
while (i < scanLength) {
|
|
|
|
j = 0;
|
|
|
|
while (j < signatureLength && streamBytes[i + j] === signature[j]) {
|
|
|
|
j++;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (j >= signatureLength) {
|
|
|
|
// `signature` found, skip over whitespace.
|
2016-03-06 06:32:54 +09:00
|
|
|
i += j;
|
2020-02-10 17:38:57 +09:00
|
|
|
while (i < streamBytesLength && isWhiteSpace(streamBytes[i])) {
|
2016-03-06 06:32:54 +09:00
|
|
|
i++;
|
|
|
|
}
|
|
|
|
found = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
return {
|
2017-04-27 19:58:44 +09:00
|
|
|
found,
|
2016-03-06 06:32:54 +09:00
|
|
|
length: i,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function getHeaderBlock(stream, suggestedLength) {
|
|
|
|
var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];
|
|
|
|
|
|
|
|
var streamStartPos = stream.pos; // Save the initial stream position.
|
|
|
|
var headerBytes, headerBytesLength, block;
|
|
|
|
try {
|
|
|
|
headerBytes = stream.getBytes(suggestedLength);
|
|
|
|
headerBytesLength = headerBytes.length;
|
|
|
|
} catch (ex) {
|
|
|
|
if (ex instanceof MissingDataException) {
|
|
|
|
throw ex;
|
|
|
|
}
|
|
|
|
// Ignore errors if the `suggestedLength` is huge enough that a Uint8Array
|
|
|
|
// cannot hold the result of `getBytes`, and fallback to simply checking
|
|
|
|
// the entire stream (fixes issue3928.pdf).
|
|
|
|
}
|
|
|
|
|
|
|
|
if (headerBytesLength === suggestedLength) {
|
|
|
|
// Most of the time `suggestedLength` is correct, so to speed things up we
|
|
|
|
// initially only check the last few bytes to see if the header was found.
|
|
|
|
// Otherwise we (potentially) check the entire stream to prevent errors in
|
|
|
|
// `Type1Parser` (fixes issue5686.pdf).
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
block = findBlock(
|
|
|
|
headerBytes,
|
|
|
|
EEXEC_SIGNATURE,
|
|
|
|
suggestedLength - 2 * EEXEC_SIGNATURE.length
|
|
|
|
);
|
2016-03-06 06:32:54 +09:00
|
|
|
|
|
|
|
if (block.found && block.length === suggestedLength) {
|
|
|
|
return {
|
|
|
|
stream: new Stream(headerBytes),
|
|
|
|
length: suggestedLength,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
warn('Invalid "Length1" property in Type1 font -- trying to recover.');
|
|
|
|
stream.pos = streamStartPos; // Reset the stream position.
|
|
|
|
|
|
|
|
var SCAN_BLOCK_LENGTH = 2048;
|
|
|
|
var actualLength;
|
|
|
|
while (true) {
|
|
|
|
var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
|
|
|
|
block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);
|
|
|
|
|
|
|
|
if (block.length === 0) {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
stream.pos += block.length; // Update the stream position.
|
|
|
|
|
|
|
|
if (block.found) {
|
|
|
|
actualLength = stream.pos - streamStartPos;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
stream.pos = streamStartPos; // Reset the stream position.
|
|
|
|
|
|
|
|
if (actualLength) {
|
|
|
|
return {
|
|
|
|
stream: new Stream(stream.getBytes(actualLength)),
|
|
|
|
length: actualLength,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
warn('Unable to recover "Length1" property in Type1 font -- using as is.');
|
|
|
|
return {
|
|
|
|
stream: new Stream(stream.getBytes(suggestedLength)),
|
|
|
|
length: suggestedLength,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
function getEexecBlock(stream, suggestedLength) {
|
|
|
|
// We should ideally parse the eexec block to ensure that `suggestedLength`
|
|
|
|
// is correct, so we don't truncate the block data if it's too small.
|
|
|
|
// However, this would also require checking if the fixed-content portion
|
|
|
|
// exists (using the 'Length3' property), and ensuring that it's valid.
|
|
|
|
//
|
|
|
|
// Given that `suggestedLength` almost always is correct, all the validation
|
|
|
|
// would require a great deal of unnecessary parsing for most fonts.
|
|
|
|
// To save time, we always fetch the entire stream instead, which also avoid
|
|
|
|
// issues if `suggestedLength` is huge (see comment in `getHeaderBlock`).
|
|
|
|
//
|
|
|
|
// NOTE: This means that the function can include the fixed-content portion
|
|
|
|
// in the returned eexec block. In practice this does *not* seem to matter,
|
|
|
|
// since `Type1Parser_extractFontProgram` will skip over any non-commands.
|
|
|
|
var eexecBytes = stream.getBytes();
|
|
|
|
return {
|
|
|
|
stream: new Stream(eexecBytes),
|
|
|
|
length: eexecBytes.length,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
function Type1Font(name, file, properties) {
|
|
|
|
// Some bad generators embed pfb file as is, we have to strip 6-byte header.
|
|
|
|
// Also, length1 and length2 might be off by 6 bytes as well.
|
|
|
|
// http://www.math.ubc.ca/~cass/piscript/type1.pdf
|
|
|
|
var PFB_HEADER_SIZE = 6;
|
|
|
|
var headerBlockLength = properties.length1;
|
|
|
|
var eexecBlockLength = properties.length2;
|
|
|
|
var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
|
|
|
|
var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
|
|
|
|
if (pfbHeaderPresent) {
|
|
|
|
file.skip(PFB_HEADER_SIZE);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
headerBlockLength =
|
|
|
|
(pfbHeader[5] << 24) |
|
|
|
|
(pfbHeader[4] << 16) |
|
|
|
|
(pfbHeader[3] << 8) |
|
|
|
|
pfbHeader[2];
|
2016-03-06 00:11:17 +09:00
|
|
|
}
|
2013-10-31 23:10:08 +09:00
|
|
|
|
2016-07-17 21:33:41 +09:00
|
|
|
// Get the data block containing glyphs and subrs information
|
2016-03-06 06:32:54 +09:00
|
|
|
var headerBlock = getHeaderBlock(file, headerBlockLength);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var headerBlockParser = new Type1Parser(
|
|
|
|
headerBlock.stream,
|
|
|
|
false,
|
|
|
|
SEAC_ANALYSIS_ENABLED
|
|
|
|
);
|
2016-03-06 00:11:17 +09:00
|
|
|
headerBlockParser.extractFontHeader(properties);
|
2011-06-14 06:23:13 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
if (pfbHeaderPresent) {
|
|
|
|
pfbHeader = file.getBytes(PFB_HEADER_SIZE);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
eexecBlockLength =
|
|
|
|
(pfbHeader[5] << 24) |
|
|
|
|
(pfbHeader[4] << 16) |
|
|
|
|
(pfbHeader[3] << 8) |
|
|
|
|
pfbHeader[2];
|
2016-03-06 00:11:17 +09:00
|
|
|
}
|
2013-10-31 23:10:08 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
// Decrypt the data blocks and retrieve it's content
|
2016-03-06 06:32:54 +09:00
|
|
|
var eexecBlock = getEexecBlock(file, eexecBlockLength);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var eexecBlockParser = new Type1Parser(
|
|
|
|
eexecBlock.stream,
|
|
|
|
true,
|
|
|
|
SEAC_ANALYSIS_ENABLED
|
|
|
|
);
|
2019-09-18 16:44:18 +09:00
|
|
|
var data = eexecBlockParser.extractFontProgram(properties);
|
2016-03-06 00:11:17 +09:00
|
|
|
for (var info in data.properties) {
|
|
|
|
properties[info] = data.properties[info];
|
|
|
|
}
|
2011-06-16 06:02:30 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
var charstrings = data.charstrings;
|
|
|
|
var type2Charstrings = this.getType2Charstrings(charstrings);
|
|
|
|
var subrs = this.getType2Subrs(data.subrs);
|
2011-07-01 07:44:11 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
this.charstrings = charstrings;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
this.data = this.wrap(
|
|
|
|
name,
|
|
|
|
type2Charstrings,
|
|
|
|
this.charstrings,
|
|
|
|
subrs,
|
|
|
|
properties
|
|
|
|
);
|
2016-03-06 00:11:17 +09:00
|
|
|
this.seacs = this.getSeacs(data.charstrings);
|
|
|
|
}
|
2011-06-11 10:25:58 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
Type1Font.prototype = {
|
|
|
|
get numGlyphs() {
|
|
|
|
return this.charstrings.length + 1;
|
|
|
|
},
|
2014-02-12 03:27:09 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
getCharset: function Type1Font_getCharset() {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var charset = [".notdef"];
|
2016-03-06 00:11:17 +09:00
|
|
|
var charstrings = this.charstrings;
|
|
|
|
for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {
|
|
|
|
charset.push(charstrings[glyphId].glyphName);
|
|
|
|
}
|
|
|
|
return charset;
|
|
|
|
},
|
|
|
|
|
|
|
|
getGlyphMapping: function Type1Font_getGlyphMapping(properties) {
|
|
|
|
var charstrings = this.charstrings;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var glyphNames = [".notdef"],
|
|
|
|
glyphId;
|
2016-03-06 00:11:17 +09:00
|
|
|
for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
|
|
|
|
glyphNames.push(charstrings[glyphId].glyphName);
|
|
|
|
}
|
|
|
|
var encoding = properties.builtInEncoding;
|
|
|
|
if (encoding) {
|
|
|
|
var builtInEncoding = Object.create(null);
|
|
|
|
for (var charCode in encoding) {
|
|
|
|
glyphId = glyphNames.indexOf(encoding[charCode]);
|
|
|
|
if (glyphId >= 0) {
|
|
|
|
builtInEncoding[charCode] = glyphId;
|
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
}
|
2013-02-01 06:13:36 +09:00
|
|
|
}
|
2011-06-11 10:25:58 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);
|
|
|
|
},
|
2011-06-11 10:25:58 +09:00
|
|
|
|
2018-01-05 07:43:07 +09:00
|
|
|
hasGlyphId: function Type1Font_hasGlyphID(id) {
|
|
|
|
if (id < 0 || id >= this.numGlyphs) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
if (id === 0) {
|
|
|
|
// notdef is always defined.
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
var glyph = this.charstrings[id - 1];
|
|
|
|
return glyph.charstring.length > 0;
|
|
|
|
},
|
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
getSeacs: function Type1Font_getSeacs(charstrings) {
|
|
|
|
var i, ii;
|
|
|
|
var seacMap = [];
|
|
|
|
for (i = 0, ii = charstrings.length; i < ii; i++) {
|
|
|
|
var charstring = charstrings[i];
|
|
|
|
if (charstring.seac) {
|
|
|
|
// Offset by 1 for .notdef
|
|
|
|
seacMap[i + 1] = charstring.seac;
|
|
|
|
}
|
2013-02-27 03:00:20 +09:00
|
|
|
}
|
2016-03-06 00:11:17 +09:00
|
|
|
return seacMap;
|
|
|
|
},
|
2011-07-01 07:44:11 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
getType2Charstrings: function Type1Font_getType2Charstrings(
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
type1Charstrings
|
|
|
|
) {
|
2016-03-06 00:11:17 +09:00
|
|
|
var type2Charstrings = [];
|
|
|
|
for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {
|
|
|
|
type2Charstrings.push(type1Charstrings[i].charstring);
|
|
|
|
}
|
|
|
|
return type2Charstrings;
|
|
|
|
},
|
2011-07-01 07:44:11 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {
|
|
|
|
var bias = 0;
|
|
|
|
var count = type1Subrs.length;
|
|
|
|
if (count < 1133) {
|
|
|
|
bias = 107;
|
|
|
|
} else if (count < 33769) {
|
|
|
|
bias = 1131;
|
|
|
|
} else {
|
|
|
|
bias = 32768;
|
|
|
|
}
|
2011-07-01 07:44:11 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
// Add a bunch of empty subrs to deal with the Type2 bias
|
|
|
|
var type2Subrs = [];
|
|
|
|
var i;
|
|
|
|
for (i = 0; i < bias; i++) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
type2Subrs.push([0x0b]);
|
2016-03-06 00:11:17 +09:00
|
|
|
}
|
2012-12-21 04:14:10 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
for (i = 0; i < count; i++) {
|
|
|
|
type2Subrs.push(type1Subrs[i]);
|
2014-03-18 01:34:30 +09:00
|
|
|
}
|
2016-03-06 00:11:17 +09:00
|
|
|
|
|
|
|
return type2Subrs;
|
|
|
|
},
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
wrap: function Type1Font_wrap(
|
|
|
|
name,
|
|
|
|
glyphs,
|
|
|
|
charstrings,
|
|
|
|
subrs,
|
|
|
|
properties
|
|
|
|
) {
|
2016-03-06 00:11:17 +09:00
|
|
|
var cff = new CFF();
|
|
|
|
cff.header = new CFFHeader(1, 0, 4, 4);
|
|
|
|
|
|
|
|
cff.names = [name];
|
|
|
|
|
|
|
|
var topDict = new CFFTopDict();
|
|
|
|
// CFF strings IDs 0...390 are predefined names, so refering
|
|
|
|
// to entries in our own String INDEX starts at SID 391.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
topDict.setByName("version", 391);
|
|
|
|
topDict.setByName("Notice", 392);
|
|
|
|
topDict.setByName("FullName", 393);
|
|
|
|
topDict.setByName("FamilyName", 394);
|
|
|
|
topDict.setByName("Weight", 395);
|
|
|
|
topDict.setByName("Encoding", null); // placeholder
|
|
|
|
topDict.setByName("FontMatrix", properties.fontMatrix);
|
|
|
|
topDict.setByName("FontBBox", properties.bbox);
|
|
|
|
topDict.setByName("charset", null); // placeholder
|
|
|
|
topDict.setByName("CharStrings", null); // placeholder
|
|
|
|
topDict.setByName("Private", null); // placeholder
|
2016-03-06 00:11:17 +09:00
|
|
|
cff.topDict = topDict;
|
|
|
|
|
|
|
|
var strings = new CFFStrings();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
strings.add("Version 0.11"); // Version
|
|
|
|
strings.add("See original notice"); // Notice
|
2016-03-06 00:11:17 +09:00
|
|
|
strings.add(name); // FullName
|
|
|
|
strings.add(name); // FamilyName
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
strings.add("Medium"); // Weight
|
2016-03-06 00:11:17 +09:00
|
|
|
cff.strings = strings;
|
|
|
|
|
|
|
|
cff.globalSubrIndex = new CFFIndex();
|
|
|
|
|
|
|
|
var count = glyphs.length;
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
var charsetArray = [".notdef"];
|
2016-03-06 00:11:17 +09:00
|
|
|
var i, ii;
|
|
|
|
for (i = 0; i < count; i++) {
|
2020-01-24 17:48:21 +09:00
|
|
|
const glyphName = charstrings[i].glyphName;
|
|
|
|
const index = CFFStandardStrings.indexOf(glyphName);
|
2016-03-06 00:11:17 +09:00
|
|
|
if (index === -1) {
|
2019-03-02 02:38:35 +09:00
|
|
|
strings.add(glyphName);
|
2016-03-06 00:11:17 +09:00
|
|
|
}
|
2019-03-02 02:38:35 +09:00
|
|
|
charsetArray.push(glyphName);
|
2016-03-06 00:11:17 +09:00
|
|
|
}
|
2019-02-27 08:57:46 +09:00
|
|
|
cff.charset = new CFFCharset(false, 0, charsetArray);
|
2016-03-06 00:11:17 +09:00
|
|
|
|
|
|
|
var charStringsIndex = new CFFIndex();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
charStringsIndex.add([0x8b, 0x0e]); // .notdef
|
2016-03-06 00:11:17 +09:00
|
|
|
for (i = 0; i < count; i++) {
|
2018-01-05 07:43:07 +09:00
|
|
|
charStringsIndex.add(glyphs[i]);
|
2016-03-06 00:11:17 +09:00
|
|
|
}
|
|
|
|
cff.charStrings = charStringsIndex;
|
|
|
|
|
|
|
|
var privateDict = new CFFPrivateDict();
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
privateDict.setByName("Subrs", null); // placeholder
|
2016-03-06 00:11:17 +09:00
|
|
|
var fields = [
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
"BlueValues",
|
|
|
|
"OtherBlues",
|
|
|
|
"FamilyBlues",
|
|
|
|
"FamilyOtherBlues",
|
|
|
|
"StemSnapH",
|
|
|
|
"StemSnapV",
|
|
|
|
"BlueShift",
|
|
|
|
"BlueFuzz",
|
|
|
|
"BlueScale",
|
|
|
|
"LanguageGroup",
|
|
|
|
"ExpansionFactor",
|
|
|
|
"ForceBold",
|
|
|
|
"StdHW",
|
|
|
|
"StdVW",
|
2016-03-06 00:11:17 +09:00
|
|
|
];
|
|
|
|
for (i = 0, ii = fields.length; i < ii; i++) {
|
|
|
|
var field = fields[i];
|
|
|
|
if (!(field in properties.privateData)) {
|
|
|
|
continue;
|
2013-03-29 07:05:03 +09:00
|
|
|
}
|
2016-03-06 00:11:17 +09:00
|
|
|
var value = properties.privateData[field];
|
2017-09-02 03:27:13 +09:00
|
|
|
if (Array.isArray(value)) {
|
2016-03-06 00:11:17 +09:00
|
|
|
// All of the private dictionary array data in CFF must be stored as
|
|
|
|
// "delta-encoded" numbers.
|
|
|
|
for (var j = value.length - 1; j > 0; j--) {
|
|
|
|
value[j] -= value[j - 1]; // ... difference from previous value
|
|
|
|
}
|
|
|
|
}
|
|
|
|
privateDict.setByName(field, value);
|
2013-03-29 07:05:03 +09:00
|
|
|
}
|
2016-03-06 00:11:17 +09:00
|
|
|
cff.topDict.privateDict = privateDict;
|
2011-06-12 07:54:47 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
var subrIndex = new CFFIndex();
|
|
|
|
for (i = 0, ii = subrs.length; i < ii; i++) {
|
|
|
|
subrIndex.add(subrs[i]);
|
|
|
|
}
|
|
|
|
privateDict.subrsIndex = subrIndex;
|
|
|
|
|
|
|
|
var compiler = new CFFCompiler(cff);
|
|
|
|
return compiler.compile();
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
},
|
2016-03-06 00:11:17 +09:00
|
|
|
};
|
2011-06-12 05:08:30 +09:00
|
|
|
|
2016-03-06 00:11:17 +09:00
|
|
|
return Type1Font;
|
|
|
|
})();
|
2011-06-10 15:40:28 +09:00
|
|
|
|
2012-03-11 12:37:22 +09:00
|
|
|
var CFFFont = (function CFFFontClosure() {
|
|
|
|
function CFFFont(file, properties) {
|
2011-07-21 07:00:16 +09:00
|
|
|
this.properties = properties;
|
2011-08-09 05:13:32 +09:00
|
|
|
|
2016-04-01 02:53:07 +09:00
|
|
|
var parser = new CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);
|
2013-05-02 08:42:25 +09:00
|
|
|
this.cff = parser.parse();
|
2018-01-05 07:43:07 +09:00
|
|
|
this.cff.duplicateFirstGlyph();
|
2013-05-02 08:42:25 +09:00
|
|
|
var compiler = new CFFCompiler(this.cff);
|
2014-02-12 03:27:09 +09:00
|
|
|
this.seacs = this.cff.seacs;
|
2012-03-11 12:12:33 +09:00
|
|
|
try {
|
|
|
|
this.data = compiler.compile();
|
|
|
|
} catch (e) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
warn("Failed to compile font " + properties.loadedName);
|
2012-03-11 12:12:33 +09:00
|
|
|
// There may have just been an issue with the compiler, set the data
|
|
|
|
// anyway and hope the font loaded.
|
|
|
|
this.data = file;
|
|
|
|
}
|
2011-09-12 05:04:17 +09:00
|
|
|
}
|
2011-07-16 00:58:09 +09:00
|
|
|
|
2012-03-11 12:37:22 +09:00
|
|
|
CFFFont.prototype = {
|
2014-02-12 03:27:09 +09:00
|
|
|
get numGlyphs() {
|
|
|
|
return this.cff.charStrings.count;
|
2011-07-16 00:58:09 +09:00
|
|
|
},
|
2014-02-12 03:27:09 +09:00
|
|
|
getCharset: function CFFFont_getCharset() {
|
|
|
|
return this.cff.charset.charset;
|
2011-07-16 00:58:09 +09:00
|
|
|
},
|
2014-02-12 03:27:09 +09:00
|
|
|
getGlyphMapping: function CFFFont_getGlyphMapping() {
|
2013-05-02 08:42:25 +09:00
|
|
|
var cff = this.cff;
|
2014-04-10 01:17:50 +09:00
|
|
|
var properties = this.properties;
|
2013-05-02 08:42:25 +09:00
|
|
|
var charsets = cff.charset.charset;
|
2014-04-10 01:17:50 +09:00
|
|
|
var charCodeToGlyphId;
|
2014-04-08 06:42:54 +09:00
|
|
|
var glyphId;
|
2014-02-12 03:27:09 +09:00
|
|
|
|
2014-04-10 01:17:50 +09:00
|
|
|
if (properties.composite) {
|
|
|
|
charCodeToGlyphId = Object.create(null);
|
2019-03-27 02:38:44 +09:00
|
|
|
let charCode;
|
2014-04-10 01:17:50 +09:00
|
|
|
if (cff.isCIDFont) {
|
2013-10-01 13:40:28 +09:00
|
|
|
// If the font is actually a CID font then we should use the charset
|
|
|
|
// to map CIDs to GIDs.
|
2014-04-08 06:42:54 +09:00
|
|
|
for (glyphId = 0; glyphId < charsets.length; glyphId++) {
|
2014-08-01 15:46:37 +09:00
|
|
|
var cid = charsets[glyphId];
|
2019-03-27 02:38:44 +09:00
|
|
|
charCode = properties.cMap.charCodeOf(cid);
|
2014-02-12 03:27:09 +09:00
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
|
|
|
}
|
2013-05-02 08:42:25 +09:00
|
|
|
} else {
|
2013-10-01 13:40:28 +09:00
|
|
|
// If it is NOT actually a CID font then CIDs should be mapped
|
|
|
|
// directly to GIDs.
|
2014-04-08 06:42:54 +09:00
|
|
|
for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
|
2019-03-27 02:38:44 +09:00
|
|
|
charCode = properties.cMap.charCodeOf(glyphId);
|
|
|
|
charCodeToGlyphId[charCode] = glyphId;
|
2013-08-23 02:12:16 +09:00
|
|
|
}
|
2011-10-20 03:14:13 +09:00
|
|
|
}
|
2014-02-12 03:27:09 +09:00
|
|
|
return charCodeToGlyphId;
|
2011-10-20 03:14:13 +09:00
|
|
|
}
|
|
|
|
|
2014-02-12 03:27:09 +09:00
|
|
|
var encoding = cff.encoding ? cff.encoding.encoding : null;
|
2014-04-10 01:17:50 +09:00
|
|
|
charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);
|
|
|
|
return charCodeToGlyphId;
|
Fix inconsistent spacing and trailing commas in objects in `src/core/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
*Unfortunately this patch is fairly big, even though it only covers the `src/core` folder, but splitting it even further seemed difficult.*
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint --fix command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index abab9027..dcd3594b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -2785,7 +2785,8 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false, };
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false, };
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false, };
- t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false, };
+ t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1,
+ variableArgs: false, };
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false, };
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false, };
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false, };
diff --git a/src/core/jbig2.js b/src/core/jbig2.js
index 5a17d482..71671541 100644
--- a/src/core/jbig2.js
+++ b/src/core/jbig2.js
@@ -123,19 +123,22 @@ var Jbig2Image = (function Jbig2ImageClosure() {
{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -2, y: 0, },
{ x: -1, y: 0, }],
[{ x: -3, y: -1, }, { x: -2, y: -1, }, { x: -1, y: -1, }, { x: 0, y: -1, },
- { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, }, { x: -1, y: 0, }]
+ { x: 1, y: -1, }, { x: -4, y: 0, }, { x: -3, y: 0, }, { x: -2, y: 0, },
+ { x: -1, y: 0, }]
];
var RefinementTemplates = [
{
coding: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
- { x: 1, y: 0, }, { x: -1, y: 1, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
+ reference: [{ x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, },
+ { x: 0, y: 0, }, { x: 1, y: 0, }, { x: -1, y: 1, },
+ { x: 0, y: 1, }, { x: 1, y: 1, }],
},
{
- coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, }, { x: -1, y: 0, }],
- reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, }, { x: 1, y: 0, },
- { x: 0, y: 1, }, { x: 1, y: 1, }],
+ coding: [{ x: -1, y: -1, }, { x: 0, y: -1, }, { x: 1, y: -1, },
+ { x: -1, y: 0, }],
+ reference: [{ x: 0, y: -1, }, { x: -1, y: 0, }, { x: 0, y: 0, },
+ { x: 1, y: 0, }, { x: 0, y: 1, }, { x: 1, y: 1, }],
}
];
```
2017-06-02 18:16:24 +09:00
|
|
|
},
|
2018-01-05 07:43:07 +09:00
|
|
|
hasGlyphId: function CFFFont_hasGlyphID(id) {
|
|
|
|
return this.cff.hasGlyphId(id);
|
|
|
|
},
|
2012-03-11 12:12:33 +09:00
|
|
|
};
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2012-03-11 12:37:22 +09:00
|
|
|
return CFFFont;
|
2012-03-11 12:12:33 +09:00
|
|
|
})();
|
2011-10-29 10:38:31 +09:00
|
|
|
|
2017-04-02 23:14:30 +09:00
|
|
|
export {
|
|
|
|
SEAC_ANALYSIS_ENABLED,
|
|
|
|
ErrorFont,
|
|
|
|
Font,
|
|
|
|
FontFlags,
|
|
|
|
ToUnicodeMap,
|
|
|
|
IdentityToUnicodeMap,
|
|
|
|
getFontType,
|
|
|
|
};
|