postext 1.19.3 → 1.20.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 (255) hide show
  1. package/dist/__tests__/comics/art.test.d.ts +2 -0
  2. package/dist/__tests__/comics/art.test.d.ts.map +1 -0
  3. package/dist/__tests__/comics/art.test.js +96 -0
  4. package/dist/__tests__/comics/art.test.js.map +1 -0
  5. package/dist/__tests__/comics/build.test.d.ts +2 -0
  6. package/dist/__tests__/comics/build.test.d.ts.map +1 -0
  7. package/dist/__tests__/comics/build.test.js +215 -0
  8. package/dist/__tests__/comics/build.test.js.map +1 -0
  9. package/dist/__tests__/comics/canvas.test.d.ts +2 -0
  10. package/dist/__tests__/comics/canvas.test.d.ts.map +1 -0
  11. package/dist/__tests__/comics/canvas.test.js +161 -0
  12. package/dist/__tests__/comics/canvas.test.js.map +1 -0
  13. package/dist/__tests__/comics/config.test.d.ts +2 -0
  14. package/dist/__tests__/comics/config.test.d.ts.map +1 -0
  15. package/dist/__tests__/comics/config.test.js +97 -0
  16. package/dist/__tests__/comics/config.test.js.map +1 -0
  17. package/dist/__tests__/comics/geometry.test.d.ts +2 -0
  18. package/dist/__tests__/comics/geometry.test.d.ts.map +1 -0
  19. package/dist/__tests__/comics/geometry.test.js +118 -0
  20. package/dist/__tests__/comics/geometry.test.js.map +1 -0
  21. package/dist/__tests__/comics/html.test.d.ts +2 -0
  22. package/dist/__tests__/comics/html.test.d.ts.map +1 -0
  23. package/dist/__tests__/comics/html.test.js +253 -0
  24. package/dist/__tests__/comics/html.test.js.map +1 -0
  25. package/dist/__tests__/comics/lettering.test.d.ts +2 -0
  26. package/dist/__tests__/comics/lettering.test.d.ts.map +1 -0
  27. package/dist/__tests__/comics/lettering.test.js +241 -0
  28. package/dist/__tests__/comics/lettering.test.js.map +1 -0
  29. package/dist/__tests__/comics/script.test.d.ts +2 -0
  30. package/dist/__tests__/comics/script.test.d.ts.map +1 -0
  31. package/dist/__tests__/comics/script.test.js +147 -0
  32. package/dist/__tests__/comics/script.test.js.map +1 -0
  33. package/dist/__tests__/comics/split.test.d.ts +2 -0
  34. package/dist/__tests__/comics/split.test.d.ts.map +1 -0
  35. package/dist/__tests__/comics/split.test.js +120 -0
  36. package/dist/__tests__/comics/split.test.js.map +1 -0
  37. package/dist/__tests__/comics/spread.test.d.ts +2 -0
  38. package/dist/__tests__/comics/spread.test.d.ts.map +1 -0
  39. package/dist/__tests__/comics/spread.test.js +161 -0
  40. package/dist/__tests__/comics/spread.test.js.map +1 -0
  41. package/dist/__tests__/comics/strip.test.d.ts +2 -0
  42. package/dist/__tests__/comics/strip.test.d.ts.map +1 -0
  43. package/dist/__tests__/comics/strip.test.js +231 -0
  44. package/dist/__tests__/comics/strip.test.js.map +1 -0
  45. package/dist/__tests__/exports.test.js +89 -0
  46. package/dist/__tests__/exports.test.js.map +1 -1
  47. package/dist/__tests__/parse/containers.test.js +1 -1
  48. package/dist/__tests__/parse/containers.test.js.map +1 -1
  49. package/dist/canvas-backend/comic.d.ts +32 -0
  50. package/dist/canvas-backend/comic.d.ts.map +1 -0
  51. package/dist/canvas-backend/comic.js +216 -0
  52. package/dist/canvas-backend/comic.js.map +1 -0
  53. package/dist/canvas-backend/headerFooter.d.ts +4 -1
  54. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  55. package/dist/canvas-backend/headerFooter.js +3 -1
  56. package/dist/canvas-backend/headerFooter.js.map +1 -1
  57. package/dist/canvas-backend/index.d.ts.map +1 -1
  58. package/dist/canvas-backend/index.js +7 -1
  59. package/dist/canvas-backend/index.js.map +1 -1
  60. package/dist/comics/art.d.ts +72 -0
  61. package/dist/comics/art.d.ts.map +1 -0
  62. package/dist/comics/art.js +154 -0
  63. package/dist/comics/art.js.map +1 -0
  64. package/dist/comics/fonts.d.ts +20 -0
  65. package/dist/comics/fonts.d.ts.map +1 -0
  66. package/dist/comics/fonts.js +42 -0
  67. package/dist/comics/fonts.js.map +1 -0
  68. package/dist/comics/geometry.d.ts +87 -0
  69. package/dist/comics/geometry.d.ts.map +1 -0
  70. package/dist/comics/geometry.js +272 -0
  71. package/dist/comics/geometry.js.map +1 -0
  72. package/dist/comics/index.d.ts +29 -0
  73. package/dist/comics/index.d.ts.map +1 -0
  74. package/dist/comics/index.js +18 -0
  75. package/dist/comics/index.js.map +1 -0
  76. package/dist/comics/layoutPage.d.ts +156 -0
  77. package/dist/comics/layoutPage.d.ts.map +1 -0
  78. package/dist/comics/layoutPage.js +698 -0
  79. package/dist/comics/layoutPage.js.map +1 -0
  80. package/dist/comics/lettering/__tests__/harness.test.d.ts +2 -0
  81. package/dist/comics/lettering/__tests__/harness.test.d.ts.map +1 -0
  82. package/dist/comics/lettering/__tests__/harness.test.js +273 -0
  83. package/dist/comics/lettering/__tests__/harness.test.js.map +1 -0
  84. package/dist/comics/lettering/__tests__/letterPanel.test.d.ts +2 -0
  85. package/dist/comics/lettering/__tests__/letterPanel.test.d.ts.map +1 -0
  86. package/dist/comics/lettering/__tests__/letterPanel.test.js +224 -0
  87. package/dist/comics/lettering/__tests__/letterPanel.test.js.map +1 -0
  88. package/dist/comics/lettering/__tests__/polish.test.d.ts +2 -0
  89. package/dist/comics/lettering/__tests__/polish.test.d.ts.map +1 -0
  90. package/dist/comics/lettering/__tests__/polish.test.js +357 -0
  91. package/dist/comics/lettering/__tests__/polish.test.js.map +1 -0
  92. package/dist/comics/lettering/__tests__/round2.test.d.ts +2 -0
  93. package/dist/comics/lettering/__tests__/round2.test.d.ts.map +1 -0
  94. package/dist/comics/lettering/__tests__/round2.test.js +289 -0
  95. package/dist/comics/lettering/__tests__/round2.test.js.map +1 -0
  96. package/dist/comics/lettering/__tests__/round3.test.d.ts +2 -0
  97. package/dist/comics/lettering/__tests__/round3.test.d.ts.map +1 -0
  98. package/dist/comics/lettering/__tests__/round3.test.js +240 -0
  99. package/dist/comics/lettering/__tests__/round3.test.js.map +1 -0
  100. package/dist/comics/lettering/__tests__/shapeText.test.d.ts +2 -0
  101. package/dist/comics/lettering/__tests__/shapeText.test.d.ts.map +1 -0
  102. package/dist/comics/lettering/__tests__/shapeText.test.js +98 -0
  103. package/dist/comics/lettering/__tests__/shapeText.test.js.map +1 -0
  104. package/dist/comics/lettering/__tests__/shapes.test.d.ts +2 -0
  105. package/dist/comics/lettering/__tests__/shapes.test.d.ts.map +1 -0
  106. package/dist/comics/lettering/__tests__/shapes.test.js +137 -0
  107. package/dist/comics/lettering/__tests__/shapes.test.js.map +1 -0
  108. package/dist/comics/lettering/__tests__/stubMeasure.d.ts +5 -0
  109. package/dist/comics/lettering/__tests__/stubMeasure.d.ts.map +1 -0
  110. package/dist/comics/lettering/__tests__/stubMeasure.js +47 -0
  111. package/dist/comics/lettering/__tests__/stubMeasure.js.map +1 -0
  112. package/dist/comics/lettering/__tests__/text.test.d.ts +2 -0
  113. package/dist/comics/lettering/__tests__/text.test.d.ts.map +1 -0
  114. package/dist/comics/lettering/__tests__/text.test.js +86 -0
  115. package/dist/comics/lettering/__tests__/text.test.js.map +1 -0
  116. package/dist/comics/lettering/geom.d.ts +78 -0
  117. package/dist/comics/lettering/geom.d.ts.map +1 -0
  118. package/dist/comics/lettering/geom.js +376 -0
  119. package/dist/comics/lettering/geom.js.map +1 -0
  120. package/dist/comics/lettering/index.d.ts +7 -0
  121. package/dist/comics/lettering/index.d.ts.map +1 -0
  122. package/dist/comics/lettering/index.js +8 -0
  123. package/dist/comics/lettering/index.js.map +1 -0
  124. package/dist/comics/lettering/letter.d.ts +7 -0
  125. package/dist/comics/lettering/letter.d.ts.map +1 -0
  126. package/dist/comics/lettering/letter.js +496 -0
  127. package/dist/comics/lettering/letter.js.map +1 -0
  128. package/dist/comics/lettering/placement.d.ts +133 -0
  129. package/dist/comics/lettering/placement.d.ts.map +1 -0
  130. package/dist/comics/lettering/placement.js +1095 -0
  131. package/dist/comics/lettering/placement.js.map +1 -0
  132. package/dist/comics/lettering/presets.d.ts +15 -0
  133. package/dist/comics/lettering/presets.d.ts.map +1 -0
  134. package/dist/comics/lettering/presets.js +61 -0
  135. package/dist/comics/lettering/presets.js.map +1 -0
  136. package/dist/comics/lettering/shape-text.d.ts +72 -0
  137. package/dist/comics/lettering/shape-text.d.ts.map +1 -0
  138. package/dist/comics/lettering/shape-text.js +550 -0
  139. package/dist/comics/lettering/shape-text.js.map +1 -0
  140. package/dist/comics/lettering/shapes.d.ts +83 -0
  141. package/dist/comics/lettering/shapes.d.ts.map +1 -0
  142. package/dist/comics/lettering/shapes.js +512 -0
  143. package/dist/comics/lettering/shapes.js.map +1 -0
  144. package/dist/comics/lettering/text.d.ts +79 -0
  145. package/dist/comics/lettering/text.d.ts.map +1 -0
  146. package/dist/comics/lettering/text.js +488 -0
  147. package/dist/comics/lettering/text.js.map +1 -0
  148. package/dist/comics/lettering/types.d.ts +279 -0
  149. package/dist/comics/lettering/types.d.ts.map +1 -0
  150. package/dist/comics/lettering/types.js +9 -0
  151. package/dist/comics/lettering/types.js.map +1 -0
  152. package/dist/comics/page.d.ts +37 -0
  153. package/dist/comics/page.d.ts.map +1 -0
  154. package/dist/comics/page.js +285 -0
  155. package/dist/comics/page.js.map +1 -0
  156. package/dist/comics/paint.d.ts +65 -0
  157. package/dist/comics/paint.d.ts.map +1 -0
  158. package/dist/comics/paint.js +219 -0
  159. package/dist/comics/paint.js.map +1 -0
  160. package/dist/comics/script.d.ts +42 -0
  161. package/dist/comics/script.d.ts.map +1 -0
  162. package/dist/comics/script.js +302 -0
  163. package/dist/comics/script.js.map +1 -0
  164. package/dist/comics/split.d.ts +135 -0
  165. package/dist/comics/split.d.ts.map +1 -0
  166. package/dist/comics/split.js +514 -0
  167. package/dist/comics/split.js.map +1 -0
  168. package/dist/comics/spread.d.ts +36 -0
  169. package/dist/comics/spread.d.ts.map +1 -0
  170. package/dist/comics/spread.js +172 -0
  171. package/dist/comics/spread.js.map +1 -0
  172. package/dist/comics/strip.d.ts +77 -0
  173. package/dist/comics/strip.d.ts.map +1 -0
  174. package/dist/comics/strip.js +89 -0
  175. package/dist/comics/strip.js.map +1 -0
  176. package/dist/comics/transform.d.ts +37 -0
  177. package/dist/comics/transform.d.ts.map +1 -0
  178. package/dist/comics/transform.js +161 -0
  179. package/dist/comics/transform.js.map +1 -0
  180. package/dist/comics/types.d.ts +143 -0
  181. package/dist/comics/types.d.ts.map +1 -0
  182. package/dist/comics/types.js +13 -0
  183. package/dist/comics/types.js.map +1 -0
  184. package/dist/comics/warnings.d.ts +14 -0
  185. package/dist/comics/warnings.d.ts.map +1 -0
  186. package/dist/comics/warnings.js +94 -0
  187. package/dist/comics/warnings.js.map +1 -0
  188. package/dist/configWarnings.d.ts.map +1 -1
  189. package/dist/configWarnings.js +42 -0
  190. package/dist/configWarnings.js.map +1 -1
  191. package/dist/defaults/comics.d.ts +51 -0
  192. package/dist/defaults/comics.d.ts.map +1 -0
  193. package/dist/defaults/comics.js +385 -0
  194. package/dist/defaults/comics.js.map +1 -0
  195. package/dist/defaults/index.d.ts +1 -0
  196. package/dist/defaults/index.d.ts.map +1 -1
  197. package/dist/defaults/index.js +9 -0
  198. package/dist/defaults/index.js.map +1 -1
  199. package/dist/design/layout.d.ts +13 -1
  200. package/dist/design/layout.d.ts.map +1 -1
  201. package/dist/design/layout.js +17 -0
  202. package/dist/design/layout.js.map +1 -1
  203. package/dist/html-backend.d.ts +3 -0
  204. package/dist/html-backend.d.ts.map +1 -1
  205. package/dist/html-backend.js +44 -8
  206. package/dist/html-backend.js.map +1 -1
  207. package/dist/htmlComic.d.ts +69 -0
  208. package/dist/htmlComic.d.ts.map +1 -0
  209. package/dist/htmlComic.js +179 -0
  210. package/dist/htmlComic.js.map +1 -0
  211. package/dist/index.d.ts +8 -2
  212. package/dist/index.d.ts.map +1 -1
  213. package/dist/index.js +4 -0
  214. package/dist/index.js.map +1 -1
  215. package/dist/parse/blockParser.d.ts.map +1 -1
  216. package/dist/parse/blockParser.js +25 -1
  217. package/dist/parse/blockParser.js.map +1 -1
  218. package/dist/parse/indexMarks.d.ts.map +1 -1
  219. package/dist/parse/indexMarks.js +3 -0
  220. package/dist/parse/indexMarks.js.map +1 -1
  221. package/dist/parse/types.d.ts +7 -1
  222. package/dist/parse/types.d.ts.map +1 -1
  223. package/dist/pipeline/build.d.ts.map +1 -1
  224. package/dist/pipeline/build.js +251 -9
  225. package/dist/pipeline/build.js.map +1 -1
  226. package/dist/pipeline/config.d.ts.map +1 -1
  227. package/dist/pipeline/config.js +4 -1
  228. package/dist/pipeline/config.js.map +1 -1
  229. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  230. package/dist/pipeline/contentWarnings.js +58 -0
  231. package/dist/pipeline/contentWarnings.js.map +1 -1
  232. package/dist/pipeline/floatSlots.js +1 -1
  233. package/dist/pipeline/floatSlots.js.map +1 -1
  234. package/dist/pipeline/headerFooter.d.ts +6 -2
  235. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  236. package/dist/pipeline/headerFooter.js +11 -3
  237. package/dist/pipeline/headerFooter.js.map +1 -1
  238. package/dist/pipeline/pageRoles.d.ts +1 -0
  239. package/dist/pipeline/pageRoles.d.ts.map +1 -1
  240. package/dist/pipeline/pageRoles.js +3 -0
  241. package/dist/pipeline/pageRoles.js.map +1 -1
  242. package/dist/pipeline/placement.d.ts +3 -3
  243. package/dist/pipeline/placement.d.ts.map +1 -1
  244. package/dist/pipeline/placement.js +4 -4
  245. package/dist/pipeline/placement.js.map +1 -1
  246. package/dist/types.d.ts +338 -1
  247. package/dist/types.d.ts.map +1 -1
  248. package/dist/vdt.d.ts +271 -2
  249. package/dist/vdt.d.ts.map +1 -1
  250. package/dist/vdt.js.map +1 -1
  251. package/dist/worker/fonts.d.ts +2 -1
  252. package/dist/worker/fonts.d.ts.map +1 -1
  253. package/dist/worker/fonts.js +11 -1
  254. package/dist/worker/fonts.js.map +1 -1
  255. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geom.js","sourceRoot":"","sources":["../../../src/comics/lettering/geom.ts"],"names":[],"mappings":"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AAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QACrG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAChD,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QACpH,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAC5C,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAClG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QACrC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,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"}
@@ -0,0 +1,7 @@
1
+ export { letterPanel, letterPanelDetailed } from './letter';
2
+ export { presetLetteringStyles, type PresetInputs } from './presets';
3
+ export { shapeText, shapeTextCandidates, ovalProfile, type ShapedText, type ShapeOptions } from './shape-text';
4
+ export { prepareText, readLetteringText, breakPoints, type PreparedText, type BreakPoint } from './text';
5
+ export { buildBody, buildTail, buildNeck, fitSuperellipse, type Body, type Tail } from './shapes';
6
+ export type { BalloonShapeKind, BalloonTailKind, ComicBalloonOut, LetteringAnchor, LetteringDiagnostic, LetteringEnv, LetteringItem, LetteringPanel, LetteringPosition, LetteringResult, LetteringStyle, LetteringText, PanelSide, Point, Rect, } from './types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/comics/lettering/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAClG,YAAY,EACV,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EACrH,cAAc,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,GAC1G,MAAM,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ // Comics lettering (SPEC D3): engine-made balloons, captions and sound
2
+ // effects over one panel. Entry: `letterPanel`.
3
+ export { letterPanel, letterPanelDetailed } from './letter';
4
+ export { presetLetteringStyles } from './presets';
5
+ export { shapeText, shapeTextCandidates, ovalProfile } from './shape-text';
6
+ export { prepareText, readLetteringText, breakPoints } from './text';
7
+ export { buildBody, buildTail, buildNeck, fitSuperellipse } from './shapes';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/comics/lettering/index.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,gDAAgD;AAEhD,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAqB,MAAM,WAAW,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAsC,MAAM,cAAc,CAAC;AAC/G,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAsC,MAAM,QAAQ,CAAC;AACzG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAwB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ComicBalloonOut, LetteringEnv, LetteringItem, LetteringPanel, LetteringResult } from './types';
2
+ /** The lettering of one panel: its balloons in reading order. */
3
+ export declare function letterPanel(panel: LetteringPanel, items: readonly LetteringItem[], env?: LetteringEnv): ComicBalloonOut[];
4
+ /** {@link letterPanel} with the diagnostics of balloons that could not be
5
+ * placed cleanly (warning `comicBalloonOverflow`). */
6
+ export declare function letterPanelDetailed(panel: LetteringPanel, items: readonly LetteringItem[], env?: LetteringEnv): LetteringResult;
7
+ //# sourceMappingURL=letter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"letter.d.ts","sourceRoot":"","sources":["../../../src/comics/lettering/letter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAC9E,MAAM,SAAS,CAAC;AA6BjB,iEAAiE;AACjE,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,EAAE,GAAG,GAAE,YAAiB,GAAG,eAAe,EAAE,CAE7H;AAED;uDACuD;AACvD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,EAAE,GAAG,GAAE,YAAiB,GAAG,eAAe,CAmDnI"}
@@ -0,0 +1,496 @@
1
+ // The lettering of one panel (SPEC D3): every item's text is prepared and
2
+ // shaped (text first), a body is built around it, joined balloons of one
3
+ // speaker become one unit, the units are placed, and the tails are routed
4
+ // last, toward the speakers' mouths (or heads, or the panel border for a
5
+ // speaker off the panel). The result is one `ComicBalloonOut` per item, in
6
+ // reading order.
7
+ import { pointInConvex, pathData, rectOf, boundsOf, add, insetConvex } from './geom';
8
+ import { hasCJK } from '../../measure/cjk';
9
+ import { isCjkLanguage } from '../../locale';
10
+ import { buildBody, buildNeck, buildTail, dashOf, translateBody } from './shapes';
11
+ import { shapeTextCandidates, styleIsVertical, translateBlock } from './shape-text';
12
+ import { isIsolateControl, prepareText, readLetteringText } from './text';
13
+ import { offPanelPoint, placeUnits } from './placement';
14
+ /** The lettering of one panel: its balloons in reading order. */
15
+ export function letterPanel(panel, items, env = {}) {
16
+ return letterPanelDetailed(panel, items, env).balloons;
17
+ }
18
+ /** {@link letterPanel} with the diagnostics of balloons that could not be
19
+ * placed cleanly (warning `comicBalloonOverflow`). */
20
+ export function letterPanelDetailed(panel, items, env = {}) {
21
+ const sorted = [...items].sort((a, b) => a.order - b.order || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0));
22
+ const pieces = sorted.map((item) => pieceOf(panel, item, env)).filter((p) => p !== undefined);
23
+ const groups = groupPieces(pieces, env);
24
+ const metas = new Map();
25
+ const units = groups.map((group) => {
26
+ const { variants, meta } = unitVariants(group, panel);
27
+ const first = group[0];
28
+ metas.set(first.item.id, meta);
29
+ return {
30
+ id: first.item.id,
31
+ order: first.item.order,
32
+ kind: first.item.kind,
33
+ variants,
34
+ target: targetOf(panel, first),
35
+ ...(first.item.pin ? { pin: first.item.pin } : {}),
36
+ ...((first.item.position ?? (first.style.position && first.style.position !== 'auto' ? first.style.position : undefined))
37
+ ? { position: first.item.position ?? first.style.position }
38
+ : {}),
39
+ ...(first.style.butt ? { butt: true } : {}),
40
+ ...(first.item.breakBorder ? { breakBorder: true } : {}),
41
+ sourceStart: first.item.sourceStart,
42
+ sourceEnd: group[group.length - 1].item.sourceEnd,
43
+ ...(first.item.kind === 'sfx' ? sfxNear(panel) : {}),
44
+ ...(first.item.speaker ? { speaker: first.item.speaker } : {}),
45
+ em: first.style.fontSizePx,
46
+ };
47
+ });
48
+ // A panel the first search cannot letter cleanly is searched again with
49
+ // spare shapes: shorter lines (more, shorter columns) for each balloon,
50
+ // and joined groups stacked straight with every balloon fitted to the
51
+ // panel's room alike.
52
+ const extend = () => {
53
+ let added = false;
54
+ groups.forEach((group, gi) => {
55
+ const extra = spareVariants(group, panel);
56
+ if (extra.variants.length === 0)
57
+ return;
58
+ units[gi].variants.push(...extra.variants);
59
+ metas.get(group[0].item.id).push(...extra.meta);
60
+ added = true;
61
+ });
62
+ return added;
63
+ };
64
+ const { placed, diagnostics } = placeUnits(panel, units, env.passes ?? 3, extend);
65
+ const balloons = [];
66
+ placed.forEach((p, gi) => {
67
+ const meta = metas.get(p.unit.id)[p.variant];
68
+ balloons.push(...outputUnit(panel, p.unit, p.unit.variants[p.variant], meta, p.at, (env.groupBase ?? 0) + gi));
69
+ });
70
+ balloons.sort((a, b) => a.order - b.order);
71
+ return { balloons, diagnostics };
72
+ }
73
+ /** Prepare and shape one item; undefined when it sets no text. */
74
+ function pieceOf(panel, item, env) {
75
+ const scale = item.sizeScale && item.sizeScale > 0 ? item.sizeScale : 1;
76
+ const own = item.style;
77
+ const panelVertical = panel.writingMode === 'vertical';
78
+ // A line's own writing mode wins over its style's; a column forced in a
79
+ // horizontal book takes the leading columns need.
80
+ const base = !item.writingMode ? own : {
81
+ ...own,
82
+ writingMode: item.writingMode,
83
+ ...(item.writingMode === 'vertical' && !panelVertical && item.kind !== 'sfx' && own.lineHeight < 1.4 ? { lineHeight: 1.5 } : {}),
84
+ };
85
+ const style = scale === 1 ? base : {
86
+ ...base,
87
+ fontSizePx: base.fontSizePx * scale,
88
+ padding: base.padding * scale,
89
+ ...(base.halo ? { halo: base.halo * scale } : {}),
90
+ };
91
+ const read = readLetteringText(item.text, item.sourceMap);
92
+ // Columns are for Japanese and Chinese: a text with none of their
93
+ // characters (an English subtitle of a sound effect, a Latin word) is
94
+ // set horizontally in a vertical book, as manga sets foreign speech.
95
+ const vertical = styleIsVertical(style, panelVertical) && (style.writingMode === 'vertical' || hasCJK(read.text));
96
+ // A column in a book whose language is set in lines (a Japanese sound
97
+ // effect kept in an English edition) follows its own text's rules.
98
+ const locale = vertical && !isCjkLanguage(panel.locale) && hasCJK(read.text) ? (/[\u3040-\u30ff]/.test(read.text) ? 'ja' : 'zh') : panel.locale;
99
+ const prepared = prepareText(read, style, { locale, vertical });
100
+ if (prepared.text.replace(/\s/g, '').length === 0)
101
+ return undefined;
102
+ const opts = {
103
+ locale,
104
+ vertical,
105
+ dpi: panel.dpi,
106
+ ...(env.cjkLineBreak ? { cjkLineBreak: env.cjkLineBreak } : {}),
107
+ ...(env.cjkRegion ? { cjkRegion: env.cjkRegion } : {}),
108
+ ...(env.mirrored ? { mirrored: true } : {}),
109
+ };
110
+ const shapes = [];
111
+ const sig = new Set();
112
+ const add1 = (s, reshaped) => {
113
+ const k = s.lines.map((l) => `${l.start}-${l.end}`).join(',');
114
+ if (sig.has(k))
115
+ return;
116
+ sig.add(k);
117
+ shapes.push({ shaped: s, body: buildBody(s.ink, style.fontSizePx, style, item.id), reshaped });
118
+ };
119
+ add1(shapeTextCandidates(prepared, style, opts, 1)[0], false);
120
+ // Reshaped fallbacks: a wider and a narrower block (SPEC D3.3 step 5).
121
+ if (item.kind !== 'sfx') {
122
+ const target = style.aspect ?? (vertical ? 1.3 : 1.8);
123
+ add1(shapeTextCandidates(prepared, style, { ...opts, aspect: target * 1.9 }, 1)[0], true);
124
+ add1(shapeTextCandidates(prepared, style, { ...opts, aspect: target / 1.9 }, 1)[0], true);
125
+ }
126
+ // A balloon too long for its panel along its lines (columns in a short
127
+ // panel, lines in a narrow one) is reshaped to lines that fit it.
128
+ const vis = boundsOf(insetConvex(panel.polygon, panel.insetPx));
129
+ const room = vertical ? vis.height : vis.width;
130
+ const along = (b) => (vertical ? b.bbox.height : b.bbox.width);
131
+ if (shapes.length > 0 && along(shapes[0].body) > 0.45 * room) {
132
+ // The whole room first (a narrow cell: as wide as it is, a few words a
133
+ // line, rather than a word a line), then less.
134
+ for (const f of [0.82, 0.7, 0.6, 0.45, 0.33]) {
135
+ const maxLength = f * room - 2 * style.padding;
136
+ if (maxLength > style.fontSizePx)
137
+ add1(shapeTextCandidates(prepared, style, { ...opts, maxLength }, 1)[0], true);
138
+ }
139
+ }
140
+ // Too deep across its lines (many short lines in a low panel, many
141
+ // columns in a narrow one): fewer, longer lines.
142
+ const across = (b) => (vertical ? b.bbox.width : b.bbox.height);
143
+ const roomAcross = vertical ? vis.width : vis.height;
144
+ if (item.kind !== 'sfx' && shapes.length > 0 && across(shapes[0].body) > 0.45 * roomAcross) {
145
+ const target = style.aspect ?? (vertical ? 1.3 : 1.8);
146
+ for (const k of [3, 5])
147
+ add1(shapeTextCandidates(prepared, style, { ...opts, aspect: target * k }, 1)[0], true);
148
+ }
149
+ return { item, style, prepared, shapes, main: shapes.length, vertical, opts };
150
+ }
151
+ /** Fractions of a balloon's own length its spare shapes keep (more,
152
+ * shorter lines or columns: a short line in a close-up, set as two
153
+ * columns over the hair rather than one over the face). */
154
+ const SPARE_LENGTHS = [0.7, 0.5, 0.36];
155
+ /** Fractions of the panel's room the balloons of a joined group are
156
+ * fitted to alike in its spare variants (a narrow cell). */
157
+ const SPARE_ROOM = [0.82, 0.7, 0.6, 0.45];
158
+ /** Spare shape of `p` no longer than `maxLength` px along its lines
159
+ * (appended to its shapes, deduplicated); its index, or undefined when it
160
+ * sets the text as one of the shapes it has. */
161
+ function spareShape(p, maxLength) {
162
+ if (maxLength <= p.style.fontSizePx)
163
+ return undefined;
164
+ const s = shapeTextCandidates(p.prepared, p.style, { ...p.opts, maxLength }, 1)[0];
165
+ const k = s.lines.map((l) => `${l.start}-${l.end}`).join(',');
166
+ const same = p.shapes.findIndex((x) => x.shaped.lines.map((l) => `${l.start}-${l.end}`).join(',') === k);
167
+ if (same >= 0)
168
+ return same;
169
+ p.shapes.push({ shaped: s, body: buildBody(s.ink, p.style.fontSizePx, p.style, p.item.id), reshaped: true });
170
+ return p.shapes.length - 1;
171
+ }
172
+ /** The spare variants of a unit (see `extend` in {@link letterPanelDetailed}):
173
+ * a single balloon in shorter lines; a joined group with every balloon
174
+ * fitted to the same share of the room, stacked straight (columns side by
175
+ * side). Empty for sound effects and units that have them already. */
176
+ function spareVariants(group, panel) {
177
+ const first = group[0];
178
+ if (first.item.kind === 'sfx' || group.some((p) => p.shapes.length > p.main))
179
+ return { variants: [], meta: [] };
180
+ const vertical = first.vertical;
181
+ const along = (b) => (vertical ? b.bbox.height : b.bbox.width);
182
+ const sets = [];
183
+ const seen = new Set();
184
+ const add = (set) => {
185
+ const full = set.map((k) => k ?? 0);
186
+ const key = full.join(',');
187
+ // (A single balloon in a shape it has already is no spare.)
188
+ if ((group.length === 1 && full[0] < first.main) || seen.has(key))
189
+ return;
190
+ seen.add(key);
191
+ sets.push(full);
192
+ };
193
+ if (group.length === 1) {
194
+ const own = along(first.shapes[0].body) - 2 * first.style.padding;
195
+ for (const f of SPARE_LENGTHS)
196
+ add([spareShape(first, f * own)]);
197
+ }
198
+ else {
199
+ const vis = boundsOf(insetConvex(panel.polygon, panel.insetPx));
200
+ const room = vertical ? vis.height : vis.width;
201
+ for (const f of SPARE_ROOM) {
202
+ add(group.map((p) => (along(p.shapes[0].body) > f * room ? spareShape(p, f * room - 2 * p.style.padding) : 0)));
203
+ }
204
+ }
205
+ const arrangements = group.length === 1 ? [{ side: false, lean: 0 }]
206
+ : vertical ? [{ side: true, lean: 0.18 }, { side: false, lean: 0 }] : [{ side: false, lean: 0 }, { side: false, lean: 0.12 }];
207
+ const variants = [];
208
+ const meta = [];
209
+ for (const set of sets) {
210
+ for (const arr of arrangements) {
211
+ const built = buildVariant(group, panel, set, arr, true);
212
+ variants.push(built.variant);
213
+ meta.push(built.meta);
214
+ }
215
+ }
216
+ return { variants, meta };
217
+ }
218
+ /** Consecutive balloons of one speaker and one style, joined (butted or
219
+ * with a connector) unless the item or the book says otherwise. */
220
+ function groupPieces(pieces, env) {
221
+ const groups = [];
222
+ for (const p of pieces) {
223
+ const last = groups[groups.length - 1];
224
+ const prev = last?.[last.length - 1];
225
+ const mode = prev ? joinMode(prev, p, env) : 'none';
226
+ if (mode !== 'none')
227
+ last.push({ ...p, joinPrev: mode });
228
+ else
229
+ groups.push([p]);
230
+ }
231
+ return groups;
232
+ }
233
+ function joinMode(prev, p, env) {
234
+ if (p.item.kind !== 'balloon' || prev.item.kind !== 'balloon')
235
+ return 'none';
236
+ if (!p.item.speaker || p.item.speaker !== prev.item.speaker || p.style.id !== prev.style.id)
237
+ return 'none';
238
+ // A pinned line starts its group (the drag of a joined group pins its
239
+ // first line, #571): the lines after it may still join it.
240
+ if (p.item.pin || p.item.position)
241
+ return 'none';
242
+ if (p.item.join === false)
243
+ return 'none';
244
+ if (p.item.join === 'butt' || p.item.join === 'connector')
245
+ return p.item.join;
246
+ const def = env.joinSameSpeaker ?? 'butt';
247
+ if (p.item.join === true)
248
+ return def === 'none' ? 'butt' : def;
249
+ return def;
250
+ }
251
+ /** Rim and inside samples of a body, relative. */
252
+ function samplesOf(body) {
253
+ const step = Math.max(1, Math.floor(body.hull.length / 36));
254
+ const rim = body.hull.filter((_, i) => i % step === 0);
255
+ const coreStep = Math.max(1, Math.floor(body.core.length / 24));
256
+ const inside = body.core.filter((_, i) => i % coreStep === 0);
257
+ const b = body.bbox;
258
+ for (let iy = 1; iy < 6; iy++) {
259
+ for (let ix = 1; ix < 6; ix++) {
260
+ const q = { x: b.x + (ix / 6) * b.width, y: b.y + (iy / 6) * b.height };
261
+ if (pointInConvex(q, body.core))
262
+ inside.push(q);
263
+ }
264
+ }
265
+ return { rim, inside };
266
+ }
267
+ function rotateAbout(p, c, deg) {
268
+ if (!deg)
269
+ return p;
270
+ const a = (deg * Math.PI) / 180;
271
+ const cos = Math.cos(a);
272
+ const sin = Math.sin(a);
273
+ const dx = p.x - c.x;
274
+ const dy = p.y - c.y;
275
+ return { x: c.x + dx * cos - dy * sin, y: c.y + dx * sin + dy * cos };
276
+ }
277
+ /** The variants a unit can be placed as: each shape of its pieces, and
278
+ * for a joined group each arrangement of its bodies. */
279
+ function unitVariants(group, panel) {
280
+ const variants = [];
281
+ const meta = [];
282
+ const shapeCount = Math.max(...group.map((p) => p.main));
283
+ const vertical = group[0].vertical;
284
+ // Arrangements of a joined group: the next body below the one before
285
+ // (horizontal text: leaning forward, straight, back) or beside it,
286
+ // forward and a little lower; columns go beside first (forward is to
287
+ // the left), then below. Never beside it against the reading direction:
288
+ // the eye would read the second first (a narrow cell stacks the group
289
+ // and lets it run out rather than set it back). The placement keeps the
290
+ // one whose tail runs clear and that fits the panel.
291
+ const arrangements = group.length === 1 ? [{ side: false, lean: 0 }]
292
+ : vertical
293
+ ? [{ side: true, lean: 0.18 }, { side: true, lean: 0.45 }, { side: true, lean: -0.1 }, { side: false, lean: 0 }]
294
+ : [{ side: false, lean: 0.28 }, { side: false, lean: 0 }, { side: false, lean: -0.28 }, { side: true, lean: 1 }];
295
+ for (let k = 0; k < shapeCount; k++) {
296
+ for (const arr of arrangements) {
297
+ const built = buildVariant(group, panel, group.map((p) => Math.min(k, p.main - 1)), arr, k > 0);
298
+ variants.push(built.variant);
299
+ meta.push(built.meta);
300
+ }
301
+ }
302
+ return { variants, meta };
303
+ }
304
+ /** One variant of a unit: each piece in its shape `shapeIndex[i]`, the
305
+ * bodies arranged as `arr`. */
306
+ function buildVariant(group, panel, shapeIndex, arr, reshaped) {
307
+ const fwd = panel.direction === 'rtl' ? -1 : 1;
308
+ const vertical = group[0].vertical;
309
+ const bodies = [];
310
+ const shifts = [];
311
+ group.forEach((p, i) => {
312
+ const local = p.shapes[shapeIndex[i]].body;
313
+ let shift;
314
+ if (i === 0)
315
+ shift = { x: -local.centre.x, y: -local.centre.y };
316
+ else {
317
+ const prev = bodies[i - 1];
318
+ const join = p.joinPrev ?? 'butt';
319
+ const em = p.style.fontSizePx;
320
+ const pw = prev.bbox.width;
321
+ const ph = prev.bbox.height;
322
+ const w = local.bbox.width;
323
+ const h = local.bbox.height;
324
+ let cx;
325
+ let cy;
326
+ if (!vertical && !arr.side) {
327
+ const overlap = join === 'butt' ? 0.2 * Math.min(ph, h) : -0.9 * em;
328
+ cy = prev.bbox.y + ph - overlap + h / 2;
329
+ cx = prev.centre.x + fwd * arr.lean * Math.min(pw, w) * 1.4;
330
+ }
331
+ else if (!vertical) {
332
+ const overlap = join === 'butt' ? 0.2 * Math.min(pw, w) : -0.9 * em;
333
+ cx = prev.centre.x + fwd * arr.lean * (pw / 2 + w / 2 - overlap);
334
+ cy = prev.centre.y + 0.45 * Math.min(ph, h);
335
+ }
336
+ else if (arr.side) {
337
+ const overlap = join === 'butt' ? 0.2 * Math.min(pw, w) : -0.9 * em;
338
+ // Columns read right to left: the next body to the left.
339
+ cx = prev.bbox.x + overlap - w / 2;
340
+ cy = prev.centre.y + arr.lean * Math.min(ph, h);
341
+ }
342
+ else {
343
+ const overlap = join === 'butt' ? 0.2 * Math.min(ph, h) : -0.9 * em;
344
+ cy = prev.bbox.y + ph - overlap + h / 2;
345
+ cx = prev.centre.x;
346
+ }
347
+ shift = { x: cx - local.centre.x, y: cy - local.centre.y };
348
+ }
349
+ bodies.push(translateBody(local, shift.x, shift.y));
350
+ shifts.push(shift);
351
+ });
352
+ const rot = group[0].item.kind === 'sfx' ? (group[0].item.rotate ?? group[0].style.rotate ?? 0) : 0;
353
+ const rim = [];
354
+ const inside = [];
355
+ for (const b of bodies) {
356
+ const s = samplesOf(b);
357
+ rim.push(...s.rim.map((q) => rotateAbout(q, b.centre, rot)));
358
+ inside.push(...s.inside.map((q) => rotateAbout(q, b.centre, rot)));
359
+ }
360
+ const bbox = boundsOf(rim);
361
+ // A joined balloon set back against the reading direction, below the
362
+ // one before, makes the eye step back: a little cost.
363
+ const back = group.length > 1 && !vertical && arr.lean < 0 ? 2.5 : 0;
364
+ // A reshaped text block that parts its text worse than the preferred
365
+ // one (a phrase or a word cut: 猫ちゃ|んに) pays for it.
366
+ const worse = group.reduce((sum, p, i) => sum + Math.max(0, p.shapes[shapeIndex[i]].shaped.breakCost - p.shapes[0].shaped.breakCost), 0);
367
+ const cost = back + 0.8 * worse;
368
+ return {
369
+ variant: { bodies, reshaped, bbox, samples: inside, rim, ...(rot ? { rotate: rot } : {}), ...(cost ? { cost } : {}) },
370
+ meta: { pieces: [...group], shapeIndex, shifts },
371
+ };
372
+ }
373
+ /** Where the tail of a unit's first piece aims (SPEC D1.4, D3.3). */
374
+ function targetOf(panel, p) {
375
+ const { item, style } = p;
376
+ if (item.kind !== 'balloon' || item.tail === 'none' || style.tail === 'none')
377
+ return { kind: 'none' };
378
+ const t = item.tailTarget;
379
+ if (t && typeof t === 'object') {
380
+ return pointInConvex(t, panel.polygon) ? { kind: 'point', point: t } : { kind: 'offPanel', toward: t };
381
+ }
382
+ if (typeof t === 'string')
383
+ return { kind: 'offPanel', side: t };
384
+ if (!item.speaker)
385
+ return { kind: 'none' };
386
+ const anchor = panel.anchors.find((a) => a.id === item.speaker);
387
+ if (!anchor)
388
+ return { kind: 'offPanel' };
389
+ const point = style.target === 'head' ? (anchor.head ?? anchor.mouth) : anchor.mouth;
390
+ if (anchor.visible && pointInConvex(point, panel.polygon))
391
+ return { kind: 'point', point };
392
+ return { kind: 'offPanel', toward: point };
393
+ }
394
+ /** The face of a piece's speaker in the panel, if the art marks one. */
395
+ function speakerFace(panel, p) {
396
+ if (!p.item.speaker)
397
+ return undefined;
398
+ return panel.anchors.find((a) => a.id === p.item.speaker)?.face;
399
+ }
400
+ function sfxNear(panel) {
401
+ const a = panel.anchors.find((x) => x.id === 'sfx');
402
+ return a ? { near: a.mouth } : {};
403
+ }
404
+ /** The output balloons of one placed unit. */
405
+ function outputUnit(panel, unit, variant, meta, at, group) {
406
+ const bodies = variant.bodies.map((b) => translateBody(b, at.x, at.y));
407
+ const first = meta.pieces[0];
408
+ const style = first.style;
409
+ const cmds = [];
410
+ // Tails from the final position; a burst's tail replaces the spike it
411
+ // grows from in the first body's outline.
412
+ let tailTip;
413
+ let tailCmds = [];
414
+ let firstBody;
415
+ const target = unit.target;
416
+ if (target.kind !== 'none') {
417
+ const centre = bodies[0].centre;
418
+ const point = target.kind === 'point' ? target.point : offPanelPoint(panel, centre, target.toward, target.side);
419
+ const tail = buildTail(bodies[0], point, style, {
420
+ offPanel: target.kind === 'offPanel',
421
+ strokeWidth: style.strokeWidth,
422
+ bend: centre.x < point.x ? -1 : 1,
423
+ ...(speakerFace(panel, first) ? { face: speakerFace(panel, first) } : {}),
424
+ });
425
+ if (tail) {
426
+ tailCmds = tail.cmds;
427
+ tailTip = tail.tip;
428
+ firstBody = tail.body;
429
+ }
430
+ }
431
+ bodies.forEach((b, i) => cmds.push(...(i === 0 && firstBody ? firstBody : b.cmds)));
432
+ for (let i = 1; i < bodies.length; i++) {
433
+ if (meta.pieces[i].joinPrev === 'connector')
434
+ cmds.push(...buildNeck(bodies[i - 1], bodies[i], style.strokeWidth));
435
+ }
436
+ cmds.push(...tailCmds);
437
+ const dash = dashOf(style);
438
+ const shape = style.shape === 'none' || cmds.length === 0 ? undefined : {
439
+ d: pathData(cmds),
440
+ fill: style.fill,
441
+ stroke: style.stroke,
442
+ strokeWidth: style.strokeWidth,
443
+ ...(dash ? { dash } : {}),
444
+ ...(style.double ? { double: { gap: style.doubleGap ?? Math.max(1.5 * style.strokeWidth, 0.2 * style.fontSizePx) } } : {}),
445
+ };
446
+ return meta.pieces.map((piece, i) => {
447
+ const shaped = piece.shapes[meta.shapeIndex[i]].shaped;
448
+ const shift = add(meta.shifts[i], at);
449
+ const block = withSource(translateBlock(shaped.block, shift.x, shift.y), piece, shaped);
450
+ const body = bodies[i];
451
+ const out = {
452
+ id: piece.item.id,
453
+ panelIndex: panel.index,
454
+ order: piece.item.order,
455
+ kind: piece.item.kind,
456
+ style: piece.style.id,
457
+ ...(piece.item.speaker ? { speaker: piece.item.speaker } : {}),
458
+ sourceStart: piece.item.sourceStart,
459
+ sourceEnd: piece.item.sourceEnd,
460
+ group,
461
+ ...(i === 0 && shape ? { shape } : {}),
462
+ text: [block, ...(shaped.rubies ?? []).map((r) => translateBlock(r, shift.x, shift.y))],
463
+ bbox: rectOf(body.bbox.x, body.bbox.y, body.bbox.width, body.bbox.height),
464
+ ...(i === 0 && tailTip ? { tailTip } : {}),
465
+ ...(variant.rotate ? { rotate: variant.rotate } : {}),
466
+ ...(piece.style.halo ? { halo: { width: piece.style.halo, color: piece.style.haloColor ?? '#ffffff' } } : {}),
467
+ };
468
+ return out;
469
+ });
470
+ }
471
+ /** A block with the item's source range and, when the printed lines map
472
+ * character by character, its source map (click-to-source). */
473
+ function withSource(block, piece, shaped) {
474
+ const out = { ...block, sourceStart: piece.item.sourceStart, sourceEnd: piece.item.sourceEnd };
475
+ const p = piece.prepared;
476
+ // The isolate controls print nothing (see `stripIsolates`).
477
+ const kept = (k) => !isIsolateControl(p.text[k]);
478
+ const lines = shaped.lines.map((l) => [...Array(l.end - l.start).keys()].map((i) => l.start + i).filter(kept).map((k) => p.text[k]).join(''));
479
+ const printed = block.lines.map((l) => l.text);
480
+ if (lines.length !== printed.length || lines.some((t, i) => t !== printed[i]))
481
+ return out;
482
+ const map = [];
483
+ shaped.lines.forEach((l, i) => {
484
+ for (let k = l.start; k < l.end; k++)
485
+ if (kept(k))
486
+ map.push(p.source[k] ?? -1);
487
+ if (i + 1 < shaped.lines.length)
488
+ map.push(p.source[shaped.lines[i + 1].start] ?? -1);
489
+ });
490
+ if (map.some((m) => m < 0))
491
+ return out;
492
+ out.sourceText = lines.join('\n');
493
+ out.sourceMap = map;
494
+ return out;
495
+ }
496
+ //# sourceMappingURL=letter.js.map