postext 0.1.2 → 0.1.4

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 (45) hide show
  1. package/dist/__tests__/exports.test.js +34 -2
  2. package/dist/__tests__/exports.test.js.map +1 -1
  3. package/dist/canvas-backend.d.ts +5 -0
  4. package/dist/canvas-backend.d.ts.map +1 -0
  5. package/dist/canvas-backend.js +156 -0
  6. package/dist/canvas-backend.js.map +1 -0
  7. package/dist/createLayout.d.ts +2 -2
  8. package/dist/createLayout.d.ts.map +1 -1
  9. package/dist/createLayout.js +25 -2
  10. package/dist/createLayout.js.map +1 -1
  11. package/dist/defaults.d.ts +23 -0
  12. package/dist/defaults.d.ts.map +1 -0
  13. package/dist/defaults.js +387 -0
  14. package/dist/defaults.js.map +1 -0
  15. package/dist/hyphenate.d.ts +11 -0
  16. package/dist/hyphenate.d.ts.map +1 -0
  17. package/dist/hyphenate.js +140 -0
  18. package/dist/hyphenate.js.map +1 -0
  19. package/dist/index.d.ts +11 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +7 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/measure.d.ts +40 -0
  24. package/dist/measure.d.ts.map +1 -0
  25. package/dist/measure.js +267 -0
  26. package/dist/measure.js.map +1 -0
  27. package/dist/parse.d.ts +17 -0
  28. package/dist/parse.d.ts.map +1 -0
  29. package/dist/parse.js +152 -0
  30. package/dist/parse.js.map +1 -0
  31. package/dist/pipeline.d.ts +4 -0
  32. package/dist/pipeline.d.ts.map +1 -0
  33. package/dist/pipeline.js +324 -0
  34. package/dist/pipeline.js.map +1 -0
  35. package/dist/types.d.ts +131 -0
  36. package/dist/types.d.ts.map +1 -1
  37. package/dist/units.d.ts +9 -0
  38. package/dist/units.d.ts.map +1 -0
  39. package/dist/units.js +27 -0
  40. package/dist/units.js.map +1 -0
  41. package/dist/vdt.d.ts +83 -0
  42. package/dist/vdt.d.ts.map +1 -0
  43. package/dist/vdt.js +50 -0
  44. package/dist/vdt.js.map +1 -0
  45. package/package.json +4 -1
@@ -0,0 +1,324 @@
1
+ import { resolvePageConfig, resolveLayoutConfig, resolveBodyTextConfig, resolveHeadingsConfig, } from './defaults';
2
+ import { dimensionToPx } from './units';
3
+ import { createBoundingBox, createVDTDocument, createVDTPage, createVDTColumn, createVDTBlock, } from './vdt';
4
+ import { parseMarkdown } from './parse';
5
+ import { buildFontString, measureBlock, measureRichBlock, initHyphenator } from './measure';
6
+ // ---------------------------------------------------------------------------
7
+ // Config resolution helpers
8
+ // ---------------------------------------------------------------------------
9
+ function resolveAllConfig(config) {
10
+ return {
11
+ page: resolvePageConfig(config?.page),
12
+ layout: resolveLayoutConfig(config?.layout),
13
+ bodyText: resolveBodyTextConfig(config?.bodyText),
14
+ headings: resolveHeadingsConfig(config?.headings),
15
+ };
16
+ }
17
+ // ---------------------------------------------------------------------------
18
+ // Baseline grid computation
19
+ // ---------------------------------------------------------------------------
20
+ function computeBaselineGrid(resolved) {
21
+ const dpi = resolved.page.dpi;
22
+ const bodyFontSizePx = dimensionToPx(resolved.bodyText.fontSize, dpi);
23
+ const lineHeightDim = resolved.bodyText.lineHeight;
24
+ // em/rem: multiplier of font size; pt/px/cm/etc: absolute
25
+ if (lineHeightDim.unit === 'em' || lineHeightDim.unit === 'rem') {
26
+ return bodyFontSizePx * lineHeightDim.value;
27
+ }
28
+ return dimensionToPx(lineHeightDim, dpi, bodyFontSizePx);
29
+ }
30
+ // ---------------------------------------------------------------------------
31
+ // Column layout computation
32
+ // ---------------------------------------------------------------------------
33
+ function computeColumnBboxes(contentArea, resolved) {
34
+ const { layoutType, gutterWidth, sideColumnPercent } = resolved.layout;
35
+ const dpi = resolved.page.dpi;
36
+ if (layoutType === 'single') {
37
+ return [createBoundingBox(contentArea.x, contentArea.y, contentArea.width, contentArea.height)];
38
+ }
39
+ const gutterPx = dimensionToPx(gutterWidth, dpi);
40
+ if (layoutType === 'double') {
41
+ const colWidth = (contentArea.width - gutterPx) / 2;
42
+ return [
43
+ createBoundingBox(contentArea.x, contentArea.y, colWidth, contentArea.height),
44
+ createBoundingBox(contentArea.x + colWidth + gutterPx, contentArea.y, colWidth, contentArea.height),
45
+ ];
46
+ }
47
+ // oneAndHalf
48
+ const sideWidth = contentArea.width * (sideColumnPercent / 100);
49
+ const mainWidth = contentArea.width - sideWidth - gutterPx;
50
+ return [
51
+ createBoundingBox(contentArea.x, contentArea.y, mainWidth, contentArea.height),
52
+ createBoundingBox(contentArea.x + mainWidth + gutterPx, contentArea.y, sideWidth, contentArea.height),
53
+ ];
54
+ }
55
+ function resolveBodyStyle(resolved) {
56
+ const dpi = resolved.page.dpi;
57
+ const fontSizePx = dimensionToPx(resolved.bodyText.fontSize, dpi);
58
+ const lineHeightPx = computeBaselineGrid(resolved);
59
+ const weight = resolved.bodyText.fontWeight.toString();
60
+ const fontString = buildFontString(resolved.bodyText.fontFamily, fontSizePx, weight);
61
+ const boldWeight = resolved.bodyText.boldFontWeight.toString();
62
+ const boldFontString = buildFontString(resolved.bodyText.fontFamily, fontSizePx, boldWeight);
63
+ const textAlign = resolved.bodyText.textAlign;
64
+ const hyphenate = resolved.bodyText.hyphenation.enabled && textAlign === 'justify';
65
+ return { fontString, boldFontString, fontSizePx, lineHeightPx, color: resolved.bodyText.color.hex, textAlign, hyphenate, marginTopPx: 0, marginBottomPx: 0 };
66
+ }
67
+ function resolveHeadingStyle(level, resolved) {
68
+ const dpi = resolved.page.dpi;
69
+ const headingConfig = resolved.headings.levels.find((l) => l.level === level) ?? resolved.headings.levels[0];
70
+ const fontSizePx = dimensionToPx(headingConfig.fontSize, dpi);
71
+ const lineHeightDim = headingConfig.lineHeight;
72
+ let lineHeightPx;
73
+ if (lineHeightDim.unit === 'em' || lineHeightDim.unit === 'rem') {
74
+ lineHeightPx = fontSizePx * lineHeightDim.value;
75
+ }
76
+ else {
77
+ lineHeightPx = dimensionToPx(lineHeightDim, dpi, fontSizePx);
78
+ }
79
+ const weight = headingConfig.fontWeight.toString();
80
+ const fontString = buildFontString(headingConfig.fontFamily, fontSizePx, weight);
81
+ const textAlign = resolved.headings.textAlign;
82
+ const marginTopPx = dimensionToPx(headingConfig.marginTop, dpi, fontSizePx);
83
+ const marginBottomPx = dimensionToPx(headingConfig.marginBottom, dpi, fontSizePx);
84
+ return { fontString, fontSizePx, lineHeightPx, color: headingConfig.color.hex, textAlign, hyphenate: false, marginTopPx, marginBottomPx };
85
+ }
86
+ function resolveBlockquoteStyle(resolved) {
87
+ const dpi = resolved.page.dpi;
88
+ const fontSizePx = dimensionToPx(resolved.bodyText.fontSize, dpi);
89
+ const lineHeightPx = computeBaselineGrid(resolved);
90
+ const weight = resolved.bodyText.fontWeight.toString();
91
+ const fontString = buildFontString(resolved.bodyText.fontFamily, fontSizePx, weight, 'italic');
92
+ const boldWeight = resolved.bodyText.boldFontWeight.toString();
93
+ const boldFontString = buildFontString(resolved.bodyText.fontFamily, fontSizePx, boldWeight, 'italic');
94
+ const textAlign = resolved.bodyText.textAlign;
95
+ const hyphenate = resolved.bodyText.hyphenation.enabled && textAlign === 'justify';
96
+ return { fontString, boldFontString, fontSizePx, lineHeightPx, color: '#666666', textAlign, hyphenate, marginTopPx: 0, marginBottomPx: 0 };
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Line position reset (for split blocks)
100
+ // ---------------------------------------------------------------------------
101
+ function resetLinePositions(lines, lineHeightPx) {
102
+ return lines.map((line, i) => ({
103
+ ...line,
104
+ bbox: createBoundingBox(0, i * lineHeightPx, line.bbox.width, lineHeightPx),
105
+ baseline: i * lineHeightPx + lineHeightPx * 0.8,
106
+ }));
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // Page creation with columns
110
+ // ---------------------------------------------------------------------------
111
+ function createPageWithColumns(pageIndex, resolved, contentArea, pageWidthPx, pageHeightPx) {
112
+ const page = createVDTPage(pageIndex, pageWidthPx, pageHeightPx);
113
+ const colBboxes = computeColumnBboxes(contentArea, resolved);
114
+ for (let i = 0; i < colBboxes.length; i++) {
115
+ page.columns.push(createVDTColumn(i, colBboxes[i]));
116
+ }
117
+ return page;
118
+ }
119
+ function currentColumn(doc, cursor) {
120
+ return doc.pages[cursor.pageIndex].columns[cursor.columnIndex];
121
+ }
122
+ function advanceToNextColumn(doc, cursor, resolved, contentArea, pageWidthPx, pageHeightPx) {
123
+ const page = doc.pages[cursor.pageIndex];
124
+ if (cursor.columnIndex < page.columns.length - 1) {
125
+ cursor.columnIndex++;
126
+ }
127
+ else {
128
+ // New page
129
+ const newPage = createPageWithColumns(doc.pages.length, resolved, contentArea, pageWidthPx, pageHeightPx);
130
+ doc.pages.push(newPage);
131
+ cursor.pageIndex = newPage.index;
132
+ cursor.columnIndex = 0;
133
+ }
134
+ }
135
+ function placeBlockInColumn(block, blockHeight, col, cursor) {
136
+ const y = col.bbox.y + (col.bbox.height - col.availableHeight);
137
+ block.bbox = createBoundingBox(col.bbox.x, y, col.bbox.width, blockHeight);
138
+ block.pageIndex = cursor.pageIndex;
139
+ block.columnIndex = cursor.columnIndex;
140
+ // Offset all line bboxes to absolute page coordinates
141
+ for (const line of block.lines) {
142
+ line.bbox.x += col.bbox.x;
143
+ line.bbox.y += y;
144
+ line.baseline += y;
145
+ }
146
+ col.blocks.push(block);
147
+ col.availableHeight -= blockHeight;
148
+ }
149
+ // ---------------------------------------------------------------------------
150
+ // Public API
151
+ // ---------------------------------------------------------------------------
152
+ export function buildDocument(content, config) {
153
+ const resolved = resolveAllConfig(config);
154
+ const dpi = resolved.page.dpi;
155
+ // Initialize hyphenator if needed
156
+ if (resolved.bodyText.hyphenation.enabled && resolved.bodyText.textAlign === 'justify') {
157
+ initHyphenator(resolved.bodyText.hyphenation.locale);
158
+ }
159
+ // Compute baseline grid
160
+ const baselineGrid = computeBaselineGrid(resolved);
161
+ // Create document
162
+ const doc = createVDTDocument(resolved, baselineGrid);
163
+ // Page dimensions in px
164
+ const pageWidthPx = dimensionToPx(resolved.page.width, dpi);
165
+ const pageHeightPx = dimensionToPx(resolved.page.height, dpi);
166
+ // Margins in px
167
+ const marginTop = dimensionToPx(resolved.page.margins.top, dpi);
168
+ const marginBottom = dimensionToPx(resolved.page.margins.bottom, dpi);
169
+ const marginLeft = dimensionToPx(resolved.page.margins.left, dpi);
170
+ const marginRight = dimensionToPx(resolved.page.margins.right, dpi);
171
+ // Content area
172
+ const contentArea = createBoundingBox(marginLeft, marginTop, pageWidthPx - marginLeft - marginRight, pageHeightPx - marginTop - marginBottom);
173
+ // Create first page
174
+ const firstPage = createPageWithColumns(0, resolved, contentArea, pageWidthPx, pageHeightPx);
175
+ doc.pages.push(firstPage);
176
+ // Parse markdown
177
+ const contentBlocks = parseMarkdown(content.markdown);
178
+ // Resolve styles
179
+ const bodyStyle = resolveBodyStyle(resolved);
180
+ const blockquoteStyle = resolveBlockquoteStyle(resolved);
181
+ // Placement cursor
182
+ const cursor = { pageIndex: 0, columnIndex: 0 };
183
+ let blockIdCounter = 0;
184
+ let pendingSpacing = 0;
185
+ for (let blockIdx = 0; blockIdx < contentBlocks.length; blockIdx++) {
186
+ const contentBlock = contentBlocks[blockIdx];
187
+ const id = `block-${blockIdCounter++}`;
188
+ let style;
189
+ let vdtType;
190
+ let headingLevel;
191
+ switch (contentBlock.type) {
192
+ case 'heading':
193
+ style = resolveHeadingStyle(contentBlock.level ?? 1, resolved);
194
+ vdtType = 'heading';
195
+ headingLevel = contentBlock.level;
196
+ break;
197
+ case 'blockquote':
198
+ style = blockquoteStyle;
199
+ vdtType = 'blockquote';
200
+ break;
201
+ default:
202
+ style = bodyStyle;
203
+ vdtType = 'paragraph';
204
+ break;
205
+ }
206
+ // Measure text — use rich measurement for blocks with bold spans
207
+ const col = currentColumn(doc, cursor);
208
+ const hasRichSpans = contentBlock.spans.some((s) => s.bold);
209
+ const measured = hasRichSpans && style.boldFontString
210
+ ? measureRichBlock(contentBlock.spans, style.fontString, style.boldFontString, col.bbox.width, style.lineHeightPx, { textAlign: style.textAlign, hyphenate: style.hyphenate })
211
+ : measureBlock(contentBlock.text, style.fontString, col.bbox.width, style.lineHeightPx, { textAlign: style.textAlign, hyphenate: style.hyphenate });
212
+ if (measured.lines.length === 0)
213
+ continue;
214
+ // For headings, only snap to baseline grid if the next block is NOT a heading.
215
+ // Consecutive headings flow without grid snapping; the last heading in the
216
+ // group snaps so that the following body text realigns with the grid.
217
+ const nextBlock = blockIdx + 1 < contentBlocks.length ? contentBlocks[blockIdx + 1] : null;
218
+ const nextIsHeading = nextBlock?.type === 'heading';
219
+ const shouldSnapToGrid = vdtType === 'heading' && !nextIsHeading;
220
+ // Place block, splitting across columns/pages if needed
221
+ const canSplit = vdtType === 'paragraph' || vdtType === 'blockquote';
222
+ let remainingLines = [...measured.lines];
223
+ let partIndex = 0;
224
+ while (remainingLines.length > 0) {
225
+ const curCol = currentColumn(doc, cursor);
226
+ const isFirstInColumn = curCol.blocks.length === 0;
227
+ // Compute spacing before this block — margin collapsing between
228
+ // consecutive headings: only the larger of marginBottom / marginTop applies
229
+ let spacingBefore = 0;
230
+ if (!isFirstInColumn) {
231
+ spacingBefore = pendingSpacing;
232
+ if (vdtType === 'heading') {
233
+ spacingBefore = Math.max(spacingBefore, style.marginTopPx);
234
+ }
235
+ }
236
+ const effectiveAvailable = curCol.availableHeight - spacingBefore;
237
+ const linesPerAvailable = Math.floor(effectiveAvailable / style.lineHeightPx);
238
+ const totalRemainHeight = remainingLines.length * style.lineHeightPx;
239
+ // Block fits in current column
240
+ if (totalRemainHeight <= effectiveAvailable) {
241
+ // Consume spacing
242
+ if (spacingBefore > 0) {
243
+ curCol.availableHeight -= spacingBefore;
244
+ }
245
+ const partId = partIndex === 0 ? id : `${id}-cont-${partIndex}`;
246
+ const blk = createVDTBlock(partId, vdtType, style.fontString, style.color, style.textAlign);
247
+ if (style.boldFontString)
248
+ blk.boldFontString = style.boldFontString;
249
+ if (partIndex === 0)
250
+ blk.headingLevel = headingLevel;
251
+ blk.lines = resetLinePositions(remainingLines, style.lineHeightPx);
252
+ blk.dirty = false;
253
+ blk.snappedToGrid = shouldSnapToGrid && partIndex === 0;
254
+ let h = totalRemainHeight;
255
+ if (shouldSnapToGrid && partIndex === 0) {
256
+ // Snap using the absolute position in the column so that the block
257
+ // bottom lands on a baseline grid line. This accounts for off-grid
258
+ // starts (e.g. after consecutive unsnapped headings) and bakes in
259
+ // the minimum marginBottom — the grid always wins, but the margin
260
+ // below is guaranteed to be at least marginBottomPx.
261
+ const usedHeight = curCol.bbox.height - curCol.availableHeight;
262
+ const naturalBottom = usedHeight + totalRemainHeight + style.marginBottomPx;
263
+ const snappedBottom = Math.ceil(naturalBottom / baselineGrid) * baselineGrid;
264
+ h = snappedBottom - usedHeight;
265
+ }
266
+ placeBlockInColumn(blk, h, curCol, cursor);
267
+ doc.blocks.push(blk);
268
+ // For snapped headings the margin is baked into the snap;
269
+ // for unsnapped headings (consecutive) track it for collapsing
270
+ pendingSpacing = (shouldSnapToGrid && partIndex === 0) ? 0 : style.marginBottomPx;
271
+ break;
272
+ }
273
+ // Block doesn't fit — try to split
274
+ if (canSplit && linesPerAvailable >= 2) {
275
+ // Consume spacing
276
+ if (spacingBefore > 0) {
277
+ curCol.availableHeight -= spacingBefore;
278
+ }
279
+ const partId = partIndex === 0 ? id : `${id}-cont-${partIndex}`;
280
+ const splitLines = remainingLines.slice(0, linesPerAvailable);
281
+ const blk = createVDTBlock(partId, vdtType, style.fontString, style.color, style.textAlign);
282
+ if (style.boldFontString)
283
+ blk.boldFontString = style.boldFontString;
284
+ if (partIndex === 0)
285
+ blk.headingLevel = headingLevel;
286
+ blk.lines = resetLinePositions(splitLines, style.lineHeightPx);
287
+ blk.dirty = false;
288
+ blk.snappedToGrid = false;
289
+ const splitHeight = linesPerAvailable * style.lineHeightPx;
290
+ placeBlockInColumn(blk, splitHeight, curCol, cursor);
291
+ doc.blocks.push(blk);
292
+ remainingLines = remainingLines.slice(linesPerAvailable);
293
+ partIndex++;
294
+ pendingSpacing = 0;
295
+ advanceToNextColumn(doc, cursor, resolved, contentArea, pageWidthPx, pageHeightPx);
296
+ continue;
297
+ }
298
+ // Cannot split — advance to next column if current has content
299
+ if (curCol.blocks.length > 0) {
300
+ pendingSpacing = 0;
301
+ advanceToNextColumn(doc, cursor, resolved, contentArea, pageWidthPx, pageHeightPx);
302
+ continue;
303
+ }
304
+ // Empty column but block still doesn't fit (block taller than page) — place anyway
305
+ const partId = partIndex === 0 ? id : `${id}-cont-${partIndex}`;
306
+ const blk = createVDTBlock(partId, vdtType, style.fontString, style.color, style.textAlign);
307
+ if (style.boldFontString)
308
+ blk.boldFontString = style.boldFontString;
309
+ if (partIndex === 0)
310
+ blk.headingLevel = headingLevel;
311
+ blk.lines = resetLinePositions(remainingLines, style.lineHeightPx);
312
+ blk.dirty = false;
313
+ blk.snappedToGrid = false;
314
+ placeBlockInColumn(blk, totalRemainHeight, curCol, cursor);
315
+ doc.blocks.push(blk);
316
+ pendingSpacing = style.marginBottomPx;
317
+ break;
318
+ }
319
+ }
320
+ doc.converged = true;
321
+ doc.iterationCount = 1;
322
+ return doc;
323
+ }
324
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -62,6 +62,133 @@ export interface ReferenceConfig {
62
62
  tableNumbering?: boolean;
63
63
  marginNotes?: boolean;
64
64
  }
65
+ export type ColorModel = 'hex' | 'rgb' | 'cmyk' | 'hsl';
66
+ export interface ColorValue {
67
+ hex: string;
68
+ model: ColorModel;
69
+ }
70
+ export type DimensionUnit = 'cm' | 'mm' | 'in' | 'pt' | 'px' | 'em' | 'rem';
71
+ export interface Dimension {
72
+ value: number;
73
+ unit: DimensionUnit;
74
+ }
75
+ export type PageSizePreset = '11x17' | '12x19' | '17x24' | '21x28' | 'custom';
76
+ export interface PageMargins {
77
+ top?: Dimension;
78
+ bottom?: Dimension;
79
+ left?: Dimension;
80
+ right?: Dimension;
81
+ }
82
+ export interface BaselineGridConfig {
83
+ enabled: boolean;
84
+ color?: ColorValue;
85
+ lineWidth?: Dimension;
86
+ }
87
+ export interface PageConfig {
88
+ backgroundColor?: ColorValue;
89
+ sizePreset?: PageSizePreset;
90
+ width?: Dimension;
91
+ height?: Dimension;
92
+ margins?: PageMargins;
93
+ dpi?: number;
94
+ cutLines?: boolean;
95
+ baselineGrid?: BaselineGridConfig;
96
+ }
97
+ export interface ResolvedPageConfig {
98
+ backgroundColor: ColorValue;
99
+ sizePreset: PageSizePreset;
100
+ width: Dimension;
101
+ height: Dimension;
102
+ margins: Required<PageMargins>;
103
+ dpi: number;
104
+ cutLines: boolean;
105
+ baselineGrid: {
106
+ enabled: boolean;
107
+ color: ColorValue;
108
+ lineWidth: Dimension;
109
+ };
110
+ }
111
+ export type LayoutType = 'single' | 'double' | 'oneAndHalf';
112
+ export interface LayoutConfig {
113
+ layoutType?: LayoutType;
114
+ gutterWidth?: Dimension;
115
+ sideColumnPercent?: number;
116
+ }
117
+ export interface ResolvedLayoutConfig {
118
+ layoutType: LayoutType;
119
+ gutterWidth: Dimension;
120
+ sideColumnPercent: number;
121
+ }
122
+ export type TextAlign = 'left' | 'justify';
123
+ export type HyphenationLocale = 'en-us' | 'es' | 'fr' | 'de' | 'it' | 'pt' | 'ca' | 'nl';
124
+ export interface HyphenationConfig {
125
+ enabled?: boolean;
126
+ locale?: HyphenationLocale;
127
+ }
128
+ export interface ResolvedHyphenationConfig {
129
+ enabled: boolean;
130
+ locale: HyphenationLocale;
131
+ }
132
+ export interface BodyTextConfig {
133
+ fontFamily?: string;
134
+ fontSize?: Dimension;
135
+ lineHeight?: Dimension;
136
+ color?: ColorValue;
137
+ textAlign?: TextAlign;
138
+ fontWeight?: number;
139
+ boldFontWeight?: number;
140
+ hyphenation?: HyphenationConfig;
141
+ }
142
+ export interface ResolvedBodyTextConfig {
143
+ fontFamily: string;
144
+ fontSize: Dimension;
145
+ lineHeight: Dimension;
146
+ color: ColorValue;
147
+ textAlign: TextAlign;
148
+ fontWeight: number;
149
+ boldFontWeight: number;
150
+ hyphenation: ResolvedHyphenationConfig;
151
+ }
152
+ export interface HeadingLevelConfig {
153
+ level: number;
154
+ fontSize?: Dimension;
155
+ lineHeight?: Dimension;
156
+ fontFamily?: string;
157
+ color?: ColorValue;
158
+ fontWeight?: number;
159
+ marginTop?: Dimension;
160
+ marginBottom?: Dimension;
161
+ }
162
+ export interface ResolvedHeadingLevelConfig {
163
+ level: number;
164
+ fontSize: Dimension;
165
+ lineHeight: Dimension;
166
+ fontFamily: string;
167
+ color: ColorValue;
168
+ fontWeight: number;
169
+ marginTop: Dimension;
170
+ marginBottom: Dimension;
171
+ }
172
+ export interface HeadingsConfig {
173
+ fontFamily?: string;
174
+ lineHeight?: Dimension;
175
+ color?: ColorValue;
176
+ textAlign?: TextAlign;
177
+ fontWeight?: number;
178
+ marginTop?: Dimension;
179
+ marginBottom?: Dimension;
180
+ levels?: HeadingLevelConfig[];
181
+ }
182
+ export interface ResolvedHeadingsConfig {
183
+ fontFamily: string;
184
+ lineHeight: Dimension;
185
+ color: ColorValue;
186
+ textAlign: TextAlign;
187
+ fontWeight: number;
188
+ marginTop: Dimension;
189
+ marginBottom: Dimension;
190
+ levels: ResolvedHeadingLevelConfig[];
191
+ }
65
192
  export interface PostextSectionOverride {
66
193
  selector: string;
67
194
  columns?: ColumnConfig;
@@ -69,6 +196,10 @@ export interface PostextSectionOverride {
69
196
  resourcePlacement?: ResourcePlacementConfig;
70
197
  }
71
198
  export interface PostextConfig {
199
+ page?: PageConfig;
200
+ layout?: LayoutConfig;
201
+ bodyText?: BodyTextConfig;
202
+ headings?: HeadingsConfig;
72
203
  columns?: number;
73
204
  gutter?: string;
74
205
  columnConfig?: ColumnConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Dimension } from './types';
2
+ /**
3
+ * Convert a Dimension to pixels at a given DPI.
4
+ *
5
+ * For relative units (em, rem) the caller must supply baseFontSizePx —
6
+ * the resolved font-size of the element the dimension is relative to.
7
+ */
8
+ export declare function dimensionToPx(dim: Dimension, dpi: number, baseFontSizePx?: number): number;
9
+ //# sourceMappingURL=units.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../src/units.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,SAAS,EACd,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,MAAM,GACtB,MAAM,CAqBR"}
package/dist/units.js ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Convert a Dimension to pixels at a given DPI.
3
+ *
4
+ * For relative units (em, rem) the caller must supply baseFontSizePx —
5
+ * the resolved font-size of the element the dimension is relative to.
6
+ */
7
+ export function dimensionToPx(dim, dpi, baseFontSizePx) {
8
+ switch (dim.unit) {
9
+ case 'cm':
10
+ return (dim.value / 2.54) * dpi;
11
+ case 'mm':
12
+ return (dim.value / 25.4) * dpi;
13
+ case 'in':
14
+ return dim.value * dpi;
15
+ case 'pt':
16
+ return (dim.value / 72) * dpi;
17
+ case 'px':
18
+ return dim.value;
19
+ case 'em':
20
+ case 'rem':
21
+ if (baseFontSizePx === undefined) {
22
+ throw new Error(`dimensionToPx: baseFontSizePx is required for unit "${dim.unit}"`);
23
+ }
24
+ return dim.value * baseFontSizePx;
25
+ }
26
+ }
27
+ //# sourceMappingURL=units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"units.js","sourceRoot":"","sources":["../src/units.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAc,EACd,GAAW,EACX,cAAuB;IAEvB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QAClC,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;QAClC,KAAK,IAAI;YACP,OAAO,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC;QACzB,KAAK,IAAI;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC;QAChC,KAAK,IAAI;YACP,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB,KAAK,IAAI,CAAC;QACV,KAAK,KAAK;YACR,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,uDAAuD,GAAG,CAAC,IAAI,GAAG,CACnE,CAAC;YACJ,CAAC;YACD,OAAO,GAAG,CAAC,KAAK,GAAG,cAAc,CAAC;IACtC,CAAC;AACH,CAAC"}
package/dist/vdt.d.ts ADDED
@@ -0,0 +1,83 @@
1
+ import type { PostextResource, ResolvedPageConfig, ResolvedLayoutConfig, ResolvedBodyTextConfig, ResolvedHeadingsConfig } from './types';
2
+ export interface BoundingBox {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ }
8
+ export interface ResolvedConfig {
9
+ page: ResolvedPageConfig;
10
+ layout: ResolvedLayoutConfig;
11
+ bodyText: ResolvedBodyTextConfig;
12
+ headings: ResolvedHeadingsConfig;
13
+ }
14
+ export type VDTBlockType = 'paragraph' | 'heading' | 'resource' | 'blockquote' | 'listItem' | 'footnoteRef';
15
+ export type TextAlign = 'left' | 'justify';
16
+ export interface VDTLineSegment {
17
+ kind: 'text' | 'space';
18
+ text: string;
19
+ width: number;
20
+ bold?: boolean;
21
+ }
22
+ export interface VDTLine {
23
+ text: string;
24
+ bbox: BoundingBox;
25
+ baseline: number;
26
+ hyphenated: boolean;
27
+ /** Per-segment data for justified rendering */
28
+ segments?: VDTLineSegment[];
29
+ /** Whether this is the last line of the paragraph (ragged even when justified) */
30
+ isLastLine?: boolean;
31
+ }
32
+ export interface VDTBlock {
33
+ id: string;
34
+ type: VDTBlockType;
35
+ bbox: BoundingBox;
36
+ lines: VDTLine[];
37
+ resource?: PostextResource;
38
+ pageIndex: number;
39
+ columnIndex: number;
40
+ dirty: boolean;
41
+ snappedToGrid: boolean;
42
+ headingLevel?: number;
43
+ fontString: string;
44
+ boldFontString?: string;
45
+ color: string;
46
+ textAlign: TextAlign;
47
+ }
48
+ export interface VDTColumn {
49
+ index: number;
50
+ bbox: BoundingBox;
51
+ blocks: VDTBlock[];
52
+ availableHeight: number;
53
+ baselineOffset: number;
54
+ }
55
+ export interface VDTFootnoteArea {
56
+ bbox: BoundingBox;
57
+ notes: VDTBlock[];
58
+ separator: boolean;
59
+ }
60
+ export interface VDTPage {
61
+ index: number;
62
+ width: number;
63
+ height: number;
64
+ columns: VDTColumn[];
65
+ header?: VDTBlock;
66
+ footer?: VDTBlock;
67
+ marginNotes: VDTBlock[];
68
+ footnoteArea?: VDTFootnoteArea;
69
+ }
70
+ export interface VDTDocument {
71
+ pages: VDTPage[];
72
+ blocks: VDTBlock[];
73
+ config: ResolvedConfig;
74
+ baselineGrid: number;
75
+ converged: boolean;
76
+ iterationCount: number;
77
+ }
78
+ export declare function createBoundingBox(x: number, y: number, width: number, height: number): BoundingBox;
79
+ export declare function createVDTDocument(config: ResolvedConfig, baselineGrid: number): VDTDocument;
80
+ export declare function createVDTPage(index: number, width: number, height: number): VDTPage;
81
+ export declare function createVDTColumn(index: number, bbox: BoundingBox): VDTColumn;
82
+ export declare function createVDTBlock(id: string, type: VDTBlockType, fontString: string, color: string, textAlign?: TextAlign): VDTBlock;
83
+ //# sourceMappingURL=vdt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vdt.d.ts","sourceRoot":"","sources":["../src/vdt.ts"],"names":[],"mappings":"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"}