postext 1.19.2 → 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,79 @@
1
+ import type { CjkLineBreakLevel } from '../../measure/cjkClasses';
2
+ import type { LetteringStyle, LetteringText } from './types';
3
+ /** How one character of the prepared text is set. */
4
+ export interface CharStyle {
5
+ bold: boolean;
6
+ italic: boolean;
7
+ script?: 'sup' | 'sub';
8
+ /** Vertical text: a run set in one cell (`tcy`), upright or sideways;
9
+ * `orientId` tells two `:tcy` runs side by side apart. */
10
+ orient?: 'tcy' | 'upright' | 'sideways';
11
+ orientId?: number;
12
+ /** Ruby (furigana) over this character (`:ruby[漢字]{…}`): the reading
13
+ * of its run; characters of one ruby share `id`. A group ruby is one
14
+ * reading over the whole run, which never breaks. */
15
+ ruby?: {
16
+ id: number;
17
+ text: string;
18
+ group: boolean;
19
+ };
20
+ }
21
+ /** Directional isolate controls (UAX #9): LRI, RLI, PDI. The text of a
22
+ * `:ltr[…]` / `:rtl[…]` run is wrapped in them, so the design-text bidi
23
+ * sets it as an isolate; they print nothing and are taken out of the
24
+ * lines once laid out. */
25
+ export declare const LRI = "\u2066";
26
+ export declare const RLI = "\u2067";
27
+ export declare const PDI = "\u2069";
28
+ /** Whether a character is a bidi isolate control. */
29
+ export declare const isIsolateControl: (ch: string) => boolean;
30
+ /** The text of a balloon ready to shape. `text` holds `\n` at forced
31
+ * breaks; `style` and `source` are per UTF-16 unit of `text`. */
32
+ export interface PreparedText {
33
+ text: string;
34
+ style: CharStyle[];
35
+ /** Source offset of each unit (-1: none known). */
36
+ source: number[];
37
+ }
38
+ /** Whether a language sets `。` and drops it at the end of a balloon by
39
+ * default (Japanese and Chinese manga practice). */
40
+ export declare function dropsFinalStopByDefault(locale: string): boolean;
41
+ /** Read the item's text into styled characters with source offsets. */
42
+ export declare function readLetteringText(text: LetteringText, sourceMap: readonly number[] | undefined): PreparedText;
43
+ /** Options of {@link prepareText} beyond the style. */
44
+ export interface PrepareOptions {
45
+ locale: string;
46
+ vertical: boolean;
47
+ }
48
+ /**
49
+ * The house rules of SPEC D3.1 applied to a read text:
50
+ * - whitespace runs set as one space, lines trimmed;
51
+ * - an ellipsis written as dots made one `…` (two, `……`, in Chinese);
52
+ * - `doubleDash`: an em dash becomes `--`;
53
+ * - `dropFinalStop`: a final `。` (or `.`) dropped;
54
+ * - emphasis printed bold italic (bold only where the script has no
55
+ * italics: Arabic, CJK);
56
+ * - `uppercase`: capitals for the cased letters only (scripts without case
57
+ * stay as they are), with the locale's rules (Turkish i).
58
+ */
59
+ export declare function prepareText(read: PreparedText, style: LetteringStyle, opts: PrepareOptions): PreparedText;
60
+ /** A place a line may break: the line ends at `end`, the next starts at
61
+ * `next` (after the spaces). `penalty` grows with how badly the break
62
+ * parts a word or a phrase; `forced` breaks must be taken. */
63
+ export interface BreakPoint {
64
+ end: number;
65
+ next: number;
66
+ penalty: number;
67
+ forced: boolean;
68
+ }
69
+ /** The legal breaks of a prepared text (the text's end included, as a
70
+ * forced break). */
71
+ export declare function breakPoints(p: PreparedText, level: CjkLineBreakLevel, japanese: boolean): BreakPoint[];
72
+ /** Design-text markup of `p[a, b)`: the characters escaped, each run of
73
+ * one style wrapped in its markers (bold, italic, scripts, orientation),
74
+ * closed at the end of the range. */
75
+ export declare function markupOf(p: PreparedText, a: number, b: number): string;
76
+ /** Whether any character of `p[a, b)` is set in a style other than the
77
+ * plain one. */
78
+ export declare function hasMarks(p: PreparedText, a?: number, b?: number): boolean;
79
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/comics/lettering/text.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAIlE,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7D,qDAAqD;AACrD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB;+DAC2D;IAC3D,MAAM,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;0DAEsD;IACtD,IAAI,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACrD;AAED;;;2BAG2B;AAC3B,eAAO,MAAM,GAAG,WAAW,CAAC;AAC5B,eAAO,MAAM,GAAG,WAAW,CAAC;AAC5B,eAAO,MAAM,GAAG,WAAW,CAAC;AAC5B,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,GAAI,IAAI,MAAM,KAAG,OAAoE,CAAC;AAEnH;kEACkE;AAClE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,mDAAmD;IACnD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAKD;qDACqD;AACrD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAG/D;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,YAAY,CA+D7G;AAwCD,uDAAuD;AACvD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,YAAY,CAqDzG;AAkCD;;+DAE+D;AAC/D,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAsHD;qBACqB;AACrB,wBAAgB,WAAW,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,OAAO,GAAG,UAAU,EAAE,CAsDtG;AAID;;sCAEsC;AACtC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBtE;AAMD;iBACiB;AACjB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,SAAI,EAAE,CAAC,SAAgB,GAAG,OAAO,CAM3E"}
@@ -0,0 +1,488 @@
1
+ // Balloon text before it is shaped (SPEC D3.1): the item's spans read into
2
+ // one plain string with a style and a source offset per character, the
3
+ // house rules applied (ellipsis, double dash, dropped final stop, capitals
4
+ // for cased scripts, emphasis as bold italic), the legal line breaks found
5
+ // (spaces, hard hyphens, CJK under kinsoku), and any range of it written
6
+ // back as design-text markup the layout reads (`inlineMarks`).
7
+ import { cjkJoinBreaks } from '../../measure/cjk';
8
+ import { hasJoiningScript } from '../../bidi';
9
+ import { isBreakingSpace } from '../../measure/spaces';
10
+ import { languageOf } from '../../locale';
11
+ /** Directional isolate controls (UAX #9): LRI, RLI, PDI. The text of a
12
+ * `:ltr[…]` / `:rtl[…]` run is wrapped in them, so the design-text bidi
13
+ * sets it as an isolate; they print nothing and are taken out of the
14
+ * lines once laid out. */
15
+ export const LRI = '\u2066';
16
+ export const RLI = '\u2067';
17
+ export const PDI = '\u2069';
18
+ /** Whether a character is a bidi isolate control. */
19
+ export const isIsolateControl = (ch) => ch === LRI || ch === RLI || ch === PDI || ch === '\u2068';
20
+ const PLAIN = { bold: false, italic: false };
21
+ const LINE_BREAKS = /[\n\u2028]/;
22
+ /** Whether a language sets `。` and drops it at the end of a balloon by
23
+ * default (Japanese and Chinese manga practice). */
24
+ export function dropsFinalStopByDefault(locale) {
25
+ const lang = languageOf(locale);
26
+ return lang === 'ja' || lang === 'zh';
27
+ }
28
+ /** Read the item's text into styled characters with source offsets. */
29
+ export function readLetteringText(text, sourceMap) {
30
+ const out = { text: '', style: [], source: [] };
31
+ const push = (s, st, rawAt, rawStep) => {
32
+ for (let i = 0; i < s.length; i++) {
33
+ const ch = LINE_BREAKS.test(s[i]) ? '\n' : s[i];
34
+ out.text += ch;
35
+ out.style.push(st);
36
+ out.source.push(sourceMap?.[rawStep ? rawAt + i : rawAt] ?? -1);
37
+ }
38
+ };
39
+ if (typeof text === 'string') {
40
+ push(text, PLAIN, 0, true);
41
+ return out;
42
+ }
43
+ let raw = 0;
44
+ let orientId = 0;
45
+ // Open isolates (outermost first), by id.
46
+ let open = [];
47
+ const chainOf = (d) => {
48
+ const out = [];
49
+ for (let x = d; x; x = x.outer)
50
+ out.unshift(x);
51
+ return out;
52
+ };
53
+ const control = (ch, at) => {
54
+ out.text += ch;
55
+ out.style.push(PLAIN);
56
+ out.source.push(sourceMap?.[at] ?? -1);
57
+ };
58
+ const isolatesTo = (want, at) => {
59
+ let keep = 0;
60
+ while (keep < open.length && keep < want.length && open[keep].id === want[keep].id)
61
+ keep++;
62
+ for (let k = open.length - 1; k >= keep; k--)
63
+ control(PDI, Math.max(0, at - 1));
64
+ for (let k = keep; k < want.length; k++)
65
+ control(want[k].dir === 'rtl' ? RLI : LRI, at);
66
+ open = want;
67
+ };
68
+ for (const span of text) {
69
+ isolatesTo(chainOf(span.direction), raw);
70
+ const st = { bold: span.bold, italic: span.italic };
71
+ if (span.ruby && span.ruby.text)
72
+ st.ruby = { id: span.ruby.id, text: span.ruby.text, group: span.ruby.group === true };
73
+ if (span.script)
74
+ st.script = span.script;
75
+ if (span.combineUpright) {
76
+ st.orient = 'tcy';
77
+ st.orientId = ++orientId;
78
+ }
79
+ else if (span.orientation)
80
+ st.orient = span.orientation;
81
+ if (span.chip) {
82
+ // A chip prints its words (no box in a balloon).
83
+ const inner = readLetteringText(span.chip.spans, undefined);
84
+ for (let i = 0; i < inner.text.length; i++) {
85
+ out.text += inner.text[i];
86
+ out.style.push(inner.style[i]);
87
+ out.source.push(sourceMap?.[raw] ?? -1);
88
+ }
89
+ }
90
+ else if (span.ref) {
91
+ push(span.ref.text ?? '', st, raw, false);
92
+ }
93
+ else if (span.math) {
94
+ push(span.math.tex, st, raw, false);
95
+ }
96
+ else if (!(span.swatch || span.footnote || span.citation)) {
97
+ push(span.text, st, raw, true);
98
+ }
99
+ raw += span.text.length;
100
+ }
101
+ isolatesTo([], raw);
102
+ return out;
103
+ }
104
+ /** A slice of a prepared text, as one more prepared text. */
105
+ function slicePrepared(p, a, b) {
106
+ return { text: p.text.slice(a, b), style: p.style.slice(a, b), source: p.source.slice(a, b) };
107
+ }
108
+ /** Replace every match of `re` in `p` by `to` (the replacement takes the
109
+ * style and source of the first character matched). */
110
+ function replaceAll(p, re, to) {
111
+ const out = { text: '', style: [], source: [] };
112
+ let at = 0;
113
+ const g = new RegExp(re.source, re.flags.includes('g') ? re.flags : `${re.flags}g`);
114
+ let m;
115
+ while ((m = g.exec(p.text)) !== null) {
116
+ if (m[0].length === 0) {
117
+ g.lastIndex++;
118
+ continue;
119
+ }
120
+ const head = slicePrepared(p, at, m.index);
121
+ out.text += head.text;
122
+ out.style.push(...head.style);
123
+ out.source.push(...head.source);
124
+ const rep = typeof to === 'string' ? to : to(m[0]);
125
+ for (let i = 0; i < rep.length; i++) {
126
+ out.text += rep[i];
127
+ out.style.push(p.style[m.index]);
128
+ out.source.push(p.source[Math.min(m.index + i, m.index + m[0].length - 1)]);
129
+ }
130
+ at = m.index + m[0].length;
131
+ }
132
+ const tail = slicePrepared(p, at, p.text.length);
133
+ out.text += tail.text;
134
+ out.style.push(...tail.style);
135
+ out.source.push(...tail.source);
136
+ return out;
137
+ }
138
+ const CJK_CHAR = /[\u3000-\u303F\u3040-\u30FF\u3400-\u9FFF\uF900-\uFAFF\uFF00-\uFFEF]/;
139
+ /**
140
+ * The house rules of SPEC D3.1 applied to a read text:
141
+ * - whitespace runs set as one space, lines trimmed;
142
+ * - an ellipsis written as dots made one `…` (two, `……`, in Chinese);
143
+ * - `doubleDash`: an em dash becomes `--`;
144
+ * - `dropFinalStop`: a final `。` (or `.`) dropped;
145
+ * - emphasis printed bold italic (bold only where the script has no
146
+ * italics: Arabic, CJK);
147
+ * - `uppercase`: capitals for the cased letters only (scripts without case
148
+ * stay as they are), with the locale's rules (Turkish i).
149
+ */
150
+ export function prepareText(read, style, opts) {
151
+ let p = read;
152
+ const lang = languageOf(opts.locale);
153
+ // Whitespace: runs to one space; spaces around forced breaks dropped.
154
+ p = replaceAll(p, /[^\S\n\u00A0\u202F\u3000]+/g, ' ');
155
+ p = replaceAll(p, / ?\n ?/g, '\n');
156
+ p = trimPrepared(p);
157
+ // Ellipsis.
158
+ p = replaceAll(p, /\.(?: ?\.){2,}/g, '…');
159
+ // Japanese and Chinese set no space between their characters, their
160
+ // marks and a leader (a translator's "願う ? …" is "願う?…").
161
+ if (lang === 'ja' || lang === 'zh') {
162
+ p = replaceAll(p, /(?<=[\u3000-\u30FF\u3400-\u9FFF\uF900-\uFAFF\uFF00-\uFFEF\u2025\u2026]) (?=[\u3000-\u30FF\u3400-\u9FFF\uF900-\uFAFF\uFF00-\uFFEF\u2025\u2026!?])/g, '');
163
+ p = replaceAll(p, /(?<=[\u2025\u2026]) (?=\S)/g, '');
164
+ }
165
+ if (lang === 'zh')
166
+ p = replaceAll(p, /…+/g, (m) => (m.length % 2 === 1 ? `${m}…` : m));
167
+ if (style.doubleDash)
168
+ p = replaceAll(p, /—/g, '--');
169
+ // Columns of Japanese or Chinese: ASCII `!` and `?` stand upright as
170
+ // their full-width forms, as a vertical setter writes them (turned
171
+ // sideways they read as dashes). A Japanese pair (`!?`, `!!`) is left
172
+ // as it is: the vertical layout sets it upright in one cell (JLReq
173
+ // 3.1.10) with the face's own glyphs (comic faces often lack ⁉ ‼).
174
+ if (opts.vertical && (lang === 'ja' || lang === 'zh')) {
175
+ const full = (c) => (c === '!' ? '!' : '?');
176
+ p = replaceAll(p, /[!?]+/g, (m) => (lang === 'ja' && m.length === 2 ? m : [...m].map(full).join('')));
177
+ }
178
+ const dropStop = style.dropFinalStop ?? dropsFinalStopByDefault(opts.locale);
179
+ if (dropStop) {
180
+ let end = p.text.length;
181
+ while (end > 0 && /[\s]/.test(p.text[end - 1]))
182
+ end--;
183
+ if (end > 0 && /[。.]/.test(p.text[end - 1]))
184
+ p = { text: p.text.slice(0, end - 1), style: p.style.slice(0, end - 1), source: p.source.slice(0, end - 1) };
185
+ }
186
+ // Emphasis: bold italic where the script slants, bold elsewhere (a run
187
+ // holding Arabic or CJK letters keeps upright).
188
+ if ((style.emphasis ?? 'bold-italic') === 'bold-italic') {
189
+ const styles = [...p.style];
190
+ let i = 0;
191
+ while (i < styles.length) {
192
+ if (!styles[i].bold && !styles[i].italic) {
193
+ i++;
194
+ continue;
195
+ }
196
+ let j = i;
197
+ while (j < styles.length && (styles[j].bold || styles[j].italic) && p.text[j] !== '\n')
198
+ j++;
199
+ const run = p.text.slice(i, j);
200
+ const slants = !hasJoiningScript(run) && !CJK_CHAR.test(run);
201
+ for (let k = i; k < j; k++)
202
+ styles[k] = { ...styles[k], bold: true, italic: slants };
203
+ i = j;
204
+ }
205
+ p = { ...p, style: styles };
206
+ }
207
+ if (style.textTransform === 'uppercase')
208
+ p = uppercasePrepared(p, opts.locale);
209
+ return p;
210
+ }
211
+ function trimPrepared(p) {
212
+ let a = 0;
213
+ let b = p.text.length;
214
+ while (a < b && /\s/.test(p.text[a]))
215
+ a++;
216
+ while (b > a && /\s/.test(p.text[b - 1]))
217
+ b--;
218
+ return slicePrepared(p, a, b);
219
+ }
220
+ /** Capitals for the lowercase letters of cased scripts, in the locale's
221
+ * rules; a letter that becomes two (ß → SS) keeps its source offset. */
222
+ function uppercasePrepared(p, locale) {
223
+ const out = { text: '', style: [], source: [] };
224
+ let tag = locale;
225
+ try {
226
+ 'a'.toLocaleUpperCase(locale);
227
+ }
228
+ catch {
229
+ tag = undefined;
230
+ }
231
+ for (let i = 0; i < p.text.length;) {
232
+ const cp = p.text.codePointAt(i);
233
+ const ch = String.fromCodePoint(cp);
234
+ const up = /\p{Lowercase}/u.test(ch) ? ch.toLocaleUpperCase(tag) : ch;
235
+ for (let k = 0; k < up.length; k++) {
236
+ out.text += up[k];
237
+ out.style.push(p.style[i]);
238
+ out.source.push(p.source[i]);
239
+ }
240
+ i += ch.length;
241
+ }
242
+ return out;
243
+ }
244
+ const HIRAGANA = /[\u3041-\u309F]/;
245
+ const KATAKANA = /[\u30A0-\u30FF\uFF66-\uFF9F]/;
246
+ const HAN = /[\u3005\u3007\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]/;
247
+ const CJK_PUNCT = /[\u3000-\u3004\u3008-\u303F\uFF01-\uFF0F\uFF1A-\uFF20\uFF3B-\uFF40\uFF5B-\uFF65\u2026\u2025\uFF01\uFF1F]/;
248
+ /** Hiragana that usually close a phrase (文節): the particles and the
249
+ * sentence-final ones. A break after one of them, before more kana, is
250
+ * better than one inside a word. */
251
+ const PARTICLES = new Set([...'はがをにでともへやのねよかぞぜさわ']);
252
+ /** Of those, the ones that also end a verb's or an adjective's stem
253
+ * (okurigana: 癒さ|れる, 言わ|ない, 強か|った): right after a kanji they
254
+ * are part of the word, not a particle. */
255
+ const OKURIGANA_PRONE = new Set([...'さわよねかぞぜや']);
256
+ /** Whether the hiragana `a` (after `before`) closes a phrase. */
257
+ function closesPhrase(a, before) {
258
+ return PARTICLES.has(a) && !(OKURIGANA_PRONE.has(a) && before !== undefined && kindOf(before) === 'C');
259
+ }
260
+ /** Chinese characters that stand as words of their own (particles,
261
+ * pronouns, common verbs and adverbs): a break beside one does not part
262
+ * a word. */
263
+ const ZH_FUNCTION_CHARS = new Set([...'的了吗呢吧啊呀哦么嘛是在和与也都就不很还又才把被给让对向从到着过地得这那我你他她它们']);
264
+ function kindOf(ch) {
265
+ if (HIRAGANA.test(ch))
266
+ return 'H';
267
+ if (KATAKANA.test(ch))
268
+ return ch === '・' ? 'P' : 'K';
269
+ if (HAN.test(ch))
270
+ return 'C';
271
+ if (CJK_PUNCT.test(ch))
272
+ return 'P';
273
+ if (/[\p{L}\p{N}]/u.test(ch))
274
+ return 'L';
275
+ return 'O';
276
+ }
277
+ /** Penalty of a break between two CJK characters: an approximation of
278
+ * Japanese phrase (文節) boundaries — after punctuation or a particle is
279
+ * cheap, inside a run of kanji or katakana or before okurigana is dear.
280
+ * Chinese breaks anywhere at a small even cost, cheaper after
281
+ * punctuation. */
282
+ function cjkBreakPenalty(a, b, japanese, before) {
283
+ const ka = kindOf(a);
284
+ const kb = kindOf(b);
285
+ // A two-character leader (…… ‥‥) stays whole; after the end of a
286
+ // sentence or a clause are the best places.
287
+ if (a === b && (a === '\u2026' || a === '\u2025'))
288
+ return 50;
289
+ if (/[\u3002\uFF01\uFF1F!?\u2026\uFF0E]/.test(a))
290
+ return -1;
291
+ if (ka === 'P')
292
+ return /[\u3001\uFF0C]/.test(a) ? -0.3 : 0;
293
+ if (kb === 'P')
294
+ return 2;
295
+ if (!japanese)
296
+ return ka === 'L' || kb === 'L' ? 1.5 : 1;
297
+ // A particle sticks to the word before it: never break just before one.
298
+ if (kb === 'H' && PARTICLES.has(b) && ka !== 'H')
299
+ return 6;
300
+ if (ka === 'H') {
301
+ const particle = closesPhrase(a, before);
302
+ if (kb === 'C' || kb === 'K' || kb === 'L')
303
+ return particle ? 0.2 : 0.8;
304
+ if (PARTICLES.has(b))
305
+ return 5;
306
+ return particle ? 1.5 : 3.5;
307
+ }
308
+ if ((ka === 'C' || ka === 'K') && kb === 'H')
309
+ return 5;
310
+ if (ka === 'C' && kb === 'C')
311
+ return 4;
312
+ if (ka === 'K' && kb === 'K')
313
+ return 7;
314
+ if (ka === 'C' && kb === 'K')
315
+ return 2;
316
+ if (ka === 'K' && kb === 'C')
317
+ return 2;
318
+ return 3;
319
+ }
320
+ /** Short words that lean on the next one (articles, prepositions,
321
+ * conjunctions of the Latin-script languages the site speaks): a line
322
+ * should not end on one. */
323
+ const LEANING_WORDS = new Set([
324
+ 'a', 'an', 'the', 'of', 'to', 'in', 'on', 'at', 'by', 'for', 'and', 'or', 'my', 'your', 'his', 'her', 'its', 'our', 'their', 'i',
325
+ 'el', 'la', 'los', 'las', 'un', 'una', 'unos', 'unas', 'de', 'del', 'al', 'y', 'o', 'en', 'con', 'por', 'para', 'mi', 'tu', 'su', 'que',
326
+ 'le', 'les', 'une', 'des', 'du', 'et', 'ou', 'au', 'aux', 'ce', 'ma', 'ta', 'sa', 'mon', 'ton', 'son', 'je', 'tu', 'il', 'ne',
327
+ 'els', 'l', 'd', 'per', 'amb', 'es', 'em', 'et',
328
+ ]);
329
+ /** Penalty of a break at the space starting at `k`: cheap after the end of
330
+ * a sentence or a clause, dear after a word that leans on the next. */
331
+ function spacePenalty(t, k) {
332
+ const before = t[k - 1] ?? '';
333
+ if (/[.?!\u2026\u061F\u06D4]/.test(before))
334
+ return -1;
335
+ if (/[,;:\u060C\u061B]/.test(before))
336
+ return -0.5;
337
+ let a = k;
338
+ while (a > 0 && !/\s/.test(t[a - 1]))
339
+ a--;
340
+ const word = t.slice(a, k).toLowerCase().replace(/^[\u00BF\u00A1"'\u00AB(]+/u, '');
341
+ if (LEANING_WORDS.has(word))
342
+ return 1.2;
343
+ return 0.3;
344
+ }
345
+ /** Word hints of a CJK text from the runtime's segmenter: the offsets
346
+ * inside a word (`interiors`), and — Chinese — those between two Han
347
+ * characters the segmenter left as words of one character each, neither
348
+ * of them a word that stands alone (`unknown`): the dictionary does not
349
+ * know the word they make (魔|药, 大|赛 in 魔药大赛), which is still one. */
350
+ function cjkWordHints(t, japanese) {
351
+ const interiors = new Set();
352
+ const unknown = new Set();
353
+ const Seg = Intl.Segmenter;
354
+ if (!Seg || !CJK_CHAR.test(t))
355
+ return { interiors, unknown };
356
+ try {
357
+ let prevSingle;
358
+ for (const s of new Seg(japanese ? 'ja' : 'zh', { granularity: 'word' }).segment(t)) {
359
+ const single = !japanese && [...s.segment].length === 1 && HAN.test(s.segment) && !ZH_FUNCTION_CHARS.has(s.segment);
360
+ if (single && prevSingle && prevSingle.index + prevSingle.segment.length === s.index)
361
+ unknown.add(s.index);
362
+ prevSingle = single ? s : undefined;
363
+ if (!s.isWordLike || !CJK_CHAR.test(s.segment))
364
+ continue;
365
+ for (let k = 1; k < s.segment.length; k++) {
366
+ const c = s.segment.charCodeAt(k);
367
+ if (c >= 0xdc00 && c <= 0xdfff)
368
+ continue;
369
+ interiors.add(s.index + k);
370
+ }
371
+ }
372
+ }
373
+ catch {
374
+ // No segmenter data for the language: no word hints.
375
+ }
376
+ return { interiors, unknown };
377
+ }
378
+ /** The legal breaks of a prepared text (the text's end included, as a
379
+ * forced break). */
380
+ export function breakPoints(p, level, japanese) {
381
+ const t = p.text;
382
+ const out = [];
383
+ const insideOriented = (k) => {
384
+ const a = p.style[k - 1];
385
+ const b = p.style[k];
386
+ if (a?.ruby && b?.ruby && a.ruby.id === b.ruby.id && a.ruby.group)
387
+ return true;
388
+ return !!a && !!b && a.orient !== undefined && a.orient === b.orient && a.orientId === b.orientId;
389
+ };
390
+ // Inside a word of a CJK text (a dictionary segmenter, where the runtime
391
+ // has one): a break there parts a word (如|此, くれ|る).
392
+ const hints = cjkWordHints(t, japanese);
393
+ const inWord = hints.interiors;
394
+ let k = 0;
395
+ while (k < t.length) {
396
+ const ch = t[k];
397
+ if (ch === '\n') {
398
+ out.push({ end: k, next: k + 1, penalty: 0, forced: true });
399
+ k++;
400
+ continue;
401
+ }
402
+ if (isBreakingSpace(ch)) {
403
+ let e = k;
404
+ while (e < t.length && isBreakingSpace(t[e]) && t[e] !== '\n')
405
+ e++;
406
+ // A space before a closing mark (French "Papi !", "là ?"), or after
407
+ // an opening one, binds: "!" never opens a line.
408
+ const binds = /[!?;:\u00BB\u203A)\]}%\u2026\u061F]/.test(t[e] ?? '') || /[\u00AB\u2039(\[{\u00BF\u00A1]/.test(t[k - 1] ?? '');
409
+ if (k > 0 && t[e] !== '\n' && e < t.length && !insideOriented(k) && !binds)
410
+ out.push({ end: k, next: e, penalty: spacePenalty(t, k), forced: false });
411
+ k = e;
412
+ continue;
413
+ }
414
+ const at = k + (ch.codePointAt(0) > 0xffff ? 2 : 1);
415
+ if (at < t.length && !isBreakingSpace(t[at]) && t[at] !== '\n' && !insideOriented(at)) {
416
+ const next = String.fromCodePoint(t.codePointAt(at));
417
+ const prev = ch;
418
+ let penalty;
419
+ if (cjkJoinBreaks(t.slice(Math.max(0, at - 4), at), t.slice(at, at + 4), level)) {
420
+ const before = k > 0 ? String.fromCodePoint(t.codePointAt(k - 1 - (k > 1 && /[\uDC00-\uDFFF]/.test(t[k - 1]) ? 1 : 0))) : undefined;
421
+ penalty = cjkBreakPenalty(prev, next, japanese, before) + (inWord.has(at) ? (japanese ? 3 : 6) : hints.unknown.has(at) ? 4 : 0);
422
+ }
423
+ else if (/\p{L}/u.test(next)) {
424
+ // A hard hyphen or a dash between words; an ellipsis run into the
425
+ // next word ("…AND").
426
+ if (prev === '-' && t[at - 2] === '-')
427
+ penalty = 1;
428
+ else if (prev === '-' && /\p{L}/u.test(t[at - 2] ?? ''))
429
+ penalty = 3;
430
+ else if (prev === '—' || prev === '–')
431
+ penalty = 1;
432
+ else if (prev === '…')
433
+ penalty = 1.5;
434
+ else if (prev === '/')
435
+ penalty = 3;
436
+ }
437
+ if (penalty !== undefined)
438
+ out.push({ end: at, next: at, penalty, forced: false });
439
+ }
440
+ k = at;
441
+ }
442
+ out.push({ end: t.length, next: t.length, penalty: 0, forced: true });
443
+ return out;
444
+ }
445
+ const ESCAPABLE = /[*_^~`@\\]/g;
446
+ /** Design-text markup of `p[a, b)`: the characters escaped, each run of
447
+ * one style wrapped in its markers (bold, italic, scripts, orientation),
448
+ * closed at the end of the range. */
449
+ export function markupOf(p, a, b) {
450
+ let out = '';
451
+ let i = a;
452
+ while (i < b) {
453
+ const s = p.style[i];
454
+ let j = i + 1;
455
+ while (j < b && sameStyle(p.style[j], s))
456
+ j++;
457
+ let piece = p.text.slice(i, j).replace(ESCAPABLE, (c) => (c === '\\' ? '\\' : `\\${c}`));
458
+ if (s.script === 'sup')
459
+ piece = `^${piece}^`;
460
+ else if (s.script === 'sub')
461
+ piece = `~${piece}~`;
462
+ if (s.orient)
463
+ piece = `:${s.orient}[${piece}]`;
464
+ if (s.bold && s.italic)
465
+ piece = `***${piece}***`;
466
+ else if (s.bold)
467
+ piece = `**${piece}**`;
468
+ else if (s.italic)
469
+ piece = `*${piece}*`;
470
+ out += piece;
471
+ i = j;
472
+ }
473
+ return out;
474
+ }
475
+ function sameStyle(a, b) {
476
+ return a.bold === b.bold && a.italic === b.italic && a.script === b.script && a.orient === b.orient && a.orientId === b.orientId;
477
+ }
478
+ /** Whether any character of `p[a, b)` is set in a style other than the
479
+ * plain one. */
480
+ export function hasMarks(p, a = 0, b = p.text.length) {
481
+ for (let i = a; i < b; i++) {
482
+ const s = p.style[i];
483
+ if (s.bold || s.italic || s.script || s.orient)
484
+ return true;
485
+ }
486
+ return false;
487
+ }
488
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/comics/lettering/text.ts"],"names":[],"mappings":"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"}