@openpresentation/opf 0.11.4 → 0.12.1

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.
Files changed (74) hide show
  1. package/README.md +16 -0
  2. package/dist/audit.d.ts +156 -0
  3. package/dist/audit.js +7 -0
  4. package/dist/{catalogs-CUClB3nl.d.ts → catalogs-BnI7JKcn.d.ts} +3 -3
  5. package/dist/catalogs.d.ts +2 -2
  6. package/dist/catalogs.js +2 -1
  7. package/dist/{chunk-KJKASEPE.js → chunk-4LAM3N6S.js} +753 -42
  8. package/dist/chunk-6LZK2IZB.js +1690 -0
  9. package/dist/{chunk-NSVVQ52O.js → chunk-AUM5MXBR.js} +8 -6
  10. package/dist/{chunk-AEUSVEUY.js → chunk-E34DJ5LL.js} +50 -14
  11. package/dist/chunk-FYLJVF7X.js +18448 -0
  12. package/dist/{chunk-HJL64ETN.js → chunk-GJKJL4YY.js} +14 -0
  13. package/dist/{chunk-3H2U7FDR.js → chunk-HOBSL7AJ.js} +1867 -247
  14. package/dist/chunk-JKVKYVWL.js +1332 -0
  15. package/dist/{chunk-3OJN7QAW.js → chunk-MWPMJE6P.js} +18 -4
  16. package/dist/chunk-RUC7L5DJ.js +261 -0
  17. package/dist/chunk-S5W34SIJ.js +1 -0
  18. package/dist/chunk-V2537ENL.js +198 -0
  19. package/dist/{chunk-RXNFDGPC.js → chunk-WXSPETQ6.js} +311 -40
  20. package/dist/{composition-Dl-d9FRj.d.ts → composition-DWbCiMwF.d.ts} +559 -10
  21. package/dist/composition.d.ts +1 -1
  22. package/dist/composition.js +2 -1
  23. package/dist/convert.d.ts +261 -0
  24. package/dist/convert.js +1107 -0
  25. package/dist/diff.d.ts +145 -0
  26. package/dist/diff.js +604 -0
  27. package/dist/docs.js +72 -18
  28. package/dist/examples.d.ts +1 -1
  29. package/dist/examples.js +112 -112
  30. package/dist/font-policy.d.ts +15 -0
  31. package/dist/font-policy.js +1 -1
  32. package/dist/format.d.ts +20 -0
  33. package/dist/format.js +83 -0
  34. package/dist/index.d.ts +173 -24
  35. package/dist/index.js +926 -262
  36. package/dist/lint.d.ts +4 -4
  37. package/dist/lint.js +6 -5
  38. package/dist/markdown.d.ts +74 -0
  39. package/dist/markdown.js +1941 -0
  40. package/dist/pagination.d.ts +1 -1
  41. package/dist/pagination.js +6 -5
  42. package/dist/patch.d.ts +99 -0
  43. package/dist/patch.js +6 -0
  44. package/dist/{presentation-j5PVrqfV.d.ts → presentation-DcF-MZcz.d.ts} +452 -17
  45. package/dist/repo-readme.js +1 -1
  46. package/dist/{schemas-X_NniU4A.d.ts → schemas-BSjlG8-R.d.ts} +28 -0
  47. package/dist/schemas.d.ts +1 -1
  48. package/dist/schemas.js +1 -1
  49. package/dist/spec/catalogs/audiences/customers.json +5 -1
  50. package/dist/spec/catalogs/audiences/executives.json +5 -1
  51. package/dist/spec/catalogs/audiences/index.json +20 -8
  52. package/dist/spec/catalogs/audiences/investors.json +5 -1
  53. package/dist/spec/catalogs/audiences/marketing-team.json +5 -1
  54. package/dist/spec/catalogs/audiences/regulators.json +5 -1
  55. package/dist/spec/catalogs/audiences/sales-team.json +5 -1
  56. package/dist/spec/catalogs/manifest.json +2 -2
  57. package/dist/spec/reference/engine-defaults.json +1 -1
  58. package/dist/spec/reference/font-policy.json +311 -40
  59. package/dist/spec/reference/font-policy.schema.json +40 -0
  60. package/dist/spec/reference/symbol-font-encodings.json +18354 -0
  61. package/dist/spec/reference/symbol-font-encodings.schema.json +156 -0
  62. package/dist/spec/schemas/audience.schema.json +7 -7
  63. package/dist/spec/schemas/narrative.schema.json +1 -1
  64. package/dist/spec/schemas/opf.schema.json +597 -28
  65. package/dist/spec-files.d.ts +1 -1
  66. package/dist/spec-files.js +1 -1
  67. package/dist/symbol-font-encodings.d.ts +128 -0
  68. package/dist/symbol-font-encodings.js +1 -0
  69. package/dist/types.d.ts +4 -4
  70. package/dist/validator-DfG9yxba.d.ts +172 -0
  71. package/dist/validator.d.ts +4 -36
  72. package/dist/validator.js +5 -4
  73. package/package.json +32 -3
  74. package/dist/chunk-FDCWQHWO.js +0 -1366
@@ -176,7 +176,14 @@ var fontPolicySource = {
176
176
  "replacement": {
177
177
  "family": "Cousine",
178
178
  "compatibility": "visual",
179
- "measured": null
179
+ "measured": {
180
+ "replacement": "Cousine",
181
+ "meanAbsWidthDelta": 0,
182
+ "meanWidthDelta": 0,
183
+ "maxAbsWidthDelta": 0,
184
+ "styles": 4,
185
+ "reference": "Aptos Mono 2.01;O365"
186
+ }
180
187
  },
181
188
  "alternates": [
182
189
  "Roboto Mono"
@@ -188,7 +195,7 @@ var fontPolicySource = {
188
195
  "https://support.apple.com/en-us/122869",
189
196
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
190
197
  ],
191
- "note": "Reference not available to the measuring host. Cousine keeps all four styles. Part of the Aptos family; cloud font list has Aptos Mono (+Bold/Italic/Bold Italic)."
198
+ "note": "RR-17 (FF-42): measured against Aptos Mono 2.01 (Microsoft's standalone Aptos Fonts download, read in place). Aptos Mono is a 1229/2048 em cell, the Courier New cell, so Cousine matches every corpus string in all four styles at 0.0000% and wraps identically; the tier stays visual because the vertical metrics differ (Cousine hhea ascent 0.833 em against 0.939, x-height 0.528 em against 0.476, cap-height 0.659 against 0.657) and Cousine's outlines are not Aptos Mono's. Part of the Aptos family; cloud font list has Aptos Mono (+Bold/Italic/Bold Italic)."
192
199
  },
193
200
  {
194
201
  "family": "Aptos Narrow",
@@ -211,6 +218,9 @@ var fontPolicySource = {
211
218
  "reference": "Aptos Narrow 2.01;O365"
212
219
  }
213
220
  },
221
+ "alternates": [
222
+ "Carlito"
223
+ ],
214
224
  "sources": [
215
225
  "https://learn.microsoft.com/en-us/typography/fonts/windows_11_font_list",
216
226
  "https://support.microsoft.com/en-us/office/cloud-fonts-in-office-f7b009fe-037f-45ed-a556-b5fe6ede6adb",
@@ -218,10 +228,7 @@ var fontPolicySource = {
218
228
  "https://support.apple.com/en-us/122869",
219
229
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
220
230
  ],
221
- "note": "Part of the Aptos family; cloud font list has Aptos Narrow (+Bold/Italic/Bold Italic). Intos Narrow is its metric-compatible preview replacement.",
222
- "alternates": [
223
- "Carlito"
224
- ]
231
+ "note": "Part of the Aptos family; cloud font list has Aptos Narrow (+Bold/Italic/Bold Italic). Intos Narrow is its metric-compatible preview replacement."
225
232
  },
226
233
  {
227
234
  "family": "Aptos Serif",
@@ -244,16 +251,16 @@ var fontPolicySource = {
244
251
  "reference": "Aptos Serif 2.01;240513210638;O365"
245
252
  }
246
253
  },
254
+ "alternates": [
255
+ "Tinos"
256
+ ],
247
257
  "sources": [
248
258
  "https://learn.microsoft.com/en-us/typography/fonts/windows_11_font_list",
249
259
  "https://support.microsoft.com/en-us/office/cloud-fonts-in-office-f7b009fe-037f-45ed-a556-b5fe6ede6adb",
250
260
  "https://learn.microsoft.com/en-us/typography/font-list/aptos",
251
261
  "https://support.apple.com/en-us/122869"
252
262
  ],
253
- "note": "Part of the Aptos family; cloud list has Aptos Serif, Bold, Italic and Bold Italic. Intos Serif (Gelasio-derived outlines, Aptos Serif metrics) is its metric-compatible preview replacement. Not installed on the measuring host: measured from the files in Microsoft's Aptos Fonts download (Download Center id=106087).",
254
- "alternates": [
255
- "Tinos"
256
- ]
263
+ "note": "Part of the Aptos family; cloud list has Aptos Serif, Bold, Italic and Bold Italic. Intos Serif (Gelasio-derived outlines, Aptos Serif metrics) is its metric-compatible preview replacement. Not installed on the measuring host: measured from the files in Microsoft's Aptos Fonts download (Download Center id=106087)."
257
264
  },
258
265
  {
259
266
  "family": "Arabic Typesetting",
@@ -267,6 +274,11 @@ var fontPolicySource = {
267
274
  "replacement": {
268
275
  "family": "Noto Naskh Arabic",
269
276
  "compatibility": "visual",
277
+ "sizeAdjust": 0.64,
278
+ "lineAscent": 0.7,
279
+ "lineAscentMixed": 0.78,
280
+ "lineAscentBasis": "RR-38 native PowerPoint 365 probe (probe-arabic.pptx, 18, 24 and 32 pt, 100 percent line spacing, zero insets, top anchor, rtl paragraph): the baseline of an Arabic Typesetting-only line (the most common ink-bottom row of the line) sits 0.68, 0.71 and 0.72 em below the box top (regular) and 0.68, 0.72 and 0.73 em (bold), against Arabic Typesetting's hhea ascent of 0.701 em; a line that also holds an Aptos run (Arabic, 'PowerPoint 365', Arabic) sits 0.77, 0.78 and 0.78 em below it. Core places the baseline one em below the line top, so the preview drew Arabic lines 0.22 to 0.30 em lower.",
281
+ "sizeAdjustBasis": "RR-38: sum of Arabic Typesetting 6.85 advances over sum of Noto Naskh Arabic 400 advances (fontkit, each sample's OpenType language). 0.643 on the 12 Arabic-script corpus samples of opf-render test/fixtures/script-corpora.json (per-sample range 0.57 to 0.86); 0.598 on 29 Arabic strings of the RR-05b native deck (running Arabic text); 0.614 pooled; Noto Naskh Arabic 700 gives 0.62, 0.58 and 0.59, so bold runs draw about 3 percent long. Ink height of alef, lam, meem and heh is 0.71 of Noto Naskh Arabic's. 0.64 balances the two: lines come out about 4 percent longer than PowerPoint's and glyphs about 10 percent smaller. Native check (RR-38 probe): PowerPoint's BoundWidth of the 45-character probe line is 216.9, 289.0 and 386.1 pt at 18, 24 and 32 pt, 1.8 to 2.0 percent above the fontkit advance of the installed font (213.0, 284.0, 378.7).",
270
282
  "measured": {
271
283
  "replacement": "Noto Naskh Arabic",
272
284
  "meanAbsWidthDelta": 0.6632,
@@ -730,7 +742,16 @@ var fontPolicySource = {
730
742
  "office-cloud"
731
743
  ],
732
744
  "embeddableByOpf": false,
733
- "replacement": null,
745
+ "replacement": {
746
+ "family": "STIX Two Math",
747
+ "compatibility": "visual",
748
+ "measured": null,
749
+ "source": "https://github.com/stipub/stixfonts"
750
+ },
751
+ "alternates": [
752
+ "Noto Sans Math",
753
+ "Caladea"
754
+ ],
734
755
  "sources": [
735
756
  "https://learn.microsoft.com/en-us/typography/fonts/windows_11_font_list",
736
757
  "https://learn.microsoft.com/en-us/typography/fonts/windows_10_font_list",
@@ -738,7 +759,7 @@ var fontPolicySource = {
738
759
  "https://learn.microsoft.com/en-us/typography/font-list/cambria-math",
739
760
  "https://support.apple.com/en-us/122869"
740
761
  ],
741
- "note": "Math fonts need an explicit math-aware choice; renderers fail with math-font-required. In Cambria.ttc in the Windows default set."
762
+ "note": 'FF-45: previews with STIX Two Math (OFL-1.1, Reserved Font Name "TM Math", which its family and file names do not carry; serif math face with a MATH table), loaded as the opf-render math pack (@expo-google-fonts/stix-two-math, optional peer). Visual: on a 32-string math corpus (Latin, digits, Greek, operators, arrows, math alphanumerics) fontkit advances differ from Cambria Math 6.99 by a mean of 5.0% (Latin 0.9%, digits 10.0%, Greek 7.8%, operators 4.8%); Noto Sans Math 8.3%; Caladea covers only the Latin half of the corpus. Not measured on the policy corpus (measured: null). OPF has no equation model and the renderer draws text runs only (no MATH-table layout); native OMML equations are not represented. The former math-font-required renderer failure is replaced by this route; without the pack the renderer reports font-unavailable naming it. In Cambria.ttc in the Windows default set.'
742
763
  },
743
764
  {
744
765
  "family": "Candara",
@@ -1410,7 +1431,14 @@ var fontPolicySource = {
1410
1431
  "replacement": {
1411
1432
  "family": "Barlow",
1412
1433
  "compatibility": "visual",
1413
- "measured": null
1434
+ "measured": {
1435
+ "replacement": "Barlow",
1436
+ "meanAbsWidthDelta": 0.0467,
1437
+ "meanWidthDelta": -0.0467,
1438
+ "maxAbsWidthDelta": 0.0976,
1439
+ "styles": 4,
1440
+ "reference": "Grandview 1.04;O365"
1441
+ }
1414
1442
  },
1415
1443
  "alternates": [
1416
1444
  "Roboto"
@@ -1434,7 +1462,14 @@ var fontPolicySource = {
1434
1462
  "replacement": {
1435
1463
  "family": "Barlow",
1436
1464
  "compatibility": "visual",
1437
- "measured": null
1465
+ "measured": {
1466
+ "replacement": "Barlow",
1467
+ "meanAbsWidthDelta": 0.0249,
1468
+ "meanWidthDelta": -0.0242,
1469
+ "maxAbsWidthDelta": 0.0599,
1470
+ "styles": 2,
1471
+ "reference": "Grandview Display 0.90;O365"
1472
+ }
1438
1473
  },
1439
1474
  "alternates": [
1440
1475
  "Roboto"
@@ -1445,7 +1480,7 @@ var fontPolicySource = {
1445
1480
  "https://support.apple.com/en-us/122869",
1446
1481
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
1447
1482
  ],
1448
- "note": "Reference not available to the measuring host. Cloud list has Grandview Display and Grandview Display Italic only."
1483
+ "note": "RR-17: measured against the Microsoft 365 cloud font Grandview Display 0.90;O365, cached by Office on the measuring host and read in place. Cloud list has Grandview Display and Grandview Display Italic only."
1449
1484
  },
1450
1485
  {
1451
1486
  "family": "Gungsuh",
@@ -1676,11 +1711,23 @@ var fontPolicySource = {
1676
1711
  "license": "OFL-1.1",
1677
1712
  "availability": [],
1678
1713
  "embeddableByOpf": true,
1679
- "replacement": null,
1714
+ "replacement": {
1715
+ "family": "Cousine",
1716
+ "compatibility": "metric",
1717
+ "measured": {
1718
+ "replacement": "Cousine",
1719
+ "meanAbsWidthDelta": 0,
1720
+ "meanWidthDelta": 0,
1721
+ "maxAbsWidthDelta": 0,
1722
+ "styles": 4,
1723
+ "reference": "Liberation Mono 2.1.5"
1724
+ },
1725
+ "source": "https://github.com/liberationfonts/liberation-fonts/blob/2.1.5/README.md"
1726
+ },
1680
1727
  "sources": [
1681
1728
  "https://github.com/liberationfonts/liberation-fonts"
1682
1729
  ],
1683
- "note": "Metric-compatible with Courier New (upstream intent); not shipped by opf-render."
1730
+ "note": "Metric-compatible with Courier New (upstream intent). RR-17: opf-render does not ship the Liberation files (Reserved Font Name Liberation; about 4.4 MB for twelve faces). It previews a Liberation Mono document with Cousine, the Croscore family Liberation 2 is built from: all 300 corpus strings in four styles measure 0.0000% mean and maximum off Liberation Mono 2.1.5, and hhea, glyph boxes and x-height and cap-height match. Evidence: docs/evidence/font-replacements-20260923/latin-qualification-20261001.json."
1684
1731
  },
1685
1732
  {
1686
1733
  "family": "Liberation Sans",
@@ -1688,11 +1735,23 @@ var fontPolicySource = {
1688
1735
  "license": "OFL-1.1",
1689
1736
  "availability": [],
1690
1737
  "embeddableByOpf": true,
1691
- "replacement": null,
1738
+ "replacement": {
1739
+ "family": "Arimo",
1740
+ "compatibility": "metric",
1741
+ "measured": {
1742
+ "replacement": "Arimo",
1743
+ "meanAbsWidthDelta": 0,
1744
+ "meanWidthDelta": 0,
1745
+ "maxAbsWidthDelta": 0,
1746
+ "styles": 4,
1747
+ "reference": "Liberation Sans 2.1.5"
1748
+ },
1749
+ "source": "https://github.com/liberationfonts/liberation-fonts/blob/2.1.5/README.md"
1750
+ },
1692
1751
  "sources": [
1693
1752
  "https://github.com/liberationfonts/liberation-fonts"
1694
1753
  ],
1695
- "note": "Metric-compatible with Arial (upstream intent); not shipped by opf-render."
1754
+ "note": "Metric-compatible with Arial (upstream intent). RR-17: opf-render does not ship the Liberation files (Reserved Font Name Liberation; about 4.4 MB for twelve faces). It previews a Liberation Sans document with Arimo, the Croscore family Liberation 2 is built from: all 300 corpus strings in four styles measure 0.0000% mean and maximum off Liberation Sans 2.1.5, and hhea, glyph boxes and x-height and cap-height match. Evidence: docs/evidence/font-replacements-20260923/latin-qualification-20261001.json."
1696
1755
  },
1697
1756
  {
1698
1757
  "family": "Liberation Serif",
@@ -1700,11 +1759,23 @@ var fontPolicySource = {
1700
1759
  "license": "OFL-1.1",
1701
1760
  "availability": [],
1702
1761
  "embeddableByOpf": true,
1703
- "replacement": null,
1762
+ "replacement": {
1763
+ "family": "Tinos",
1764
+ "compatibility": "metric",
1765
+ "measured": {
1766
+ "replacement": "Tinos",
1767
+ "meanAbsWidthDelta": 0,
1768
+ "meanWidthDelta": 0,
1769
+ "maxAbsWidthDelta": 0,
1770
+ "styles": 4,
1771
+ "reference": "Liberation Serif 2.1.5"
1772
+ },
1773
+ "source": "https://github.com/liberationfonts/liberation-fonts/blob/2.1.5/README.md"
1774
+ },
1704
1775
  "sources": [
1705
1776
  "https://github.com/liberationfonts/liberation-fonts"
1706
1777
  ],
1707
- "note": "Metric-compatible with Times New Roman (upstream intent); not shipped by opf-render."
1778
+ "note": "Metric-compatible with Times New Roman (upstream intent). RR-17: opf-render does not ship the Liberation files (Reserved Font Name Liberation; about 4.4 MB for twelve faces). It previews a Liberation Serif document with Tinos, the Croscore family Liberation 2 is built from: all 300 corpus strings in four styles measure 0.0000% mean and maximum off Liberation Serif 2.1.5, and hhea, glyph boxes and x-height and cap-height match. Evidence: docs/evidence/font-replacements-20260923/latin-qualification-20261001.json."
1708
1779
  },
1709
1780
  {
1710
1781
  "family": "Libre Caslon Text",
@@ -2142,6 +2213,32 @@ var fontPolicySource = {
2142
2213
  ],
2143
2214
  "note": "Nirmala UI covers every Indic script; Devanagari is previewed. Pick the script Noto family for other scripts. Width measurement covers Latin text only."
2144
2215
  },
2216
+ {
2217
+ "family": "Noto Color Emoji",
2218
+ "licenseClass": "open",
2219
+ "license": "OFL-1.1",
2220
+ "availability": [],
2221
+ "embeddableByOpf": true,
2222
+ "replacement": null,
2223
+ "sources": [
2224
+ "https://github.com/googlefonts/noto-emoji",
2225
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-color-emoji"
2226
+ ],
2227
+ "note": "Colour emoji (COLRv1 and OT-SVG glyphs; the Google Fonts build, 25.1 MB). Preview face for Segoe UI Emoji (FF-45); drawn in colour by browsers, as a monochrome Noto Emoji silhouette by the resvg raster path."
2228
+ },
2229
+ {
2230
+ "family": "Noto Emoji",
2231
+ "licenseClass": "open",
2232
+ "license": "OFL-1.1",
2233
+ "availability": [],
2234
+ "embeddableByOpf": true,
2235
+ "replacement": null,
2236
+ "sources": [
2237
+ "https://github.com/googlefonts/noto-emoji",
2238
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-emoji"
2239
+ ],
2240
+ "note": "Monochrome emoji. Alternate for Segoe UI Emoji and the face the raster path draws in place of Noto Color Emoji (FF-45)."
2241
+ },
2145
2242
  {
2146
2243
  "family": "Noto Naskh Arabic",
2147
2244
  "licenseClass": "open",
@@ -2181,6 +2278,19 @@ var fontPolicySource = {
2181
2278
  "https://support.apple.com/en-us/122869"
2182
2279
  ]
2183
2280
  },
2281
+ {
2282
+ "family": "Noto Sans Arabic",
2283
+ "licenseClass": "open",
2284
+ "license": "OFL-1.1",
2285
+ "availability": [],
2286
+ "embeddableByOpf": true,
2287
+ "replacement": null,
2288
+ "sources": [
2289
+ "https://github.com/google/fonts/blob/main/ofl/notosansarabic/METADATA.pb",
2290
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-arabic"
2291
+ ],
2292
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2293
+ },
2184
2294
  {
2185
2295
  "family": "Noto Sans Armenian",
2186
2296
  "licenseClass": "open",
@@ -2329,6 +2439,19 @@ var fontPolicySource = {
2329
2439
  "https://support.apple.com/en-us/122869"
2330
2440
  ]
2331
2441
  },
2442
+ {
2443
+ "family": "Noto Sans Lao",
2444
+ "licenseClass": "open",
2445
+ "license": "OFL-1.1",
2446
+ "availability": [],
2447
+ "embeddableByOpf": true,
2448
+ "replacement": null,
2449
+ "sources": [
2450
+ "https://github.com/google/fonts/blob/main/ofl/notosanslao/METADATA.pb",
2451
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-lao"
2452
+ ],
2453
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2454
+ },
2332
2455
  {
2333
2456
  "family": "Noto Sans Malayalam",
2334
2457
  "licenseClass": "open",
@@ -2341,6 +2464,19 @@ var fontPolicySource = {
2341
2464
  "https://support.apple.com/en-us/122869"
2342
2465
  ]
2343
2466
  },
2467
+ {
2468
+ "family": "Noto Sans Math",
2469
+ "licenseClass": "open",
2470
+ "license": "OFL-1.1",
2471
+ "availability": [],
2472
+ "embeddableByOpf": true,
2473
+ "replacement": null,
2474
+ "sources": [
2475
+ "https://github.com/notofonts/math",
2476
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-math"
2477
+ ],
2478
+ "note": "Sans math face with a MATH table. Alternate for Cambria Math and the designated math face of sans schemes in glyph fallback (FF-45)."
2479
+ },
2344
2480
  {
2345
2481
  "family": "Noto Sans Mongolian",
2346
2482
  "licenseClass": "open",
@@ -2354,6 +2490,19 @@ var fontPolicySource = {
2354
2490
  ],
2355
2491
  "note": 'macOS Tahoe lists it only as a document-support font, so "macos" omitted.'
2356
2492
  },
2493
+ {
2494
+ "family": "Noto Sans Myanmar",
2495
+ "licenseClass": "open",
2496
+ "license": "OFL-1.1",
2497
+ "availability": [],
2498
+ "embeddableByOpf": true,
2499
+ "replacement": null,
2500
+ "sources": [
2501
+ "https://github.com/google/fonts/blob/main/ofl/notosansmyanmar/METADATA.pb",
2502
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-myanmar"
2503
+ ],
2504
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2505
+ },
2357
2506
  {
2358
2507
  "family": "Noto Sans Oriya",
2359
2508
  "licenseClass": "open",
@@ -2381,6 +2530,32 @@ var fontPolicySource = {
2381
2530
  "https://support.apple.com/en-us/122869"
2382
2531
  ]
2383
2532
  },
2533
+ {
2534
+ "family": "Noto Sans Sinhala",
2535
+ "licenseClass": "open",
2536
+ "license": "OFL-1.1",
2537
+ "availability": [],
2538
+ "embeddableByOpf": true,
2539
+ "replacement": null,
2540
+ "sources": [
2541
+ "https://github.com/google/fonts/blob/main/ofl/notosanssinhala/METADATA.pb",
2542
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-sinhala"
2543
+ ],
2544
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2545
+ },
2546
+ {
2547
+ "family": "Noto Sans Syriac",
2548
+ "licenseClass": "open",
2549
+ "license": "OFL-1.1",
2550
+ "availability": [],
2551
+ "embeddableByOpf": true,
2552
+ "replacement": null,
2553
+ "sources": [
2554
+ "https://github.com/google/fonts/blob/main/ofl/notosanssyriac/METADATA.pb",
2555
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-syriac"
2556
+ ],
2557
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2558
+ },
2384
2559
  {
2385
2560
  "family": "Noto Sans Tamil",
2386
2561
  "licenseClass": "open",
@@ -2417,6 +2592,19 @@ var fontPolicySource = {
2417
2592
  "https://support.apple.com/en-us/122869"
2418
2593
  ]
2419
2594
  },
2595
+ {
2596
+ "family": "Noto Sans Thaana",
2597
+ "licenseClass": "open",
2598
+ "license": "OFL-1.1",
2599
+ "availability": [],
2600
+ "embeddableByOpf": true,
2601
+ "replacement": null,
2602
+ "sources": [
2603
+ "https://github.com/google/fonts/blob/main/ofl/notosansthaana/METADATA.pb",
2604
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-sans-thaana"
2605
+ ],
2606
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2607
+ },
2420
2608
  {
2421
2609
  "family": "Noto Sans Thai",
2422
2610
  "licenseClass": "open",
@@ -2441,6 +2629,19 @@ var fontPolicySource = {
2441
2629
  "https://www.npmjs.com/package/@expo-google-fonts/noto-serif-hebrew"
2442
2630
  ]
2443
2631
  },
2632
+ {
2633
+ "family": "Noto Serif Tibetan",
2634
+ "licenseClass": "open",
2635
+ "license": "OFL-1.1",
2636
+ "availability": [],
2637
+ "embeddableByOpf": true,
2638
+ "replacement": null,
2639
+ "sources": [
2640
+ "https://github.com/google/fonts/blob/main/ofl/notoseriftibetan/METADATA.pb",
2641
+ "https://www.npmjs.com/package/@expo-google-fonts/noto-serif-tibetan"
2642
+ ],
2643
+ "note": "Shipped in the opf-render script pack (FF-19) and qualified against the script corpus (FF-44, docs/programs/font-fidelity-everywhere/script-corpora.md); it had no policy row until RR-17."
2644
+ },
2444
2645
  {
2445
2646
  "family": "Nyala",
2446
2647
  "licenseClass": "proprietary-standard",
@@ -2729,7 +2930,14 @@ var fontPolicySource = {
2729
2930
  "replacement": {
2730
2931
  "family": "Source Sans 3",
2731
2932
  "compatibility": "visual",
2732
- "measured": null
2933
+ "measured": {
2934
+ "replacement": "Source Sans 3",
2935
+ "meanAbsWidthDelta": 0.0483,
2936
+ "meanWidthDelta": -0.0483,
2937
+ "maxAbsWidthDelta": 0.0965,
2938
+ "styles": 4,
2939
+ "reference": "Seaford 1.04;O365"
2940
+ }
2733
2941
  },
2734
2942
  "alternates": [
2735
2943
  "Carlito"
@@ -2740,7 +2948,7 @@ var fontPolicySource = {
2740
2948
  "https://support.apple.com/en-us/122869",
2741
2949
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
2742
2950
  ],
2743
- "note": "Reference not available to the measuring host. One of the five fonts Microsoft commissioned in 2021; no MS Learn font-list page found."
2951
+ "note": "RR-17: measured against the Microsoft 365 cloud font Seaford 1.04;O365, cached by Office on the measuring host and read in place. One of the five fonts Microsoft commissioned in 2021; no MS Learn font-list page found."
2744
2952
  },
2745
2953
  {
2746
2954
  "family": "Seaford Display",
@@ -2753,7 +2961,14 @@ var fontPolicySource = {
2753
2961
  "replacement": {
2754
2962
  "family": "Source Sans 3",
2755
2963
  "compatibility": "visual",
2756
- "measured": null
2964
+ "measured": {
2965
+ "replacement": "Source Sans 3",
2966
+ "meanAbsWidthDelta": 0.0389,
2967
+ "meanWidthDelta": 0.0388,
2968
+ "maxAbsWidthDelta": 0.0667,
2969
+ "styles": 2,
2970
+ "reference": "Seaford Display 1.04;O365"
2971
+ }
2757
2972
  },
2758
2973
  "alternates": [
2759
2974
  "Carlito"
@@ -2764,7 +2979,7 @@ var fontPolicySource = {
2764
2979
  "https://support.apple.com/en-us/122869",
2765
2980
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
2766
2981
  ],
2767
- "note": "Reference not available to the measuring host. Cloud list has Seaford Display and Seaford Display Italic."
2982
+ "note": "RR-17: measured against the Microsoft 365 cloud font Seaford Display 1.04;O365, cached by Office on the measuring host and read in place. Cloud list has Seaford Display and Seaford Display Italic."
2768
2983
  },
2769
2984
  {
2770
2985
  "family": "Segoe UI",
@@ -2808,7 +3023,15 @@ var fontPolicySource = {
2808
3023
  "office-cloud"
2809
3024
  ],
2810
3025
  "embeddableByOpf": false,
2811
- "replacement": null,
3026
+ "replacement": {
3027
+ "family": "Noto Color Emoji",
3028
+ "compatibility": "visual",
3029
+ "measured": null,
3030
+ "source": "https://github.com/googlefonts/noto-emoji"
3031
+ },
3032
+ "alternates": [
3033
+ "Noto Emoji"
3034
+ ],
2812
3035
  "sources": [
2813
3036
  "https://learn.microsoft.com/en-us/typography/fonts/windows_11_font_list",
2814
3037
  "https://learn.microsoft.com/en-us/typography/fonts/windows_10_font_list",
@@ -2816,7 +3039,7 @@ var fontPolicySource = {
2816
3039
  "https://learn.microsoft.com/en-us/typography/font-list/segoe-ui-emoji",
2817
3040
  "https://support.apple.com/en-us/122869"
2818
3041
  ],
2819
- "note": "Color emoji; no open replacement is shipped. Color font (COLR). The Windows 11 version is 1.33 per the list."
3042
+ "note": "FF-45: previews with Noto Color Emoji (OFL-1.1, COLRv1 and OT-SVG colour glyphs, 25.1 MB) loaded as the opf-render emoji pack (@expo-google-fonts/noto-color-emoji, optional peer); Noto Emoji (monochrome) is the alternate and the face the resvg raster path draws, because resvg draws neither COLRv1 nor OT-SVG glyphs. Visual: every emoji sequence advances 1.2451 em in Noto Color Emoji against 1.3730 em in Segoe UI Emoji 1.33 (-9.3%); Noto Color Emoji has no Latin glyphs, so Latin text and digits of a Segoe UI Emoji run take a text face by glyph fallback. Not measured on the policy corpus (measured: null). Color font (COLRv1 in Windows 11, version 1.33 per the list)."
2820
3043
  },
2821
3044
  {
2822
3045
  "family": "Segoe UI Light",
@@ -3026,7 +3249,14 @@ var fontPolicySource = {
3026
3249
  "replacement": {
3027
3250
  "family": "Open Sans",
3028
3251
  "compatibility": "visual",
3029
- "measured": null
3252
+ "measured": {
3253
+ "replacement": "Open Sans",
3254
+ "meanAbsWidthDelta": 0.0926,
3255
+ "meanWidthDelta": 0.0926,
3256
+ "maxAbsWidthDelta": 0.1593,
3257
+ "styles": 4,
3258
+ "reference": "Skeena 1.04;O365"
3259
+ }
3030
3260
  },
3031
3261
  "alternates": [
3032
3262
  "Carlito"
@@ -3037,7 +3267,7 @@ var fontPolicySource = {
3037
3267
  "https://support.apple.com/en-us/122869",
3038
3268
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
3039
3269
  ],
3040
- "note": "Reference not available to the measuring host. One of the five fonts Microsoft commissioned in 2021; no MS Learn font-list page found."
3270
+ "note": "RR-17: measured against the Microsoft 365 cloud font Skeena 1.04;O365, cached by Office on the measuring host and read in place. One of the five fonts Microsoft commissioned in 2021; no MS Learn font-list page found."
3041
3271
  },
3042
3272
  {
3043
3273
  "family": "Skeena Display",
@@ -3050,7 +3280,14 @@ var fontPolicySource = {
3050
3280
  "replacement": {
3051
3281
  "family": "Open Sans",
3052
3282
  "compatibility": "visual",
3053
- "measured": null
3283
+ "measured": {
3284
+ "replacement": "Open Sans",
3285
+ "meanAbsWidthDelta": 0.1306,
3286
+ "meanWidthDelta": 0.1306,
3287
+ "maxAbsWidthDelta": 0.2001,
3288
+ "styles": 4,
3289
+ "reference": "Skeena Display 1.04;O365"
3290
+ }
3054
3291
  },
3055
3292
  "alternates": [
3056
3293
  "Carlito"
@@ -3061,7 +3298,7 @@ var fontPolicySource = {
3061
3298
  "https://support.apple.com/en-us/122869",
3062
3299
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
3063
3300
  ],
3064
- "note": "Reference not available to the measuring host. Cloud list has Skeena Display (+Bold/Italic/Bold Italic)."
3301
+ "note": "RR-17: measured against the Microsoft 365 cloud font Skeena Display 1.04;O365, cached by Office on the measuring host and read in place. Cloud list has Skeena Display (+Bold/Italic/Bold Italic)."
3065
3302
  },
3066
3303
  {
3067
3304
  "family": "Source Sans 3",
@@ -3090,13 +3327,33 @@ var fontPolicySource = {
3090
3327
  "replacement": {
3091
3328
  "family": "Source Sans 3",
3092
3329
  "compatibility": "visual",
3093
- "measured": null
3330
+ "measured": {
3331
+ "replacement": "Source Sans 3",
3332
+ "meanAbsWidthDelta": 3e-4,
3333
+ "meanWidthDelta": -3e-4,
3334
+ "maxAbsWidthDelta": 41e-4,
3335
+ "styles": 4,
3336
+ "reference": "Source Sans Pro 2.045"
3337
+ }
3094
3338
  },
3095
3339
  "sources": [
3096
3340
  "https://github.com/google/fonts/blob/main/ofl/sourcesans3/METADATA.pb",
3097
3341
  "https://support.microsoft.com/en-us/office/cloud-fonts-in-office-f7b009fe-037f-45ed-a556-b5fe6ede6adb"
3098
3342
  ],
3099
- "note": "Predecessor name of Source Sans 3; the renamed family previews it."
3343
+ "note": "Predecessor name of Source Sans 3; the renamed family previews it. RR-17: measured against the upstream Source Sans Pro 2.045 (roman) and 1.095 (italic) release (adobe-fonts/source-sans, OFL-1.1, read for measurement only): regular and bold are within 0.15% of Source Sans 3 on every corpus string, the italics up to 0.41%, so the alias stays visual."
3344
+ },
3345
+ {
3346
+ "family": "STIX Two Math",
3347
+ "licenseClass": "open",
3348
+ "license": "OFL-1.1",
3349
+ "availability": [],
3350
+ "embeddableByOpf": true,
3351
+ "replacement": null,
3352
+ "sources": [
3353
+ "https://github.com/stipub/stixfonts",
3354
+ "https://www.npmjs.com/package/@expo-google-fonts/stix-two-math"
3355
+ ],
3356
+ "note": 'Serif math face with a MATH table; Reserved Font Name "TM Math" (not carried by its family or file name). Preview face for Cambria Math (FF-45).'
3100
3357
  },
3101
3358
  {
3102
3359
  "family": "Sylfaen",
@@ -3150,7 +3407,7 @@ var fontPolicySource = {
3150
3407
  "https://learn.microsoft.com/en-us/typography/font-list/symbol",
3151
3408
  "https://support.apple.com/en-us/122869"
3152
3409
  ],
3153
- "note": `Symbol-encoded; renderers require character mapping (font-encoding-required). macOS lists a "Symbol" (version 13.0d2e2), which is Apple's own build, not the Microsoft/Monotype file; the glyph mapping may differ.`
3410
+ "note": `Symbol-encoded (FF-45): no text replacement; a renderer maps each code 0x20..0xFF through spec/reference/symbol-font-encodings.json (Adobe and Apple Symbol tables, verified against Windows Symbol 5.01: 189 of 224 codes have a Unicode equivalent) and previews the equivalent with the first loaded open face of Noto Sans (Greek letters, digits, punctuation), Noto Sans Math (operators, bracket pieces), Noto Sans Symbols 2 and Noto Sans Symbols, at the verified font's advance; the PPTX keeps the family and codes. macOS lists a "Symbol" (version 13.0d2e2), which is Apple's own build: 0x27, 0x6D, 0xE1, 0xF1 and 0xF0 (Apple logo) differ and are recorded per code.`
3154
3411
  },
3155
3412
  {
3156
3413
  "family": "Tahoma",
@@ -3198,7 +3455,14 @@ var fontPolicySource = {
3198
3455
  "replacement": {
3199
3456
  "family": "Figtree",
3200
3457
  "compatibility": "visual",
3201
- "measured": null
3458
+ "measured": {
3459
+ "replacement": "Figtree",
3460
+ "meanAbsWidthDelta": 0.042,
3461
+ "meanWidthDelta": 0.042,
3462
+ "maxAbsWidthDelta": 0.0836,
3463
+ "styles": 1,
3464
+ "reference": "Tenorite 1.04;O365"
3465
+ }
3202
3466
  },
3203
3467
  "alternates": [
3204
3468
  "Roboto"
@@ -3209,7 +3473,7 @@ var fontPolicySource = {
3209
3473
  "https://support.apple.com/en-us/122869",
3210
3474
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
3211
3475
  ],
3212
- "note": "Reference not available to the measuring host. One of the five fonts Microsoft commissioned in 2021; no MS Learn font-list page found."
3476
+ "note": "RR-17: measured against the Microsoft 365 cloud font Tenorite 1.04;O365 (regular only: the host has cached no other style). One of the five fonts Microsoft commissioned in 2021; no MS Learn font-list page found."
3213
3477
  },
3214
3478
  {
3215
3479
  "family": "Tenorite Display",
@@ -3222,7 +3486,14 @@ var fontPolicySource = {
3222
3486
  "replacement": {
3223
3487
  "family": "Figtree",
3224
3488
  "compatibility": "visual",
3225
- "measured": null
3489
+ "measured": {
3490
+ "replacement": "Figtree",
3491
+ "meanAbsWidthDelta": 0.1476,
3492
+ "meanWidthDelta": 0.1476,
3493
+ "maxAbsWidthDelta": 0.1975,
3494
+ "styles": 2,
3495
+ "reference": "Tenorite Display 1.04;O365"
3496
+ }
3226
3497
  },
3227
3498
  "alternates": [
3228
3499
  "Roboto"
@@ -3233,7 +3504,7 @@ var fontPolicySource = {
3233
3504
  "https://support.apple.com/en-us/122869",
3234
3505
  "https://microsoft.design/articles/a-change-of-typeface-microsoft-s-new-default-font-has-arrived/"
3235
3506
  ],
3236
- "note": "Reference not available to the measuring host. Cloud list has Tenorite Display Regular/Italic/Bold/Bold Italic."
3507
+ "note": "RR-17: measured against the Microsoft 365 cloud font Tenorite Display 1.04;O365 (regular and bold). Cloud list has Tenorite Display Regular/Italic/Bold/Bold Italic."
3237
3508
  },
3238
3509
  {
3239
3510
  "family": "Times New Roman",
@@ -3443,7 +3714,7 @@ var fontPolicySource = {
3443
3714
  "https://learn.microsoft.com/en-us/typography/font-list/webdings",
3444
3715
  "https://support.apple.com/en-us/122869"
3445
3716
  ],
3446
- "note": "Symbol-encoded; renderers require character mapping (font-encoding-required). Symbol-encoded font. It is also on the macOS Tahoe list."
3717
+ "note": "Symbol-encoded (FF-45): no text replacement; a renderer maps each code 0x20..0xFF through spec/reference/symbol-font-encodings.json (the Unicode 7.0 Webdings repertoire, L2/11-052R and L2/11-344, verified against Windows Webdings 5.01: 223 of 224 codes have a Unicode equivalent) and previews the equivalent with the first loaded open face of Noto Sans Symbols 2, Noto Sans Symbols, Noto Sans Math and Noto Sans, at the verified font's advance; the PPTX keeps the family and codes. It is also on the macOS Tahoe list."
3447
3718
  },
3448
3719
  {
3449
3720
  "family": "Wingdings",
@@ -3463,7 +3734,7 @@ var fontPolicySource = {
3463
3734
  "https://learn.microsoft.com/en-us/typography/font-list/wingdings",
3464
3735
  "https://support.apple.com/en-us/122869"
3465
3736
  ],
3466
- "note": 'Symbol-encoded; renderers require character mapping (font-encoding-required). Symbol-encoded font. It is also on the macOS Tahoe list ("Wingdings Version 5.00x").'
3737
+ "note": `Symbol-encoded (FF-45): no text replacement; a renderer maps each code 0x20..0xFF through spec/reference/symbol-font-encodings.json (the Unicode 7.0 Wingdings repertoire, L2/11-052R and L2/11-344, verified against Windows Wingdings 5.01: 222 of 224 codes have a Unicode equivalent, 0xFF is the Windows logo; Wingdings 2 and 3 verified against 1.55 with 217 and 208) and previews the equivalent with the first loaded open face of Noto Sans Symbols 2, Noto Sans Symbols, Noto Sans Math and Noto Sans, at the verified font's advance; the PPTX keeps the family and codes. It is also on the macOS Tahoe list ("Wingdings Version 5.00x").`
3467
3738
  },
3468
3739
  {
3469
3740
  "family": "Work Sans",