reamkit 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/README.md +4 -3
  2. package/dist/esm/core/bidi/index.d.ts +2 -0
  3. package/dist/esm/core/bidi/index.js +1 -0
  4. package/dist/esm/core/bidi/segments.d.ts +6 -0
  5. package/dist/esm/core/bidi/segments.js +41 -0
  6. package/dist/esm/core/converter/facade.js +1 -1
  7. package/dist/esm/core/converter/project.js +3 -2
  8. package/dist/esm/core/converter/ream.js +2 -1
  9. package/dist/esm/core/font/index.d.ts +2 -0
  10. package/dist/esm/core/font/measure.d.ts +7 -0
  11. package/dist/esm/core/font/measure.js +30 -0
  12. package/dist/esm/core/images.d.ts +17 -0
  13. package/dist/esm/core/images.js +308 -0
  14. package/dist/esm/core/line-breaker/index.d.ts +1 -1
  15. package/dist/esm/core/line-breaker/knuth-plass.d.ts +1 -0
  16. package/dist/esm/core/line-breaker/knuth-plass.js +2 -2
  17. package/dist/esm/core/numbering/apply.d.ts +3 -0
  18. package/dist/esm/core/numbering/apply.js +62 -0
  19. package/dist/esm/core/numbering/index.d.ts +1 -0
  20. package/dist/esm/core/opc/package.d.ts +2 -1
  21. package/dist/esm/core/opc/package.js +6 -2
  22. package/dist/esm/core/style-cascade/index.d.ts +1 -1
  23. package/dist/esm/core/style-cascade/resolver.d.ts +3 -1
  24. package/dist/esm/core/style-cascade/resolver.js +69 -2
  25. package/dist/esm/core/style-cascade/types.d.ts +2 -1
  26. package/dist/esm/core/vector.d.ts +45 -0
  27. package/dist/esm/core/vector.js +48 -0
  28. package/dist/esm/excel/xlsx-reader.js +2 -2
  29. package/dist/esm/index.d.ts +3 -3
  30. package/dist/esm/index.js +2 -1
  31. package/dist/esm/{pdf → layout}/arc-to-bezier.d.ts +1 -1
  32. package/dist/esm/{pdf → layout}/arc-to-bezier.js +2 -2
  33. package/dist/esm/{pdf → layout}/math-layout.d.ts +1 -1
  34. package/dist/esm/{pdf → layout}/math-layout.js +1 -1
  35. package/dist/esm/layout/page-doc.d.ts +133 -0
  36. package/dist/esm/layout/page-doc.js +38 -0
  37. package/dist/esm/{pdf → layout}/preset-geometry.d.ts +1 -1
  38. package/dist/esm/{pdf → layout}/preset-geometry.js +2 -2
  39. package/dist/esm/layout/styled-layout.d.ts +84 -0
  40. package/dist/esm/layout/styled-layout.js +1729 -0
  41. package/dist/esm/pdf/cid-font.d.ts +0 -6
  42. package/dist/esm/pdf/cid-font.js +2 -28
  43. package/dist/esm/pdf/image-xobject.d.ts +3 -17
  44. package/dist/esm/pdf/image-xobject.js +2 -306
  45. package/dist/esm/pdf/index.js +1 -0
  46. package/dist/esm/pdf/styled-page-emitter.d.ts +8 -2
  47. package/dist/esm/pdf/styled-page-emitter.js +29 -14
  48. package/dist/esm/pdf/styled-page-renderer.d.ts +4 -217
  49. package/dist/esm/pdf/styled-page-renderer.js +3 -1824
  50. package/dist/esm/pdf/vector-graphics.d.ts +3 -45
  51. package/dist/esm/pdf/vector-graphics.js +2 -46
  52. package/dist/esm/svg/svg-writer.d.ts +1 -1
  53. package/dist/esm/svg/svg-writer.js +14 -15
  54. package/dist/esm/word/docx-reader.js +4 -3
  55. package/package.json +1 -1
  56. /package/dist/esm/{pdf → layout}/chart-geometry.d.ts +0 -0
  57. /package/dist/esm/{pdf → layout}/chart-geometry.js +0 -0
@@ -5,7 +5,25 @@ var EMPTY_STYLE_SHEET = {
5
5
  defaultParagraphProperties: {},
6
6
  styles: /* @__PURE__ */ new Map()
7
7
  };
8
+ var runCascadeCache = /* @__PURE__ */ new WeakMap();
8
9
  function resolveRunProperties(runDirect, paragraphDirect, sheet) {
10
+ let bySheet = runCascadeCache.get(sheet);
11
+ if (!bySheet) {
12
+ bySheet = /* @__PURE__ */ new WeakMap();
13
+ runCascadeCache.set(sheet, bySheet);
14
+ }
15
+ let byRun = bySheet.get(runDirect);
16
+ if (!byRun) {
17
+ byRun = /* @__PURE__ */ new WeakMap();
18
+ bySheet.set(runDirect, byRun);
19
+ }
20
+ const hit = byRun.get(paragraphDirect);
21
+ if (hit) return hit;
22
+ const resolved = computeRunProperties(runDirect, paragraphDirect, sheet);
23
+ byRun.set(paragraphDirect, resolved);
24
+ return resolved;
25
+ }
26
+ function computeRunProperties(runDirect, paragraphDirect, sheet) {
9
27
  let acc = mergeRun(DEFAULT_RESOLVED_RUN, sheet.defaultRunProperties);
10
28
  if (paragraphDirect.styleId) {
11
29
  const chain = resolveStyleChain(paragraphDirect.styleId, sheet);
@@ -68,6 +86,7 @@ function mergeRun(base, override) {
68
86
  function mergePar(base, override) {
69
87
  const outlineLevel = override.outlineLevel ?? base.outlineLevel;
70
88
  const styleId = override.styleId ?? base.styleId;
89
+ const numbering = override.numbering ?? base.numbering;
71
90
  return {
72
91
  alignment: override.alignment ?? base.alignment,
73
92
  spacingBefore: override.spacingBefore ?? base.spacingBefore,
@@ -80,7 +99,8 @@ function mergePar(base, override) {
80
99
  pageBreakBefore: override.pageBreakBefore ?? base.pageBreakBefore,
81
100
  bidi: override.bidi ?? base.bidi,
82
101
  ...outlineLevel !== void 0 ? { outlineLevel } : {},
83
- ...styleId !== void 0 ? { styleId } : {}
102
+ ...styleId !== void 0 ? { styleId } : {},
103
+ ...numbering !== void 0 ? { numbering } : {}
84
104
  };
85
105
  }
86
106
  function mergeRunPartial(base, override) {
@@ -97,5 +117,52 @@ function copyDefined(base, override) {
97
117
  }
98
118
  return out;
99
119
  }
120
+ function resolveBodyStyles(body, sheet) {
121
+ const visitParagraph = (p) => ({
122
+ ...p,
123
+ properties: resolveParagraphProperties(p.properties, sheet),
124
+ runs: p.runs.map((r) => ({
125
+ ...r,
126
+ properties: resolveRunProperties(r.properties, p.properties, sheet)
127
+ }))
128
+ });
129
+ const visit = (el) => {
130
+ if (el.kind === "paragraph") return {
131
+ kind: "paragraph",
132
+ paragraph: visitParagraph(el.paragraph)
133
+ };
134
+ if (el.kind === "table") return {
135
+ kind: "table",
136
+ table: {
137
+ ...el.table,
138
+ rows: el.table.rows.map((row) => ({
139
+ ...row,
140
+ cells: row.cells.map((cell) => ({
141
+ ...cell,
142
+ content: cell.content.map(visit)
143
+ }))
144
+ }))
145
+ }
146
+ };
147
+ if (el.kind === "shape" && el.shape.text) return {
148
+ kind: "shape",
149
+ shape: {
150
+ ...el.shape,
151
+ text: {
152
+ ...el.shape.text,
153
+ content: el.shape.text.content.map(visit)
154
+ }
155
+ }
156
+ };
157
+ return el;
158
+ };
159
+ return body.map(visit);
160
+ }
161
+ function resolveHeadersFootersStyles(hf, sheet) {
162
+ if (hf.size === 0) return hf;
163
+ const out = /* @__PURE__ */ new Map();
164
+ for (const [key, value] of hf) out.set(key, resolveBodyStyles(value, sheet));
165
+ return out;
166
+ }
100
167
  //#endregion
101
- export { EMPTY_STYLE_SHEET, resolveParagraphProperties, resolveRunProperties };
168
+ export { EMPTY_STYLE_SHEET, resolveBodyStyles, resolveHeadersFootersStyles, resolveParagraphProperties, resolveRunProperties };
@@ -1,4 +1,4 @@
1
- import { Alignment, FontFamilyMap, UnderlineStyle, VerticalAlign } from '../document-model/index.js';
1
+ import { Alignment, FontFamilyMap, NumberingReference, UnderlineStyle, VerticalAlign } from '../document-model/index.js';
2
2
  import { Pt } from '../ir/index.js';
3
3
  export interface ResolvedRunProperties {
4
4
  readonly bold: boolean;
@@ -25,6 +25,7 @@ export interface ResolvedParagraphProperties {
25
25
  readonly bidi: boolean;
26
26
  readonly outlineLevel?: number;
27
27
  readonly styleId?: string;
28
+ readonly numbering?: NumberingReference;
28
29
  }
29
30
  export declare const DEFAULT_RESOLVED_RUN: ResolvedRunProperties;
30
31
  export declare const DEFAULT_RESOLVED_PARAGRAPH: ResolvedParagraphProperties;
@@ -0,0 +1,45 @@
1
+ export type PathSegment = {
2
+ readonly op: 'move';
3
+ readonly x: number;
4
+ readonly y: number;
5
+ } | {
6
+ readonly op: 'line';
7
+ readonly x: number;
8
+ readonly y: number;
9
+ } | {
10
+ readonly op: 'cubic';
11
+ readonly x1: number;
12
+ readonly y1: number;
13
+ readonly x2: number;
14
+ readonly y2: number;
15
+ readonly x: number;
16
+ readonly y: number;
17
+ } | {
18
+ readonly op: 'close';
19
+ };
20
+ export interface VectorPath {
21
+ readonly segments: ReadonlyArray<PathSegment>;
22
+ readonly fillRule?: 'nonzero' | 'evenodd';
23
+ }
24
+ export interface StrokeStyle {
25
+ readonly colorHex: string;
26
+ readonly widthPt: number;
27
+ readonly cap?: 'butt' | 'round' | 'square';
28
+ readonly join?: 'miter' | 'round' | 'bevel';
29
+ readonly dash?: ReadonlyArray<number>;
30
+ }
31
+ export interface VectorShape {
32
+ readonly paths: ReadonlyArray<VectorPath>;
33
+ readonly fillColorHex?: string;
34
+ readonly stroke?: StrokeStyle;
35
+ readonly transform: readonly [number, number, number, number, number, number];
36
+ }
37
+ export declare class PathBuilder {
38
+ private readonly segments;
39
+ moveTo(x: number, y: number): this;
40
+ lineTo(x: number, y: number): this;
41
+ cubicTo(x1: number, y1: number, x2: number, y2: number, x: number, y: number): this;
42
+ append(segments: ReadonlyArray<PathSegment>): this;
43
+ close(): this;
44
+ build(fillRule?: 'nonzero' | 'evenodd'): VectorPath;
45
+ }
@@ -0,0 +1,48 @@
1
+ //#region src/core/vector.ts
2
+ var PathBuilder = class {
3
+ segments = [];
4
+ moveTo(x, y) {
5
+ this.segments.push({
6
+ op: "move",
7
+ x,
8
+ y
9
+ });
10
+ return this;
11
+ }
12
+ lineTo(x, y) {
13
+ this.segments.push({
14
+ op: "line",
15
+ x,
16
+ y
17
+ });
18
+ return this;
19
+ }
20
+ cubicTo(x1, y1, x2, y2, x, y) {
21
+ this.segments.push({
22
+ op: "cubic",
23
+ x1,
24
+ y1,
25
+ x2,
26
+ y2,
27
+ x,
28
+ y
29
+ });
30
+ return this;
31
+ }
32
+ append(segments) {
33
+ for (const s of segments) this.segments.push(s);
34
+ return this;
35
+ }
36
+ close() {
37
+ this.segments.push({ op: "close" });
38
+ return this;
39
+ }
40
+ build(fillRule) {
41
+ return {
42
+ segments: this.segments.slice(),
43
+ ...fillRule ? { fillRule } : {}
44
+ };
45
+ }
46
+ };
47
+ //#endregion
48
+ export { PathBuilder };
@@ -1,6 +1,6 @@
1
1
  import { ResourceStore } from "../core/ir/resources.js";
2
2
  import { FEATURES } from "../core/ir/features.js";
3
- import { EMPTY_STYLE_SHEET } from "../core/style-cascade/resolver.js";
3
+ import { EMPTY_STYLE_SHEET, resolveBodyStyles } from "../core/style-cascade/resolver.js";
4
4
  import "../core/style-cascade/index.js";
5
5
  import { bytesInclude } from "../core/bytes.js";
6
6
  import { OpcPackage } from "../core/opc/package.js";
@@ -59,7 +59,7 @@ function readXlsx(xlsx) {
59
59
  return {
60
60
  doc: {
61
61
  kind: "flow",
62
- body,
62
+ body: resolveBodyStyles(body, EMPTY_STYLE_SHEET),
63
63
  sections: [],
64
64
  ...firstSheetSection ? { section: firstSheetSection } : {},
65
65
  styles: EMPTY_STYLE_SHEET,
@@ -18,10 +18,10 @@ export { Ream } from './core/converter/ream.js';
18
18
  export type { ReamConvertOptions, ReamParseOptions, ReamTarget } from './core/converter/ream.js';
19
19
  export { createConverter } from './core/converter/facade.js';
20
20
  export type { Converter, ConvertOptions, ConvertResult, CreateConverterOptions, } from './core/converter/facade.js';
21
- export type { PageItem, PageItemBase, TextLineItem, BorderItem, FillItem, ImageItem, ShapeItem, LaidOutPage, } from './pdf/styled-page-renderer.js';
21
+ export type { PageItem, PageItemBase, TextLineItem, BorderItem, FillItem, ImageItem, ShapeItem, LaidOutPage, } from './layout/page-doc.js';
22
22
  export { chainProviders, callerFontProvider, embeddedDocFontProvider, remoteFontProvider, localFontProvider, readOs2FsType, isEmbeddingRestricted, NO_FONT, } from './core/fonts/provider.js';
23
23
  export type { FontProvider, FontRequest, FontAnswer } from './core/fonts/provider.js';
24
24
  export { svgWriter, writeSvg } from './svg/svg-writer.js';
25
25
  export type { SvgWriteOptions } from './svg/svg-writer.js';
26
- export { layoutStyledDocument } from './pdf/styled-page-renderer.js';
27
- export type { LaidOutDocument } from './pdf/styled-page-renderer.js';
26
+ export { layoutStyledDocument } from './layout/styled-layout.js';
27
+ export type { LaidOutDocument } from './layout/page-doc.js';
package/dist/esm/index.js CHANGED
@@ -6,8 +6,9 @@ import { eighthPtToPt, emuToPt, halfPtToPt, inchToPt, mmToPt, pt, pxToPt, twipsT
6
6
  import { ResourceStore } from "./core/ir/resources.js";
7
7
  import { FEATURES } from "./core/ir/features.js";
8
8
  import { ConversionLossError, formatLoss } from "./core/ir/loss.js";
9
+ import { layoutStyledDocument } from "./layout/styled-layout.js";
9
10
  import { signPdf } from "./pdf/signature.js";
10
- import { layoutStyledDocument, renderStyledPdf } from "./pdf/styled-page-renderer.js";
11
+ import { renderStyledPdf } from "./pdf/styled-page-renderer.js";
11
12
  import "./pdf/index.js";
12
13
  import { createHyphenator, splitPatternBundle } from "./core/hyphenation/liang.js";
13
14
  import { createLanguageHyphenator, getHyphenator } from "./core/hyphenation/index.js";
@@ -1,4 +1,4 @@
1
- import { PathSegment } from './vector-graphics.js';
1
+ import { PathSegment } from '../core/vector.js';
2
2
  export declare function arcPoint(cx: number, cy: number, rx: number, ry: number, angleRad: number): readonly [number, number];
3
3
  export declare function arcToBeziers(cx: number, cy: number, rx: number, ry: number, startAngleRad: number, sweepAngleRad: number): Array<PathSegment>;
4
4
  export declare function ellipseSegments(w: number, h: number): ReadonlyArray<PathSegment>;
@@ -1,5 +1,5 @@
1
- import { PathBuilder } from "./vector-graphics.js";
2
- //#region src/pdf/arc-to-bezier.ts
1
+ import { PathBuilder } from "../core/vector.js";
2
+ //#region src/layout/arc-to-bezier.ts
3
3
  function arcPoint(cx, cy, rx, ry, angleRad) {
4
4
  return [cx + rx * Math.cos(angleRad), cy + ry * Math.sin(angleRad)];
5
5
  }
@@ -1,5 +1,5 @@
1
1
  import { MathNode } from '../core/document-model/index.js';
2
- import { PathSegment } from './vector-graphics.js';
2
+ import { PathSegment } from '../core/vector.js';
3
3
  export type MathVariant = 'regular' | 'italic' | 'bold' | 'boldItalic';
4
4
  export interface MathGlyphItem {
5
5
  readonly kind: 'glyph';
@@ -1,4 +1,4 @@
1
- //#region src/pdf/math-layout.ts
1
+ //#region src/layout/math-layout.ts
2
2
  var ASCENT = .72;
3
3
  var DESCENT = .2;
4
4
  var AXIS = .26;
@@ -0,0 +1,133 @@
1
+ import { Pt, ResourceId, ResourceStore } from '../core/ir/index.js';
2
+ import { FontMeasure, ParsedTtf } from '../core/font/index.js';
3
+ import { ResolvedParagraphProperties, ResolvedRunProperties } from '../core/style-cascade/index.js';
4
+ import { PathSegment, VectorShape } from '../core/vector.js';
5
+ import { PreparedImage } from '../core/images.js';
6
+ export interface FontResource {
7
+ readonly resourceName: string;
8
+ readonly parsed: ParsedTtf;
9
+ readonly measure: FontMeasure;
10
+ readonly gids: ReadonlySet<number>;
11
+ }
12
+ export interface TextToken {
13
+ readonly kind: 'text';
14
+ readonly text: string;
15
+ readonly isSpace: boolean;
16
+ readonly resolvedRun: ResolvedRunProperties;
17
+ readonly font: FontResource;
18
+ readonly fontSizePt: number;
19
+ readonly widthPt: number;
20
+ readonly bidiLevel: number;
21
+ }
22
+ export interface ImageToken {
23
+ readonly kind: 'image';
24
+ readonly imageResourceName: string;
25
+ readonly widthPt: number;
26
+ readonly heightPt: number;
27
+ readonly isSpace: false;
28
+ readonly bidiLevel: number;
29
+ }
30
+ export type ResolvedMathItem = {
31
+ readonly kind: 'glyph';
32
+ readonly x: number;
33
+ readonly y: number;
34
+ readonly text: string;
35
+ readonly font: FontResource;
36
+ readonly sizePt: number;
37
+ } | {
38
+ readonly kind: 'rule';
39
+ readonly x: number;
40
+ readonly y: number;
41
+ readonly w: number;
42
+ readonly h: number;
43
+ } | {
44
+ readonly kind: 'path';
45
+ readonly segments: ReadonlyArray<PathSegment>;
46
+ readonly strokeWidthPt?: number;
47
+ readonly fill?: boolean;
48
+ };
49
+ export interface MathToken {
50
+ readonly kind: 'math';
51
+ readonly items: ReadonlyArray<ResolvedMathItem>;
52
+ readonly widthPt: number;
53
+ readonly ascentPt: number;
54
+ readonly descentPt: number;
55
+ readonly isSpace: false;
56
+ readonly bidiLevel: number;
57
+ }
58
+ export type Token = TextToken | ImageToken | MathToken;
59
+ export interface Line {
60
+ readonly tokens: ReadonlyArray<Token>;
61
+ readonly contentWidthPt: number;
62
+ readonly maxFontSizePt: number;
63
+ readonly availableWidthPt: number;
64
+ readonly firstLine: boolean;
65
+ readonly resolved: ResolvedParagraphProperties;
66
+ isLastInParagraph: boolean;
67
+ readonly mathAscentPt?: number;
68
+ readonly mathDescentPt?: number;
69
+ }
70
+ export interface ImageResource {
71
+ readonly resourceName: string;
72
+ readonly prepared: PreparedImage;
73
+ }
74
+ export interface PageItemBase {
75
+ readonly structId?: number;
76
+ readonly artifact?: 'pagination';
77
+ }
78
+ export interface TextLineItem extends PageItemBase {
79
+ readonly type: 'line';
80
+ readonly line: Line;
81
+ readonly originX: Pt;
82
+ readonly baselineY: Pt;
83
+ }
84
+ export interface BorderItem extends PageItemBase {
85
+ readonly type: 'border';
86
+ readonly side: 'top' | 'right' | 'bottom' | 'left';
87
+ readonly x: Pt;
88
+ readonly y: Pt;
89
+ readonly width: Pt;
90
+ readonly height: Pt;
91
+ readonly borderSizePt: number;
92
+ readonly borderColorHex: string;
93
+ }
94
+ export interface FillItem extends PageItemBase {
95
+ readonly type: 'fill';
96
+ readonly x: Pt;
97
+ readonly y: Pt;
98
+ readonly width: Pt;
99
+ readonly height: Pt;
100
+ readonly fillColorHex: string;
101
+ }
102
+ export interface ImageItem extends PageItemBase {
103
+ readonly type: 'image';
104
+ readonly x: Pt;
105
+ readonly y: Pt;
106
+ readonly width: Pt;
107
+ readonly height: Pt;
108
+ readonly imageResourceName: string;
109
+ }
110
+ export interface ShapeItem extends PageItemBase {
111
+ readonly type: 'shape';
112
+ readonly shape: VectorShape;
113
+ }
114
+ export type PageItem = TextLineItem | BorderItem | FillItem | ImageItem | ShapeItem;
115
+ export interface PagePaintPlan {
116
+ readonly fills: ReadonlyArray<FillItem>;
117
+ readonly images: ReadonlyArray<ImageItem>;
118
+ readonly borders: ReadonlyArray<BorderItem>;
119
+ readonly shapes: ReadonlyArray<ShapeItem>;
120
+ readonly lines: ReadonlyArray<TextLineItem>;
121
+ }
122
+ export declare function paintPlan(commands: ReadonlyArray<PageItem>): PagePaintPlan;
123
+ export interface LaidOutDocument {
124
+ readonly pages: ReadonlyArray<LaidOutPage>;
125
+ readonly resources: ResourceStore;
126
+ readonly fontResources: Map<string, FontResource>;
127
+ readonly imageResources: Map<ResourceId, ImageResource>;
128
+ }
129
+ export interface LaidOutPage {
130
+ readonly commands: Array<PageItem>;
131
+ readonly width: Pt;
132
+ readonly height: Pt;
133
+ }
@@ -0,0 +1,38 @@
1
+ //#region src/layout/page-doc.ts
2
+ function paintPlan(commands) {
3
+ const fills = [];
4
+ const images = [];
5
+ const borders = [];
6
+ const shapes = [];
7
+ const lines = [];
8
+ for (const c of commands) switch (c.type) {
9
+ case "fill":
10
+ fills.push(c);
11
+ break;
12
+ case "image":
13
+ images.push(c);
14
+ break;
15
+ case "border":
16
+ borders.push(c);
17
+ break;
18
+ case "shape":
19
+ shapes.push(c);
20
+ break;
21
+ case "line":
22
+ lines.push(c);
23
+ break;
24
+ default: assertNeverPageItem(c);
25
+ }
26
+ return {
27
+ fills,
28
+ images,
29
+ borders,
30
+ shapes,
31
+ lines
32
+ };
33
+ }
34
+ function assertNeverPageItem(item) {
35
+ throw new Error(`Unhandled PageItem kind: ${String(item.type)}`);
36
+ }
37
+ //#endregion
38
+ export { paintPlan };
@@ -1,5 +1,5 @@
1
1
  import { CustomGeometry } from '../core/document-model/index.js';
2
- import { PathSegment, VectorPath } from './vector-graphics.js';
2
+ import { PathSegment, VectorPath } from '../core/vector.js';
3
3
  export declare function rectSegments(w: number, h: number): ReadonlyArray<PathSegment>;
4
4
  export declare function rectPath(w: number, h: number): VectorPath;
5
5
  export declare function presetPaths(preset: string, w: number, h: number, adjust: ReadonlyMap<string, number>): Array<VectorPath> | null;
@@ -1,6 +1,6 @@
1
- import { PathBuilder } from "./vector-graphics.js";
1
+ import { PathBuilder } from "../core/vector.js";
2
2
  import { arcToBeziers, ellipseSegments, roundRectSegments } from "./arc-to-bezier.js";
3
- //#region src/pdf/preset-geometry.ts
3
+ //#region src/layout/preset-geometry.ts
4
4
  function rectSegments(w, h) {
5
5
  return new PathBuilder().moveTo(0, 0).lineTo(w, 0).lineTo(w, h).lineTo(0, h).close().build().segments;
6
6
  }
@@ -0,0 +1,84 @@
1
+ import { BodyElement, Chart, DocumentInfo, Numbering, Section, SectionProperties, StyleSheet } from '../core/document-model/index.js';
2
+ import { FontRegistry } from '../core/font/index.js';
3
+ import { FamilyKey } from '../core/fonts/index.js';
4
+ import { Hyphenator } from '../core/hyphenation/index.js';
5
+ import { LaidOutDocument, PageItem } from './page-doc.js';
6
+ import { AttachedFile } from '../pdf/embedded-file.js';
7
+ import { SignaturePlaceholder } from '../pdf/signature.js';
8
+ import { ResourceStore } from '../core/ir/index.js';
9
+ import { StructTreeBuilder } from '../pdf/struct-tree.js';
10
+ export type PdfALevel = 'PDF/A-1b' | 'PDF/A-1a' | 'PDF/A-2b' | 'PDF/A-2u' | 'PDF/A-2a' | 'PDF/A-3b' | 'PDF/A-3u' | 'PDF/A-3a';
11
+ export interface PdfAProfile {
12
+ readonly part: 1 | 2 | 3;
13
+ readonly level: 'a' | 'b' | 'u';
14
+ readonly tagged: boolean;
15
+ readonly version: '1.4' | '1.7';
16
+ }
17
+ export interface StyledRenderOptions {
18
+ readonly registry: FontRegistry;
19
+ readonly registriesByFamily?: ReadonlyMap<FamilyKey, FontRegistry>;
20
+ readonly embeddedFonts?: ReadonlyMap<string, FontRegistry>;
21
+ readonly styles: StyleSheet;
22
+ readonly numbering?: Numbering;
23
+ readonly section?: SectionProperties;
24
+ readonly sections?: ReadonlyArray<Section>;
25
+ readonly headersFooters?: ReadonlyMap<string, ReadonlyArray<BodyElement>>;
26
+ readonly resources?: ResourceStore;
27
+ readonly charts?: ReadonlyMap<string, Chart>;
28
+ readonly pageWidth?: number;
29
+ readonly pageHeight?: number;
30
+ readonly marginLeft?: number;
31
+ readonly marginRight?: number;
32
+ readonly marginTop?: number;
33
+ readonly marginBottom?: number;
34
+ readonly hyphenator?: Hyphenator;
35
+ readonly info?: DocumentInfo;
36
+ readonly pdfA?: PdfALevel;
37
+ readonly tagged?: boolean;
38
+ readonly language?: string;
39
+ readonly attachments?: ReadonlyArray<AttachedFile>;
40
+ readonly signaturePlaceholder?: SignaturePlaceholder;
41
+ }
42
+ export type { DocumentInfo } from '../core/document-model/index.js';
43
+ export declare const A4_WIDTH = 595;
44
+ export declare const A4_HEIGHT = 842;
45
+ export interface PdfLayoutAux {
46
+ readonly structBuilder: StructTreeBuilder | undefined;
47
+ readonly sectionCtxs: ReadonlyArray<SectionRenderCtx>;
48
+ readonly pdfaProfile: PdfAProfile | undefined;
49
+ readonly tagged: boolean;
50
+ }
51
+ export interface LaidOutPdfDocument extends LaidOutDocument {
52
+ readonly pdf: PdfLayoutAux;
53
+ }
54
+ export declare function layoutStyledDocument(body: ReadonlyArray<BodyElement>, options: StyledRenderOptions): LaidOutPdfDocument;
55
+ export interface PageDimensions {
56
+ readonly pageWidth: number;
57
+ readonly pageHeight: number;
58
+ readonly marginLeft: number;
59
+ readonly marginRight: number;
60
+ readonly marginTop: number;
61
+ readonly marginBottom: number;
62
+ readonly headerOffsetPt: number;
63
+ readonly footerOffsetPt: number;
64
+ }
65
+ export interface SectionRenderCtx {
66
+ readonly endIndex: number;
67
+ readonly properties: SectionProperties;
68
+ readonly pageWidth: number;
69
+ readonly pageHeight: number;
70
+ readonly marginLeft: number;
71
+ readonly marginTop: number;
72
+ readonly marginBottom: number;
73
+ readonly contentWidth: number;
74
+ readonly pageContentHeight: number;
75
+ readonly headerSet: HeaderFooterSet;
76
+ readonly footerSet: HeaderFooterSet;
77
+ readonly titlePg: boolean;
78
+ readonly evenAndOddHeaders: boolean;
79
+ }
80
+ interface HeaderFooterSet {
81
+ readonly default: Array<PageItem>;
82
+ readonly first: Array<PageItem>;
83
+ readonly even: Array<PageItem>;
84
+ }