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
@@ -0,0 +1,59 @@
1
+ /**
2
+ * The ligatures of a tracked text, as the measurer sees them (#663, #770).
3
+ *
4
+ * A tracked word is measured at its natural width, the ligatures of the
5
+ * face counted, plus the tracking times its letters. A browser sets no
6
+ * optional ligature under a letter-spacing, on the canvas or in a box, so
7
+ * the word painted with the spacing alone is wider than its place: Chrome
8
+ * 154 at 40 px, `first` 4.56 px in Newsreader and 2.76 px in Source Serif
9
+ * 4, `office` 7 px in EB Garamond. The canvas paints such a word in
10
+ * pieces (`canvas-backend/trackedText.ts`): each ligature alone under no
11
+ * letter-spacing, the letters between them tracked, every piece where the
12
+ * natural shaping puts it and the tracking of every letter before it
13
+ * further on. This module finds the same pieces with the engine's own
14
+ * measurer, for an output that has no painting context to ask (the HTML).
15
+ *
16
+ * Which letters: two neighbours whose width under a letter-spacing, the
17
+ * spacing taken off, is not their natural width are a ligature, and a
18
+ * third joins them the same way (f + f + i). A face whose ligature is as
19
+ * wide as its letters (Geist's `fi`) shows nothing here, and needs
20
+ * nothing: set apart under the letter-spacing its letters stand where the
21
+ * layout counted them.
22
+ *
23
+ * A form by the neighbours is no ligature. Under a letter-spacing the
24
+ * browser takes the contextual alternates of a face away with its
25
+ * ligatures, and two neighbours with such forms read as a ligature to the
26
+ * probe above (Playpen Sans: `FO`, `OR`, most pairs). A zero width
27
+ * non-joiner between the two tells: it dissolves a ligature and leaves a
28
+ * form by the neighbours (`canvas-backend/trackedText.ts` has the widths
29
+ * measured). Two neighbours as wide across a non-joiner as without one
30
+ * are left in the letters around them: the HTML sets a word with such
31
+ * forms whole, at the letter-spacing that ends it where it was measured,
32
+ * as the canvas paints it in a document shaped in its own language. Only
33
+ * such a document asks here.
34
+ *
35
+ * In the language measured in (`getMeasureLanguage`): a face ligates
36
+ * otherwise under a language (no `fi` in Turkish).
37
+ */
38
+ /** One piece of a tracked text set apart from the rest. */
39
+ export interface LigaturePiece {
40
+ text: string;
41
+ /** Where the piece starts in the text's natural shaping, px from its
42
+ * start, the kerning before it counted. */
43
+ offset: number;
44
+ /** Its natural width, px: alone, under no letter-spacing. */
45
+ width: number;
46
+ /** Its letters (graphemes): each takes the tracking once. */
47
+ letters: number;
48
+ /** A ligature: set under no letter-spacing. */
49
+ ligature: boolean;
50
+ }
51
+ /**
52
+ * The pieces a tracked `text` (a word, or any text set as one run) is set
53
+ * in, in `font` and the language measured in, or null when it is set
54
+ * whole: the browser shapes it the same under a letter-spacing, the
55
+ * canvas measures none, or the text holds a joining letter or a
56
+ * right-to-left one.
57
+ */
58
+ export declare function trackedLigaturePieces(text: string, font: string): readonly LigaturePiece[] | null;
59
+ //# sourceMappingURL=trackedLigatures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackedLigatures.d.ts","sourceRoot":"","sources":["../../src/measure/trackedLigatures.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAOH,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb;gDAC4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,CAAC;CACnB;AA+ED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,GAAG,IAAI,CAYjG"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * The ligatures of a tracked text, as the measurer sees them (#663, #770).
3
+ *
4
+ * A tracked word is measured at its natural width, the ligatures of the
5
+ * face counted, plus the tracking times its letters. A browser sets no
6
+ * optional ligature under a letter-spacing, on the canvas or in a box, so
7
+ * the word painted with the spacing alone is wider than its place: Chrome
8
+ * 154 at 40 px, `first` 4.56 px in Newsreader and 2.76 px in Source Serif
9
+ * 4, `office` 7 px in EB Garamond. The canvas paints such a word in
10
+ * pieces (`canvas-backend/trackedText.ts`): each ligature alone under no
11
+ * letter-spacing, the letters between them tracked, every piece where the
12
+ * natural shaping puts it and the tracking of every letter before it
13
+ * further on. This module finds the same pieces with the engine's own
14
+ * measurer, for an output that has no painting context to ask (the HTML).
15
+ *
16
+ * Which letters: two neighbours whose width under a letter-spacing, the
17
+ * spacing taken off, is not their natural width are a ligature, and a
18
+ * third joins them the same way (f + f + i). A face whose ligature is as
19
+ * wide as its letters (Geist's `fi`) shows nothing here, and needs
20
+ * nothing: set apart under the letter-spacing its letters stand where the
21
+ * layout counted them.
22
+ *
23
+ * A form by the neighbours is no ligature. Under a letter-spacing the
24
+ * browser takes the contextual alternates of a face away with its
25
+ * ligatures, and two neighbours with such forms read as a ligature to the
26
+ * probe above (Playpen Sans: `FO`, `OR`, most pairs). A zero width
27
+ * non-joiner between the two tells: it dissolves a ligature and leaves a
28
+ * form by the neighbours (`canvas-backend/trackedText.ts` has the widths
29
+ * measured). Two neighbours as wide across a non-joiner as without one
30
+ * are left in the letters around them: the HTML sets a word with such
31
+ * forms whole, at the letter-spacing that ends it where it was measured,
32
+ * as the canvas paints it in a document shaped in its own language. Only
33
+ * such a document asks here.
34
+ *
35
+ * In the language measured in (`getMeasureLanguage`): a face ligates
36
+ * otherwise under a language (no `fi` in Turkish).
37
+ */
38
+ import { needsBidi } from '../bidi';
39
+ import { measureLanguageKey, measureSpacedWidth, measureTextWidth, onTextWidthCacheClear } from './canvas';
40
+ import { graphemesOf } from './graphemes';
41
+ import { joiningScriptIn } from './joining';
42
+ /** Letter-spacing the texts are probed with, px. */
43
+ const PROBE = 1;
44
+ /** Least difference, px, between a text's natural width and its width
45
+ * under letter-spacing (the spacing taken off) that counts as another
46
+ * shaping: above the noise of `measureText`, below any ligature. The
47
+ * canvas painter's own (`trackedText.ts`). */
48
+ const TOLERANCE = 0.05;
49
+ /** Texts remembered per font before the memory starts over. */
50
+ const MAX_TEXTS = 8192;
51
+ /** Language key and font string → text → its pieces, null for a text set
52
+ * whole. */
53
+ let known = new Map();
54
+ onTextWidthCacheClear(() => {
55
+ known = new Map();
56
+ });
57
+ /** Whether `text` may be set in pieces at all: left to right, with no
58
+ * letter of a joining script. A right-to-left word is left whole here:
59
+ * the outputs give its ligatures the tracking they did. */
60
+ function divisible(text) {
61
+ return !joiningScriptIn(text) && !needsBidi(text);
62
+ }
63
+ /** Whether the browser shapes `text` otherwise once a letter-spacing is
64
+ * set. False where the canvas measures no letter-spacing. */
65
+ function shapedOtherwise(text, font) {
66
+ const one = measureSpacedWidth(text, font, PROBE);
67
+ const two = measureSpacedWidth(text, font, 2 * PROBE);
68
+ if (one === undefined || two === undefined)
69
+ return false;
70
+ // What one more unit of spacing adds: the spacing after each letter.
71
+ const step = two - one;
72
+ // A measurer that takes no letter-spacing (a test stub, an old browser).
73
+ if (!(step > PROBE / 2))
74
+ return false;
75
+ return Math.abs(one - step - measureTextWidth(text, font)) > TOLERANCE;
76
+ }
77
+ /** ZERO WIDTH NON-JOINER: between two letters it asks for no ligature of
78
+ * them. */
79
+ const ZWNJ = '\u200C';
80
+ /** Whether two neighbours the letter-spacing reshapes are a ligature: a
81
+ * non-joiner between them changes their natural width (see the module
82
+ * comment). */
83
+ function ligated(first, second, font) {
84
+ return Math.abs(measureTextWidth(first + ZWNJ + second, font) - measureTextWidth(first + second, font)) > TOLERANCE;
85
+ }
86
+ function piecesOf(text, font) {
87
+ if (!divisible(text))
88
+ return null;
89
+ const letters = graphemesOf(text);
90
+ if (letters.length < 2 || !shapedOtherwise(text, font))
91
+ return null;
92
+ const groups = [];
93
+ let ligatures = 0;
94
+ for (let k = 0; k < letters.length;) {
95
+ let end = k + 1;
96
+ while (end < letters.length && shapedOtherwise(letters[end - 1] + letters[end], font) && ligated(letters[end - 1], letters[end], font))
97
+ end++;
98
+ const ligature = end - k > 1;
99
+ const last = groups[groups.length - 1];
100
+ if (!ligature && last && !last.ligature)
101
+ last.end = end;
102
+ else
103
+ groups.push({ start: k, end, ligature });
104
+ if (ligature)
105
+ ligatures++;
106
+ k = end;
107
+ }
108
+ // Shaped otherwise as a whole but by no ligature of two neighbours: left
109
+ // whole.
110
+ if (ligatures === 0)
111
+ return null;
112
+ const natural = (from, to) => measureTextWidth(letters.slice(from, to).join(''), font);
113
+ return groups.map((g) => ({
114
+ text: letters.slice(g.start, g.end).join(''),
115
+ offset: g.start === 0 ? 0 : natural(0, g.start + 1) - natural(g.start, g.start + 1),
116
+ width: natural(g.start, g.end),
117
+ letters: g.end - g.start,
118
+ ligature: g.ligature,
119
+ }));
120
+ }
121
+ /**
122
+ * The pieces a tracked `text` (a word, or any text set as one run) is set
123
+ * in, in `font` and the language measured in, or null when it is set
124
+ * whole: the browser shapes it the same under a letter-spacing, the
125
+ * canvas measures none, or the text holds a joining letter or a
126
+ * right-to-left one.
127
+ */
128
+ export function trackedLigaturePieces(text, font) {
129
+ if (text.length < 2)
130
+ return null;
131
+ const key = measureLanguageKey() + font;
132
+ let byText = known.get(key);
133
+ if (!byText)
134
+ known.set(key, byText = new Map());
135
+ let pieces = byText.get(text);
136
+ if (pieces === undefined) {
137
+ pieces = piecesOf(text, font);
138
+ if (byText.size >= MAX_TEXTS)
139
+ byText.clear();
140
+ byText.set(text, pieces);
141
+ }
142
+ return pieces;
143
+ }
144
+ //# sourceMappingURL=trackedLigatures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trackedLigatures.js","sourceRoot":"","sources":["../../src/measure/trackedLigatures.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/pipeline/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/pipeline/build.ts"],"names":[],"mappings":"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"}
@@ -320,9 +320,10 @@ function placeDocumentPass(content, config, cache, options, hints) {
320
320
  setMeasureArabicNumbers(arabicNumbersOf(resolved));
321
321
  // A word with no letter is shaped in the script of the text around it,
322
322
  // and with no letter near in the script of the document's language (#725).
323
- // The text is measured in the host's language, as up to postext 1.28,
324
- // unless the configuration asks for the document's own, the same on a
325
- // page in any language and in a worker (#764).
323
+ // The text is measured in the document's language, the same on a page
324
+ // in any language and in a worker (#764, the default since postext 1.30,
325
+ // #770); in the host's for a configuration that asks for it, as up to
326
+ // postext 1.28.
326
327
  setMeasureLanguage(shapingLanguageOf(resolved));
327
328
  // A Chinese or Japanese document sets its doubled ellipsis and dash as
328
329
  // Han text wherever they are cited.