postext 1.19.3 → 1.20.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 (251) 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 +697 -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__/shapeText.test.d.ts +2 -0
  97. package/dist/comics/lettering/__tests__/shapeText.test.d.ts.map +1 -0
  98. package/dist/comics/lettering/__tests__/shapeText.test.js +98 -0
  99. package/dist/comics/lettering/__tests__/shapeText.test.js.map +1 -0
  100. package/dist/comics/lettering/__tests__/shapes.test.d.ts +2 -0
  101. package/dist/comics/lettering/__tests__/shapes.test.d.ts.map +1 -0
  102. package/dist/comics/lettering/__tests__/shapes.test.js +137 -0
  103. package/dist/comics/lettering/__tests__/shapes.test.js.map +1 -0
  104. package/dist/comics/lettering/__tests__/stubMeasure.d.ts +5 -0
  105. package/dist/comics/lettering/__tests__/stubMeasure.d.ts.map +1 -0
  106. package/dist/comics/lettering/__tests__/stubMeasure.js +47 -0
  107. package/dist/comics/lettering/__tests__/stubMeasure.js.map +1 -0
  108. package/dist/comics/lettering/__tests__/text.test.d.ts +2 -0
  109. package/dist/comics/lettering/__tests__/text.test.d.ts.map +1 -0
  110. package/dist/comics/lettering/__tests__/text.test.js +86 -0
  111. package/dist/comics/lettering/__tests__/text.test.js.map +1 -0
  112. package/dist/comics/lettering/geom.d.ts +78 -0
  113. package/dist/comics/lettering/geom.d.ts.map +1 -0
  114. package/dist/comics/lettering/geom.js +376 -0
  115. package/dist/comics/lettering/geom.js.map +1 -0
  116. package/dist/comics/lettering/index.d.ts +7 -0
  117. package/dist/comics/lettering/index.d.ts.map +1 -0
  118. package/dist/comics/lettering/index.js +8 -0
  119. package/dist/comics/lettering/index.js.map +1 -0
  120. package/dist/comics/lettering/letter.d.ts +7 -0
  121. package/dist/comics/lettering/letter.d.ts.map +1 -0
  122. package/dist/comics/lettering/letter.js +397 -0
  123. package/dist/comics/lettering/letter.js.map +1 -0
  124. package/dist/comics/lettering/placement.d.ts +117 -0
  125. package/dist/comics/lettering/placement.d.ts.map +1 -0
  126. package/dist/comics/lettering/placement.js +889 -0
  127. package/dist/comics/lettering/placement.js.map +1 -0
  128. package/dist/comics/lettering/presets.d.ts +15 -0
  129. package/dist/comics/lettering/presets.d.ts.map +1 -0
  130. package/dist/comics/lettering/presets.js +61 -0
  131. package/dist/comics/lettering/presets.js.map +1 -0
  132. package/dist/comics/lettering/shape-text.d.ts +72 -0
  133. package/dist/comics/lettering/shape-text.d.ts.map +1 -0
  134. package/dist/comics/lettering/shape-text.js +550 -0
  135. package/dist/comics/lettering/shape-text.js.map +1 -0
  136. package/dist/comics/lettering/shapes.d.ts +83 -0
  137. package/dist/comics/lettering/shapes.d.ts.map +1 -0
  138. package/dist/comics/lettering/shapes.js +512 -0
  139. package/dist/comics/lettering/shapes.js.map +1 -0
  140. package/dist/comics/lettering/text.d.ts +79 -0
  141. package/dist/comics/lettering/text.d.ts.map +1 -0
  142. package/dist/comics/lettering/text.js +488 -0
  143. package/dist/comics/lettering/text.js.map +1 -0
  144. package/dist/comics/lettering/types.d.ts +270 -0
  145. package/dist/comics/lettering/types.d.ts.map +1 -0
  146. package/dist/comics/lettering/types.js +9 -0
  147. package/dist/comics/lettering/types.js.map +1 -0
  148. package/dist/comics/page.d.ts +37 -0
  149. package/dist/comics/page.d.ts.map +1 -0
  150. package/dist/comics/page.js +285 -0
  151. package/dist/comics/page.js.map +1 -0
  152. package/dist/comics/paint.d.ts +65 -0
  153. package/dist/comics/paint.d.ts.map +1 -0
  154. package/dist/comics/paint.js +219 -0
  155. package/dist/comics/paint.js.map +1 -0
  156. package/dist/comics/script.d.ts +42 -0
  157. package/dist/comics/script.d.ts.map +1 -0
  158. package/dist/comics/script.js +302 -0
  159. package/dist/comics/script.js.map +1 -0
  160. package/dist/comics/split.d.ts +135 -0
  161. package/dist/comics/split.d.ts.map +1 -0
  162. package/dist/comics/split.js +514 -0
  163. package/dist/comics/split.js.map +1 -0
  164. package/dist/comics/spread.d.ts +36 -0
  165. package/dist/comics/spread.d.ts.map +1 -0
  166. package/dist/comics/spread.js +172 -0
  167. package/dist/comics/spread.js.map +1 -0
  168. package/dist/comics/strip.d.ts +77 -0
  169. package/dist/comics/strip.d.ts.map +1 -0
  170. package/dist/comics/strip.js +89 -0
  171. package/dist/comics/strip.js.map +1 -0
  172. package/dist/comics/transform.d.ts +37 -0
  173. package/dist/comics/transform.d.ts.map +1 -0
  174. package/dist/comics/transform.js +161 -0
  175. package/dist/comics/transform.js.map +1 -0
  176. package/dist/comics/types.d.ts +143 -0
  177. package/dist/comics/types.d.ts.map +1 -0
  178. package/dist/comics/types.js +13 -0
  179. package/dist/comics/types.js.map +1 -0
  180. package/dist/comics/warnings.d.ts +14 -0
  181. package/dist/comics/warnings.d.ts.map +1 -0
  182. package/dist/comics/warnings.js +94 -0
  183. package/dist/comics/warnings.js.map +1 -0
  184. package/dist/configWarnings.d.ts.map +1 -1
  185. package/dist/configWarnings.js +42 -0
  186. package/dist/configWarnings.js.map +1 -1
  187. package/dist/defaults/comics.d.ts +51 -0
  188. package/dist/defaults/comics.d.ts.map +1 -0
  189. package/dist/defaults/comics.js +385 -0
  190. package/dist/defaults/comics.js.map +1 -0
  191. package/dist/defaults/index.d.ts +1 -0
  192. package/dist/defaults/index.d.ts.map +1 -1
  193. package/dist/defaults/index.js +9 -0
  194. package/dist/defaults/index.js.map +1 -1
  195. package/dist/design/layout.d.ts +13 -1
  196. package/dist/design/layout.d.ts.map +1 -1
  197. package/dist/design/layout.js +17 -0
  198. package/dist/design/layout.js.map +1 -1
  199. package/dist/html-backend.d.ts +3 -0
  200. package/dist/html-backend.d.ts.map +1 -1
  201. package/dist/html-backend.js +44 -8
  202. package/dist/html-backend.js.map +1 -1
  203. package/dist/htmlComic.d.ts +69 -0
  204. package/dist/htmlComic.d.ts.map +1 -0
  205. package/dist/htmlComic.js +179 -0
  206. package/dist/htmlComic.js.map +1 -0
  207. package/dist/index.d.ts +8 -2
  208. package/dist/index.d.ts.map +1 -1
  209. package/dist/index.js +4 -0
  210. package/dist/index.js.map +1 -1
  211. package/dist/parse/blockParser.d.ts.map +1 -1
  212. package/dist/parse/blockParser.js +25 -1
  213. package/dist/parse/blockParser.js.map +1 -1
  214. package/dist/parse/indexMarks.d.ts.map +1 -1
  215. package/dist/parse/indexMarks.js +3 -0
  216. package/dist/parse/indexMarks.js.map +1 -1
  217. package/dist/parse/types.d.ts +7 -1
  218. package/dist/parse/types.d.ts.map +1 -1
  219. package/dist/pipeline/build.d.ts.map +1 -1
  220. package/dist/pipeline/build.js +251 -9
  221. package/dist/pipeline/build.js.map +1 -1
  222. package/dist/pipeline/config.d.ts.map +1 -1
  223. package/dist/pipeline/config.js +4 -1
  224. package/dist/pipeline/config.js.map +1 -1
  225. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  226. package/dist/pipeline/contentWarnings.js +58 -0
  227. package/dist/pipeline/contentWarnings.js.map +1 -1
  228. package/dist/pipeline/floatSlots.js +1 -1
  229. package/dist/pipeline/floatSlots.js.map +1 -1
  230. package/dist/pipeline/headerFooter.d.ts +6 -2
  231. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  232. package/dist/pipeline/headerFooter.js +11 -3
  233. package/dist/pipeline/headerFooter.js.map +1 -1
  234. package/dist/pipeline/pageRoles.d.ts +1 -0
  235. package/dist/pipeline/pageRoles.d.ts.map +1 -1
  236. package/dist/pipeline/pageRoles.js +3 -0
  237. package/dist/pipeline/pageRoles.js.map +1 -1
  238. package/dist/pipeline/placement.d.ts +3 -3
  239. package/dist/pipeline/placement.d.ts.map +1 -1
  240. package/dist/pipeline/placement.js +4 -4
  241. package/dist/pipeline/placement.js.map +1 -1
  242. package/dist/types.d.ts +338 -1
  243. package/dist/types.d.ts.map +1 -1
  244. package/dist/vdt.d.ts +271 -2
  245. package/dist/vdt.d.ts.map +1 -1
  246. package/dist/vdt.js.map +1 -1
  247. package/dist/worker/fonts.d.ts +2 -1
  248. package/dist/worker/fonts.d.ts.map +1 -1
  249. package/dist/worker/fonts.js +11 -1
  250. package/dist/worker/fonts.js.map +1 -1
  251. package/package.json +1 -1
@@ -0,0 +1,550 @@
1
+ // Text first, then the balloon (SPEC D3.1): the lines of a balloon are
2
+ // chosen for shape — a diamond or lozenge block, the longest lines in the
3
+ // middle, no "parking space" (a last line much shorter than the others),
4
+ // no "sausage" (one long thin line) — at one fixed size. Candidate line
5
+ // sets come from a small dynamic programme per line count, aimed at an
6
+ // oval profile; each is scored on its aspect, its profile, its line count
7
+ // and how badly its breaks part words or phrases. Vertical text (Japanese,
8
+ // Traditional Chinese) is shaped the same way in columns of at most
9
+ // `maxColumnChars`. The winning lines are then set as an ordinary design
10
+ // text (one forced break per line), so bidi ordering, vertical cells, tcy
11
+ // and JLReq orientation come from the engine's design-text layout.
12
+ import { flowTextWidth, withMeasureWritingMode } from '../../measure/vertical';
13
+ import { graphemeCount } from '../../measure/graphemes';
14
+ import { buildFontString } from '../../measure';
15
+ import { joiningScriptIn } from '../../measure/joining';
16
+ import { hasJoiningScript } from '../../bidi';
17
+ import { hasCJK } from '../../measure/cjk';
18
+ import { parseRichDesignText, RichMeasurer } from '../../design/richText';
19
+ import { layoutTextElementAt } from '../../design/layout';
20
+ import { designBaseDirection } from '../../design/bidiText';
21
+ import { primitiveToBlock } from '../../pipeline/headerFooter';
22
+ import { cjkRegionOf, directionOf, isJapaneseLanguage, languageOf } from '../../locale';
23
+ import { breakPoints, hasMarks, isIsolateControl, markupOf } from './text';
24
+ import { boundsOf } from './geom';
25
+ /** Default target aspects of a text block. */
26
+ export const DEFAULT_ASPECT_HORIZONTAL = 1.8;
27
+ export const DEFAULT_ASPECT_VERTICAL = 1.3;
28
+ /** The CJK line-break level of a locale when the book names none: the
29
+ * strictest Japanese one (no column opens with a small kana or ー; balloon
30
+ * columns are short, and break at phrases anyway), GB/T for Chinese. */
31
+ export function defaultCjkLineBreak(locale) {
32
+ return isJapaneseLanguage(locale) ? 'ja-very-strict' : 'gb';
33
+ }
34
+ /** The fraction of the widest line a line `i` of `n` takes in an oval
35
+ * block: the chord of a superellipse at the line's middle, the ends kept
36
+ * off zero. */
37
+ export function ovalProfile(i, n) {
38
+ if (n <= 1)
39
+ return 1;
40
+ const y = ((i + 0.5) / n) * 2 - 1;
41
+ const k = n / (n + 0.8);
42
+ return Math.pow(Math.max(0, 1 - Math.pow(Math.abs(y * k), 2.2)), 1 / 2.2);
43
+ }
44
+ function fontSpec(style) {
45
+ return {
46
+ family: style.fontFamily,
47
+ sizePx: style.fontSizePx,
48
+ weight: style.fontWeight ?? 400,
49
+ italic: style.italic ?? false,
50
+ };
51
+ }
52
+ function fontString(style) {
53
+ const w = style.fontWeight ?? 400;
54
+ return buildFontString(style.fontFamily, style.fontSizePx, w === 400 ? 'normal' : String(w), style.italic ? 'italic' : 'normal');
55
+ }
56
+ /** Markup of the whole prepared text, paragraph by paragraph (a marker
57
+ * never runs across a forced break). */
58
+ function wholeMarkup(p) {
59
+ const parts = [];
60
+ let a = 0;
61
+ for (let i = 0; i <= p.text.length; i++) {
62
+ if (i === p.text.length || p.text[i] === '\n') {
63
+ parts.push(markupOf(p, a, i));
64
+ a = i + 1;
65
+ }
66
+ }
67
+ return parts.join('\n');
68
+ }
69
+ /** Tracking a text is set with: none for a joining script (Arabic). */
70
+ function trackingOf(p, style) {
71
+ const t = style.letterSpacing ?? 0;
72
+ return Number.isFinite(t) && !joiningScriptIn(p.text) ? t : 0;
73
+ }
74
+ /** A measurer of line widths over the prepared text, in the writing mode
75
+ * in force (call inside `withMeasureWritingMode`). Rich text is measured
76
+ * through the design-text measurer of its own markup, so that what is
77
+ * measured is what the layout sets; a markup that does not read back to
78
+ * the same text falls back to plain. */
79
+ function measurerFor(p, style) {
80
+ const tracking = trackingOf(p, style);
81
+ const memo = new Map();
82
+ const key = (a, b) => a * 100003 + b;
83
+ if (hasMarks(p)) {
84
+ const rt = parseRichDesignText(wholeMarkup(p), fontSpec(style));
85
+ if (rt.text === p.text) {
86
+ const m = new RichMeasurer(rt, tracking);
87
+ return {
88
+ rich: true,
89
+ width(a, b) {
90
+ const k = key(a, b);
91
+ let w = memo.get(k);
92
+ if (w === undefined)
93
+ memo.set(k, (w = a >= b ? 0 : m.measure(a, b)));
94
+ return w;
95
+ },
96
+ };
97
+ }
98
+ }
99
+ const font = fontString(style);
100
+ return {
101
+ rich: false,
102
+ width(a, b) {
103
+ const k = key(a, b);
104
+ let w = memo.get(k);
105
+ if (w === undefined) {
106
+ const s = p.text.slice(a, b).replace(/[\u2066-\u2069]/g, '');
107
+ memo.set(k, (w = a >= b ? 0 : Math.max(0, flowTextWidth(s, font) + tracking * graphemeCount(s))));
108
+ }
109
+ return w;
110
+ },
111
+ };
112
+ }
113
+ /**
114
+ * The best breaks for `n` lines aimed at a block `W` wide with an oval
115
+ * profile (dynamic programme over the legal breaks). Forced breaks are
116
+ * always taken. Undefined when `n` lines cannot hold the text that way.
117
+ */
118
+ function bestBreaksFor(pts, m, n, W, maxLen, penaltyWeight, lone) {
119
+ const P = pts.length;
120
+ // dp[i][k]: cost of i lines ending at point k (k = 0 is the start).
121
+ const INF = Number.POSITIVE_INFINITY;
122
+ const dp = Array.from({ length: n + 1 }, () => new Array(P).fill(INF));
123
+ const from = Array.from({ length: n + 1 }, () => new Array(P).fill(-1));
124
+ dp[0][0] = 0;
125
+ for (let i = 0; i < n; i++) {
126
+ const target = W * ovalProfile(i, n);
127
+ for (let j = 0; j < P; j++) {
128
+ const base = dp[i][j];
129
+ if (base === INF)
130
+ continue;
131
+ const start = j === 0 ? 0 : pts[j].next;
132
+ for (let k = j + 1; k < P; k++) {
133
+ const pt = pts[k];
134
+ const w = m.width(start, pt.end);
135
+ // The same weights as `scoreLines`, so that the programme looks
136
+ // for what the score rewards.
137
+ let c = (12 / n) * ((w - target) / W) ** 2 + pt.penalty * penaltyWeight + lone(start, pt.end);
138
+ if (w > W * 1.15)
139
+ c += 5 * (w / W - 1.15) + 1;
140
+ if (w > maxLen)
141
+ c += 20 * ((w - maxLen) / maxLen) + 20;
142
+ const last = i === n - 1;
143
+ if (last && k !== P - 1) {
144
+ // The last line must end the text.
145
+ }
146
+ else if (!last && k === P - 1) {
147
+ // Not the last line: cannot end the text.
148
+ }
149
+ else {
150
+ if (last && n >= 2) {
151
+ const r = w / (W * ovalProfile(i, n));
152
+ if (r < 0.5)
153
+ c += 6 * (0.5 - r);
154
+ }
155
+ if (base + c < dp[i + 1][k]) {
156
+ dp[i + 1][k] = base + c;
157
+ from[i + 1][k] = j;
158
+ }
159
+ }
160
+ if (pt.forced)
161
+ break; // a line never runs past a forced break
162
+ if (w > W * 2.6 && w > maxLen)
163
+ break;
164
+ }
165
+ }
166
+ }
167
+ if (dp[n][P - 1] === INF)
168
+ return undefined;
169
+ const breaks = [];
170
+ let k = P - 1;
171
+ for (let i = n; i > 0; i--) {
172
+ breaks.unshift(k);
173
+ k = from[i][k];
174
+ }
175
+ return breaks;
176
+ }
177
+ /** Scores of a line set (lower is better). */
178
+ function scoreLines(lines, pts, breaks, em, pitch, vertical, target, maxLen, penaltyWeight, lone, cjk) {
179
+ const n = lines.length;
180
+ const wMax = Math.max(1e-6, ...lines.map((l) => l.width));
181
+ const across = (n - 1) * pitch + em;
182
+ // Width / height across lines; for columns, length / width: both read
183
+ // as how far the block runs along its lines.
184
+ const aspect = wMax / across;
185
+ // A text that fits one short line (column) keeps it: the aspect only
186
+ // shapes texts long enough to need several.
187
+ // (A Latin line of more than about fifteen letters, a Chinese or
188
+ // Japanese one of more than five characters, is a "sausage": two short
189
+ // lines read better.)
190
+ const short = n === 1 && (vertical ? wMax <= maxLen : wMax <= (cjk ? 5.5 : 7) * em);
191
+ let s = (short ? 0.15 : 4) * Math.log(aspect / target) ** 2;
192
+ // Diamond profile: each line against the oval chord at its place.
193
+ let dev = 0;
194
+ for (let i = 0; i < n; i++) {
195
+ const c = ovalProfile(i, n) / ovalProfile(Math.floor((n - 1) / 2), n);
196
+ dev += (lines[i].width / wMax - Math.min(1, c)) ** 2;
197
+ }
198
+ s += (8 * dev) / n;
199
+ if (n >= 2) {
200
+ const last = lines[n - 1].width / wMax;
201
+ if (last < 0.45)
202
+ s += 6 * (0.45 - last); // parking space
203
+ const first = lines[0].width / wMax;
204
+ if (first < 0.3)
205
+ s += 3 * (0.3 - first);
206
+ }
207
+ // Line count: 2–5 preferred (one line is fine when it is short).
208
+ if (n === 1 && wMax > 10 * em)
209
+ s += 0.5;
210
+ if (n > 5)
211
+ s += 0.3 * (n - 5);
212
+ let pen = 0;
213
+ for (const b of breaks.slice(0, -1))
214
+ pen += pts[b].penalty;
215
+ s += penaltyWeight * pen;
216
+ for (const l of lines) {
217
+ if (l.width > maxLen + 0.5)
218
+ s += 20 * ((l.width - maxLen) / em);
219
+ s += lone(l.start, l.end);
220
+ }
221
+ return { score: s, aspect };
222
+ }
223
+ /** A line (column) of a text of several that holds no letter or digit
224
+ * (a leader "……" or a "!" left alone) is an orphan, and so is a
225
+ * column of one character: a heavy penalty, unless a forced break made
226
+ * it so. */
227
+ function loneLinePenalty(p, all) {
228
+ const forcedEnds = new Set(all.filter((x) => x.forced).map((x) => x.end));
229
+ const forcedStarts = new Set(all.filter((x) => x.forced).map((x) => x.next));
230
+ return (a, b) => {
231
+ if (a === 0 && b === p.text.length)
232
+ return 0;
233
+ if (forcedEnds.has(b) && (a === 0 || forcedStarts.has(a)))
234
+ return 0;
235
+ const t = p.text.slice(a, b).replace(/[\u2066-\u2069]/g, '');
236
+ if (!/[\p{L}\p{N}]/u.test(t))
237
+ return 9;
238
+ if (hasCJK(t) && [...t.replace(/[\s\p{P}\p{S}]/gu, '')].length <= 1)
239
+ return 4;
240
+ return 0;
241
+ };
242
+ }
243
+ /** Line sets for every line count, each scored; the best first. */
244
+ function candidatesFor(p, pts, m, em, pitch, vertical, target, maxLen, penaltyWeight) {
245
+ const all = [{ end: 0, next: 0, penalty: 0, forced: false }, ...pts];
246
+ const lone = loneLinePenalty(p, all);
247
+ const cjk = hasCJK(p.text);
248
+ const total = m.width(0, p.text.length);
249
+ const forcedCount = pts.filter((x) => x.forced).length;
250
+ const nMax = Math.max(forcedCount, Math.min(16, pts.length, Math.ceil(total / (1.5 * em)) + forcedCount));
251
+ const out = [];
252
+ const seen = new Set();
253
+ for (let n = forcedCount; n <= nMax; n++) {
254
+ let mean = 0;
255
+ for (let i = 0; i < n; i++)
256
+ mean += ovalProfile(i, n);
257
+ mean /= n;
258
+ const base = total / n / mean;
259
+ for (const f of [0.85, 0.95, 1.05, 1.15, 1.3]) {
260
+ const W = Math.min(base * f, maxLen);
261
+ const br = bestBreaksFor(all, m, n, W, maxLen, penaltyWeight, lone);
262
+ if (!br)
263
+ continue;
264
+ const sig = br.join(',');
265
+ if (seen.has(sig))
266
+ continue;
267
+ seen.add(sig);
268
+ const lines = br.map((k, i) => {
269
+ const start = i === 0 ? 0 : all[br[i - 1]].next;
270
+ const end = all[k].end;
271
+ return { start, end, width: m.width(start, end) };
272
+ });
273
+ const { score, aspect } = scoreLines(lines, all, br, em, pitch, vertical, target, maxLen, penaltyWeight, lone, cjk);
274
+ const breakCost = penaltyWeight * br.slice(0, -1).reduce((sum, k) => sum + all[k].penalty, 0)
275
+ + lines.reduce((sum, l) => sum + lone(l.start, l.end), 0);
276
+ out.push({ breaks: br, lines, score, aspect, breakCost });
277
+ }
278
+ }
279
+ out.sort((a, b) => a.score - b.score || a.lines.length - b.lines.length);
280
+ return out;
281
+ }
282
+ /** The writing mode a style sets its text in on a panel. */
283
+ export function styleIsVertical(style, panelVertical) {
284
+ if (style.writingMode === 'horizontal')
285
+ return false;
286
+ if (style.writingMode === 'vertical')
287
+ return true;
288
+ return panelVertical;
289
+ }
290
+ /** The base direction of a balloon text: its first strong letter, else
291
+ * the locale's. */
292
+ function baseDirection(text, locale) {
293
+ return designBaseDirection('auto', text, directionOf(locale));
294
+ }
295
+ /** Ascent and descent of a line's ink, in em, by script. */
296
+ function inkMetrics(text) {
297
+ if (hasJoiningScript(text))
298
+ return { asc: 0.82, desc: 0.42 };
299
+ if (hasCJK(text))
300
+ return { asc: 0.88, desc: 0.12 };
301
+ return { asc: 0.74, desc: /[gjpqyQ,;()[\]{}]/.test(text) ? 0.21 : 0.05 };
302
+ }
303
+ /**
304
+ * Shape a prepared text and set it: the best line set for the style's
305
+ * aspect (or `opts.aspect`), laid out as a design text block at (0, 0).
306
+ * Lengths are page px.
307
+ */
308
+ export function shapeText(p, style, opts) {
309
+ return shapeTextCandidates(p, style, opts, 1)[0];
310
+ }
311
+ /** The `count` best shapings (distinct line sets), best first. */
312
+ export function shapeTextCandidates(p, style, opts, count) {
313
+ const vertical = opts.vertical;
314
+ const em = style.fontSizePx;
315
+ const pitch = em * style.lineHeight;
316
+ const lang = languageOf(opts.locale);
317
+ const level = opts.cjkLineBreak ?? defaultCjkLineBreak(opts.locale);
318
+ const region = opts.cjkRegion ?? cjkRegionOf(opts.locale) ?? (lang === 'ja' ? 'japan' : 'mainland');
319
+ const target = opts.aspect ?? style.aspect ?? (vertical ? DEFAULT_ASPECT_VERTICAL : DEFAULT_ASPECT_HORIZONTAL);
320
+ const ownMax = vertical ? (style.maxColumnChars ?? 8) * em + 0.01 : Number.POSITIVE_INFINITY;
321
+ const maxLen = opts.maxLength !== undefined && opts.maxLength > 0 ? Math.min(ownMax, Math.max(opts.maxLength, 1.01 * em)) : ownMax;
322
+ const pts = breakPoints(p, level, lang === 'ja');
323
+ const mode = vertical ? 'vertical-rl' : 'horizontal-tb';
324
+ const { cands, rich } = withMeasureWritingMode(mode, () => {
325
+ const m = measurerFor(p, style);
326
+ // Japanese phrase breaks weigh more than a perfect profile: columns
327
+ // move by whole characters.
328
+ const penaltyWeight = lang === 'ja' ? 1 : 0.5;
329
+ return { cands: candidatesFor(p, pts, m, em, pitch, vertical, target, maxLen, penaltyWeight), rich: m.rich };
330
+ }, region);
331
+ const out = [];
332
+ for (const c of cands.slice(0, Math.max(1, count))) {
333
+ out.push(setLines(p, style, opts, c, { vertical, em, pitch, region, rich }));
334
+ }
335
+ return out;
336
+ }
337
+ /** Set a chosen line set as a design text block at (0, 0). */
338
+ function setLines(p, style, opts, c, ctx) {
339
+ const { vertical, em, region, rich } = ctx;
340
+ const content = c.lines.map((l) => (rich ? markupOf(p, l.start, l.end) : p.text.slice(l.start, l.end))).join('\n');
341
+ const direction = vertical ? 'ltr' : baseDirection(p.text, opts.locale);
342
+ const el = {
343
+ kind: 'text',
344
+ id: 'balloon',
345
+ parity: 'all',
346
+ placement: { anchor: { to: 'container', edge: 'top-left' } },
347
+ content,
348
+ fontFamily: style.fontFamily,
349
+ fontSize: { value: em, unit: 'px' },
350
+ fontWeight: style.fontWeight ?? 400,
351
+ italic: style.italic ?? false,
352
+ color: { hex: style.color, model: 'hex' },
353
+ align: style.align === 'start' ? 'start' : 'center',
354
+ verticalAlign: 'top',
355
+ lineHeight: style.lineHeight,
356
+ ...(style.letterSpacing ? { letterSpacing: { value: style.letterSpacing, unit: 'px' } } : {}),
357
+ overflow: 'wrap',
358
+ hyphenate: false,
359
+ ...(rich ? { inlineMarks: true } : {}),
360
+ direction,
361
+ ...(vertical ? { writingMode: 'vertical-rl' } : {}),
362
+ };
363
+ const block = stripIsolates(withMeasureWritingMode('horizontal-tb', () => {
364
+ const prim = layoutTextElementAt(el, content, 0, 0, opts.dpi, { direction, mirrored: opts.mirrored === true });
365
+ return primitiveToBlock(prim);
366
+ }, region));
367
+ const ink = inkOf(block, em, vertical);
368
+ const rubies = rubyBlocks(p, style, opts, c, block, ink, ctx);
369
+ for (const r of rubies)
370
+ ink.push({ ...r.bbox });
371
+ return {
372
+ block,
373
+ ...(rubies.length ? { rubies } : {}),
374
+ vertical,
375
+ lines: c.lines,
376
+ ink,
377
+ inkBox: boundsOf(ink.flatMap((r) => [{ x: r.x, y: r.y }, { x: r.x + r.width, y: r.y + r.height }])),
378
+ em,
379
+ lineHeightPx: ctx.pitch,
380
+ aspect: c.aspect,
381
+ score: c.score,
382
+ breakCost: c.breakCost,
383
+ };
384
+ }
385
+ /** A block with the isolate controls of its text taken out (they set the
386
+ * bidi order of the lines and print nothing). */
387
+ function stripIsolates(block) {
388
+ const re = /[\u2066-\u2069]/g;
389
+ if (!block.lines.some((l) => /[\u2066-\u2069]/.test(l.text)))
390
+ return block;
391
+ return {
392
+ ...block,
393
+ lines: block.lines.map((l) => ({
394
+ ...l,
395
+ text: l.text.replace(re, ''),
396
+ ...(l.runs ? { runs: l.runs.map((r) => ({ ...r, text: r.text.replace(re, '') })) } : {}),
397
+ })),
398
+ };
399
+ }
400
+ /**
401
+ * The ruby (furigana) of a shaped text as small design-text blocks: each
402
+ * reading at half the text's size, centred over its base in horizontal
403
+ * lines and beside it (to the right) in columns, in the gap the leading
404
+ * leaves. A group ruby is one reading over its whole run; a mono ruby one
405
+ * reading per character. Lines a bidi run reorders take none.
406
+ */
407
+ function rubyBlocks(p, style, opts, c, block, ink, ctx) {
408
+ if (!p.style.some((st) => st.ruby))
409
+ return [];
410
+ const { vertical, em, region } = ctx;
411
+ const size = em * 0.5;
412
+ const out = [];
413
+ const printed = block.lines.filter((l) => l.text.length > 0);
414
+ withMeasureWritingMode(vertical ? 'vertical-rl' : 'horizontal-tb', () => {
415
+ const m = measurerFor(p, style);
416
+ c.lines.forEach((line, li) => {
417
+ const pl = printed[li];
418
+ const box = ink[li];
419
+ if (!pl || !box)
420
+ return;
421
+ // A line the bidi algorithm reorders (a Japanese name in an Arabic
422
+ // balloon): where each base sits comes from its run's place.
423
+ const where = pl.order || pl.runs?.some((r) => r.rtl) ? reorderedSpan(p, line, pl, m) : undefined;
424
+ let k = line.start;
425
+ while (k < line.end) {
426
+ const r = p.style[k].ruby;
427
+ if (!r) {
428
+ k++;
429
+ continue;
430
+ }
431
+ let e = k + 1;
432
+ if (r.group)
433
+ while (e < line.end && p.style[e].ruby?.id === r.id)
434
+ e++;
435
+ let from = m.width(line.start, k);
436
+ let to = m.width(line.start, e);
437
+ if (where) {
438
+ const span = where(k, e);
439
+ // A base cut across runs, or set right to left: no reading.
440
+ if (!span) {
441
+ k = e;
442
+ continue;
443
+ }
444
+ [from, to] = span;
445
+ }
446
+ const reading = r.text;
447
+ const el = {
448
+ kind: 'text', id: 'ruby', parity: 'all',
449
+ placement: { anchor: { to: 'container', edge: 'top-left' } },
450
+ content: reading,
451
+ fontFamily: style.fontFamily,
452
+ fontSize: { value: size, unit: 'px' },
453
+ fontWeight: style.fontWeight ?? 400,
454
+ italic: false,
455
+ color: { hex: style.color, model: 'hex' },
456
+ align: 'center', verticalAlign: 'top', lineHeight: 1,
457
+ overflow: 'wrap', hyphenate: false, direction: 'ltr',
458
+ ...(vertical ? { writingMode: 'vertical-rl' } : {}),
459
+ };
460
+ const rb = withMeasureWritingMode('horizontal-tb', () => primitiveToBlock(layoutTextElementAt(el, reading, 0, 0, opts.dpi, {})), region);
461
+ let dx;
462
+ let dy;
463
+ if (vertical) {
464
+ // Beside the column, centred along its run.
465
+ dx = box.x + box.width + 0.04 * em - rb.bbox.x;
466
+ dy = box.y + (from + to) / 2 - (rb.bbox.y + rb.bbox.height / 2);
467
+ }
468
+ else {
469
+ dx = block.bbox.x + pl.xOffset + (from + to) / 2 - (rb.bbox.x + rb.bbox.width / 2);
470
+ dy = box.y - 0.06 * em - (rb.bbox.y + rb.bbox.height) + 0.12 * size;
471
+ }
472
+ out.push({ ...translateBlock(rb, dx, dy), artifact: true });
473
+ k = e;
474
+ }
475
+ });
476
+ }, region);
477
+ return out;
478
+ }
479
+ /**
480
+ * Where a range `[k, e)` of the prepared text sits along a printed line
481
+ * whose runs the bidi algorithm reordered: `[from, to]` from the line's
482
+ * start (`xOffset`), or undefined when the range is not inside one
483
+ * left-to-right run. The runs carry the printed text in logical order
484
+ * (isolate controls stripped); `order` is the visual order they are
485
+ * painted in.
486
+ */
487
+ function reorderedSpan(p, line, pl, m) {
488
+ const runs = pl.runs ?? [];
489
+ const order = pl.order ?? runs.map((_, i) => i);
490
+ // Visual x of each run.
491
+ const xs = new Array(runs.length).fill(0);
492
+ let x = 0;
493
+ for (const i of order) {
494
+ xs[i] = x;
495
+ if (!runs[i].stacked)
496
+ x += runs[i].width;
497
+ }
498
+ // The prepared-text index where each run starts (printed characters only).
499
+ const kept = [];
500
+ for (let q = line.start; q < line.end; q++)
501
+ if (!isIsolateControl(p.text[q]))
502
+ kept.push(q);
503
+ const starts = [];
504
+ let printed = 0;
505
+ for (const r of runs) {
506
+ starts.push(kept[printed] ?? line.end);
507
+ printed += r.text.length;
508
+ }
509
+ return (k, e) => {
510
+ for (let i = 0; i < runs.length; i++) {
511
+ const a = starts[i];
512
+ const b = i + 1 < runs.length ? starts[i + 1] : line.end;
513
+ if (k < a || e > b)
514
+ continue;
515
+ if (runs[i].rtl)
516
+ return undefined;
517
+ const from = xs[i] + m.width(a, k);
518
+ return [from, from + m.width(k, e)];
519
+ }
520
+ return undefined;
521
+ };
522
+ }
523
+ /** The ink box of every line (column) of a laid-out block. */
524
+ export function inkOf(block, em, vertical) {
525
+ const b = block.bbox;
526
+ if (vertical) {
527
+ const family = Object.keys(block.vertical?.centralBaselines ?? {})[0];
528
+ const central = (family !== undefined ? block.vertical?.centralBaselines[family] : undefined) ?? 0.38;
529
+ return block.lines.filter((l) => l.text.length > 0).map((l) => {
530
+ const cx = b.x + b.width - (l.baselineY - central * em);
531
+ return { x: cx - em / 2, y: b.y + l.xOffset, width: em, height: l.width };
532
+ });
533
+ }
534
+ const tracking = block.letterSpacingPx ?? 0;
535
+ return block.lines.filter((l) => l.text.length > 0).map((l) => {
536
+ const { asc, desc } = inkMetrics(l.text);
537
+ const w = Math.max(0, l.width - (tracking && l.text.length ? tracking : 0));
538
+ return { x: b.x + l.xOffset, y: l.baselineY - asc * em, width: w, height: (asc + desc) * em };
539
+ });
540
+ }
541
+ /** A copy of a block moved by (dx, dy): horizontal baselines are page
542
+ * coordinates, vertical ones are measured from the box. */
543
+ export function translateBlock(block, dx, dy) {
544
+ return {
545
+ ...block,
546
+ bbox: { ...block.bbox, x: block.bbox.x + dx, y: block.bbox.y + dy },
547
+ lines: block.lines.map((l) => ({ ...l, ...(block.vertical ? {} : { baselineY: l.baselineY + dy }), ...(l.runs ? { runs: l.runs.map((r) => ({ ...r })) } : {}) })),
548
+ };
549
+ }
550
+ //# sourceMappingURL=shape-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shape-text.js","sourceRoot":"","sources":["../../../src/comics/lettering/shape-text.ts"],"names":[],"mappings":"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"}