postext 1.29.2 → 1.30.0

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 (275) hide show
  1. package/dist/__tests__/arabicLocale.test.js +5 -5
  2. package/dist/__tests__/arabicLocale.test.js.map +1 -1
  3. package/dist/__tests__/bundle/balloonPlacementPin.test.js +5 -4
  4. package/dist/__tests__/bundle/balloonPlacementPin.test.js.map +1 -1
  5. package/dist/__tests__/bundle/cjkRulesPin.test.js +8 -6
  6. package/dist/__tests__/bundle/cjkRulesPin.test.js.map +1 -1
  7. package/dist/__tests__/bundle/designOverflowPin.test.js +1 -1
  8. package/dist/__tests__/bundle/flowColumnsPin.test.js +4 -3
  9. package/dist/__tests__/bundle/flowColumnsPin.test.js.map +1 -1
  10. package/dist/__tests__/bundle/gridBalancingPin.test.js +5 -4
  11. package/dist/__tests__/bundle/gridBalancingPin.test.js.map +1 -1
  12. package/dist/__tests__/bundle/gridBreakRulesPin.test.js +14 -10
  13. package/dist/__tests__/bundle/gridBreakRulesPin.test.js.map +1 -1
  14. package/dist/__tests__/bundle/indexGroupSplitPin.test.js +4 -3
  15. package/dist/__tests__/bundle/indexGroupSplitPin.test.js.map +1 -1
  16. package/dist/__tests__/bundle/looseOrderPin.test.js +5 -4
  17. package/dist/__tests__/bundle/looseOrderPin.test.js.map +1 -1
  18. package/dist/__tests__/bundle/refLabelBreaksPin.test.js +5 -4
  19. package/dist/__tests__/bundle/refLabelBreaksPin.test.js.map +1 -1
  20. package/dist/__tests__/bundle/scriptContextPin.test.js +6 -5
  21. package/dist/__tests__/bundle/scriptContextPin.test.js.map +1 -1
  22. package/dist/__tests__/bundle/shapingLanguagePin.test.js +142 -46
  23. package/dist/__tests__/bundle/shapingLanguagePin.test.js.map +1 -1
  24. package/dist/__tests__/bundle/taskBoxPin.test.js +1 -1
  25. package/dist/__tests__/bundle/trailingStepPin.test.js +4 -3
  26. package/dist/__tests__/bundle/trailingStepPin.test.js.map +1 -1
  27. package/dist/__tests__/bundle/wideFloatStretchPin.test.js +4 -3
  28. package/dist/__tests__/bundle/wideFloatStretchPin.test.js.map +1 -1
  29. package/dist/__tests__/bundle.test.js +1 -1
  30. package/dist/__tests__/cellText.test.d.ts +2 -0
  31. package/dist/__tests__/cellText.test.d.ts.map +1 -0
  32. package/dist/__tests__/cellText.test.js +281 -0
  33. package/dist/__tests__/cellText.test.js.map +1 -0
  34. package/dist/__tests__/chineseLocale.test.js +13 -11
  35. package/dist/__tests__/chineseLocale.test.js.map +1 -1
  36. package/dist/__tests__/cjk/japaneseHtml.test.js +3 -3
  37. package/dist/__tests__/cjk/japaneseHtml.test.js.map +1 -1
  38. package/dist/__tests__/cjk/japaneseRuby.test.js +1 -1
  39. package/dist/__tests__/cjk/japaneseRuby.test.js.map +1 -1
  40. package/dist/__tests__/cjk/japaneseSegmentLanguage.test.js +3 -3
  41. package/dist/__tests__/cjk/japaneseSegmentLanguage.test.js.map +1 -1
  42. package/dist/__tests__/codeBlocks.test.js +1 -1
  43. package/dist/__tests__/contextText.test.d.ts +2 -0
  44. package/dist/__tests__/contextText.test.d.ts.map +1 -0
  45. package/dist/__tests__/contextText.test.js +371 -0
  46. package/dist/__tests__/contextText.test.js.map +1 -0
  47. package/dist/__tests__/design/designTextRender.test.js +8 -1
  48. package/dist/__tests__/design/designTextRender.test.js.map +1 -1
  49. package/dist/__tests__/exports.test.js +6 -0
  50. package/dist/__tests__/exports.test.js.map +1 -1
  51. package/dist/__tests__/fontUsage.test.js +40 -0
  52. package/dist/__tests__/fontUsage.test.js.map +1 -1
  53. package/dist/__tests__/hardBreaks.test.js +1 -1
  54. package/dist/__tests__/headingInlineMarks.test.js +1 -1
  55. package/dist/__tests__/html-backend.test.js +6 -2
  56. package/dist/__tests__/html-backend.test.js.map +1 -1
  57. package/dist/__tests__/japaneseNotes.test.js +4 -2
  58. package/dist/__tests__/japaneseNotes.test.js.map +1 -1
  59. package/dist/__tests__/lineEndPieces.test.d.ts +2 -0
  60. package/dist/__tests__/lineEndPieces.test.d.ts.map +1 -0
  61. package/dist/__tests__/lineEndPieces.test.js +374 -0
  62. package/dist/__tests__/lineEndPieces.test.js.map +1 -0
  63. package/dist/__tests__/mathSizeMigration.test.js +2 -2
  64. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  65. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
  66. package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
  67. package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
  68. package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
  69. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
  70. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
  71. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
  72. package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
  73. package/dist/__tests__/plainGeminateHead.test.d.ts +2 -0
  74. package/dist/__tests__/plainGeminateHead.test.d.ts.map +1 -0
  75. package/dist/__tests__/plainGeminateHead.test.js +92 -0
  76. package/dist/__tests__/plainGeminateHead.test.js.map +1 -0
  77. package/dist/__tests__/presets/showcaseShapingLanguage.test.d.ts +2 -0
  78. package/dist/__tests__/presets/showcaseShapingLanguage.test.d.ts.map +1 -0
  79. package/dist/__tests__/presets/showcaseShapingLanguage.test.js +52 -0
  80. package/dist/__tests__/presets/showcaseShapingLanguage.test.js.map +1 -0
  81. package/dist/__tests__/reshapedTracking.test.d.ts +2 -0
  82. package/dist/__tests__/reshapedTracking.test.d.ts.map +1 -0
  83. package/dist/__tests__/reshapedTracking.test.js +358 -0
  84. package/dist/__tests__/reshapedTracking.test.js.map +1 -0
  85. package/dist/__tests__/rtl/designRunsPainted.test.d.ts +2 -0
  86. package/dist/__tests__/rtl/designRunsPainted.test.d.ts.map +1 -0
  87. package/dist/__tests__/rtl/designRunsPainted.test.js +184 -0
  88. package/dist/__tests__/rtl/designRunsPainted.test.js.map +1 -0
  89. package/dist/__tests__/rtl/designTextPaint.test.js +5 -1
  90. package/dist/__tests__/rtl/designTextPaint.test.js.map +1 -1
  91. package/dist/__tests__/rtl/htmlRtl.test.js +3 -3
  92. package/dist/__tests__/rtl/htmlRtl.test.js.map +1 -1
  93. package/dist/__tests__/rtl/listMarkerDirection.test.js +28 -28
  94. package/dist/__tests__/rtl/listMarkerDirection.test.js.map +1 -1
  95. package/dist/__tests__/rtl/tocNumberPainted.test.d.ts +2 -0
  96. package/dist/__tests__/rtl/tocNumberPainted.test.d.ts.map +1 -0
  97. package/dist/__tests__/rtl/tocNumberPainted.test.js +113 -0
  98. package/dist/__tests__/rtl/tocNumberPainted.test.js.map +1 -0
  99. package/dist/__tests__/scriptContext.test.js +141 -1
  100. package/dist/__tests__/scriptContext.test.js.map +1 -1
  101. package/dist/__tests__/shapingLanguage.test.js +54 -41
  102. package/dist/__tests__/shapingLanguage.test.js.map +1 -1
  103. package/dist/__tests__/trackedLetters.test.d.ts +2 -0
  104. package/dist/__tests__/trackedLetters.test.d.ts.map +1 -0
  105. package/dist/__tests__/trackedLetters.test.js +380 -0
  106. package/dist/__tests__/trackedLetters.test.js.map +1 -0
  107. package/dist/__tests__/trackedLigatures.test.js +17 -5
  108. package/dist/__tests__/trackedLigatures.test.js.map +1 -1
  109. package/dist/__tests__/verseLines.test.js +1 -1
  110. package/dist/__tests__/wordCacheOrder.test.d.ts +2 -0
  111. package/dist/__tests__/wordCacheOrder.test.d.ts.map +1 -0
  112. package/dist/__tests__/wordCacheOrder.test.js +352 -0
  113. package/dist/__tests__/wordCacheOrder.test.js.map +1 -0
  114. package/dist/__tests__/wordPieces.test.d.ts +2 -0
  115. package/dist/__tests__/wordPieces.test.d.ts.map +1 -0
  116. package/dist/__tests__/wordPieces.test.js +762 -0
  117. package/dist/__tests__/wordPieces.test.js.map +1 -0
  118. package/dist/bidi.d.ts +12 -0
  119. package/dist/bidi.d.ts.map +1 -1
  120. package/dist/bidi.js +23 -0
  121. package/dist/bidi.js.map +1 -1
  122. package/dist/bundle/configVersion.d.ts +49 -23
  123. package/dist/bundle/configVersion.d.ts.map +1 -1
  124. package/dist/bundle/configVersion.js +54 -25
  125. package/dist/bundle/configVersion.js.map +1 -1
  126. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  127. package/dist/canvas-backend/blockRender.js +58 -27
  128. package/dist/canvas-backend/blockRender.js.map +1 -1
  129. package/dist/canvas-backend/cellText.d.ts +12 -0
  130. package/dist/canvas-backend/cellText.d.ts.map +1 -0
  131. package/dist/canvas-backend/cellText.js +114 -0
  132. package/dist/canvas-backend/cellText.js.map +1 -0
  133. package/dist/canvas-backend/chip.d.ts.map +1 -1
  134. package/dist/canvas-backend/chip.js +2 -1
  135. package/dist/canvas-backend/chip.js.map +1 -1
  136. package/dist/canvas-backend/contextState.d.ts +7 -0
  137. package/dist/canvas-backend/contextState.d.ts.map +1 -1
  138. package/dist/canvas-backend/contextState.js +7 -0
  139. package/dist/canvas-backend/contextState.js.map +1 -1
  140. package/dist/canvas-backend/contextText.d.ts +76 -0
  141. package/dist/canvas-backend/contextText.d.ts.map +1 -0
  142. package/dist/canvas-backend/contextText.js +102 -0
  143. package/dist/canvas-backend/contextText.js.map +1 -0
  144. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  145. package/dist/canvas-backend/headerFooter.js +8 -1
  146. package/dist/canvas-backend/headerFooter.js.map +1 -1
  147. package/dist/canvas-backend/index.d.ts.map +1 -1
  148. package/dist/canvas-backend/index.js +19 -13
  149. package/dist/canvas-backend/index.js.map +1 -1
  150. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  151. package/dist/canvas-backend/renderResourceBlock.js +12 -6
  152. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  153. package/dist/canvas-backend/scriptText.d.ts.map +1 -1
  154. package/dist/canvas-backend/scriptText.js +3 -2
  155. package/dist/canvas-backend/scriptText.js.map +1 -1
  156. package/dist/canvas-backend/segmentText.d.ts.map +1 -1
  157. package/dist/canvas-backend/segmentText.js +8 -2
  158. package/dist/canvas-backend/segmentText.js.map +1 -1
  159. package/dist/canvas-backend/trackedText.d.ts +75 -1
  160. package/dist/canvas-backend/trackedText.d.ts.map +1 -1
  161. package/dist/canvas-backend/trackedText.js +185 -22
  162. package/dist/canvas-backend/trackedText.js.map +1 -1
  163. package/dist/canvas-backend/verticalText.d.ts +9 -0
  164. package/dist/canvas-backend/verticalText.d.ts.map +1 -1
  165. package/dist/canvas-backend/verticalText.js +29 -7
  166. package/dist/canvas-backend/verticalText.js.map +1 -1
  167. package/dist/canvas-backend/wordPieces.d.ts +31 -0
  168. package/dist/canvas-backend/wordPieces.d.ts.map +1 -0
  169. package/dist/canvas-backend/wordPieces.js +132 -0
  170. package/dist/canvas-backend/wordPieces.js.map +1 -0
  171. package/dist/canvas-backend/wordRuns.d.ts +3 -1
  172. package/dist/canvas-backend/wordRuns.d.ts.map +1 -1
  173. package/dist/canvas-backend/wordRuns.js +10 -6
  174. package/dist/canvas-backend/wordRuns.js.map +1 -1
  175. package/dist/comics/lettering/__tests__/fitAsPainted.test.d.ts +2 -0
  176. package/dist/comics/lettering/__tests__/fitAsPainted.test.d.ts.map +1 -0
  177. package/dist/comics/lettering/__tests__/fitAsPainted.test.js +97 -0
  178. package/dist/comics/lettering/__tests__/fitAsPainted.test.js.map +1 -0
  179. package/dist/comics/lettering/shape-text.d.ts.map +1 -1
  180. package/dist/comics/lettering/shape-text.js +39 -11
  181. package/dist/comics/lettering/shape-text.js.map +1 -1
  182. package/dist/defaults/bodyText.d.ts.map +1 -1
  183. package/dist/defaults/bodyText.js +6 -5
  184. package/dist/defaults/bodyText.js.map +1 -1
  185. package/dist/design/bidiText.d.ts +45 -6
  186. package/dist/design/bidiText.d.ts.map +1 -1
  187. package/dist/design/bidiText.js +78 -10
  188. package/dist/design/bidiText.js.map +1 -1
  189. package/dist/design/cjkText.d.ts +3 -0
  190. package/dist/design/cjkText.d.ts.map +1 -1
  191. package/dist/design/cjkText.js +1 -1
  192. package/dist/design/cjkText.js.map +1 -1
  193. package/dist/design/layout.d.ts.map +1 -1
  194. package/dist/design/layout.js +36 -5
  195. package/dist/design/layout.js.map +1 -1
  196. package/dist/design/richText.d.ts +9 -1
  197. package/dist/design/richText.d.ts.map +1 -1
  198. package/dist/design/richText.js +8 -2
  199. package/dist/design/richText.js.map +1 -1
  200. package/dist/fonts/usage.d.ts +2 -0
  201. package/dist/fonts/usage.d.ts.map +1 -1
  202. package/dist/fonts/usage.js +18 -0
  203. package/dist/fonts/usage.js.map +1 -1
  204. package/dist/html-backend.d.ts.map +1 -1
  205. package/dist/html-backend.js +664 -84
  206. package/dist/html-backend.js.map +1 -1
  207. package/dist/index.d.ts +3 -1
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +4 -1
  210. package/dist/index.js.map +1 -1
  211. package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
  212. package/dist/knuthPlass/breakpoints.js +4 -2
  213. package/dist/knuthPlass/breakpoints.js.map +1 -1
  214. package/dist/knuthPlass/pretextAdapter.d.ts +6 -3
  215. package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
  216. package/dist/knuthPlass/pretextAdapter.js +11 -3
  217. package/dist/knuthPlass/pretextAdapter.js.map +1 -1
  218. package/dist/knuthPlass/richAdapter.d.ts +13 -1
  219. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  220. package/dist/knuthPlass/richAdapter.js +53 -5
  221. package/dist/knuthPlass/richAdapter.js.map +1 -1
  222. package/dist/knuthPlass/tracking.d.ts.map +1 -1
  223. package/dist/knuthPlass/tracking.js +3 -2
  224. package/dist/knuthPlass/tracking.js.map +1 -1
  225. package/dist/knuthPlass/types.d.ts +6 -0
  226. package/dist/knuthPlass/types.d.ts.map +1 -1
  227. package/dist/locale.d.ts +21 -17
  228. package/dist/locale.d.ts.map +1 -1
  229. package/dist/locale.js +23 -19
  230. package/dist/locale.js.map +1 -1
  231. package/dist/measure/canvas.d.ts +21 -0
  232. package/dist/measure/canvas.d.ts.map +1 -1
  233. package/dist/measure/canvas.js +165 -85
  234. package/dist/measure/canvas.js.map +1 -1
  235. package/dist/measure/cjkCompose.d.ts.map +1 -1
  236. package/dist/measure/cjkCompose.js +31 -5
  237. package/dist/measure/cjkCompose.js.map +1 -1
  238. package/dist/measure/plain.d.ts.map +1 -1
  239. package/dist/measure/plain.js +31 -6
  240. package/dist/measure/plain.js.map +1 -1
  241. package/dist/measure/pretextLanguage.d.ts.map +1 -1
  242. package/dist/measure/pretextLanguage.js +49 -7
  243. package/dist/measure/pretextLanguage.js.map +1 -1
  244. package/dist/measure/rich.d.ts +18 -1
  245. package/dist/measure/rich.d.ts.map +1 -1
  246. package/dist/measure/rich.js +200 -29
  247. package/dist/measure/rich.js.map +1 -1
  248. package/dist/measure/script.d.ts +17 -1
  249. package/dist/measure/script.d.ts.map +1 -1
  250. package/dist/measure/script.js +17 -1
  251. package/dist/measure/script.js.map +1 -1
  252. package/dist/measure/trackedLigatures.d.ts +59 -0
  253. package/dist/measure/trackedLigatures.d.ts.map +1 -0
  254. package/dist/measure/trackedLigatures.js +144 -0
  255. package/dist/measure/trackedLigatures.js.map +1 -0
  256. package/dist/pipeline/build.d.ts.map +1 -1
  257. package/dist/pipeline/build.js +4 -3
  258. package/dist/pipeline/build.js.map +1 -1
  259. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  260. package/dist/pipeline/calloutLayout.js +26 -7
  261. package/dist/pipeline/calloutLayout.js.map +1 -1
  262. package/dist/pipeline/lists.d.ts +13 -4
  263. package/dist/pipeline/lists.d.ts.map +1 -1
  264. package/dist/pipeline/lists.js +49 -12
  265. package/dist/pipeline/lists.js.map +1 -1
  266. package/dist/pipeline/toc.d.ts.map +1 -1
  267. package/dist/pipeline/toc.js +33 -9
  268. package/dist/pipeline/toc.js.map +1 -1
  269. package/dist/types.d.ts +35 -26
  270. package/dist/types.d.ts.map +1 -1
  271. package/dist/wordPieces.d.ts +120 -0
  272. package/dist/wordPieces.d.ts.map +1 -0
  273. package/dist/wordPieces.js +319 -0
  274. package/dist/wordPieces.js.map +1 -0
  275. package/package.json +1 -1
@@ -1,10 +1,6 @@
1
1
  import { cjkMarkPieces } from './cjkClasses';
2
2
  import { hasCJK } from './cjk';
3
3
  import { fontStringFamily } from './fontString';
4
- let _measureCtx = null;
5
- /** Font string currently set on the measure context, to skip redundant
6
- * `ctx.font` assignments (each assignment re-parses the shorthand). */
7
- let _currentFont = '';
8
4
  // The language text is measured in (#764).
9
5
  //
10
6
  // A 2D context has a language (`ctx.lang`, Chrome 136 and later), which the
@@ -27,30 +23,141 @@ let _currentFont = '';
27
23
  const HOST_LANGUAGE = 'inherit';
28
24
  /** The language set by {@link setMeasureLanguage}; undefined: the host's. */
29
25
  let _language;
30
- /** What `lang` of the measuring context was last set to. */
31
- let _ctxLanguage = HOST_LANGUAGE;
32
26
  /** Give `ctx` the language measured in, where the context has one. */
33
27
  function applyLanguage(ctx, language) {
34
28
  if ('lang' in ctx)
35
29
  ctx.lang = language ?? HOST_LANGUAGE;
36
30
  }
37
- function getMeasureCtx() {
38
- if (!_measureCtx) {
39
- if (typeof OffscreenCanvas !== 'undefined') {
40
- _measureCtx = new OffscreenCanvas(1, 1).getContext('2d');
41
- }
42
- else {
43
- _measureCtx = document.createElement('canvas').getContext('2d');
44
- }
45
- _currentFont = '';
46
- _ctxLanguage = HOST_LANGUAGE;
31
+ // A width that does not depend on what was measured before (#770).
32
+ //
33
+ // Chrome's canvas keeps the words it shaped, by context, font and
34
+ // language, under the word's text alone: a word is what stands between
35
+ // two spaces in one bidi run, cut before a Han character. The key says
36
+ // nothing of how the word was shaped, and there are two ways. A string of
37
+ // Latin-1 characters reaches the shaper one byte a character and is all
38
+ // Latin script to it. A string with any character past U+00FF, and a long
39
+ // slice of such a text (13 characters or more are a view of their parent
40
+ // in V8, still two bytes each), is cut into script runs word by word, and
41
+ // a word with no letter (`2026`, `(1)`, `.`, `"`) has no script there:
42
+ // the font draws it by its default rules, not its Latin ones. Noto Serif
43
+ // SC sets `2026` 22 px wide at 10 px in English the first way and
44
+ // 22.31 px the second, Amiri a full stop 2.02 px and 3.17 px. The first
45
+ // shape to enter the cache answers for both from then on: `2026` after
46
+ // `2026 — 2027`, the stop of `كتاب.` (a run of its own in a left-to-right
47
+ // context) after `.` was measured alone. So a width depended on the
48
+ // strings measured before it on the page: on the chapter laid out first,
49
+ // on the document the worker had before this one.
50
+ //
51
+ // A document shaped in its own language is measured on two contexts: one
52
+ // that only ever takes strings of Latin-1 characters, each rebuilt
53
+ // character by character so that it is one byte a character whatever text
54
+ // it was cut from, and one that only takes strings with a wider character.
55
+ // On each of them a word has one shape, so a string has one width: the one
56
+ // a context that never measured anything gives it. Measured in Chrome 154,
57
+ // on a page and in a worker: 182 strings in six orders, twelve pairs of
58
+ // face and language, no width moves (30 to 37 of them move on one context
59
+ // in Noto Serif SC and Amiri).
60
+ //
61
+ // A document in its host's language (`_language` undefined) is measured on
62
+ // one context, as up to postext 1.29: its widths are the ones it had.
63
+ /** A character past Latin-1: a string that holds one is two bytes a
64
+ * character to the browser. */
65
+ const WIDE_RE = /[^\u0000-\u00FF]/;
66
+ /** The one context of a document measured in its host's language. */
67
+ let _host = null;
68
+ /** The contexts of a document measured in its own: Latin-1 strings on one,
69
+ * strings with a wider character on the other. */
70
+ let _narrow = null;
71
+ let _wide = null;
72
+ function newMeasurer() {
73
+ const ctx = typeof OffscreenCanvas !== 'undefined'
74
+ ? new OffscreenCanvas(1, 1).getContext('2d')
75
+ : document.createElement('canvas').getContext('2d');
76
+ return { ctx, font: '', language: HOST_LANGUAGE };
77
+ }
78
+ /** `text` as a string of one byte a character (V8 keeps a string built
79
+ * from single Latin-1 characters that way; a slice of a text with a wider
80
+ * character is two bytes a character, and Chrome shapes it otherwise).
81
+ * For a text of Latin-1 characters only. */
82
+ function oneByte(text) {
83
+ let out = '';
84
+ for (let i = 0; i < text.length; i++)
85
+ out += text[i];
86
+ return out;
87
+ }
88
+ /** `text` as the measurer hands it to the canvas in a document shaped in
89
+ * its own language: a Latin-1 text one byte a character, any other as it
90
+ * is. A painter that hands its strings the same way has them shaped as
91
+ * they were measured. */
92
+ export function canvasText(text) {
93
+ return _language === undefined || WIDE_RE.test(text) ? text : oneByte(text);
94
+ }
95
+ /** The metrics of `text` in `font`, in the language measured in: on the
96
+ * context its kind of string is measured on (see above). `rtl`: in a
97
+ * context set right to left, as a right-to-left word is painted (its
98
+ * brackets mirrored). */
99
+ function metricsOf(text, font, rtl = false, spacingPx = 0) {
100
+ let measurer;
101
+ let handed = text;
102
+ if (_language === undefined) {
103
+ measurer = _host ??= newMeasurer();
47
104
  }
105
+ else if (WIDE_RE.test(text)) {
106
+ measurer = _wide ??= newMeasurer();
107
+ }
108
+ else {
109
+ measurer = _narrow ??= newMeasurer();
110
+ handed = oneByte(text);
111
+ }
112
+ const ctx = measurer.ctx;
48
113
  const wanted = _language ?? HOST_LANGUAGE;
49
- if (wanted !== _ctxLanguage) {
50
- applyLanguage(_measureCtx, _language);
51
- _ctxLanguage = wanted;
114
+ if (wanted !== measurer.language) {
115
+ applyLanguage(ctx, _language);
116
+ measurer.language = wanted;
117
+ }
118
+ if (font !== measurer.font) {
119
+ ctx.font = font;
120
+ measurer.font = font;
121
+ }
122
+ if (spacingPx !== 0) {
123
+ // Only {@link measureSpacedWidth} asks, of a context that has the
124
+ // attribute: it goes back to no spacing, what every other measure is
125
+ // taken at.
126
+ ctx.letterSpacing = `${spacingPx}px`;
127
+ const metrics = ctx.measureText(handed);
128
+ ctx.letterSpacing = '0px';
129
+ return metrics;
52
130
  }
53
- return _measureCtx;
131
+ if (!rtl || !('direction' in ctx))
132
+ return ctx.measureText(handed);
133
+ const direction = ctx.direction;
134
+ ctx.direction = 'rtl';
135
+ const metrics = ctx.measureText(handed);
136
+ ctx.direction = direction;
137
+ return metrics;
138
+ }
139
+ /**
140
+ * The width of `text` in `font` under a letter-spacing of `spacingPx`
141
+ * (`ctx.letterSpacing`: the spacing after every letter counted in), in
142
+ * the language measured in and on the context its kind of string is
143
+ * measured on, kept nowhere. Undefined where the canvas has no
144
+ * letter-spacing. For what asks how the browser shapes a tracked text
145
+ * (`measure/trackedLigatures.ts`): under a letter-spacing it sets no
146
+ * optional ligature.
147
+ */
148
+ export function measureSpacedWidth(text, font, spacingPx) {
149
+ const probe = _language === undefined ? (_host ??= newMeasurer()) : WIDE_RE.test(text) ? (_wide ??= newMeasurer()) : (_narrow ??= newMeasurer());
150
+ if (!('letterSpacing' in probe.ctx))
151
+ return undefined;
152
+ return metricsOf(text, font, false, spacingPx).width;
153
+ }
154
+ /**
155
+ * The width of `text` in `font` as the canvas gives it, in the language
156
+ * measured in, kept nowhere: for a caller with a cache of its own (the
157
+ * text library's segments, `measure/pretextLanguage.ts`).
158
+ */
159
+ export function measureUncachedWidth(text, font) {
160
+ return metricsOf(text, font).width;
54
161
  }
55
162
  const newCaches = () => ({ width: new Map(), widthEntries: 0, run: new Map(), runEntries: 0, marked: new Map(), markedEntries: 0, sensitive: new Map() });
56
163
  /** The caches of each language measured in (`''` under the key of the
@@ -121,21 +228,16 @@ export function measureTextWidth(text, font) {
121
228
  const cached = byText.get(text);
122
229
  if (cached !== undefined)
123
230
  return cached;
124
- const ctx = getMeasureCtx();
125
- if (font !== _currentFont) {
126
- ctx.font = font;
127
- _currentFont = font;
128
- }
129
231
  // Two CJK marks side by side (`)》`, `”“`) are measured apart: the
130
232
  // browser would set the first half width in one run (see
131
233
  // `cjkMarkCuts`), and the renderers paint them apart. Text with no CJK
132
234
  // is never cut (`markCuts`): one measure, with no cut to look for.
133
235
  let width = 0;
134
236
  if (!hasCJK(text))
135
- width += ctx.measureText(text).width;
237
+ width += metricsOf(text, font).width;
136
238
  else
137
239
  for (const piece of cjkMarkPieces(text, true))
138
- width += ctx.measureText(piece).width;
240
+ width += metricsOf(piece, font).width;
139
241
  if (C.widthEntries >= MAX_WIDTH_CACHE_ENTRIES) {
140
242
  C.width = new Map();
141
243
  C.widthEntries = 0;
@@ -162,12 +264,7 @@ export function measureRunWidth(text, font) {
162
264
  const cached = byText.get(text);
163
265
  if (cached !== undefined)
164
266
  return cached;
165
- const ctx = getMeasureCtx();
166
- if (font !== _currentFont) {
167
- ctx.font = font;
168
- _currentFont = font;
169
- }
170
- const width = ctx.measureText(text).width;
267
+ const width = metricsOf(text, font).width;
171
268
  if (C.runEntries >= MAX_WIDTH_CACHE_ENTRIES) {
172
269
  C.run = new Map();
173
270
  C.runEntries = 0;
@@ -179,16 +276,6 @@ export function measureRunWidth(text, font) {
179
276
  return width;
180
277
  }
181
278
  // Widths of words with no letter, measured in a script (#725): `C.marked`.
182
- function rawWidth(ctx, text, rtl) {
183
- // A right-to-left word is measured as it is painted: its brackets mirrored.
184
- if (!rtl || !('direction' in ctx))
185
- return ctx.measureText(text).width;
186
- const direction = ctx.direction;
187
- ctx.direction = 'rtl';
188
- const width = ctx.measureText(text).width;
189
- ctx.direction = direction;
190
- return width;
191
- }
192
279
  /**
193
280
  * The width of `text` set between `lead` and `trail`, less theirs: `text`
194
281
  * as the browser shapes it in the script of the mark beside it (#725, see
@@ -207,19 +294,15 @@ export function measureMarkedWidth(text, font, lead, trail, rtl) {
207
294
  const cached = byText.get(key);
208
295
  if (cached !== undefined)
209
296
  return cached;
210
- const ctx = getMeasureCtx();
211
- if (font !== _currentFont) {
212
- ctx.font = font;
213
- _currentFont = font;
214
- }
297
+ // A right-to-left word is measured as it is painted: its brackets mirrored.
215
298
  const markKey = `${rtl ? '<' : '>'}${lead}\x00${trail}`;
216
299
  let mark = byText.get(markKey);
217
300
  if (mark === undefined) {
218
- mark = rawWidth(ctx, lead + trail, rtl);
301
+ mark = metricsOf(lead + trail, font, rtl).width;
219
302
  byText.set(markKey, mark);
220
303
  C.markedEntries++;
221
304
  }
222
- const width = Math.max(0, rawWidth(ctx, lead + text + trail, rtl) - mark);
305
+ const width = Math.max(0, metricsOf(lead + text + trail, font, rtl).width - mark);
223
306
  if (C.markedEntries >= MAX_WIDTH_CACHE_ENTRIES) {
224
307
  C.marked = new Map();
225
308
  C.markedEntries = 0;
@@ -249,15 +332,10 @@ export function scriptSensitive(font, marks) {
249
332
  const known = C.sensitive.get(font);
250
333
  if (known !== undefined)
251
334
  return known;
252
- const ctx = getMeasureCtx();
253
- if (font !== _currentFont) {
254
- ctx.font = font;
255
- _currentFont = font;
256
- }
257
335
  let lo = Infinity;
258
336
  let hi = -Infinity;
259
337
  for (const mark of marks) {
260
- const width = ctx.measureText(SCRIPT_PROBE + mark).width - ctx.measureText(mark).width;
338
+ const width = metricsOf(SCRIPT_PROBE + mark, font).width - metricsOf(mark, font).width;
261
339
  if (width < lo)
262
340
  lo = width;
263
341
  if (width > hi)
@@ -340,8 +418,10 @@ export function evictTextWidths(families) {
340
418
  }
341
419
  }
342
420
  }
343
- // The context resolves its font again on the next measure.
344
- _currentFont = '';
421
+ // Each context resolves its font again on the next measure.
422
+ for (const measurer of [_host, _narrow, _wide])
423
+ if (measurer)
424
+ measurer.font = '';
345
425
  _generation++;
346
426
  _evictions.push({ generation: _generation, families: set });
347
427
  if (_evictions.length > MAX_EVICTIONS)
@@ -359,19 +439,34 @@ export function onTextWidthCacheClear(listener) {
359
439
  * baseline (px), or null when the measurer gives no ink metrics. Not
360
440
  * cached. */
361
441
  export function measureInkBox(text, font) {
362
- const ctx = getMeasureCtx();
363
- if (font !== _currentFont) {
364
- ctx.font = font;
365
- _currentFont = font;
366
- }
367
- const m = ctx.measureText(text);
442
+ const m = metricsOf(text, font);
368
443
  const ascent = m.actualBoundingBoxAscent;
369
444
  const descent = m.actualBoundingBoxDescent;
370
445
  if (typeof ascent !== 'number' || typeof descent !== 'number' || !Number.isFinite(ascent) || !Number.isFinite(descent))
371
446
  return null;
372
447
  return { ascent, descent };
373
448
  }
374
- let _profileCtx;
449
+ /** The contexts inks are painted on and read back from, made on first use
450
+ * (null: none can be made): one for each kind of string, as the measuring
451
+ * ones (#770), so the ink is the ink of the shape that was measured. */
452
+ const _profileCtx = {};
453
+ function profileContext(kind) {
454
+ let ctx = _profileCtx[kind];
455
+ if (ctx === undefined) {
456
+ ctx = null;
457
+ try {
458
+ const canvas = typeof OffscreenCanvas !== 'undefined' ? new OffscreenCanvas(1, 1) : typeof document !== 'undefined' ? document.createElement('canvas') : null;
459
+ const made = canvas?.getContext('2d', { willReadFrequently: true });
460
+ if (made && typeof made.fillText === 'function' && typeof made.getImageData === 'function')
461
+ ctx = made;
462
+ }
463
+ catch {
464
+ ctx = null;
465
+ }
466
+ _profileCtx[kind] = ctx;
467
+ }
468
+ return ctx;
469
+ }
375
470
  /** Alpha under which a pixel is left out: a faint fringe. */
376
471
  const INK_ALPHA = 32;
377
472
  /**
@@ -382,23 +477,13 @@ const INK_ALPHA = 32;
382
477
  * the text has no ink. Not cached.
383
478
  */
384
479
  export function measureInkProfile(text, font) {
385
- if (_profileCtx === undefined) {
386
- _profileCtx = null;
387
- try {
388
- const canvas = typeof OffscreenCanvas !== 'undefined' ? new OffscreenCanvas(1, 1) : typeof document !== 'undefined' ? document.createElement('canvas') : null;
389
- const ctx = canvas?.getContext('2d', { willReadFrequently: true });
390
- if (ctx && typeof ctx.fillText === 'function' && typeof ctx.getImageData === 'function')
391
- _profileCtx = ctx;
392
- }
393
- catch {
394
- _profileCtx = null;
395
- }
396
- }
397
- const ctx = _profileCtx;
480
+ const ctx = profileContext(_language === undefined ? 'host' : WIDE_RE.test(text) ? 'wide' : 'narrow');
398
481
  if (!ctx)
399
482
  return null;
400
483
  try {
401
- // The ink is the ink of the glyphs measured: the same language.
484
+ // The ink is the ink of the glyphs measured: the same language, and
485
+ // the string handed over the same way.
486
+ text = canvasText(text);
402
487
  applyLanguage(ctx, _language);
403
488
  ctx.font = font;
404
489
  const m = ctx.measureText(text);
@@ -460,12 +545,7 @@ export function measureInkProfile(text, font) {
460
545
  * it), or null when the measurer gives no ink metrics or the text has no
461
546
  * ink. Not cached. */
462
547
  export function measureInkExtent(text, font) {
463
- const ctx = getMeasureCtx();
464
- if (font !== _currentFont) {
465
- ctx.font = font;
466
- _currentFont = font;
467
- }
468
- const m = ctx.measureText(text);
548
+ const m = metricsOf(text, font);
469
549
  const left = m.actualBoundingBoxLeft;
470
550
  const right = m.actualBoundingBoxRight;
471
551
  if (typeof left !== 'number' || typeof right !== 'number' || !Number.isFinite(left) || !Number.isFinite(right))
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/measure/canvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/measure/canvas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cjkCompose.d.ts","sourceRoot":"","sources":["../../src/measure/cjkCompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAA4B,UAAU,EAAiB,MAAM,UAAU,CAAC;AACpF,OAAO,KAAK,EAAwD,eAAe,EAAc,MAAM,QAAQ,CAAC;AAGhH,OAAO,EAA2D,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAqBhI,OAAO,EAeL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAyBL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AAgB1B;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAsBpD;AAED;;;+CAG+C;AAC/C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAKD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAE,cAAoC,GAAG,OAAO,CAE9F;AA2ID;;;;uCAIuC;AACvC,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAqB1F;AAunFD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,GACvC,aAAa,CA+If;AAaD;6BAC6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,GAAE,iBAAqC,EAAE,OAAO,UAAQ,GAAG,aAAa,CAqC/L"}
1
+ {"version":3,"file":"cjkCompose.d.ts","sourceRoot":"","sources":["../../src/measure/cjkCompose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,KAAK,EAA4B,UAAU,EAAiB,MAAM,UAAU,CAAC;AACpF,OAAO,KAAK,EAAwD,eAAe,EAAc,MAAM,QAAQ,CAAC;AAGhH,OAAO,EAA2D,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAqBhI,OAAO,EAeL,KAAK,iBAAiB,EACvB,MAAM,cAAc,CAAC;AAUtB,OAAO,EAyBL,KAAK,cAAc,EAEpB,MAAM,kBAAkB,CAAC;AAgB1B;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAsBpD;AAED;;;+CAG+C;AAC/C,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAKD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,GAAE,cAAoC,GAAG,OAAO,CAE9F;AA2ID;;;;uCAIuC;AACvC,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAqB1F;AAipFD;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,GACvC,aAAa,CA+If;AAaD;6BAC6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iDAAiD;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,wDAAwD;IACxD,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CACtC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,GAAE,iBAAqC,EAAE,OAAO,UAAQ,GAAG,aAAa,CAqC/L"}
@@ -1958,13 +1958,36 @@ function overflowAt(u, room, letterSpacingPx) {
1958
1958
  }
1959
1959
  return over;
1960
1960
  }
1961
- /** The rest of a run after its first `from` UTF-16 units (`cutWidth` px). */
1962
- function runTail(u, from, cutWidth) {
1961
+ /** How many characters of the rest of a run are measured with what
1962
+ * follows the cut (see {@link runTail}), as `REST_WINDOW` of
1963
+ * `measure/rich.ts`. */
1964
+ const TAIL_WINDOW = 32;
1965
+ /** The rest of a run after its first `from` UTF-16 units (`cutWidth` px).
1966
+ *
1967
+ * In a document shaped in its own language the rest is as wide as the
1968
+ * text that opens the next line (#770), not the run less what stayed
1969
+ * above: the browser measured the run whole, and what the face draws
1970
+ * across the cut is not painted on either line. The address of the
1971
+ * GB/T 7714 paper, cut before `.w3.org/TR/clreq/`, left that rest
1972
+ * 1.67 px (0.82 pt) narrower than it is painted alone. Its first
1973
+ * {@link TAIL_WINDOW} characters are measured from the cut and the
1974
+ * others as the run grew by them, so a run many lines long still costs
1975
+ * what a line of it does. Vertical text keeps the widths it had. */
1976
+ function runTail(u, from, cutWidth, letterSpacingPx) {
1963
1977
  const tail = u.text.slice(from);
1978
+ let width = u.width - cutWidth;
1979
+ if (getMeasureLanguage() !== undefined && getMeasureWritingMode() !== 'vertical-rl') {
1980
+ let end = Math.min(u.text.length, from + TAIL_WINDOW);
1981
+ if (end < u.text.length && (u.text.charCodeAt(end) & 0xFC00) === 0xDC00)
1982
+ end++;
1983
+ const head = u.text.slice(from, end);
1984
+ const own = textWidth(head, u.style.font, u.style.smallCaps) + (letterSpacingPx === 0 ? 0 : letterSpacingPx * graphemeCount(head));
1985
+ width = end === u.text.length ? own : own + u.width - prefixWidth(u, end, letterSpacingPx);
1986
+ }
1964
1987
  return {
1965
1988
  ...u,
1966
1989
  text: tail,
1967
- width: u.width - cutWidth,
1990
+ width,
1968
1991
  graphemes: u.graphemes - graphemeCount(u.text.slice(0, from)),
1969
1992
  first: cjkClassOf(tail),
1970
1993
  at: u.at + from,
@@ -1988,7 +2011,7 @@ function cutAtJoint(u, room, letterSpacingPx) {
1988
2011
  continue;
1989
2012
  return {
1990
2013
  head: { ...u, text: head, width: w, graphemes: graphemeCount(head), last: cjkClassOf(lastGrapheme(head)), url: false },
1991
- tail: runTail(u, idx, w),
2014
+ tail: runTail(u, idx, w, letterSpacingPx),
1992
2015
  };
1993
2016
  }
1994
2017
  return null;
@@ -2020,7 +2043,10 @@ function divideRun(u, room, letterSpacingPx) {
2020
2043
  const from = text.length - split.tail.text.length;
2021
2044
  return {
2022
2045
  head: { ...u, text: headText, width: split.head.width, graphemes: graphemeCount(headText), last: cjkClassOf(lastGrapheme(headText)), url: false },
2023
- tail: runTail(u, from, width - split.tail.width),
2046
+ // What stayed on the line: the truncated text less its rest, or, where
2047
+ // that rest was measured as a text of its own (#770), the advance of
2048
+ // the characters before it.
2049
+ tail: runTail(u, from, split.tail.ownPieces !== undefined ? prefixWidth(u, from, letterSpacingPx) : width - split.tail.width, letterSpacingPx),
2024
2050
  hyphen,
2025
2051
  hard: split.hard === true,
2026
2052
  };