|
1 | 1 | import { Font as FontDefinition } from './font';
|
2 | 2 | import { ParsedFont, FontStyleType, FontWeightType, FontVariationSettingsType } from './font-interfaces';
|
3 | 3 | import { makeValidator, makeParser } from '../core/properties';
|
| 4 | +import { Trace } from '../../trace'; |
4 | 5 |
|
5 | 6 | export abstract class Font implements FontDefinition {
|
6 | 7 | public static default = undefined;
|
@@ -69,41 +70,47 @@ export namespace FontWeight {
|
69 | 70 |
|
70 | 71 | export namespace FontVariationSettings {
|
71 | 72 | export function parse(fontVariationSettings: string): Array<FontVariationSettingsType> | null {
|
| 73 | + if (!fontVariationSettings) { |
| 74 | + return null; |
| 75 | + } |
| 76 | + |
72 | 77 | const allowedValues = ['normal', 'inherit', 'initial', 'revert', 'revert-layer', 'unset'];
|
73 |
| - const lower = fontVariationSettings?.toLowerCase().trim(); |
74 |
| - if (allowedValues.indexOf(lower) !== -1) { |
| 78 | + const variationSettingsValue: string = fontVariationSettings.trim(); |
| 79 | + |
| 80 | + if (allowedValues.indexOf(variationSettingsValue.toLowerCase()) !== -1) { |
75 | 81 | return null;
|
76 | 82 | }
|
77 | 83 |
|
78 |
| - const chunks = lower.split(','); |
| 84 | + const chunks = variationSettingsValue.split(','); |
79 | 85 | if (chunks.length) {
|
80 | 86 | const parsed: Array<FontVariationSettingsType> = [];
|
81 | 87 | for (const chunk of chunks) {
|
82 |
| - const axisChunks = chunk.trim(); |
| 88 | + const trimmedChunk = chunk.trim(); |
| 89 | + const axisChunks = trimmedChunk.split(' '); |
83 | 90 | if (axisChunks.length === 2) {
|
84 |
| - const axisName = chunk[0].trim(); |
85 |
| - const axisValue = parseFloat(chunk[0]); |
| 91 | + const axisName = axisChunks[0].trim(); |
| 92 | + const axisValue = parseFloat(axisChunks[1]); |
86 | 93 | // See https://drafts.csswg.org/css-fonts/#font-variation-settings-def.
|
87 | 94 | // Axis name strings longer or shorter than four characters are invalid.
|
88 | 95 | if (!isNaN(axisValue) && axisName.length === 6 && ((axisName.startsWith("'") && axisName.endsWith("'")) || (axisName.startsWith('"') && axisName.endsWith('"')))) {
|
89 | 96 | parsed.push({ axis: axisName, value: axisValue });
|
90 | 97 | } else {
|
91 |
| - console.error('Invalid value (font-variation-settings): ' + fontVariationSettings); |
| 98 | + Trace.write('Invalid value (font-variation-settings): ' + variationSettingsValue, Trace.categories.Error, Trace.messageType.error); |
92 | 99 | }
|
93 | 100 | } else {
|
94 |
| - console.error('Invalid value (font-variation-settings): ' + fontVariationSettings); |
| 101 | + Trace.write('Invalid value (font-variation-settings): ' + variationSettingsValue, Trace.categories.Error, Trace.messageType.error); |
95 | 102 | }
|
96 | 103 | }
|
97 | 104 |
|
98 | 105 | return parsed;
|
99 | 106 | }
|
100 | 107 |
|
101 |
| - console.error('Invalid value (font-variation-settings): ' + fontVariationSettings); |
| 108 | + Trace.write('Invalid value (font-variation-settings): ' + variationSettingsValue, Trace.categories.Error, Trace.messageType.error); |
102 | 109 | }
|
103 | 110 |
|
104 | 111 | export function toString(fontVariationSettings: FontVariationSettingsType[] | null): string | null {
|
105 | 112 | if (fontVariationSettings?.length) {
|
106 |
| - return fontVariationSettings.map(({ axis, value }) => `'${axis}' ${value}`).join(', '); |
| 113 | + return fontVariationSettings.map(({ axis, value }) => `${axis} ${value}`).join(', '); |
107 | 114 | }
|
108 | 115 |
|
109 | 116 | return null;
|
|
0 commit comments