postext 1.20.2 → 1.21.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 (185) hide show
  1. package/dist/__tests__/color.test.d.ts +2 -0
  2. package/dist/__tests__/color.test.d.ts.map +1 -0
  3. package/dist/__tests__/color.test.js +110 -0
  4. package/dist/__tests__/color.test.js.map +1 -0
  5. package/dist/__tests__/comics/build.test.js +4 -3
  6. package/dist/__tests__/comics/build.test.js.map +1 -1
  7. package/dist/__tests__/comics/canvas.test.js +21 -2
  8. package/dist/__tests__/comics/canvas.test.js.map +1 -1
  9. package/dist/__tests__/comics/config.test.js +62 -0
  10. package/dist/__tests__/comics/config.test.js.map +1 -1
  11. package/dist/__tests__/comics/geometry.test.js +9 -2
  12. package/dist/__tests__/comics/geometry.test.js.map +1 -1
  13. package/dist/__tests__/comics/html.test.js +31 -0
  14. package/dist/__tests__/comics/html.test.js.map +1 -1
  15. package/dist/__tests__/comics/readingDirection.test.d.ts +2 -0
  16. package/dist/__tests__/comics/readingDirection.test.d.ts.map +1 -0
  17. package/dist/__tests__/comics/readingDirection.test.js +95 -0
  18. package/dist/__tests__/comics/readingDirection.test.js.map +1 -0
  19. package/dist/__tests__/comics/skew.test.d.ts +2 -0
  20. package/dist/__tests__/comics/skew.test.d.ts.map +1 -0
  21. package/dist/__tests__/comics/skew.test.js +57 -0
  22. package/dist/__tests__/comics/skew.test.js.map +1 -0
  23. package/dist/__tests__/comics/strip.test.js +186 -6
  24. package/dist/__tests__/comics/strip.test.js.map +1 -1
  25. package/dist/__tests__/exports.test.js +43 -0
  26. package/dist/__tests__/exports.test.js.map +1 -1
  27. package/dist/__tests__/pipeline/resourceNumbering.test.js +33 -1
  28. package/dist/__tests__/pipeline/resourceNumbering.test.js.map +1 -1
  29. package/dist/__tests__/preflight.test.d.ts +2 -0
  30. package/dist/__tests__/preflight.test.d.ts.map +1 -0
  31. package/dist/__tests__/preflight.test.js +115 -0
  32. package/dist/__tests__/preflight.test.js.map +1 -0
  33. package/dist/__tests__/printConfig.test.d.ts +2 -0
  34. package/dist/__tests__/printConfig.test.d.ts.map +1 -0
  35. package/dist/__tests__/printConfig.test.js +44 -0
  36. package/dist/__tests__/printConfig.test.js.map +1 -0
  37. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  38. package/dist/canvas-backend/blockRender.js +36 -1
  39. package/dist/canvas-backend/blockRender.js.map +1 -1
  40. package/dist/canvas-backend/comic.d.ts +2 -1
  41. package/dist/canvas-backend/comic.d.ts.map +1 -1
  42. package/dist/canvas-backend/comic.js +6 -9
  43. package/dist/canvas-backend/comic.js.map +1 -1
  44. package/dist/color/authored.d.ts +9 -0
  45. package/dist/color/authored.d.ts.map +1 -0
  46. package/dist/color/authored.js +31 -0
  47. package/dist/color/authored.js.map +1 -0
  48. package/dist/color/catalogue.d.ts +29 -0
  49. package/dist/color/catalogue.d.ts.map +1 -0
  50. package/dist/color/catalogue.js +52 -0
  51. package/dist/color/catalogue.js.map +1 -0
  52. package/dist/color/icc.d.ts +68 -0
  53. package/dist/color/icc.d.ts.map +1 -0
  54. package/dist/color/icc.js +533 -0
  55. package/dist/color/icc.js.map +1 -0
  56. package/dist/color/index.d.ts +6 -0
  57. package/dist/color/index.d.ts.map +1 -0
  58. package/dist/color/index.js +6 -0
  59. package/dist/color/index.js.map +1 -0
  60. package/dist/color/srgbProfile.d.ts +8 -0
  61. package/dist/color/srgbProfile.d.ts.map +1 -0
  62. package/dist/color/srgbProfile.js +86 -0
  63. package/dist/color/srgbProfile.js.map +1 -0
  64. package/dist/color/transform.d.ts +73 -0
  65. package/dist/color/transform.d.ts.map +1 -0
  66. package/dist/color/transform.js +329 -0
  67. package/dist/color/transform.js.map +1 -0
  68. package/dist/comics/index.d.ts +3 -3
  69. package/dist/comics/index.d.ts.map +1 -1
  70. package/dist/comics/index.js +2 -2
  71. package/dist/comics/index.js.map +1 -1
  72. package/dist/comics/layoutPage.d.ts +8 -4
  73. package/dist/comics/layoutPage.d.ts.map +1 -1
  74. package/dist/comics/layoutPage.js +17 -9
  75. package/dist/comics/layoutPage.js.map +1 -1
  76. package/dist/comics/lettering/__tests__/letterPanel.test.js +19 -9
  77. package/dist/comics/lettering/__tests__/letterPanel.test.js.map +1 -1
  78. package/dist/comics/lettering/letter.js +13 -7
  79. package/dist/comics/lettering/letter.js.map +1 -1
  80. package/dist/comics/lettering/placement.d.ts +2 -0
  81. package/dist/comics/lettering/placement.d.ts.map +1 -1
  82. package/dist/comics/lettering/placement.js.map +1 -1
  83. package/dist/comics/lettering/types.d.ts +5 -0
  84. package/dist/comics/lettering/types.d.ts.map +1 -1
  85. package/dist/comics/paint.d.ts +6 -0
  86. package/dist/comics/paint.d.ts.map +1 -1
  87. package/dist/comics/paint.js +23 -0
  88. package/dist/comics/paint.js.map +1 -1
  89. package/dist/comics/script.d.ts.map +1 -1
  90. package/dist/comics/script.js +4 -1
  91. package/dist/comics/script.js.map +1 -1
  92. package/dist/comics/strip.d.ts +50 -3
  93. package/dist/comics/strip.d.ts.map +1 -1
  94. package/dist/comics/strip.js +55 -5
  95. package/dist/comics/strip.js.map +1 -1
  96. package/dist/comics/types.d.ts +3 -0
  97. package/dist/comics/types.d.ts.map +1 -1
  98. package/dist/configWarnings.d.ts +1 -1
  99. package/dist/configWarnings.d.ts.map +1 -1
  100. package/dist/configWarnings.js +93 -4
  101. package/dist/configWarnings.js.map +1 -1
  102. package/dist/defaults/comics.d.ts +48 -1
  103. package/dist/defaults/comics.d.ts.map +1 -1
  104. package/dist/defaults/comics.js +77 -8
  105. package/dist/defaults/comics.js.map +1 -1
  106. package/dist/defaults/index.d.ts +2 -1
  107. package/dist/defaults/index.d.ts.map +1 -1
  108. package/dist/defaults/index.js +10 -1
  109. package/dist/defaults/index.js.map +1 -1
  110. package/dist/defaults/page.d.ts +12 -6
  111. package/dist/defaults/page.d.ts.map +1 -1
  112. package/dist/defaults/page.js +15 -9
  113. package/dist/defaults/page.js.map +1 -1
  114. package/dist/defaults/print.d.ts +13 -0
  115. package/dist/defaults/print.d.ts.map +1 -0
  116. package/dist/defaults/print.js +147 -0
  117. package/dist/defaults/print.js.map +1 -0
  118. package/dist/html-backend.d.ts.map +1 -1
  119. package/dist/html-backend.js +46 -2
  120. package/dist/html-backend.js.map +1 -1
  121. package/dist/htmlComic.d.ts.map +1 -1
  122. package/dist/htmlComic.js +8 -3
  123. package/dist/htmlComic.js.map +1 -1
  124. package/dist/index.d.ts +11 -6
  125. package/dist/index.d.ts.map +1 -1
  126. package/dist/index.js +6 -3
  127. package/dist/index.js.map +1 -1
  128. package/dist/locale.d.ts +9 -0
  129. package/dist/locale.d.ts.map +1 -1
  130. package/dist/locale.js +11 -0
  131. package/dist/locale.js.map +1 -1
  132. package/dist/pipeline/build.d.ts.map +1 -1
  133. package/dist/pipeline/build.js +211 -36
  134. package/dist/pipeline/build.js.map +1 -1
  135. package/dist/pipeline/calloutLayout.d.ts +5 -0
  136. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  137. package/dist/pipeline/calloutLayout.js +36 -3
  138. package/dist/pipeline/calloutLayout.js.map +1 -1
  139. package/dist/pipeline/config.d.ts.map +1 -1
  140. package/dist/pipeline/config.js +13 -2
  141. package/dist/pipeline/config.js.map +1 -1
  142. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  143. package/dist/pipeline/contentWarnings.js +8 -0
  144. package/dist/pipeline/contentWarnings.js.map +1 -1
  145. package/dist/pipeline/crossRefs.d.ts.map +1 -1
  146. package/dist/pipeline/crossRefs.js +2 -1
  147. package/dist/pipeline/crossRefs.js.map +1 -1
  148. package/dist/pipeline/resourceLayout.d.ts +51 -2
  149. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  150. package/dist/pipeline/resourceLayout.js +96 -51
  151. package/dist/pipeline/resourceLayout.js.map +1 -1
  152. package/dist/pipeline/resourceNumbering.d.ts +5 -0
  153. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  154. package/dist/pipeline/resourceNumbering.js +34 -5
  155. package/dist/pipeline/resourceNumbering.js.map +1 -1
  156. package/dist/pipeline/spanEmbeds.d.ts +6 -1
  157. package/dist/pipeline/spanEmbeds.d.ts.map +1 -1
  158. package/dist/pipeline/spanEmbeds.js +18 -3
  159. package/dist/pipeline/spanEmbeds.js.map +1 -1
  160. package/dist/preflight.d.ts +89 -0
  161. package/dist/preflight.d.ts.map +1 -0
  162. package/dist/preflight.js +314 -0
  163. package/dist/preflight.js.map +1 -0
  164. package/dist/types.d.ts +167 -9
  165. package/dist/types.d.ts.map +1 -1
  166. package/dist/vdt.d.ts +47 -5
  167. package/dist/vdt.d.ts.map +1 -1
  168. package/dist/vdt.js.map +1 -1
  169. package/icc/README.md +43 -0
  170. package/icc/fogra27.icc +0 -0
  171. package/icc/fogra28.icc +0 -0
  172. package/icc/fogra29.icc +0 -0
  173. package/icc/fogra30.icc +0 -0
  174. package/icc/fogra39.icc +0 -0
  175. package/icc/fogra40.icc +0 -0
  176. package/icc/fogra45.icc +0 -0
  177. package/icc/fogra47.icc +0 -0
  178. package/icc/fogra51.icc +0 -0
  179. package/icc/fogra52.icc +0 -0
  180. package/icc/gracol2006.icc +0 -0
  181. package/icc/ifra26.icc +0 -0
  182. package/icc/snap2007.icc +0 -0
  183. package/icc/swop3.icc +0 -0
  184. package/icc/swop5.icc +0 -0
  185. package/package.json +4 -2
@@ -0,0 +1,147 @@
1
+ import { DEFAULT_OUTPUT_PROFILE_ID, outputProfileInfo } from '../color/catalogue';
2
+ import { dimensionsEqual } from './shared';
3
+ export const DEFAULT_RICH_BLACK = { c: 60, m: 40, y: 40, k: 100 };
4
+ export const DEFAULT_PRINT_BLACK_CONFIG = {
5
+ kOnlyNeutrals: true,
6
+ overprint: true,
7
+ richBlack: true,
8
+ richBlackColor: DEFAULT_RICH_BLACK,
9
+ richBlackMinSize: { value: 6, unit: 'mm' },
10
+ };
11
+ export const DEFAULT_PRINT_PREFLIGHT_CONFIG = {
12
+ enabled: true,
13
+ minImageResolution: 300,
14
+ criticalImageResolution: 150,
15
+ minRuleWidth: { value: 0.25, unit: 'pt' },
16
+ smallTextSize: { value: 9, unit: 'pt' },
17
+ safeZone: { value: 5, unit: 'mm' },
18
+ bleedSnap: { value: 3, unit: 'mm' },
19
+ checkFonts: true,
20
+ };
21
+ export const DEFAULT_PRINT_CONFIG = {
22
+ standard: 'none',
23
+ outputProfile: DEFAULT_OUTPUT_PROFILE_ID,
24
+ renderingIntent: 'relative',
25
+ blackPointCompensation: true,
26
+ convertImages: true,
27
+ inkLimit: 300,
28
+ black: DEFAULT_PRINT_BLACK_CONFIG,
29
+ preflight: DEFAULT_PRINT_PREFLIGHT_CONFIG,
30
+ };
31
+ const clampPct = (v) => Math.max(0, Math.min(100, v));
32
+ function resolveCmyk(v, fallback) {
33
+ if (!v)
34
+ return { ...fallback };
35
+ return { c: clampPct(v.c ?? 0), m: clampPct(v.m ?? 0), y: clampPct(v.y ?? 0), k: clampPct(v.k ?? 0) };
36
+ }
37
+ export function resolvePrintBlackConfig(partial) {
38
+ const d = DEFAULT_PRINT_BLACK_CONFIG;
39
+ return {
40
+ kOnlyNeutrals: partial?.kOnlyNeutrals ?? d.kOnlyNeutrals,
41
+ overprint: partial?.overprint ?? d.overprint,
42
+ richBlack: partial?.richBlack ?? d.richBlack,
43
+ richBlackColor: resolveCmyk(partial?.richBlackColor, d.richBlackColor),
44
+ richBlackMinSize: partial?.richBlackMinSize ?? d.richBlackMinSize,
45
+ };
46
+ }
47
+ export function resolvePrintPreflightConfig(partial) {
48
+ const d = DEFAULT_PRINT_PREFLIGHT_CONFIG;
49
+ const min = partial?.minImageResolution ?? d.minImageResolution;
50
+ return {
51
+ enabled: partial?.enabled ?? d.enabled,
52
+ minImageResolution: min,
53
+ // Critical can never sit above the warning threshold.
54
+ criticalImageResolution: Math.min(min, partial?.criticalImageResolution ?? d.criticalImageResolution),
55
+ minRuleWidth: partial?.minRuleWidth ?? d.minRuleWidth,
56
+ smallTextSize: partial?.smallTextSize ?? d.smallTextSize,
57
+ safeZone: partial?.safeZone ?? d.safeZone,
58
+ bleedSnap: partial?.bleedSnap ?? d.bleedSnap,
59
+ checkFonts: partial?.checkFonts ?? d.checkFonts,
60
+ };
61
+ }
62
+ /** The ink limit of the profile a config names (a custom profile's own,
63
+ * else the catalogue's), before any `inkLimit` override. */
64
+ export function profileInkLimit(config) {
65
+ const id = config?.outputProfile ?? DEFAULT_OUTPUT_PROFILE_ID;
66
+ if (id === 'custom')
67
+ return config?.customProfile?.inkLimit ?? DEFAULT_PRINT_CONFIG.inkLimit;
68
+ return outputProfileInfo(id)?.inkLimit ?? DEFAULT_PRINT_CONFIG.inkLimit;
69
+ }
70
+ export function resolvePrintConfig(partial) {
71
+ const d = DEFAULT_PRINT_CONFIG;
72
+ let outputProfile = partial?.outputProfile ?? d.outputProfile;
73
+ // A custom choice without its file, or an id the catalogue lacks, falls
74
+ // back to the default condition.
75
+ if (outputProfile === 'custom' ? !partial?.customProfile : !outputProfileInfo(outputProfile)) {
76
+ outputProfile = d.outputProfile;
77
+ }
78
+ const resolved = {
79
+ standard: partial?.standard ?? d.standard,
80
+ outputProfile,
81
+ renderingIntent: partial?.renderingIntent ?? d.renderingIntent,
82
+ blackPointCompensation: partial?.blackPointCompensation ?? d.blackPointCompensation,
83
+ convertImages: partial?.convertImages ?? d.convertImages,
84
+ inkLimit: partial?.inkLimit ?? profileInkLimit({ ...partial, outputProfile }),
85
+ black: resolvePrintBlackConfig(partial?.black),
86
+ preflight: resolvePrintPreflightConfig(partial?.preflight),
87
+ };
88
+ if (partial?.customProfile)
89
+ resolved.customProfile = { ...partial.customProfile };
90
+ return resolved;
91
+ }
92
+ function stripSection(cfg, defaults) {
93
+ if (!cfg)
94
+ return undefined;
95
+ const out = {};
96
+ for (const [key, value] of Object.entries(cfg)) {
97
+ if (value === undefined)
98
+ continue;
99
+ const def = defaults[key];
100
+ if (isDimension(value) && isDimension(def) && dimensionsEqual(value, def))
101
+ continue;
102
+ if (isCmyk(value) && isCmyk(def) && cmykEqual(value, def))
103
+ continue;
104
+ if (value === def)
105
+ continue;
106
+ out[key] = value;
107
+ }
108
+ return Object.keys(out).length > 0 ? out : undefined;
109
+ }
110
+ function isDimension(v) {
111
+ return !!v && typeof v === 'object' && 'unit' in v && 'value' in v;
112
+ }
113
+ function isCmyk(v) {
114
+ return !!v && typeof v === 'object' && 'c' in v && 'k' in v;
115
+ }
116
+ function cmykEqual(a, b) {
117
+ return a.c === b.c && a.m === b.m && a.y === b.y && a.k === b.k;
118
+ }
119
+ export function stripPrintDefaults(cfg) {
120
+ if (!cfg)
121
+ return undefined;
122
+ const d = DEFAULT_PRINT_CONFIG;
123
+ const result = {};
124
+ if (cfg.standard !== undefined && cfg.standard !== d.standard)
125
+ result.standard = cfg.standard;
126
+ if (cfg.outputProfile !== undefined && cfg.outputProfile !== d.outputProfile)
127
+ result.outputProfile = cfg.outputProfile;
128
+ if (cfg.customProfile)
129
+ result.customProfile = cfg.customProfile;
130
+ if (cfg.renderingIntent !== undefined && cfg.renderingIntent !== d.renderingIntent)
131
+ result.renderingIntent = cfg.renderingIntent;
132
+ if (cfg.blackPointCompensation !== undefined && cfg.blackPointCompensation !== d.blackPointCompensation) {
133
+ result.blackPointCompensation = cfg.blackPointCompensation;
134
+ }
135
+ if (cfg.convertImages !== undefined && cfg.convertImages !== d.convertImages)
136
+ result.convertImages = cfg.convertImages;
137
+ if (cfg.inkLimit !== undefined && cfg.inkLimit !== profileInkLimit(cfg))
138
+ result.inkLimit = cfg.inkLimit;
139
+ const black = stripSection(cfg.black, DEFAULT_PRINT_BLACK_CONFIG);
140
+ if (black)
141
+ result.black = black;
142
+ const preflight = stripSection(cfg.preflight, DEFAULT_PRINT_PREFLIGHT_CONFIG);
143
+ if (preflight)
144
+ result.preflight = preflight;
145
+ return Object.keys(result).length > 0 ? result : undefined;
146
+ }
147
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../../src/defaults/print.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"html-backend.d.ts","sourceRoot":"","sources":["../src/html-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAoBX,aAAa,EACd,MAAM,OAAO,CAAC;AA+Df,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kDAI8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;QAC5D;;;0BAGkB;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF;;;;;;;;;;;;iEAY6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;4DAGwD;IACxD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D;;;;;;;2DAOuD;IACvD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;IACnG;;;wDAGoD;IACpD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C;;;;;;;uEAOmE;IACnE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/B;AAgKD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAWjE;AA8gED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB;4EACwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,QAS4B,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,iBAAsB,GAC9B,eAAe,CAiFjB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAEtF"}
1
+ {"version":3,"file":"html-backend.d.ts","sourceRoot":"","sources":["../src/html-backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EAoBX,aAAa,EACd,MAAM,OAAO,CAAC;AA+Df,MAAM,WAAW,iBAAiB;IAChC,iFAAiF;IACjF,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;kDAI8C;IAC9C,gBAAgB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG;QAC5D;;;0BAGkB;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF;;;;;;;;;;;;iEAY6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;4DAGwD;IACxD,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC1D;;;;;;;2DAOuD;IACvD,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;IACnG;;;wDAGoD;IACpD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC7C;;;;;;;uEAOmE;IACnE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC/B;AAgKD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAajE;AAsjED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5C,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB;4EACwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,QAS4B,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,iBAAsB,GAC9B,eAAe,CAiFjB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAEtF"}
@@ -158,6 +158,9 @@ export function anchoredResourceIds(doc) {
158
158
  const rb = block.resourceBlock;
159
159
  if (rb?.resource.id && !rb.slice?.continued)
160
160
  ids.add(rb.resource.id);
161
+ // A numbered strip with an id (#590).
162
+ if (block.stripCaption?.id)
163
+ ids.add(block.stripCaption.id);
161
164
  }
162
165
  }
163
166
  return ids;
@@ -1865,6 +1868,10 @@ function renderBlockInner(block, options) {
1865
1868
  // the block's single placeholder line renders nothing useful.
1866
1869
  if (block.resourceBlock)
1867
1870
  return renderResourceBlockHtml(block, options);
1871
+ // A strip: its picture is the page's comic markup; the block holds its
1872
+ // caption (#590).
1873
+ if (block.comic)
1874
+ return renderStripCaptionHtml(block, options);
1868
1875
  const parts = [];
1869
1876
  const v = options.vertical;
1870
1877
  parts.push(v ? renderVerticalBullet(block, v) : renderBullet(block, options.dir));
@@ -1874,6 +1881,44 @@ function renderBlockInner(block, options) {
1874
1881
  });
1875
1882
  return parts.join('');
1876
1883
  }
1884
+ /** A strip's caption (`VDTBlock.stripCaption`, #590): the bar behind it,
1885
+ * then its lines, set as the lines of a paragraph (in the flow: turned on
1886
+ * a vertical page, mirrored on a right-to-left one). Empty without one. */
1887
+ function renderStripCaptionHtml(block, options) {
1888
+ const caption = block.stripCaption;
1889
+ if (!caption)
1890
+ return '';
1891
+ const parts = [];
1892
+ if (caption.id)
1893
+ parts.push(zeroSizeAnchor(resourceAnchorId(caption.id), block.bbox.x, block.bbox.y));
1894
+ if (caption.bar) {
1895
+ const { rect, background } = caption.bar;
1896
+ parts.push(`<div aria-hidden="true" style="position:absolute;` +
1897
+ `left:${block.bbox.x + rect.x}px;top:${block.bbox.y + rect.y}px;width:${rect.width}px;height:${rect.height}px;` +
1898
+ `background:${background};"></div>`);
1899
+ }
1900
+ const v = options.vertical;
1901
+ const lines = block.lines.slice(caption.firstLine, caption.firstLine + caption.lineCount);
1902
+ lines.forEach((line, i) => {
1903
+ const next = lines[i + 1];
1904
+ parts.push(v ? renderVerticalLine(line, block, v, options.linkTargets, next) : renderLine(line, block, options.linkTargets, options.dir, options.rootLang, next));
1905
+ });
1906
+ return parts.join('');
1907
+ }
1908
+ /** A strip's block: its picture (`comic`, the strip's comic markup when it
1909
+ * is read in its block) and its caption, as one `<figure>` with the
1910
+ * caption its `<figcaption>`, in reading order (#590). On a page whose
1911
+ * comics lie over the sheet the caption stands alone. */
1912
+ function renderStripBlockHtml(block, options, comic) {
1913
+ const caption = renderStripCaptionHtml(block, options);
1914
+ if (!caption)
1915
+ return comic;
1916
+ if (!comic)
1917
+ return `<div class="pt-strip-caption" style="display:contents;">${caption}</div>`;
1918
+ const figcaption = `<figcaption class="pt-strip-caption" style="display:contents;">${caption}</figcaption>`;
1919
+ const above = block.stripCaption?.position === 'above';
1920
+ return `<figure class="pt-strip" style="display:contents;">${above ? figcaption + comic : comic + figcaption}</figure>`;
1921
+ }
1877
1922
  /**
1878
1923
  * Render a block wrapped in a `<div class="pt-block" data-block-id="...">`
1879
1924
  * container with `display:contents` so lines keep their absolute positioning
@@ -1888,8 +1933,7 @@ function renderBlock(block, options, extra = '') {
1888
1933
  : '';
1889
1934
  return (`<div class="pt-block" data-block-id="${esc(block.id)}" style="display:contents;">` +
1890
1935
  note +
1891
- renderBlockInner(block, options) +
1892
- extra +
1936
+ (block.comic && block.stripCaption && !block.hidden ? renderStripBlockHtml(block, options, extra) : renderBlockInner(block, options) + extra) +
1893
1937
  `</div>`);
1894
1938
  }
1895
1939
  /** An empty element with an id at a point of the page: the target of an