gutterpress 0.11.17 → 0.11.18-alpha.10

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 (38) hide show
  1. package/dist/api/index.d.ts +1 -1
  2. package/dist/api/index.js +4 -2
  3. package/dist/{build-gxy185pv.js → build-2tgs5j4d.js} +4 -4
  4. package/dist/{cli-zfgvssqz.js → cli-d0cq87s5.js} +1 -1
  5. package/dist/{cli-a4qtctrw.js → cli-gf1ywzeg.js} +411 -50
  6. package/dist/{cli-ycbg7mxk.js → cli-ptez7zcc.js} +53 -5
  7. package/dist/{cli-8nw6d915.js → cli-ytck518d.js} +1 -1
  8. package/dist/cli.js +12 -12
  9. package/dist/{doctor-fygmzevd.js → doctor-y4yg51zy.js} +2 -2
  10. package/dist/engine/compiler/build.d.ts +1 -1
  11. package/dist/{engine-yf2w9hj7.js → engine-wtnakejg.js} +1 -1
  12. package/dist/{engine-5d1rpxxq.js → engine-zy6fzs5a.js} +2 -2
  13. package/dist/{ext-c48s56jm.js → ext-t2sye4as.js} +4 -4
  14. package/dist/{gutterpress-viewer-ez7k4ha7.js → gutterpress-viewer-k4mpqjh0.js} +406 -14
  15. package/dist/{index-3k3fyrec.js → index-cf1kanp0.js} +454 -52
  16. package/dist/{index-vmcfahe2.js → index-jt552wtf.js} +5 -5
  17. package/dist/{index-09h3n36d.js → index-n8vs6pss.js} +51 -2
  18. package/dist/index.js +5 -3
  19. package/dist/lib/markdown/block-names.d.ts +82 -0
  20. package/dist/lib/markdown/renderer.d.ts +3 -2
  21. package/dist/lib/markdown/table-align.d.ts +32 -0
  22. package/dist/lib/presets.d.ts +11 -0
  23. package/dist/lib/printsafe.d.ts +1 -0
  24. package/dist/lib/remote-auth/sync.d.ts +21 -0
  25. package/dist/lib/unknown-classes.d.ts +12 -0
  26. package/dist/{manifest.schema-gh0jjve9.json → manifest.schema-5pzhscqh.json} +7 -1
  27. package/dist/{new-a9m2jwyy.js → new-pbd5zrds.js} +4 -4
  28. package/dist/{preflight-w3tnbtb8.js → preflight-vnkb8tj7.js} +4 -4
  29. package/dist/preview/file-watcher.d.ts +4 -1
  30. package/dist/{preview-bridge-8jhd1wpb.js → preview-bridge-evecsh4w.js} +5 -1
  31. package/dist/{preview-7z8tt0b4.js → preview-g1hp0jt8.js} +4 -4
  32. package/dist/{preview-interface-c44qk17f.js → preview-interface-2n1d9pbf.js} +77 -1
  33. package/dist/{preview-shell-xwn84kqr.js → preview-shell-hyp7g158.js} +9 -0
  34. package/dist/{publish-bbftdxh2.js → publish-vkbmf3tj.js} +4 -4
  35. package/dist/render.js +199 -28
  36. package/dist/schema/manifest.types.d.ts +11 -0
  37. package/dist/{validate-x1ha1gqj.js → validate-q1xj2qxn.js} +4 -4
  38. package/package.json +1 -1
@@ -1116,22 +1116,22 @@ import { fileURLToPath } from "node:url";
1116
1116
  var favicon_default = "./favicon-272ga6y0.ico";
1117
1117
 
1118
1118
  // src/assets/manifest.schema.json
1119
- var manifest_schema_default = "./manifest.schema-gh0jjve9.json";
1119
+ var manifest_schema_default = "./manifest.schema-5pzhscqh.json";
1120
1120
 
1121
1121
  // src/assets/preview/scripts/preview-interface.js
1122
- var preview_interface_default = "./preview-interface-c44qk17f.js";
1122
+ var preview_interface_default = "./preview-interface-2n1d9pbf.js";
1123
1123
 
1124
1124
  // src/assets/preview/scripts/preview-bridge.js
1125
- var preview_bridge_default = "./preview-bridge-8jhd1wpb.js";
1125
+ var preview_bridge_default = "./preview-bridge-evecsh4w.js";
1126
1126
 
1127
1127
  // src/assets/preview/scripts/preview-shell.js
1128
- var preview_shell_default = "./preview-shell-xwn84kqr.js";
1128
+ var preview_shell_default = "./preview-shell-hyp7g158.js";
1129
1129
 
1130
1130
  // profiles/CGATS21_CRPC1.icc
1131
1131
  var CGATS21_CRPC1_default = "./CGATS21_CRPC1-g0e3k7kr.icc";
1132
1132
 
1133
1133
  // src/assets/engine/gutterpress-viewer.js
1134
- var gutterpress_viewer_default = "./gutterpress-viewer-ez7k4ha7.js";
1134
+ var gutterpress_viewer_default = "./gutterpress-viewer-k4mpqjh0.js";
1135
1135
 
1136
1136
  // src/assets/engine/gutterpress-agent.js
1137
1137
  var gutterpress_agent_default = "./gutterpress-agent-cazqstr1.js";
@@ -2230,6 +2230,54 @@ ${mapCss}`;
2230
2230
  if (multicol.length)
2231
2231
  log(`audit: ${multicol.length} fragmenting multicol warning(s)`);
2232
2232
  }
2233
+ {
2234
+ const missing = JSON.parse(await page.evaluate(`(() => {
2235
+ const words = new Map();
2236
+ const styled = new Map();
2237
+ const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
2238
+ for (let n = walker.nextNode(); n; n = walker.nextNode()) {
2239
+ const found = n.data.match(/\\p{L}{7,}/gu);
2240
+ const el = n.parentElement;
2241
+ if (!found || !el) continue;
2242
+ if (!styled.has(el)) styled.set(el, getComputedStyle(el).hyphens === "auto");
2243
+ if (!styled.get(el)) continue;
2244
+ const host = el.closest("[lang]");
2245
+ const lang = host ? host.getAttribute("lang") : null;
2246
+ if (!words.has(lang)) words.set(lang, new Set());
2247
+ const set = words.get(lang);
2248
+ for (const w of found) if (set.size < 200) set.add(w);
2249
+ }
2250
+ if (!words.size) return "[]";
2251
+ const box = document.createElement("div");
2252
+ box.style.cssText = "position:absolute;left:-10000px;top:0;visibility:hidden";
2253
+ const probes = [];
2254
+ for (const [lang, set] of words) {
2255
+ for (const w of [...set].sort((a, b) => b.length - a.length).slice(0, 8)) {
2256
+ const pair = ["auto", "manual"].map((h) => {
2257
+ const d = document.createElement("div");
2258
+ if (lang !== null) d.setAttribute("lang", lang);
2259
+ d.style.cssText = "width:1px;font:16px/16px serif;word-break:normal;overflow-wrap:normal;hyphens:" + h;
2260
+ d.textContent = w;
2261
+ box.appendChild(d);
2262
+ return d;
2263
+ });
2264
+ probes.push({ lang, pair });
2265
+ }
2266
+ }
2267
+ document.body.appendChild(box);
2268
+ const hyphenates = new Set();
2269
+ for (const { lang, pair } of probes)
2270
+ if (pair[0].offsetHeight > pair[1].offsetHeight) hyphenates.add(lang);
2271
+ box.remove();
2272
+ const ua = navigator.userAgent;
2273
+ const browser = (/Electron\\/[\\d.]+/.exec(ua) || /(?:HeadlessChrome|Chrome)\\/[\\d.]+/.exec(ua) || [ua])[0];
2274
+ return JSON.stringify([...words.keys()].filter((l) => !hyphenates.has(l)).map((lang) => ({ lang, browser })));
2275
+ })()`));
2276
+ for (const { lang, browser: browser2 } of missing)
2277
+ diagnose("engine.hyphenation.unsupported", `Your stylesheets set hyphens: auto, but the browser making this PDF (${browser2}) has no hyphenation dictionary for ${lang ? `"${lang}"` : "the document's language"}, so no word is hyphenated automatically and lines (and pages) break differently than in a browser that has one. Build in a browser that hyphenates, such as Chrome (which the gutterpress CLI uses), or add soft hyphens (&shy;) where a word may break.`);
2278
+ if (missing.length)
2279
+ log(`audit: hyphenation unavailable for ${missing.length} language(s)`);
2280
+ }
2233
2281
  if (bytes === undefined) {
2234
2282
  prints++;
2235
2283
  bytes = await printPdf(page);
@@ -4,7 +4,7 @@ import {
4
4
  // package.json
5
5
  var package_default = {
6
6
  name: "gutterpress",
7
- version: "0.11.17",
7
+ version: "0.11.18-alpha.10",
8
8
  description: "Markdown-to-PDF converter for professional print layout using a native Chromium print engine and Ghostscript.",
9
9
  author: "itlackey",
10
10
  license: "MPL-2.0",
package/dist/cli.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  UsageError,
7
7
  package_default,
8
8
  rejectUnknownFlags
9
- } from "./cli-8nw6d915.js";
9
+ } from "./cli-ytck518d.js";
10
10
  import {
11
11
  EXIT_CODES
12
12
  } from "./cli-46ycxe6r.js";
@@ -18,14 +18,14 @@ import {
18
18
  import { defineCommand, parseArgs, runMain } from "citty";
19
19
  import { statSync } from "node:fs";
20
20
  var SUBCOMMANDS = {
21
- new: () => import("./new-a9m2jwyy.js").then((m) => m.default),
22
- preview: () => import("./preview-7z8tt0b4.js").then((m) => m.default),
23
- build: () => import("./build-gxy185pv.js").then((m) => m.default),
24
- publish: () => import("./publish-bbftdxh2.js").then((m) => m.default),
25
- validate: () => import("./validate-x1ha1gqj.js").then((m) => m.default),
26
- preflight: () => import("./preflight-w3tnbtb8.js").then((m) => m.default),
27
- doctor: () => import("./doctor-fygmzevd.js").then((m) => m.default),
28
- ext: () => import("./ext-c48s56jm.js").then((m) => m.default)
21
+ new: () => import("./new-pbd5zrds.js").then((m) => m.default),
22
+ preview: () => import("./preview-g1hp0jt8.js").then((m) => m.default),
23
+ build: () => import("./build-2tgs5j4d.js").then((m) => m.default),
24
+ publish: () => import("./publish-vkbmf3tj.js").then((m) => m.default),
25
+ validate: () => import("./validate-q1xj2qxn.js").then((m) => m.default),
26
+ preflight: () => import("./preflight-vnkb8tj7.js").then((m) => m.default),
27
+ doctor: () => import("./doctor-y4yg51zy.js").then((m) => m.default),
28
+ ext: () => import("./ext-t2sye4as.js").then((m) => m.default)
29
29
  };
30
30
  var VERSION = package_default.version;
31
31
  var main = defineCommand({
@@ -50,7 +50,7 @@ async function preflightRequiredInvocations(rawArgs) {
50
50
  const [command, ...commandArgs] = rawArgs;
51
51
  try {
52
52
  if (command === "new") {
53
- const { newArgs } = await import("./new-a9m2jwyy.js");
53
+ const { newArgs } = await import("./new-pbd5zrds.js");
54
54
  rejectUnknownFlags(commandArgs, newArgs, "new");
55
55
  const parsed = parseArgs(commandArgs, {
56
56
  ...newArgs,
@@ -62,7 +62,7 @@ async function preflightRequiredInvocations(rawArgs) {
62
62
  return;
63
63
  }
64
64
  if (command === "preflight") {
65
- const { preflightArgs } = await import("./preflight-w3tnbtb8.js");
65
+ const { preflightArgs } = await import("./preflight-vnkb8tj7.js");
66
66
  rejectUnknownFlags(commandArgs, preflightArgs, "preflight");
67
67
  const parsed = parseArgs(commandArgs, {
68
68
  ...preflightArgs,
@@ -82,7 +82,7 @@ async function preflightRequiredInvocations(rawArgs) {
82
82
  }
83
83
  if (subcommand.startsWith("-"))
84
84
  return;
85
- const { EXT_SUBCOMMANDS, extAddArgs, extRemoveArgs, extEnableArgs, extDisableArgs } = await import("./ext-c48s56jm.js");
85
+ const { EXT_SUBCOMMANDS, extAddArgs, extRemoveArgs, extEnableArgs, extDisableArgs } = await import("./ext-t2sye4as.js");
86
86
  if (!EXT_SUBCOMMANDS.includes(subcommand)) {
87
87
  throw new UsageError(`gutterpress ext: unknown command "${subcommand}"`);
88
88
  }
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  getSystemDiagnostics,
3
3
  log
4
- } from "./cli-zfgvssqz.js";
4
+ } from "./cli-d0cq87s5.js";
5
5
  import {
6
6
  UsageError,
7
7
  rejectExtraPositionals,
8
8
  rejectUnknownFlags
9
- } from "./cli-8nw6d915.js";
9
+ } from "./cli-ytck518d.js";
10
10
  import"./cli-46ycxe6r.js";
11
11
  import"./cli-7fkhgtfn.js";
12
12
  import"./cli-37x76zdn.js";
@@ -8,7 +8,7 @@ import { type PostprocessResult } from "./postprocess.ts";
8
8
  * set is closed here so a surface's label table can be asserted complete
9
9
  * against it rather than drifting silently as checks are added.
10
10
  */
11
- export type BuildDiagnosticCode = "engine.width.overflow" | "engine.width.intrinsic" | "engine.xref.broken" | "engine.abspos.leak" | "engine.layer.trapped" | "engine.multicol.dead-column" | "engine.content.overheight" | "engine.image.low-dpi" | "engine.flush.margin-box" | "engine.page-background.unreferenced";
11
+ export type BuildDiagnosticCode = "engine.width.overflow" | "engine.width.intrinsic" | "engine.xref.broken" | "engine.abspos.leak" | "engine.layer.trapped" | "engine.multicol.dead-column" | "engine.content.overheight" | "engine.image.low-dpi" | "engine.flush.margin-box" | "engine.page-background.unreferenced" | "engine.hyphenation.unsupported";
12
12
  export declare const BUILD_DIAGNOSTIC_CODES: readonly BuildDiagnosticCode[];
13
13
  export interface BuildDiagnostic {
14
14
  code: BuildDiagnosticCode;
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  build
3
- } from "./cli-ycbg7mxk.js";
3
+ } from "./cli-ptez7zcc.js";
4
4
  import {
5
5
  BuildError
6
6
  } from "./cli-46ycxe6r.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  build
3
- } from "./index-09h3n36d.js";
3
+ } from "./index-n8vs6pss.js";
4
4
  import {
5
5
  BuildError
6
- } from "./index-vmcfahe2.js";
6
+ } from "./index-jt552wtf.js";
7
7
  import"./index-rzm1phg0.js";
8
8
  import"./index-37x76zdn.js";
9
9
 
@@ -12,17 +12,17 @@ import {
12
12
  searchNpmExtensions,
13
13
  setExtensionEnabled,
14
14
  updateExtensions
15
- } from "./cli-a4qtctrw.js";
16
- import"./cli-zfgvssqz.js";
15
+ } from "./cli-gf1ywzeg.js";
16
+ import"./cli-d0cq87s5.js";
17
17
  import {
18
18
  UsageError,
19
19
  exitForUsage,
20
20
  rejectExtraPositionals,
21
21
  rejectUnknownFlags,
22
22
  resolveProjectDir
23
- } from "./cli-8nw6d915.js";
23
+ } from "./cli-ytck518d.js";
24
24
  import"./cli-ht1bcqdd.js";
25
- import"./cli-ycbg7mxk.js";
25
+ import"./cli-ptez7zcc.js";
26
26
  import {
27
27
  EXIT_CODES
28
28
  } from "./cli-46ycxe6r.js";