@documonster/mcp 0.14.0 → 0.15.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.
- package/dist/sandbox.d.ts +16 -3
- package/dist/sandbox.d.ts.map +1 -1
- package/dist/sandbox.js +79 -9
- package/dist/sandbox.js.map +1 -1
- package/dist/tools/diagram-markdown.d.ts +34 -2
- package/dist/tools/diagram-markdown.d.ts.map +1 -1
- package/dist/tools/diagram-markdown.js +219 -30
- package/dist/tools/diagram-markdown.js.map +1 -1
- package/dist/tools/diagram-slice.d.ts +45 -0
- package/dist/tools/diagram-slice.d.ts.map +1 -0
- package/dist/tools/diagram-slice.js +225 -0
- package/dist/tools/diagram-slice.js.map +1 -0
- package/dist/tools/diagram.js +1 -1
- package/dist/tools/doc-convert.js +1 -1
- package/dist/tools/doc-convert.js.map +1 -1
- package/dist/tools/doc-write.js +1 -1
- package/dist/tools/doc-write.js.map +1 -1
- package/package.json +5 -5
package/dist/sandbox.d.ts
CHANGED
|
@@ -29,9 +29,9 @@ export interface ResolveOptions {
|
|
|
29
29
|
* Turn a model-supplied path into an absolute path guaranteed to sit inside
|
|
30
30
|
* `config.root`.
|
|
31
31
|
*
|
|
32
|
-
* @throws {McpToolError} `invalid_input` for a URL
|
|
33
|
-
* `not_found` when `mustExist` is set and
|
|
34
|
-
* `outside_root` for anything that escapes the sandbox.
|
|
32
|
+
* @throws {McpToolError} `invalid_input` for a URL, an empty string, a NUL byte
|
|
33
|
+
* or a reserved Windows device name, `not_found` when `mustExist` is set and
|
|
34
|
+
* it is not there, and `outside_root` for anything that escapes the sandbox.
|
|
35
35
|
*/
|
|
36
36
|
export declare function resolveInRoot(config: ServerConfig, userPath: string, options?: ResolveOptions): Promise<string>;
|
|
37
37
|
/**
|
|
@@ -46,6 +46,19 @@ export declare function resolveWriteTarget(config: ServerConfig, userPath: strin
|
|
|
46
46
|
}): Promise<WriteTarget>;
|
|
47
47
|
/** Resolve a write destination inside the disjoint output root. */
|
|
48
48
|
export declare function resolveOutputPath(config: ServerConfig, userPath: string): Promise<string>;
|
|
49
|
+
/**
|
|
50
|
+
* The first path segment that names a Win32 device, or undefined.
|
|
51
|
+
*
|
|
52
|
+
* Exported for tests: the guard above only fires on Windows, so this is the
|
|
53
|
+
* only way to assert the matching rules on any host.
|
|
54
|
+
*
|
|
55
|
+
* A segment is cut at its first `.` or `:` before matching, because Windows
|
|
56
|
+
* resolves both `NUL.txt` and `NUL:stream` to the device — the extension and
|
|
57
|
+
* the stream suffix are not part of the name it looks up. Surrounding blanks go
|
|
58
|
+
* too, since the parser ignores them. `NULL` and `CONSOLE` survive all of that
|
|
59
|
+
* and stay ordinary files.
|
|
60
|
+
*/
|
|
61
|
+
export declare function reservedDeviceSegment(userPath: string): string | undefined;
|
|
49
62
|
/** Public display spelling for a path under the output root. */
|
|
50
63
|
export declare function outputDisplay(userPath: string): string;
|
|
51
64
|
export interface WriteTarget {
|
package/dist/sandbox.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA8BhD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3C,OAAO,CAAC,WAAW,CAAC,CA2BtB;AAED,mEAAmE;AACnE,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB/F;AA0DD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQ1E;AAeD,gEAAgE;AAChE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,WAAW,CAAC,CAQtB;AAYD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAOzD;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAW/D"}
|
package/dist/sandbox.js
CHANGED
|
@@ -24,21 +24,36 @@ import { toolError } from "./errors.js";
|
|
|
24
24
|
const MAX_SYMLINK_DEPTH = 32;
|
|
25
25
|
/** Matches a URL scheme (`http:`, `file:`) without matching a Windows drive letter (`C:`). */
|
|
26
26
|
const URL_SCHEME_RE = /^[a-zA-Z][a-zA-Z0-9+.-]+:/;
|
|
27
|
+
/**
|
|
28
|
+
* Win32 device names, reserved in *every* directory rather than living in one
|
|
29
|
+
* place on disk.
|
|
30
|
+
*
|
|
31
|
+
* The set is Microsoft's, not a guess
|
|
32
|
+
* ({@link https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file | Naming a File}),
|
|
33
|
+
* and two entries in it surprise people:
|
|
34
|
+
*
|
|
35
|
+
* - The ISO 8859-1 superscripts `¹²³` are treated as digits by the Win32 path
|
|
36
|
+
* parser, so `COM¹` is the same device as `COM1`. They have no case, so
|
|
37
|
+
* upper-casing before the test leaves them alone.
|
|
38
|
+
* - `CONIN$`/`CONOUT$` are the console's input and output handles. They are
|
|
39
|
+
* absent from the "do not use" list but `CreateFile` opens them, which is all
|
|
40
|
+
* that matters here.
|
|
41
|
+
*
|
|
42
|
+
* `COM0`/`LPT0` are deliberately *not* included: no such device exists, so a
|
|
43
|
+
* file of that name is an ordinary file and refusing it would be a false
|
|
44
|
+
* positive on every platform.
|
|
45
|
+
*/
|
|
46
|
+
const WINDOWS_RESERVED_DEVICE_RE = /^(?:CON|PRN|AUX|NUL|CONIN\$|CONOUT\$|COM[1-9¹²³]|LPT[1-9¹²³])$/;
|
|
27
47
|
/**
|
|
28
48
|
* Turn a model-supplied path into an absolute path guaranteed to sit inside
|
|
29
49
|
* `config.root`.
|
|
30
50
|
*
|
|
31
|
-
* @throws {McpToolError} `invalid_input` for a URL
|
|
32
|
-
* `not_found` when `mustExist` is set and
|
|
33
|
-
* `outside_root` for anything that escapes the sandbox.
|
|
51
|
+
* @throws {McpToolError} `invalid_input` for a URL, an empty string, a NUL byte
|
|
52
|
+
* or a reserved Windows device name, `not_found` when `mustExist` is set and
|
|
53
|
+
* it is not there, and `outside_root` for anything that escapes the sandbox.
|
|
34
54
|
*/
|
|
35
55
|
export async function resolveInRoot(config, userPath, options = {}) {
|
|
36
|
-
|
|
37
|
-
throw toolError.invalidInput("path must be a non-empty string");
|
|
38
|
-
}
|
|
39
|
-
if (URL_SCHEME_RE.test(userPath)) {
|
|
40
|
-
throw toolError.invalidInput(`path must be a local path inside the sandbox, not a URL: ${userPath}`, "Use a path relative to the server root. This server reads local files only.");
|
|
41
|
-
}
|
|
56
|
+
assertUsablePath(userPath);
|
|
42
57
|
const outputRelative = outputPathPart(userPath);
|
|
43
58
|
const base = outputRelative === undefined ? config.root : config.outputRoot;
|
|
44
59
|
const relative = outputRelative ?? userPath;
|
|
@@ -87,6 +102,7 @@ export async function resolveWriteTarget(config, userPath, options = {}) {
|
|
|
87
102
|
}
|
|
88
103
|
/** Resolve a write destination inside the disjoint output root. */
|
|
89
104
|
export async function resolveOutputPath(config, userPath) {
|
|
105
|
+
assertUsablePath(userPath);
|
|
90
106
|
const relative = outputPathPart(userPath) ?? userPath;
|
|
91
107
|
if (path.isAbsolute(relative)) {
|
|
92
108
|
throw toolError.invalidInput(`output path must be relative: ${userPath}`, "Write paths are relative to --output-root and are returned as @output/<path>.");
|
|
@@ -107,6 +123,60 @@ async function resolveInputSidecar(config, userPath) {
|
|
|
107
123
|
}
|
|
108
124
|
return resolved;
|
|
109
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Reject a path string that cannot safely name a file, before it is resolved.
|
|
128
|
+
*
|
|
129
|
+
* Separate from containment because these are properties of the *string*, and
|
|
130
|
+
* two of them are invisible to a containment check:
|
|
131
|
+
*
|
|
132
|
+
* - A NUL byte. Node throws on it deep inside `fs`, which surfaced to the model
|
|
133
|
+
* as an unclassified `internal` error carrying a raw library message. It is an
|
|
134
|
+
* invalid argument, and saying so is what lets the model correct itself.
|
|
135
|
+
* - A Win32 device name. `NUL`, `CON`, `COM1` are reserved in every directory,
|
|
136
|
+
* so `<root>/CON` passes containment yet opens the *console* rather than a
|
|
137
|
+
* file — and this server's console is the stdio transport it speaks JSON-RPC
|
|
138
|
+
* over. Reading it would wedge the process. Refused on Windows only, because
|
|
139
|
+
* on POSIX a file called `NUL` is an ordinary file and rejecting it would be
|
|
140
|
+
* a false positive.
|
|
141
|
+
*/
|
|
142
|
+
function assertUsablePath(userPath) {
|
|
143
|
+
if (typeof userPath !== "string" || userPath.trim().length === 0) {
|
|
144
|
+
throw toolError.invalidInput("path must be a non-empty string");
|
|
145
|
+
}
|
|
146
|
+
if (userPath.includes("\u0000")) {
|
|
147
|
+
throw toolError.invalidInput("path must not contain a NUL byte", "Pass the plain file name. A NUL byte cannot appear in a filesystem path.");
|
|
148
|
+
}
|
|
149
|
+
if (URL_SCHEME_RE.test(userPath)) {
|
|
150
|
+
throw toolError.invalidInput(`path must be a local path inside the sandbox, not a URL: ${userPath}`, "Use a path relative to the server root. This server reads local files only.");
|
|
151
|
+
}
|
|
152
|
+
if (process.platform === "win32") {
|
|
153
|
+
const reserved = reservedDeviceSegment(userPath);
|
|
154
|
+
if (reserved !== undefined) {
|
|
155
|
+
throw toolError.invalidInput(`path names a reserved Windows device: ${reserved}`, "Rename the file. CON, PRN, AUX, NUL, COM<n> and LPT<n> address hardware on Windows, not files on disk.");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The first path segment that names a Win32 device, or undefined.
|
|
161
|
+
*
|
|
162
|
+
* Exported for tests: the guard above only fires on Windows, so this is the
|
|
163
|
+
* only way to assert the matching rules on any host.
|
|
164
|
+
*
|
|
165
|
+
* A segment is cut at its first `.` or `:` before matching, because Windows
|
|
166
|
+
* resolves both `NUL.txt` and `NUL:stream` to the device — the extension and
|
|
167
|
+
* the stream suffix are not part of the name it looks up. Surrounding blanks go
|
|
168
|
+
* too, since the parser ignores them. `NULL` and `CONSOLE` survive all of that
|
|
169
|
+
* and stay ordinary files.
|
|
170
|
+
*/
|
|
171
|
+
export function reservedDeviceSegment(userPath) {
|
|
172
|
+
for (const segment of userPath.split(/[/\\]/)) {
|
|
173
|
+
const stem = (segment.split(/[.:]/)[0] ?? "").trim();
|
|
174
|
+
if (WINDOWS_RESERVED_DEVICE_RE.test(stem.toUpperCase())) {
|
|
175
|
+
return segment;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
110
180
|
/** Return the path after the virtual @output/ prefix, or undefined for input. */
|
|
111
181
|
function outputPathPart(userPath) {
|
|
112
182
|
const normalised = userPath.replace(/\\/g, "/");
|
package/dist/sandbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,+DAA+D;AAC/D,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAE7B,8FAA8F;AAC9F,MAAM,aAAa,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,19 @@
|
|
|
18
18
|
* edge of the paper. Fitting to the text width is the difference between a
|
|
19
19
|
* document and a broken one.
|
|
20
20
|
*/
|
|
21
|
+
import { type DrawList } from "documonster/draw";
|
|
22
|
+
import type { MermaidRenderOptions } from "documonster/mermaid";
|
|
21
23
|
import type { MarkdownImportOptions } from "documonster/word/markdown";
|
|
22
24
|
import { type DiagramStyleArgs } from "./diagram.js";
|
|
25
|
+
/**
|
|
26
|
+
* Tallest a single embedded piece may be, in points: the page less its margins, less a little.
|
|
27
|
+
*
|
|
28
|
+
* The slack is not decoration. An image exactly as tall as the text area cannot share a page
|
|
29
|
+
* with *anything* — not even the heading it belongs to — so Word pushes it alone onto the next
|
|
30
|
+
* page and leaves the heading stranded at the bottom of the previous one, which is how a
|
|
31
|
+
* document grew a near-empty page before every large diagram.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MAX_EMBED_HEIGHT_POINTS = 550;
|
|
23
34
|
export interface PreparedMarkdown {
|
|
24
35
|
/** The Markdown with every mermaid fence replaced by an image reference. */
|
|
25
36
|
readonly markdown: string;
|
|
@@ -28,11 +39,32 @@ export interface PreparedMarkdown {
|
|
|
28
39
|
* fence was rendered, so the no-diagram path behaves exactly as before.
|
|
29
40
|
*/
|
|
30
41
|
readonly resolveImage?: MarkdownImportOptions["resolveImage"];
|
|
31
|
-
/** How many diagrams were rendered. */
|
|
32
|
-
readonly count: number;
|
|
33
42
|
/** Lines worth reporting to the caller. */
|
|
34
43
|
readonly notes: readonly string[];
|
|
35
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* The narrowest layout of a diagram that the text column can show legibly.
|
|
47
|
+
*
|
|
48
|
+
* Walks {@link FIT_LADDER} and stops at the first rung whose text clears
|
|
49
|
+
* {@link MIN_EMBED_FONT_POINTS} — first, not best, because the ladder is ordered by what each
|
|
50
|
+
* concession costs a reader, so the earliest rung that works is the least damage. Height is
|
|
51
|
+
* not a constraint here: a diagram taller than a page is cut across pages instead of being
|
|
52
|
+
* shrunk back into one, which would give away the legibility the narrowing just bought.
|
|
53
|
+
*
|
|
54
|
+
* If no rung clears the bar — a rank with nine nodes in it is wide however hard the labels
|
|
55
|
+
* wrap — the narrowest attempt is used and the caller is told, because a diagram nobody can
|
|
56
|
+
* read is worth a line of output rather than silence.
|
|
57
|
+
*
|
|
58
|
+
* A caller who set any of the layout numbers themselves is left alone: they have said what the
|
|
59
|
+
* layout should be, and second-guessing an explicit argument is worse than a small image.
|
|
60
|
+
*/
|
|
61
|
+
export declare function fitToColumn(source: string, options: MermaidRenderOptions & {
|
|
62
|
+
readonly background: string;
|
|
63
|
+
}, tune: boolean): {
|
|
64
|
+
list: DrawList;
|
|
65
|
+
fit: number;
|
|
66
|
+
short: boolean;
|
|
67
|
+
};
|
|
36
68
|
/**
|
|
37
69
|
* Render every mermaid fence in `markdown` and rewrite it as an inline image.
|
|
38
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-markdown.d.ts","sourceRoot":"","sources":["../../src/tools/diagram-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"diagram-markdown.d.ts","sourceRoot":"","sources":["../../src/tools/diagram-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAA8B,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAI1F,OAAO,EAML,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAC;AAWtB;;;;;;;GAOG;AAIH,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAyE3C,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,qBAAqB,CAAC,cAAc,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,oBAAoB,GAAG;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC/D,IAAI,EAAE,OAAO,GACZ;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAwBjD;AAKD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,gBAAqB,GAC3B,OAAO,CAAC,gBAAgB,CAAC,CAqJ3B"}
|
|
@@ -18,8 +18,11 @@
|
|
|
18
18
|
* edge of the paper. Fitting to the text width is the difference between a
|
|
19
19
|
* document and a broken one.
|
|
20
20
|
*/
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
21
|
+
import { encodePng } from "documonster/archive";
|
|
22
|
+
import { rasterizeToRgba, translate } from "documonster/draw";
|
|
23
|
+
import { McpToolError, toolError } from "../errors.js";
|
|
24
|
+
import { planSlices } from "./diagram-slice.js";
|
|
25
|
+
import { EMU_PER_POINT, buildDrawList, findMermaidFences, parseDiagram, toRenderOptions } from "./diagram.js";
|
|
23
26
|
import { newImageBudget } from "./image.js";
|
|
24
27
|
/**
|
|
25
28
|
* Widest an embedded diagram may be, in points.
|
|
@@ -28,8 +31,74 @@ import { newImageBudget } from "./image.js";
|
|
|
28
31
|
* of text column. A wider image is not clipped by Word, it overflows the page.
|
|
29
32
|
*/
|
|
30
33
|
const MAX_EMBED_WIDTH_POINTS = 468;
|
|
31
|
-
/**
|
|
32
|
-
|
|
34
|
+
/**
|
|
35
|
+
* Tallest a single embedded piece may be, in points: the page less its margins, less a little.
|
|
36
|
+
*
|
|
37
|
+
* The slack is not decoration. An image exactly as tall as the text area cannot share a page
|
|
38
|
+
* with *anything* — not even the heading it belongs to — so Word pushes it alone onto the next
|
|
39
|
+
* page and leaves the heading stranded at the bottom of the previous one, which is how a
|
|
40
|
+
* document grew a near-empty page before every large diagram.
|
|
41
|
+
*/
|
|
42
|
+
// Leaves room on the first slice's page for an H2 heading and the image
|
|
43
|
+
// paragraph's own spacing. At 600pt both individually fit a 648pt text area,
|
|
44
|
+
// but not together, which stranded the heading on the preceding page.
|
|
45
|
+
export const MAX_EMBED_HEIGHT_POINTS = 550;
|
|
46
|
+
/**
|
|
47
|
+
* Smallest body text an embedded diagram may end up with on the page, in points.
|
|
48
|
+
*
|
|
49
|
+
* Scaling a diagram to the column is necessary but not sufficient, and treating it as
|
|
50
|
+
* sufficient is what made these documents unreadable: a 1941-point flowchart fitted to a
|
|
51
|
+
* 468-point column is drawn at 24%, so its 14-point labels arrive at 3.4pt — present in the
|
|
52
|
+
* file, legible to nobody. Eleven of sixteen diagrams in one real document came out under
|
|
53
|
+
* 8pt, and the two worst were the ones a reader complained about.
|
|
54
|
+
*
|
|
55
|
+
* 8pt is the floor because it is roughly the smallest footnote a printed page uses.
|
|
56
|
+
*/
|
|
57
|
+
const MIN_EMBED_FONT_POINTS = 8;
|
|
58
|
+
/**
|
|
59
|
+
* Successively tighter layouts to try when a diagram will not fit the column legibly.
|
|
60
|
+
*
|
|
61
|
+
* Scaling is the wrong lever and there is only one right one: make the diagram *intrinsically*
|
|
62
|
+
* narrower and let it grow downwards, where a page is free to continue onto the next one.
|
|
63
|
+
*
|
|
64
|
+
* **Ordered by what it costs the reader, not by how much width it saves.** That ordering is
|
|
65
|
+
* the whole design, and having it wrong produced a diagram nobody wanted to look at: the gaps
|
|
66
|
+
* cost nothing at all to tighten, an edge label is loose text in the space between ranks and
|
|
67
|
+
* reads perfectly well over three short lines, but a node's text is the thing its box is drawn
|
|
68
|
+
* around. One number governed all three, so narrowing a chart to fit wrapped a ten-word node
|
|
69
|
+
* label at seventy points — a column two words wide and ten lines deep, in a diagram that was
|
|
70
|
+
* then nine inches tall and mostly empty box. The same chart, with only its edge labels
|
|
71
|
+
* narrowed, is 6.5 × 5.4 inches with every node on four readable lines.
|
|
72
|
+
*
|
|
73
|
+
* Note what does *not* work, since it looks like it should: rendering with a smaller
|
|
74
|
+
* `fontSize`. The whole diagram shrinks with it, so the fit rises by exactly the factor the
|
|
75
|
+
* text falls and the size on the page is unchanged.
|
|
76
|
+
*/
|
|
77
|
+
const FIT_LADDER = [
|
|
78
|
+
// Gaps first: invisible to a reader, and worth about a tenth of the width.
|
|
79
|
+
{ nodeGap: 26, rankGap: 40 },
|
|
80
|
+
{ nodeGap: 22, rankGap: 32 },
|
|
81
|
+
// Then edge labels.
|
|
82
|
+
{ nodeGap: 22, rankGap: 32, maxEdgeLabelWidth: 140 },
|
|
83
|
+
{ nodeGap: 22, rankGap: 32, maxEdgeLabelWidth: 100 },
|
|
84
|
+
{ nodeGap: 20, rankGap: 30, maxEdgeLabelWidth: 70 },
|
|
85
|
+
// Only then the node text, and gently.
|
|
86
|
+
{ nodeGap: 20, rankGap: 30, maxEdgeLabelWidth: 70, maxLabelWidth: 190 },
|
|
87
|
+
{ nodeGap: 20, rankGap: 30, maxEdgeLabelWidth: 70, maxLabelWidth: 160 },
|
|
88
|
+
{ nodeGap: 20, rankGap: 30, maxEdgeLabelWidth: 70, maxLabelWidth: 140 },
|
|
89
|
+
{ nodeGap: 18, rankGap: 44, maxEdgeLabelWidth: 60, maxLabelWidth: 120 },
|
|
90
|
+
{ nodeGap: 18, rankGap: 44, maxEdgeLabelWidth: 60, maxLabelWidth: 100 }
|
|
91
|
+
];
|
|
92
|
+
/**
|
|
93
|
+
* Pixels per point for an embedded diagram — 216 DPI.
|
|
94
|
+
*
|
|
95
|
+
* PDF and DOCX embed byte-for-byte equivalent pixels, but Preview applies a
|
|
96
|
+
* better downsampling filter than Word. At 144 DPI Word made one- and two-pixel
|
|
97
|
+
* connector strokes look kinked or misaligned even though the geometry was
|
|
98
|
+
* identical. A third sample per point gives its renderer enough coverage while
|
|
99
|
+
* costing materially less than 288 DPI.
|
|
100
|
+
*/
|
|
101
|
+
const EMBED_SCALE = 3;
|
|
33
102
|
/** URL scheme the rewritten fences use. Deliberately not a real one. */
|
|
34
103
|
const DIAGRAM_URL_PREFIX = "documonster-diagram:";
|
|
35
104
|
/** Fences one document may carry, so a pathological input cannot exhaust memory. */
|
|
@@ -37,6 +106,50 @@ const MAX_EMBEDDED_DIAGRAMS = 20;
|
|
|
37
106
|
/** Aggregate rendering budget for one document's fences. */
|
|
38
107
|
const MAX_EMBED_TOTAL_BYTES = 64 * 1024 * 1024;
|
|
39
108
|
const MAX_EMBED_TOTAL_PIXELS = 80_000_000;
|
|
109
|
+
/** Aggregate image relationships after tall diagrams are split. */
|
|
110
|
+
const MAX_EMBEDDED_PIECES = 60;
|
|
111
|
+
/**
|
|
112
|
+
* The narrowest layout of a diagram that the text column can show legibly.
|
|
113
|
+
*
|
|
114
|
+
* Walks {@link FIT_LADDER} and stops at the first rung whose text clears
|
|
115
|
+
* {@link MIN_EMBED_FONT_POINTS} — first, not best, because the ladder is ordered by what each
|
|
116
|
+
* concession costs a reader, so the earliest rung that works is the least damage. Height is
|
|
117
|
+
* not a constraint here: a diagram taller than a page is cut across pages instead of being
|
|
118
|
+
* shrunk back into one, which would give away the legibility the narrowing just bought.
|
|
119
|
+
*
|
|
120
|
+
* If no rung clears the bar — a rank with nine nodes in it is wide however hard the labels
|
|
121
|
+
* wrap — the narrowest attempt is used and the caller is told, because a diagram nobody can
|
|
122
|
+
* read is worth a line of output rather than silence.
|
|
123
|
+
*
|
|
124
|
+
* A caller who set any of the layout numbers themselves is left alone: they have said what the
|
|
125
|
+
* layout should be, and second-guessing an explicit argument is worse than a small image.
|
|
126
|
+
*/
|
|
127
|
+
export function fitToColumn(source, options, tune) {
|
|
128
|
+
const measure = (list) => {
|
|
129
|
+
const fit = Math.min(1, MAX_EMBED_WIDTH_POINTS / list.width);
|
|
130
|
+
// The floor applies to the diagram's body text. Edge labels are authored a
|
|
131
|
+
// step smaller on purpose; forcing the smallest label to 8pt over-wraps
|
|
132
|
+
// every node, turning a balanced one-page chart into a tall two-page strip.
|
|
133
|
+
const size = (options.fontSize ?? DEFAULT_DIAGRAM_FONT_POINTS) * fit;
|
|
134
|
+
return { list, fit, short: size < MIN_EMBED_FONT_POINTS };
|
|
135
|
+
};
|
|
136
|
+
let best = measure(buildDrawList(source, options));
|
|
137
|
+
if (!best.short || !tune) {
|
|
138
|
+
return best;
|
|
139
|
+
}
|
|
140
|
+
for (const step of FIT_LADDER) {
|
|
141
|
+
const attempt = measure(buildDrawList(source, { ...options, ...step }));
|
|
142
|
+
if (attempt.list.width < best.list.width) {
|
|
143
|
+
best = attempt;
|
|
144
|
+
}
|
|
145
|
+
if (!attempt.short) {
|
|
146
|
+
return attempt;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return best;
|
|
150
|
+
}
|
|
151
|
+
/** The layout's own default, which `toRenderOptions` leaves unset when the caller does. */
|
|
152
|
+
const DEFAULT_DIAGRAM_FONT_POINTS = 14;
|
|
40
153
|
/**
|
|
41
154
|
* Render every mermaid fence in `markdown` and rewrite it as an inline image.
|
|
42
155
|
*
|
|
@@ -48,59 +161,133 @@ const MAX_EMBED_TOTAL_PIXELS = 80_000_000;
|
|
|
48
161
|
export async function prepareMarkdownDiagrams(markdown, style = {}) {
|
|
49
162
|
const fences = findMermaidFences(markdown);
|
|
50
163
|
if (fences.length === 0) {
|
|
51
|
-
return { markdown,
|
|
164
|
+
return { markdown, notes: [] };
|
|
52
165
|
}
|
|
53
166
|
if (fences.length > MAX_EMBEDDED_DIAGRAMS) {
|
|
54
167
|
throw toolError.tooLarge(`this document has ${fences.length} mermaid fences, over the ${MAX_EMBEDDED_DIAGRAMS} limit for one call`, "Every diagram is rendered and held in memory until the document is written. Split the document, or pass diagrams: false and render the ones you need with diagram_render.");
|
|
55
168
|
}
|
|
56
169
|
const options = toRenderOptions(style);
|
|
170
|
+
// Only tune a layout the caller has not spoken about.
|
|
171
|
+
const tune = style.maxLabelWidth === undefined && style.nodeGap === undefined && style.rankGap === undefined;
|
|
57
172
|
const images = new Map();
|
|
58
173
|
const failures = [];
|
|
174
|
+
const cramped = [];
|
|
175
|
+
const split = [];
|
|
176
|
+
const forced = [];
|
|
59
177
|
// One budget across every fence: ten diagrams each just under the rasteriser's
|
|
60
178
|
// own per-image cap is gigabytes, and each is held until the document is written.
|
|
61
179
|
const budget = newImageBudget();
|
|
180
|
+
let drawn = 0;
|
|
62
181
|
let rewritten = markdown;
|
|
63
182
|
// Back to front, so each splice leaves the earlier fences' offsets valid.
|
|
64
183
|
for (const fence of [...fences].reverse()) {
|
|
65
|
-
let
|
|
66
|
-
let alt;
|
|
184
|
+
let references;
|
|
67
185
|
try {
|
|
68
186
|
const diagram = parseDiagram(fence.source);
|
|
69
|
-
const list =
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
};
|
|
187
|
+
const { list, fit, short } = fitToColumn(fence.source, options, tune);
|
|
188
|
+
if (short) {
|
|
189
|
+
cramped.push(fence.line);
|
|
190
|
+
}
|
|
191
|
+
const alt = diagram.title ?? `${diagram.kind} diagram`;
|
|
192
|
+
const cuts = planSlices(list, fit, MAX_EMBED_HEIGHT_POINTS);
|
|
193
|
+
if (cuts.some(cut => cut.forced)) {
|
|
194
|
+
forced.push(fence.line);
|
|
195
|
+
}
|
|
196
|
+
if (cuts.length > 1) {
|
|
197
|
+
split.push({ line: fence.line, pieces: cuts.length });
|
|
198
|
+
}
|
|
199
|
+
const parts = [];
|
|
200
|
+
const pending = [];
|
|
201
|
+
const fenceBudget = { ...budget };
|
|
202
|
+
cuts.forEach((cut, index) => {
|
|
203
|
+
// Paint this viewport, not the whole diagram then crop it. A diagram
|
|
204
|
+
// taller than the rasteriser's pixel limit is exactly the case slicing
|
|
205
|
+
// is meant to make possible; allocating it first defeats that contract.
|
|
206
|
+
const sliceHeight = (cut.bottom - cut.top) / fit;
|
|
207
|
+
const slice = {
|
|
208
|
+
...list,
|
|
209
|
+
height: sliceHeight,
|
|
210
|
+
children: [
|
|
211
|
+
{
|
|
212
|
+
kind: "group",
|
|
213
|
+
transform: translate(0, -cut.top / fit),
|
|
214
|
+
children: list.children
|
|
215
|
+
}
|
|
216
|
+
]
|
|
217
|
+
};
|
|
218
|
+
const piece = rasterizeToRgba(slice, { scale: EMBED_SCALE * fit });
|
|
219
|
+
const encoded = {
|
|
220
|
+
bytes: encodePng(piece.data, piece.width, piece.height, {
|
|
221
|
+
// Pixels and the OOXML extent have both already been reduced by
|
|
222
|
+
// `fit`, so their ratio remains 2 px/pt = 144 DPI. Multiplying by
|
|
223
|
+
// fit again made a 50%-fitted PNG falsely claim 72 DPI.
|
|
224
|
+
dpi: 72 * EMBED_SCALE
|
|
225
|
+
}),
|
|
226
|
+
width: piece.width,
|
|
227
|
+
height: piece.height
|
|
228
|
+
};
|
|
229
|
+
spendEmbedBudget(fenceBudget, encoded, fence.line);
|
|
230
|
+
const url = cuts.length === 1
|
|
231
|
+
? `${DIAGRAM_URL_PREFIX}${fence.ordinal}`
|
|
232
|
+
: `${DIAGRAM_URL_PREFIX}${fence.ordinal}.${index + 1}`;
|
|
233
|
+
pending.push({
|
|
234
|
+
url,
|
|
235
|
+
image: {
|
|
236
|
+
data: encoded.bytes,
|
|
237
|
+
mediaType: "png",
|
|
238
|
+
width: Math.round(list.width * fit * EMU_PER_POINT),
|
|
239
|
+
height: Math.round((cut.bottom - cut.top) * EMU_PER_POINT)
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
// Each piece names its place in the sequence, so a reader who meets the second half
|
|
243
|
+
// three pages later knows it is the second half.
|
|
244
|
+
const label = cuts.length === 1 ? alt : `${alt} (${index + 1} of ${cuts.length})`;
|
|
245
|
+
parts.push(``);
|
|
246
|
+
});
|
|
247
|
+
// Commit one fence atomically. A later slice can exhaust the aggregate
|
|
248
|
+
// budget; registering earlier slices first leaves unreachable image data
|
|
249
|
+
// retained after the fence falls back to a code block.
|
|
250
|
+
for (const pendingImage of pending) {
|
|
251
|
+
images.set(pendingImage.url, pendingImage.image);
|
|
252
|
+
}
|
|
253
|
+
Object.assign(budget, fenceBudget);
|
|
254
|
+
drawn++;
|
|
255
|
+
references = parts.join("\n\n");
|
|
84
256
|
}
|
|
85
257
|
catch (cause) {
|
|
258
|
+
// A budget is a hard execution boundary, not a per-diagram rendering
|
|
259
|
+
// failure. Continuing would keep spending the resource that ran out.
|
|
260
|
+
if (cause instanceof McpToolError && cause.code === "too_large") {
|
|
261
|
+
throw cause;
|
|
262
|
+
}
|
|
86
263
|
failures.push(`- **diagram at line ${fence.line} left as a code block**: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
87
264
|
continue;
|
|
88
265
|
}
|
|
89
|
-
const url = `${DIAGRAM_URL_PREFIX}${fence.ordinal}`;
|
|
90
|
-
images.set(url, image);
|
|
91
266
|
// A blank line either side: an image reference that lands against a
|
|
92
267
|
// neighbouring line is parsed as part of that paragraph.
|
|
93
|
-
rewritten = `${rewritten.slice(0, fence.start)}\n
|
|
268
|
+
rewritten = `${rewritten.slice(0, fence.start)}\n${references}\n${rewritten.slice(fence.end)}`;
|
|
94
269
|
}
|
|
95
270
|
const notes = images.size === 0
|
|
96
271
|
? failures
|
|
97
272
|
: [
|
|
98
|
-
`- ${
|
|
273
|
+
`- ${drawn} mermaid diagram(s) rendered and embedded as PNG, fitted to the text column`,
|
|
274
|
+
...[...split]
|
|
275
|
+
.reverse()
|
|
276
|
+
.map(entry => `- diagram at line ${entry.line} is taller than one page: cut into ${entry.pieces} pieces at rows that cross no box or label`),
|
|
277
|
+
...(forced.length === 0
|
|
278
|
+
? []
|
|
279
|
+
: [
|
|
280
|
+
`- diagram(s) at line ${[...forced].reverse().join(", ")} contain a box taller than a page, so a cut had to pass through it`
|
|
281
|
+
]),
|
|
282
|
+
...(cramped.length === 0
|
|
283
|
+
? []
|
|
284
|
+
: [
|
|
285
|
+
`- diagram(s) at line ${[...cramped].reverse().join(", ")} are wider than the text column allows: their text lands under ${MIN_EMBED_FONT_POINTS}pt even at the tightest layout. Split the widest rank, or render them separately with diagram_render.`
|
|
286
|
+
]),
|
|
99
287
|
...failures
|
|
100
288
|
];
|
|
101
289
|
return {
|
|
102
290
|
markdown: rewritten,
|
|
103
|
-
count: images.size,
|
|
104
291
|
...(images.size === 0 ? {} : { resolveImage: (url) => images.get(url) }),
|
|
105
292
|
notes
|
|
106
293
|
};
|
|
@@ -116,12 +303,14 @@ function spendEmbedBudget(budget, rendered, line) {
|
|
|
116
303
|
budget.count += 1;
|
|
117
304
|
budget.bytes += rendered.bytes.length;
|
|
118
305
|
budget.pixels += rendered.width * rendered.height;
|
|
119
|
-
if (budget.
|
|
306
|
+
if (budget.count > MAX_EMBEDDED_PIECES ||
|
|
307
|
+
budget.bytes > MAX_EMBED_TOTAL_BYTES ||
|
|
308
|
+
budget.pixels > MAX_EMBED_TOTAL_PIXELS) {
|
|
120
309
|
throw toolError.tooLarge(`the diagrams in this document exceed the per-call rendering budget (reached at the fence on line ${line})`, "Split the document, or pass diagrams: false and render the large ones separately with diagram_render.");
|
|
121
310
|
}
|
|
122
311
|
}
|
|
123
|
-
/**
|
|
312
|
+
/** Escape image-alt delimiters without deleting part of the accessible name. */
|
|
124
313
|
function escapeAlt(text) {
|
|
125
|
-
return text.replace(/[[\]]/g, "");
|
|
314
|
+
return text.replace(/\\/g, "\\\\").replace(/\r?\n/g, " ").replace(/[[\]]/g, "\\$&");
|
|
126
315
|
}
|
|
127
316
|
//# sourceMappingURL=diagram-markdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-markdown.js","sourceRoot":"","sources":["../../src/tools/diagram-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"diagram-markdown.js","sourceRoot":"","sources":["../../src/tools/diagram-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAI7E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EACL,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,EAEhB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAEnC;;;;;;;GAOG;AACH,wEAAwE;AACxE,6EAA6E;AAC7E,sEAAsE;AACtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEhC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,GAAoC;IAClD,2EAA2E;IAC3E,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5B,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5B,oBAAoB;IACpB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE;IACpD,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE;IACpD,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;IACnD,uCAAuC;IACvC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;IACvE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;IACvE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;IACvE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;IACvE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;CACxE,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB,wEAAwE;AACxE,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAElD,oFAAoF;AACpF,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,4DAA4D;AAC5D,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/C,MAAM,sBAAsB,GAAG,UAAU,CAAC;AAC1C,mEAAmE;AACnE,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAc/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,WAAW,CACzB,MAAc,EACd,OAA+D,EAC/D,IAAa;IAEb,MAAM,OAAO,GAAG,CAAC,IAAc,EAAmD,EAAE;QAClF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,2EAA2E;QAC3E,wEAAwE;QACxE,4EAA4E;QAC5E,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,2BAA2B,CAAC,GAAG,GAAG,CAAC;QACrE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,qBAAqB,EAAE,CAAC;IAC5D,CAAC,CAAC;IAEF,IAAI,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACzC,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,MAAM,2BAA2B,GAAG,EAAE,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,KAAK,GAAqB,EAAE;IAE5B,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QAC1C,MAAM,SAAS,CAAC,QAAQ,CACtB,qBAAqB,MAAM,CAAC,MAAM,6BAA6B,qBAAqB,qBAAqB,EACzG,2KAA2K,CAC5K,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,sDAAsD;IACtD,MAAM,IAAI,GACR,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC;IAClG,MAAM,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IACpD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAuC,EAAE,CAAC;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,kFAAkF;IAClF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEzB,0EAA0E;IAC1E,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACtE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;YACD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,UAAU,CAAC;YACvD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,uBAAuB,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAqD,EAAE,CAAC;YACrE,MAAM,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBAC1B,qEAAqE;gBACrE,uEAAuE;gBACvE,wEAAwE;gBACxE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACjD,MAAM,KAAK,GAAa;oBACtB,GAAG,IAAI;oBACP,MAAM,EAAE,WAAW;oBACnB,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,OAAO;4BACb,SAAS,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;4BACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ;yBACxB;qBACF;iBACF,CAAC;gBACF,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC;gBACnE,MAAM,OAAO,GAAG;oBACd,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE;wBACtD,gEAAgE;wBAChE,kEAAkE;wBAClE,wDAAwD;wBACxD,GAAG,EAAE,EAAE,GAAG,WAAW;qBACtB,CAAC;oBACF,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,CAAC;gBACF,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM,GAAG,GACP,IAAI,CAAC,MAAM,KAAK,CAAC;oBACf,CAAC,CAAC,GAAG,kBAAkB,GAAG,KAAK,CAAC,OAAO,EAAE;oBACzC,CAAC,CAAC,GAAG,kBAAkB,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC;oBACX,GAAG;oBACH,KAAK,EAAE;wBACL,IAAI,EAAE,OAAO,CAAC,KAAK;wBACnB,SAAS,EAAE,KAAK;wBAChB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,aAAa,CAAC;wBACnD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC;qBAC3D;iBACF,CAAC,CAAC;gBACH,oFAAoF;gBACpF,iDAAiD;gBACjD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC;gBAClF,KAAK,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;YACH,uEAAuE;YACvE,yEAAyE;YACzE,uDAAuD;YACvD,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACnC,KAAK,EAAE,CAAC;YACR,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qEAAqE;YACrE,qEAAqE;YACrE,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAChE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,QAAQ,CAAC,IAAI,CACX,uBAAuB,KAAK,CAAC,IAAI,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtH,CAAC;YACF,SAAS;QACX,CAAC;QAED,oEAAoE;QACpE,yDAAyD;QACzD,SAAS,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,UAAU,KAAK,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACjG,CAAC;IAED,MAAM,KAAK,GACT,MAAM,CAAC,IAAI,KAAK,CAAC;QACf,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC;YACE,KAAK,KAAK,6EAA6E;YACvF,GAAG,CAAC,GAAG,KAAK,CAAC;iBACV,OAAO,EAAE;iBACT,GAAG,CACF,KAAK,CAAC,EAAE,CACN,qBAAqB,KAAK,CAAC,IAAI,sCAAsC,KAAK,CAAC,MAAM,4CAA4C,CAChI;YACH,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;gBACrB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,wBAAwB,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,oEAAoE;iBAC7H,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBACtB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,wBAAwB,CAAC,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,kEAAkE,qBAAqB,uGAAuG;iBACxP,CAAC;YACN,GAAG,QAAQ;SACZ,CAAC;IAER,OAAO;QACL,QAAQ,EAAE,SAAS;QACnB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAChF,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CACvB,MAAmB,EACnB,QAAyF,EACzF,IAAY;IAEZ,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IAClB,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;IACtC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClD,IACE,MAAM,CAAC,KAAK,GAAG,mBAAmB;QAClC,MAAM,CAAC,KAAK,GAAG,qBAAqB;QACpC,MAAM,CAAC,MAAM,GAAG,sBAAsB,EACtC,CAAC;QACD,MAAM,SAAS,CAAC,QAAQ,CACtB,oGAAoG,IAAI,GAAG,EAC3G,uGAAuG,CACxG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cutting a tall diagram across several pages.
|
|
3
|
+
*
|
|
4
|
+
* A page has one width and a fixed height, and a diagram narrowed enough to be read at all
|
|
5
|
+
* can easily be taller than the second of those. Scaling it down again to fit is what this
|
|
6
|
+
* module exists to avoid: it trades the legibility that the narrowing just bought back, and
|
|
7
|
+
* for a deep flowchart it trades a lot of it.
|
|
8
|
+
*
|
|
9
|
+
* So the diagram is cut instead, and the whole problem is *where*. A row of pixels that is
|
|
10
|
+
* entirely background does not exist in a top-to-bottom flowchart — the links between ranks
|
|
11
|
+
* cross every gap — so "find the blank rows" finds nothing. Cutting a link is fine, though:
|
|
12
|
+
* the line continues at the top of the next page, which is how any split figure reads. What
|
|
13
|
+
* must not be cut is a **box or a piece of text**, because half a word is not readable at
|
|
14
|
+
* either end and half a node is not obviously one node.
|
|
15
|
+
*
|
|
16
|
+
* That distinction is available from the display list itself, and from nothing else: a
|
|
17
|
+
* `rect`, `ellipse`, `sector` or `text` is solid, and a `polyline` or `path` is solid exactly
|
|
18
|
+
* when it is *filled* — because `closed` does not separate a connector from a node, a rhombus,
|
|
19
|
+
* hexagon, parallelogram, stadium and cylinder all being drawn as filled polylines and paths
|
|
20
|
+
* rather than rects. So the forbidden bands are collected by walking the list with
|
|
21
|
+
* {@link renderDrawList} through a surface that measures instead of painting — which means the
|
|
22
|
+
* transforms, and therefore the geometry, are the engine's own rather than a second
|
|
23
|
+
* implementation of them, and it works for all twenty-one diagram types without knowing which
|
|
24
|
+
* one it has.
|
|
25
|
+
*/
|
|
26
|
+
import type { DrawList } from "documonster/draw";
|
|
27
|
+
export interface SliceCut {
|
|
28
|
+
/** Where the slice starts, in display points from the top. */
|
|
29
|
+
readonly top: number;
|
|
30
|
+
/** Where it ends. */
|
|
31
|
+
readonly bottom: number;
|
|
32
|
+
/** Whether this slice had to be cut through a box or a word because nothing else was free. */
|
|
33
|
+
readonly forced: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Choose the cuts that carve a diagram of `height` points into pieces of at most `limit`.
|
|
37
|
+
*
|
|
38
|
+
* Greedy from the top and deliberately so: taking the *lowest* legal cut at or above each
|
|
39
|
+
* limit uses as much of every page as it can, which is what keeps the piece count minimal.
|
|
40
|
+
*
|
|
41
|
+
* `scale` maps display points to the diagram's own units, because the bands are measured in
|
|
42
|
+
* the display list's coordinates while the page budget is in points.
|
|
43
|
+
*/
|
|
44
|
+
export declare function planSlices(list: DrawList, scale: number, limit: number, minimum?: number): readonly SliceCut[];
|
|
45
|
+
//# sourceMappingURL=diagram-slice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-slice.d.ts","sourceRoot":"","sources":["../../src/tools/diagram-slice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAEV,QAAQ,EAOT,MAAM,kBAAkB,CAAC;AA6I1B,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,OAAO,SAAK,GACX,SAAS,QAAQ,EAAE,CAuDrB"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cutting a tall diagram across several pages.
|
|
3
|
+
*
|
|
4
|
+
* A page has one width and a fixed height, and a diagram narrowed enough to be read at all
|
|
5
|
+
* can easily be taller than the second of those. Scaling it down again to fit is what this
|
|
6
|
+
* module exists to avoid: it trades the legibility that the narrowing just bought back, and
|
|
7
|
+
* for a deep flowchart it trades a lot of it.
|
|
8
|
+
*
|
|
9
|
+
* So the diagram is cut instead, and the whole problem is *where*. A row of pixels that is
|
|
10
|
+
* entirely background does not exist in a top-to-bottom flowchart — the links between ranks
|
|
11
|
+
* cross every gap — so "find the blank rows" finds nothing. Cutting a link is fine, though:
|
|
12
|
+
* the line continues at the top of the next page, which is how any split figure reads. What
|
|
13
|
+
* must not be cut is a **box or a piece of text**, because half a word is not readable at
|
|
14
|
+
* either end and half a node is not obviously one node.
|
|
15
|
+
*
|
|
16
|
+
* That distinction is available from the display list itself, and from nothing else: a
|
|
17
|
+
* `rect`, `ellipse`, `sector` or `text` is solid, and a `polyline` or `path` is solid exactly
|
|
18
|
+
* when it is *filled* — because `closed` does not separate a connector from a node, a rhombus,
|
|
19
|
+
* hexagon, parallelogram, stadium and cylinder all being drawn as filled polylines and paths
|
|
20
|
+
* rather than rects. So the forbidden bands are collected by walking the list with
|
|
21
|
+
* {@link renderDrawList} through a surface that measures instead of painting — which means the
|
|
22
|
+
* transforms, and therefore the geometry, are the engine's own rather than a second
|
|
23
|
+
* implementation of them, and it works for all twenty-one diagram types without knowing which
|
|
24
|
+
* one it has.
|
|
25
|
+
*/
|
|
26
|
+
import { measureText, renderDrawList } from "documonster/draw";
|
|
27
|
+
/**
|
|
28
|
+
* A surface that draws nothing and records where the solid marks are.
|
|
29
|
+
*
|
|
30
|
+
* Lines are deliberately ignored. They are the marks a cut may pass through, and treating
|
|
31
|
+
* them as obstacles would forbid every row of a flowchart.
|
|
32
|
+
*/
|
|
33
|
+
class BandCollector {
|
|
34
|
+
bands = [];
|
|
35
|
+
clips = [];
|
|
36
|
+
add(top, bottom) {
|
|
37
|
+
const clip = this.clips.at(-1);
|
|
38
|
+
if (clip !== undefined) {
|
|
39
|
+
top = Math.max(top, clip.y);
|
|
40
|
+
bottom = Math.min(bottom, clip.y + clip.height);
|
|
41
|
+
}
|
|
42
|
+
if (bottom > top) {
|
|
43
|
+
this.bands.push({ top, bottom });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
rect(_x, y, _width, height, _rx, _paint) {
|
|
47
|
+
this.add(y, y + height);
|
|
48
|
+
}
|
|
49
|
+
ellipse(_cx, cy, _rx, ry, _paint) {
|
|
50
|
+
this.add(cy - ry, cy + ry);
|
|
51
|
+
}
|
|
52
|
+
sector(_cx, cy, radius, _innerRadius, _startAngle, _endAngle, _paint) {
|
|
53
|
+
// The whole disc rather than the swept arc: a pie slice is a solid, and over-reserving a
|
|
54
|
+
// band can only cost a cut position, while under-reserving one cuts through the picture.
|
|
55
|
+
this.add(cy - radius, cy + radius);
|
|
56
|
+
}
|
|
57
|
+
polyline(points, _closed, paint) {
|
|
58
|
+
this.stroke(points.map(point => point.y), paint);
|
|
59
|
+
}
|
|
60
|
+
path(commands, paint) {
|
|
61
|
+
const ys = [];
|
|
62
|
+
for (const command of commands) {
|
|
63
|
+
if (command.op === "close") {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
ys.push(command.y);
|
|
67
|
+
if (command.op === "cubic") {
|
|
68
|
+
// The control points bound the curve, so they are the conservative reading of where it
|
|
69
|
+
// might reach. A flattened curve would be tighter and is not worth the arithmetic here.
|
|
70
|
+
ys.push(command.y1, command.y2);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this.stroke(ys, paint);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A polyline or a path, which may be either a connector or the outline of a node.
|
|
77
|
+
*
|
|
78
|
+
* The discriminator is the fill, and it has to be: `closed` does not separate them — an
|
|
79
|
+
* arrowhead is a closed triangle and so is nothing else — while a rhombus, a hexagon, a
|
|
80
|
+
* parallelogram, a stadium and a cylinder are all drawn as filled polylines or paths rather
|
|
81
|
+
* than as rects. Ignoring every polyline let a cut fall straight through a diamond.
|
|
82
|
+
*
|
|
83
|
+
* An unfilled stroke is a line, and a line may be cut: it continues at the top of the next
|
|
84
|
+
* page, which is how any split figure reads.
|
|
85
|
+
*/
|
|
86
|
+
stroke(ys, paint) {
|
|
87
|
+
if (paint.fill === undefined || ys.length === 0) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.add(Math.min(...ys), Math.max(...ys));
|
|
91
|
+
}
|
|
92
|
+
text(x, y, lines, style, rotate) {
|
|
93
|
+
const angle = (rotate * Math.PI) / 180;
|
|
94
|
+
const sin = Math.sin(angle);
|
|
95
|
+
const cos = Math.cos(angle);
|
|
96
|
+
const ys = [];
|
|
97
|
+
for (const line of lines) {
|
|
98
|
+
const width = measureText(line.text, style);
|
|
99
|
+
const lineX = line.x ?? x;
|
|
100
|
+
const left = style.anchor === "middle"
|
|
101
|
+
? lineX - width / 2
|
|
102
|
+
: style.anchor === "end"
|
|
103
|
+
? lineX - width
|
|
104
|
+
: lineX;
|
|
105
|
+
const baseline = y + line.dy;
|
|
106
|
+
const corners = [
|
|
107
|
+
{ x: left, y: baseline - style.size },
|
|
108
|
+
{ x: left + width, y: baseline - style.size },
|
|
109
|
+
{ x: left, y: baseline + style.size * 0.3 },
|
|
110
|
+
{ x: left + width, y: baseline + style.size * 0.3 }
|
|
111
|
+
];
|
|
112
|
+
for (const corner of corners) {
|
|
113
|
+
const dx = corner.x - x;
|
|
114
|
+
const dy = corner.y - y;
|
|
115
|
+
ys.push(y + dx * sin + dy * cos);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
if (ys.length > 0) {
|
|
119
|
+
this.add(Math.min(...ys), Math.max(...ys));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
pushClip(clip) {
|
|
123
|
+
const parent = this.clips.at(-1);
|
|
124
|
+
if (parent === undefined) {
|
|
125
|
+
this.clips.push(clip);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const top = Math.max(parent.y, clip.y);
|
|
129
|
+
const bottom = Math.min(parent.y + parent.height, clip.y + clip.height);
|
|
130
|
+
this.clips.push({ x: 0, y: top, width: 0, height: Math.max(0, bottom - top) });
|
|
131
|
+
}
|
|
132
|
+
popClip() {
|
|
133
|
+
this.clips.pop();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Choose the cuts that carve a diagram of `height` points into pieces of at most `limit`.
|
|
138
|
+
*
|
|
139
|
+
* Greedy from the top and deliberately so: taking the *lowest* legal cut at or above each
|
|
140
|
+
* limit uses as much of every page as it can, which is what keeps the piece count minimal.
|
|
141
|
+
*
|
|
142
|
+
* `scale` maps display points to the diagram's own units, because the bands are measured in
|
|
143
|
+
* the display list's coordinates while the page budget is in points.
|
|
144
|
+
*/
|
|
145
|
+
export function planSlices(list, scale, limit, minimum = 48) {
|
|
146
|
+
const height = list.height * scale;
|
|
147
|
+
if (height <= limit) {
|
|
148
|
+
return [{ top: 0, bottom: height, forced: false }];
|
|
149
|
+
}
|
|
150
|
+
const collector = new BandCollector();
|
|
151
|
+
// Remove only a root canvas plate. Deciding from a band's height after the
|
|
152
|
+
// walk discarded any legitimate shape spanning the canvas and also lost the
|
|
153
|
+
// x/width evidence that distinguished it from a background.
|
|
154
|
+
const first = list.children[0];
|
|
155
|
+
const background = first?.kind === "rect" &&
|
|
156
|
+
first.x === 0 &&
|
|
157
|
+
first.y === 0 &&
|
|
158
|
+
first.width === list.width &&
|
|
159
|
+
first.height === list.height
|
|
160
|
+
? 0
|
|
161
|
+
: -1;
|
|
162
|
+
renderDrawList(background === -1
|
|
163
|
+
? list
|
|
164
|
+
: { ...list, children: list.children.filter((_, index) => index !== background) }, collector);
|
|
165
|
+
const raw = collector.bands.map(band => ({
|
|
166
|
+
top: band.top * scale,
|
|
167
|
+
bottom: band.bottom * scale
|
|
168
|
+
}));
|
|
169
|
+
const content = mergeBands(raw);
|
|
170
|
+
// An obstacle taller than a whole slice cannot be avoided by any choice of cut, so letting it
|
|
171
|
+
// block one only forces a worse position. It still counts for *reporting*: cutting through a
|
|
172
|
+
// node that big is a real compromise and the caller is told.
|
|
173
|
+
const blocking = content.filter(band => band.bottom - band.top < limit);
|
|
174
|
+
const inside = (row) => content.some(band => row > band.top && row < band.bottom);
|
|
175
|
+
const cuts = [];
|
|
176
|
+
let top = 0;
|
|
177
|
+
// Bounded by the piece count: each turn advances `top` by at least `minimum`.
|
|
178
|
+
while (height - top > limit) {
|
|
179
|
+
const target = top + limit;
|
|
180
|
+
// Do not leave a postage-stamp final image. If the nominal cut would leave
|
|
181
|
+
// less than `minimum`, search earlier so both pieces remain useful.
|
|
182
|
+
const latest = height - target < minimum ? height - minimum : target;
|
|
183
|
+
const free = highestFreeRowAtOrBelow(blocking, latest, top + minimum);
|
|
184
|
+
const at = free ?? target;
|
|
185
|
+
cuts.push({ top, bottom: at, forced: inside(at) });
|
|
186
|
+
top = at;
|
|
187
|
+
}
|
|
188
|
+
cuts.push({ top, bottom: height, forced: false });
|
|
189
|
+
return cuts;
|
|
190
|
+
}
|
|
191
|
+
/** Sorted, non-overlapping bands. */
|
|
192
|
+
function mergeBands(bands) {
|
|
193
|
+
const sorted = [...bands].sort((a, b) => a.top - b.top);
|
|
194
|
+
const out = [];
|
|
195
|
+
for (const band of sorted) {
|
|
196
|
+
const last = out.at(-1);
|
|
197
|
+
if (last !== undefined && band.top <= last.bottom) {
|
|
198
|
+
out[out.length - 1] = { top: last.top, bottom: Math.max(last.bottom, band.bottom) };
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
out.push({ ...band });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return out;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The lowest row at or below `target` that is inside no band, and not above `floor`.
|
|
208
|
+
*
|
|
209
|
+
* Searched downwards from `target` because a cut as late as possible fills the page. When
|
|
210
|
+
* `target` itself is inside a band the search continues from that band's top, since every row
|
|
211
|
+
* between them is inside it too.
|
|
212
|
+
*/
|
|
213
|
+
function highestFreeRowAtOrBelow(bands, target, floor) {
|
|
214
|
+
let row = target;
|
|
215
|
+
while (row >= floor) {
|
|
216
|
+
const hit = bands.find(band => row > band.top && row < band.bottom);
|
|
217
|
+
if (hit === undefined) {
|
|
218
|
+
return row;
|
|
219
|
+
}
|
|
220
|
+
// Just above the obstacle. A band is a closed interval, so its own top is free.
|
|
221
|
+
row = hit.top;
|
|
222
|
+
}
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=diagram-slice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-slice.js","sourceRoot":"","sources":["../../src/tools/diagram-slice.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/diagram.js
CHANGED
|
@@ -205,7 +205,7 @@ async function convert(from, to, source, target, args) {
|
|
|
205
205
|
const markdown = await readFile(source, "utf8");
|
|
206
206
|
const prepared = args.renderDiagrams === true
|
|
207
207
|
? await prepareMarkdownDiagrams(markdown)
|
|
208
|
-
: { markdown,
|
|
208
|
+
: { markdown, notes: [] };
|
|
209
209
|
const doc = await markdownToDocx(prepared.markdown, {
|
|
210
210
|
...("resolveImage" in prepared && prepared.resolveImage !== undefined
|
|
211
211
|
? { resolveImage: prepared.resolveImage }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-convert.js","sourceRoot":"","sources":["../../src/tools/doc-convert.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doc-convert.js","sourceRoot":"","sources":["../../src/tools/doc-convert.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/doc-write.js
CHANGED
|
@@ -70,7 +70,7 @@ export const docWriteTool = defineTool({
|
|
|
70
70
|
// the bytes.
|
|
71
71
|
const prepared = (args.diagrams ?? config.groups.has("diagram"))
|
|
72
72
|
? await prepareMarkdownDiagrams(args.markdown)
|
|
73
|
-
: { markdown: args.markdown,
|
|
73
|
+
: { markdown: args.markdown, notes: [] };
|
|
74
74
|
// markdownToDocx is async — verified; treating it as synchronous yields an
|
|
75
75
|
// empty object that fails much later inside the packager.
|
|
76
76
|
const doc = await markdownToDocx(prepared.markdown, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc-write.js","sourceRoot":"","sources":["../../src/tools/doc-write.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"doc-write.js","sourceRoot":"","sources":["../../src/tools/doc-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;IACrC,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,8BAA8B;IACrC,WAAW,EACT,wPAAwP;IAC1P,WAAW,EAAE;QACX,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CACP,iHAAiH,CAClH;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,8EAA8E,CAAC;QAC3F,QAAQ,EAAE,CAAC;aACR,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,gJAAgJ,CACjJ;QACH,kBAAkB,EAAE,CAAC;aAClB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,iIAAiI,CAClI;QACH,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,2FAA2F,CAC5F;KACJ;IACD,WAAW,EAAE;QACX,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,KAAK;QACrB,aAAa,EAAE,KAAK;KACrB;IACD,OAAO,EAAE,IAAI;IACb,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;QAC/B,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3B,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YAC1C,MAAM,SAAS,CAAC,YAAY,CAC1B,8BAA8B,MAAM,OAAO,EAC3C,MAAM,KAAK,SAAS;gBAClB,CAAC,CAAC,yKAAyK;gBAC3K,CAAC,CAAC,+GAA+G,CACpH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,wEAAwE;QACxE,6EAA6E;QAC7E,aAAa;QACb,MAAM,QAAQ,GACZ,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC7C,CAAC,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAC9C,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAuB,EAAE,CAAC;QAElE,2EAA2E;QAC3E,0DAA0D;QAC1D,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAClD,GAAG,CAAC,cAAc,IAAI,QAAQ,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS;gBACnE,CAAC,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE;gBACzC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC1B,MAAM,SAAS,CAAC,YAAY,CAC1B,wCAAwC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAChG,wDAAwD,EACxD,EAAE,KAAK,EAAE,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,KAAoD,CAAC;QACzD,IAAI,IAAY,CAAC;QACjB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,SAAS,CAAC,EAAE,CACjE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAC7B,CAAC;YACF,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,mFAAmF;YACnF,iFAAiF;YACjF,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACrD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,CAAC;YACvD,MAAM,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,SAAS,CAAC,EAAE,CACjE,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAC5B,CAAC;YACF,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC;QAC1B,CAAC;QAED,OAAO,UAAU,CACf,MAAM,EACN;YACE,WAAW,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI;YAC1E,MAAM,KAAK,KAAK;gBACd,CAAC,CAAC,qFAAqF;gBACvF,CAAC,CAAC,+CAA+C;YACnD,GAAG,QAAQ,CAAC,KAAK;YACjB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzB,EAAE;YACF,kFAAkF;SACnF,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@documonster/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "Model Context Protocol server for documonster — lets AI assistants read, write and convert Excel, Word, PDF, CSV and ZIP documents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
52
|
+
"documonster": "0.15.0",
|
|
53
|
+
"zod": "^4.4.3"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@types/node": "^26.
|
|
56
|
+
"@types/node": "^26.6.0",
|
|
57
57
|
"rimraf": "^6.1.3",
|
|
58
58
|
"typescript": "7.0.2",
|
|
59
|
-
"vitest": "^
|
|
59
|
+
"vitest": "^5.0.1"
|
|
60
60
|
},
|
|
61
61
|
"engines": {
|
|
62
62
|
"node": ">=22.13.0"
|