postext 1.33.2 → 1.33.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/linearScans.test.d.ts +2 -0
- package/dist/__tests__/linearScans.test.d.ts.map +1 -0
- package/dist/__tests__/linearScans.test.js +112 -0
- package/dist/__tests__/linearScans.test.js.map +1 -0
- package/dist/__tests__/pipeline/refLabelBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/refLabelBreaks.test.js.map +1 -1
- package/dist/__tests__/svgFonts.test.js +1 -1
- package/dist/__tests__/svgFonts.test.js.map +1 -1
- package/dist/bundle/api.d.ts.map +1 -1
- package/dist/bundle/api.js +51 -5
- package/dist/bundle/api.js.map +1 -1
- package/dist/bundle/configVersion.d.ts.map +1 -1
- package/dist/bundle/configVersion.js +12 -4
- package/dist/bundle/configVersion.js.map +1 -1
- package/dist/bundle/manifest.d.ts.map +1 -1
- package/dist/bundle/manifest.js +15 -1
- package/dist/bundle/manifest.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +2 -1
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/verticalText.d.ts.map +1 -1
- package/dist/canvas-backend/verticalText.js +8 -3
- package/dist/canvas-backend/verticalText.js.map +1 -1
- package/dist/citations/bibtex.d.ts.map +1 -1
- package/dist/citations/bibtex.js +31 -10
- package/dist/citations/bibtex.js.map +1 -1
- package/dist/code/highlight.js +62 -12
- package/dist/code/highlight.js.map +1 -1
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +2 -1
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/comics/page.js +1 -1
- package/dist/comics/paint.d.ts.map +1 -1
- package/dist/comics/paint.js +3 -1
- package/dist/comics/paint.js.map +1 -1
- package/dist/comics/script.d.ts.map +1 -1
- package/dist/comics/script.js +5 -2
- package/dist/comics/script.js.map +1 -1
- package/dist/comics/split.d.ts.map +1 -1
- package/dist/comics/split.js +3 -1
- package/dist/comics/split.js.map +1 -1
- package/dist/comics/strip.d.ts.map +1 -1
- package/dist/comics/strip.js +3 -2
- package/dist/comics/strip.js.map +1 -1
- package/dist/contrast.js +3 -3
- package/dist/contrast.js.map +1 -1
- package/dist/design/layout.js +2 -2
- package/dist/design/layout.js.map +1 -1
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +9 -9
- package/dist/frontmatter.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +55 -4
- package/dist/html-backend.js.map +1 -1
- package/dist/looseLines.d.ts.map +1 -1
- package/dist/looseLines.js +2 -2
- package/dist/looseLines.js.map +1 -1
- package/dist/measure/breakRules.d.ts.map +1 -1
- package/dist/measure/breakRules.js +3 -2
- package/dist/measure/breakRules.js.map +1 -1
- package/dist/measure/cjkAnnotate.d.ts.map +1 -1
- package/dist/measure/cjkAnnotate.js +3 -2
- package/dist/measure/cjkAnnotate.js.map +1 -1
- package/dist/measure/cjkCompose.d.ts.map +1 -1
- package/dist/measure/cjkCompose.js +5 -5
- package/dist/measure/cjkCompose.js.map +1 -1
- package/dist/measure/font.d.ts.map +1 -1
- package/dist/measure/font.js +2 -1
- package/dist/measure/font.js.map +1 -1
- package/dist/measure/fontString.d.ts +29 -0
- package/dist/measure/fontString.d.ts.map +1 -1
- package/dist/measure/fontString.js +156 -7
- package/dist/measure/fontString.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +12 -14
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/vertical.d.ts.map +1 -1
- package/dist/measure/vertical.js +5 -5
- package/dist/measure/vertical.js.map +1 -1
- package/dist/parse/citations.d.ts.map +1 -1
- package/dist/parse/citations.js +5 -1
- package/dist/parse/citations.js.map +1 -1
- package/dist/parse/equationLabels.d.ts +11 -3
- package/dist/parse/equationLabels.d.ts.map +1 -1
- package/dist/parse/equationLabels.js +26 -17
- package/dist/parse/equationLabels.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +26 -0
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +216 -49
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +4 -5
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/crossRefs.d.ts.map +1 -1
- package/dist/pipeline/crossRefs.js +9 -1
- package/dist/pipeline/crossRefs.js.map +1 -1
- package/dist/pipeline/headerFooter.js +3 -3
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/parts.d.ts.map +1 -1
- package/dist/pipeline/parts.js +13 -1
- package/dist/pipeline/parts.js.map +1 -1
- package/dist/pipeline/placeholders.js +4 -4
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/pipeline/statementNumbering.d.ts.map +1 -1
- package/dist/pipeline/statementNumbering.js +6 -13
- package/dist/pipeline/statementNumbering.js.map +1 -1
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +3 -2
- package/dist/preflight.js.map +1 -1
- package/dist/table/model.d.ts.map +1 -1
- package/dist/table/model.js +13 -3
- package/dist/table/model.js.map +1 -1
- package/dist/word/inline.d.ts.map +1 -1
- package/dist/word/inline.js +26 -4
- package/dist/word/inline.js.map +1 -1
- package/dist/word/template.d.ts.map +1 -1
- package/dist/word/template.js +61 -4
- package/dist/word/template.js.map +1 -1
- package/dist/word/toDocx.d.ts.map +1 -1
- package/dist/word/toDocx.js +54 -1
- package/dist/word/toDocx.js.map +1 -1
- package/package.json +1 -1
package/dist/measure/font.js
CHANGED
|
@@ -83,8 +83,9 @@ export function quoteFamily(fontFamily) {
|
|
|
83
83
|
const f = primaryFontFamily(fontFamily).trim();
|
|
84
84
|
if (/^["'].*["']$/.test(f))
|
|
85
85
|
return f;
|
|
86
|
+
// A CSS string: a backslash escapes, so it is escaped first.
|
|
86
87
|
if (/(^|\s)\d/.test(f) || /[^\w\s-]/.test(f))
|
|
87
|
-
return `"${f.replace(/"/g, '\\"')}"`;
|
|
88
|
+
return `"${f.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
88
89
|
return f;
|
|
89
90
|
}
|
|
90
91
|
/**
|
package/dist/measure/font.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font.js","sourceRoot":"","sources":["../../src/measure/font.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"font.js","sourceRoot":"","sources":["../../src/measure/font.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,35 @@ export interface FontFaceRequest {
|
|
|
5
5
|
weight: number;
|
|
6
6
|
style: 'normal' | 'italic';
|
|
7
7
|
}
|
|
8
|
+
/** A font's `<n>px` size: `font.slice(start, end)` is the whole match and
|
|
9
|
+
* `value` its number. */
|
|
10
|
+
export interface PxSize {
|
|
11
|
+
start: number;
|
|
12
|
+
end: number;
|
|
13
|
+
value: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The first `px` size of a CSS font string from `from` on, as
|
|
17
|
+
* `/(\d*\.?\d+)px/` finds it (`/(\d+(?:\.\d+)?)px/` with
|
|
18
|
+
* `leadingDigit`), or null. A scan in one pass: the expression's leading
|
|
19
|
+
* repetition is slow on a long run of digits with no unit after it.
|
|
20
|
+
*/
|
|
21
|
+
export declare function findPxSize(font: string, from?: number, leadingDigit?: boolean): PxSize | null;
|
|
22
|
+
/** `font` with its first `px` size (see {@link findPxSize}) set to
|
|
23
|
+
* `sizePx`. */
|
|
24
|
+
export declare function withPxSize(font: string, sizePx: (value: string) => number): string;
|
|
25
|
+
/**
|
|
26
|
+
* A font shorthand split at its size, as
|
|
27
|
+
* `/^(.*?)(\d*\.?\d+)px\s+(.+)$/` splits it (with `lineHeight`,
|
|
28
|
+
* `/^(.*?)(\d*\.?\d+)px(\s*\/\s*[^\s]+)?\s+(.+)$/`): `prefix` the style
|
|
29
|
+
* and weight words before the size (its spaces kept), `family` the family
|
|
30
|
+
* list after it (and after a `/ line-height`). Null when the string has no
|
|
31
|
+
* such size. A scan in one pass, where the expressions backtrack.
|
|
32
|
+
*/
|
|
33
|
+
export declare function splitAtFontSize(font: string, lineHeight?: boolean): {
|
|
34
|
+
prefix: string;
|
|
35
|
+
family: string;
|
|
36
|
+
} | null;
|
|
8
37
|
/** The face a canvas font shorthand names (`'700 37.5px Open Sans'`,
|
|
9
38
|
* `'italic 400 13px "Source Serif 4"'`), or null when the string has no
|
|
10
39
|
* `px` size. A string with no weight is 400; `bold` is 700. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fontString.d.ts","sourceRoot":"","sources":["../../src/measure/fontString.ts"],"names":[],"mappings":"AAIA;yCACyC;AACzC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"fontString.d.ts","sourceRoot":"","sources":["../../src/measure/fontString.ts"],"names":[],"mappings":"AAIA;yCACyC;AACzC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAoBD;0BAC0B;AAC1B,MAAM,WAAW,MAAM;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAgBD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,YAAY,UAAQ,GAAG,MAAM,GAAG,IAAI,CAMtF;AAED;gBACgB;AAChB,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAGlF;AAmBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAyB3G;AAiDD;;gEAEgE;AAChE,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAgBpE;AAED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG5D"}
|
|
@@ -1,7 +1,155 @@
|
|
|
1
1
|
// What a canvas font shorthand asks for (#629): the family, weight and
|
|
2
2
|
// slant the engine measured a run with, read back from the strings
|
|
3
3
|
// `buildFontString` writes (`italic 700 12.5px "Optima 105"`).
|
|
4
|
-
const
|
|
4
|
+
const isDigit = (code) => code >= 48 && code <= 57;
|
|
5
|
+
/** `\s` as a regular expression reads it (`trim` strips the same set). */
|
|
6
|
+
function isSpace(c) {
|
|
7
|
+
return c !== undefined && c !== '' && c.trim() === '';
|
|
8
|
+
}
|
|
9
|
+
/** A line terminator: what a regular expression's `.` never matches. */
|
|
10
|
+
function isLineTerminator(c) {
|
|
11
|
+
return c === '\n' || c === '\r' || c === '\u2028' || c === '\u2029';
|
|
12
|
+
}
|
|
13
|
+
/** The last line terminator of `s`, -1 when it has none. */
|
|
14
|
+
function lastLineTerminator(s) {
|
|
15
|
+
for (let i = s.length - 1; i >= 0; i--)
|
|
16
|
+
if (isLineTerminator(s[i]))
|
|
17
|
+
return i;
|
|
18
|
+
return -1;
|
|
19
|
+
}
|
|
20
|
+
/** Where the number of a `px` at `p` begins, read back from it as far as
|
|
21
|
+
* `from`: `\d*\.?\d+`, or `\d+(?:\.\d+)?` with `leadingDigit`; -1 when
|
|
22
|
+
* no digit stands before the unit. */
|
|
23
|
+
function pxNumberStart(font, p, from, leadingDigit) {
|
|
24
|
+
let s = p;
|
|
25
|
+
while (s > from && isDigit(font.charCodeAt(s - 1)))
|
|
26
|
+
s--;
|
|
27
|
+
if (s === p)
|
|
28
|
+
return -1;
|
|
29
|
+
if (s > from && font[s - 1] === '.' && (!leadingDigit || (s - 1 > from && isDigit(font.charCodeAt(s - 2))))) {
|
|
30
|
+
s--;
|
|
31
|
+
while (s > from && isDigit(font.charCodeAt(s - 1)))
|
|
32
|
+
s--;
|
|
33
|
+
}
|
|
34
|
+
return s;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The first `px` size of a CSS font string from `from` on, as
|
|
38
|
+
* `/(\d*\.?\d+)px/` finds it (`/(\d+(?:\.\d+)?)px/` with
|
|
39
|
+
* `leadingDigit`), or null. A scan in one pass: the expression's leading
|
|
40
|
+
* repetition is slow on a long run of digits with no unit after it.
|
|
41
|
+
*/
|
|
42
|
+
export function findPxSize(font, from = 0, leadingDigit = false) {
|
|
43
|
+
for (let p = font.indexOf('px', from); p >= 0; p = font.indexOf('px', p + 1)) {
|
|
44
|
+
const start = pxNumberStart(font, p, from, leadingDigit);
|
|
45
|
+
if (start >= 0)
|
|
46
|
+
return { start, end: p + 2, value: font.slice(start, p) };
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/** `font` with its first `px` size (see {@link findPxSize}) set to
|
|
51
|
+
* `sizePx`. */
|
|
52
|
+
export function withPxSize(font, sizePx) {
|
|
53
|
+
const m = findPxSize(font);
|
|
54
|
+
return m ? `${font.slice(0, m.start)}${sizePx(m.value)}px${font.slice(m.end)}` : font;
|
|
55
|
+
}
|
|
56
|
+
/** The `(.+)` of `\s+(.+)$` read from `i`, or undefined: what follows the
|
|
57
|
+
* spaces, or the last space when they end the string; never across a line
|
|
58
|
+
* terminator (`lastBreak`: the string's last one). */
|
|
59
|
+
function spacedTail(s, i, lastBreak) {
|
|
60
|
+
let j = i;
|
|
61
|
+
while (j < s.length && isSpace(s[j]))
|
|
62
|
+
j++;
|
|
63
|
+
const k = j < s.length ? j : j - 1;
|
|
64
|
+
if (k <= i || lastBreak >= k)
|
|
65
|
+
return undefined;
|
|
66
|
+
return s.slice(k);
|
|
67
|
+
}
|
|
68
|
+
/** The end of the run of non-spaces at `i`. */
|
|
69
|
+
function wordEnd(s, i) {
|
|
70
|
+
while (i < s.length && !isSpace(s[i]))
|
|
71
|
+
i++;
|
|
72
|
+
return i;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* A font shorthand split at its size, as
|
|
76
|
+
* `/^(.*?)(\d*\.?\d+)px\s+(.+)$/` splits it (with `lineHeight`,
|
|
77
|
+
* `/^(.*?)(\d*\.?\d+)px(\s*\/\s*[^\s]+)?\s+(.+)$/`): `prefix` the style
|
|
78
|
+
* and weight words before the size (its spaces kept), `family` the family
|
|
79
|
+
* list after it (and after a `/ line-height`). Null when the string has no
|
|
80
|
+
* such size. A scan in one pass, where the expressions backtrack.
|
|
81
|
+
*/
|
|
82
|
+
export function splitAtFontSize(font, lineHeight = false) {
|
|
83
|
+
const lastBreak = lastLineTerminator(font);
|
|
84
|
+
let firstBreak = -1;
|
|
85
|
+
for (let i = 0; i < font.length && firstBreak < 0; i++)
|
|
86
|
+
if (isLineTerminator(font[i]))
|
|
87
|
+
firstBreak = i;
|
|
88
|
+
for (let p = font.indexOf('px'); p >= 0; p = font.indexOf('px', p + 1)) {
|
|
89
|
+
const start = pxNumberStart(font, p, 0, false);
|
|
90
|
+
if (start < 0)
|
|
91
|
+
continue;
|
|
92
|
+
// The prefix (`.*?`) never crosses a line terminator, nor would any
|
|
93
|
+
// later size's.
|
|
94
|
+
if (firstBreak >= 0 && firstBreak < start)
|
|
95
|
+
return null;
|
|
96
|
+
let family;
|
|
97
|
+
if (lineHeight) {
|
|
98
|
+
let i = p + 2;
|
|
99
|
+
while (i < font.length && isSpace(font[i]))
|
|
100
|
+
i++;
|
|
101
|
+
if (font[i] === '/') {
|
|
102
|
+
i++;
|
|
103
|
+
while (i < font.length && isSpace(font[i]))
|
|
104
|
+
i++;
|
|
105
|
+
const end = wordEnd(font, i);
|
|
106
|
+
if (end > i)
|
|
107
|
+
family = spacedTail(font, end, lastBreak);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
family ??= spacedTail(font, p + 2, lastBreak);
|
|
111
|
+
if (family !== undefined)
|
|
112
|
+
return { prefix: font.slice(0, start), family };
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
/** The family list of a trimmed font shorthand and where its size begins,
|
|
117
|
+
* as `/(?:^|\s)\d*\.?\d+px(?:\/\S+)?\s+(.+)$/` reads it (`at`: the
|
|
118
|
+
* match's start, the space before the size or 0). */
|
|
119
|
+
function familyAfterSize(font) {
|
|
120
|
+
const lastBreak = lastLineTerminator(font);
|
|
121
|
+
for (let at = 0; at < font.length; at++) {
|
|
122
|
+
// The size opens the string or follows a space.
|
|
123
|
+
const b = at === 0 && !isSpace(font[0]) ? 0 : isSpace(font[at]) ? at + 1 : -1;
|
|
124
|
+
if (b < 0)
|
|
125
|
+
continue;
|
|
126
|
+
let i = b;
|
|
127
|
+
while (isDigit(font.charCodeAt(i)))
|
|
128
|
+
i++;
|
|
129
|
+
if (font[i] === '.') {
|
|
130
|
+
const d = ++i;
|
|
131
|
+
while (isDigit(font.charCodeAt(i)))
|
|
132
|
+
i++;
|
|
133
|
+
if (i === d)
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
else if (i === b)
|
|
137
|
+
continue;
|
|
138
|
+
if (font[i] !== 'p' || font[i + 1] !== 'x')
|
|
139
|
+
continue;
|
|
140
|
+
i += 2;
|
|
141
|
+
if (font[i] === '/') {
|
|
142
|
+
const end = wordEnd(font, i + 1);
|
|
143
|
+
if (end === i + 1)
|
|
144
|
+
continue;
|
|
145
|
+
i = end;
|
|
146
|
+
}
|
|
147
|
+
const family = spacedTail(font, i, lastBreak);
|
|
148
|
+
if (family !== undefined)
|
|
149
|
+
return { family, at };
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
5
153
|
/** The family of a CSS family list's first entry, unquoted. */
|
|
6
154
|
function firstFamily(list) {
|
|
7
155
|
let quote;
|
|
@@ -20,19 +168,20 @@ function firstFamily(list) {
|
|
|
20
168
|
}
|
|
21
169
|
}
|
|
22
170
|
const f = list.trim();
|
|
23
|
-
return /^(["']).*\1$/.test(f) ? f.slice(1, -1).replace(/\\(["'])/g, '$1') : f;
|
|
171
|
+
return /^(["']).*\1$/.test(f) ? f.slice(1, -1).replace(/\\(["'\\])/g, '$1') : f;
|
|
24
172
|
}
|
|
25
173
|
/** The face a canvas font shorthand names (`'700 37.5px Open Sans'`,
|
|
26
174
|
* `'italic 400 13px "Source Serif 4"'`), or null when the string has no
|
|
27
175
|
* `px` size. A string with no weight is 400; `bold` is 700. */
|
|
28
176
|
export function parseFontString(font) {
|
|
29
|
-
const
|
|
177
|
+
const trimmed = font.trim();
|
|
178
|
+
const m = familyAfterSize(trimmed);
|
|
30
179
|
if (!m)
|
|
31
180
|
return null;
|
|
32
|
-
const family = firstFamily(m
|
|
181
|
+
const family = firstFamily(m.family);
|
|
33
182
|
if (!family)
|
|
34
183
|
return null;
|
|
35
|
-
const prefix = font.slice(0, font.length - m
|
|
184
|
+
const prefix = font.slice(0, font.length - (trimmed.length - m.at)).trim().split(/\s+/);
|
|
36
185
|
let weight = 400;
|
|
37
186
|
let style = 'normal';
|
|
38
187
|
for (const token of prefix) {
|
|
@@ -49,7 +198,7 @@ export function parseFontString(font) {
|
|
|
49
198
|
}
|
|
50
199
|
/** The family of a canvas font shorthand, or null. */
|
|
51
200
|
export function fontStringFamily(font) {
|
|
52
|
-
const m =
|
|
53
|
-
return m ? firstFamily(m
|
|
201
|
+
const m = familyAfterSize(font.trim());
|
|
202
|
+
return m ? firstFamily(m.family) || null : null;
|
|
54
203
|
}
|
|
55
204
|
//# sourceMappingURL=fontString.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fontString.js","sourceRoot":"","sources":["../../src/measure/fontString.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,mEAAmE;AACnE,+DAA+D;AAU/D,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"fontString.js","sourceRoot":"","sources":["../../src/measure/fontString.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rich.d.ts","sourceRoot":"","sources":["../../src/measure/rich.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,kBAAkB,EAAe,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAc,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAG9G,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ3C,OAAO,EAAmF,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"rich.d.ts","sourceRoot":"","sources":["../../src/measure/rich.ts"],"names":[],"mappings":"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"}
|
package/dist/measure/rich.js
CHANGED
|
@@ -12,6 +12,7 @@ import { isRuntLastLine } from './runts';
|
|
|
12
12
|
import { hasOverfullLine } from './plain';
|
|
13
13
|
import { justifiedSpaceRatios } from './spaceRatios';
|
|
14
14
|
import { quoteFamily } from './font';
|
|
15
|
+
import { findPxSize, splitAtFontSize, withPxSize } from './fontString';
|
|
15
16
|
import { trimChipLineEdges } from './chipEdges';
|
|
16
17
|
import { directChipRuns, measuresRunsAsPainted, paintedRunWidth } from '../design/bidiText';
|
|
17
18
|
import { cjkJoinBreaks, hasCJK } from './cjk';
|
|
@@ -39,8 +40,8 @@ export function isSwatchFill(color) {
|
|
|
39
40
|
/** Side of an inline colour swatch: three quarters of the font size (the
|
|
40
41
|
* height of a capital), read from the `px` size of the CSS font string. */
|
|
41
42
|
export function swatchSidePx(font) {
|
|
42
|
-
const m =
|
|
43
|
-
const size = m ? Number(m
|
|
43
|
+
const m = findPxSize(font);
|
|
44
|
+
const size = m ? Number(m.value) : 16;
|
|
44
45
|
return Math.max(1, size * 0.75);
|
|
45
46
|
}
|
|
46
47
|
export function pickSpanFont(bold, italic, normalFont, boldFont, italicFont, boldItalicFont) {
|
|
@@ -67,19 +68,17 @@ export const SUBSCRIPT_SHIFT_RATIO = 0.15;
|
|
|
67
68
|
* of the text size instead: 0.25 em, TeX's drop for a subscript with a
|
|
68
69
|
* superscript over it (σ17, 0.247 em), which clears room between the two. */
|
|
69
70
|
export const STACKED_SUBSCRIPT_SHIFT_RATIO = 0.25;
|
|
70
|
-
const FONT_SIZE_RE = /(\d*\.?\d+)px/;
|
|
71
71
|
/** `font` at `scale` times its size. */
|
|
72
72
|
export function scaledFont(font, scale) {
|
|
73
|
-
|
|
74
|
-
return m ? font.replace(FONT_SIZE_RE, `${parseFloat(m[1]) * scale}px`) : font;
|
|
73
|
+
return withPxSize(font, (size) => parseFloat(size) * scale);
|
|
75
74
|
}
|
|
76
75
|
/** The font a script token is measured and painted with (`font` at the
|
|
77
76
|
* script size) and its baseline shift in px (negative: up). `stacked`: a
|
|
78
77
|
* subscript with a superscript set over it, which drops further. */
|
|
79
78
|
export function scriptMetrics(font, script, stacked = false) {
|
|
80
|
-
const m =
|
|
81
|
-
const size = m ? parseFloat(m
|
|
82
|
-
const scaled =
|
|
79
|
+
const m = findPxSize(font);
|
|
80
|
+
const size = m ? parseFloat(m.value) : 0;
|
|
81
|
+
const scaled = withPxSize(font, () => size * SCRIPT_SIZE_RATIO);
|
|
83
82
|
const ratio = script === 'sup'
|
|
84
83
|
? -SUPERSCRIPT_SHIFT_RATIO
|
|
85
84
|
: stacked ? STACKED_SUBSCRIPT_SHIFT_RATIO : SUBSCRIPT_SHIFT_RATIO;
|
|
@@ -281,8 +280,7 @@ function markRestShifts(tokens, fontOf, repeatHyphen) {
|
|
|
281
280
|
export const SMALL_CAPS_SIZE_RATIO = 0.7;
|
|
282
281
|
/** `font` at the small-caps size. */
|
|
283
282
|
export function smallCapsFont(font) {
|
|
284
|
-
|
|
285
|
-
return m ? font.replace(FONT_SIZE_RE, `${parseFloat(m[1]) * SMALL_CAPS_SIZE_RATIO}px`) : font;
|
|
283
|
+
return withPxSize(font, (size) => parseFloat(size) * SMALL_CAPS_SIZE_RATIO);
|
|
286
284
|
}
|
|
287
285
|
/** A lowercase letter with a one-unit capital (`ß` and the like, whose
|
|
288
286
|
* capital is longer, stay as they are so the text keeps its length). */
|
|
@@ -391,10 +389,10 @@ export const CHIP_DESCENT_RATIO = 0.25;
|
|
|
391
389
|
/** `font` set in `family` (when given) at `sizePx`: the style and weight
|
|
392
390
|
* words of the CSS shorthand are kept. */
|
|
393
391
|
function withFace(font, family, sizePx) {
|
|
394
|
-
const m =
|
|
392
|
+
const m = splitAtFontSize(font);
|
|
395
393
|
if (!m)
|
|
396
394
|
return font;
|
|
397
|
-
return `${m
|
|
395
|
+
return `${m.prefix}${sizePx}px ${family ? quoteFamily(family) : m.family}`;
|
|
398
396
|
}
|
|
399
397
|
/**
|
|
400
398
|
* One atomic token for an inline chip: its words measured run by run (the
|
|
@@ -407,8 +405,8 @@ function withFace(font, family, sizePx) {
|
|
|
407
405
|
export function chipToken(span, normalFont, boldFont, italicFont, boldItalicFont, letterSpacingPx) {
|
|
408
406
|
const chip = span.chip;
|
|
409
407
|
const box = chip.box;
|
|
410
|
-
const sizeMatch =
|
|
411
|
-
const sizePx = box?.fontSizePx ?? (sizeMatch ? parseFloat(sizeMatch
|
|
408
|
+
const sizeMatch = findPxSize(normalFont);
|
|
409
|
+
const sizePx = box?.fontSizePx ?? (sizeMatch ? parseFloat(sizeMatch.value) : 16);
|
|
412
410
|
const runs = [];
|
|
413
411
|
// The script of each run, and the unscaled font of a subscript's (which
|
|
414
412
|
// drops further when a superscript is stacked over it).
|