@danielsimonjr/sciengjs 0.9.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +3 -2
  2. package/THIRD_PARTY_NOTICES.md +65 -4
  3. package/dist/browser/render.d.ts +13 -0
  4. package/dist/browser/render.js +10 -6
  5. package/dist/browser/render.js.map +1 -1
  6. package/dist/core.js +20 -12
  7. package/dist/core.js.map +1 -1
  8. package/dist/registry.d.ts +6 -0
  9. package/dist/registry.js +20 -0
  10. package/dist/registry.js.map +1 -1
  11. package/dist/tex/backend-pdf.d.ts +3 -0
  12. package/dist/tex/backend-pdf.js +10 -0
  13. package/dist/tex/backend-pdf.js.map +1 -0
  14. package/dist/tex/backend-png.d.ts +6 -0
  15. package/dist/tex/backend-png.js +19 -0
  16. package/dist/tex/backend-png.js.map +1 -0
  17. package/dist/tex/backend-svg.d.ts +3 -0
  18. package/dist/tex/backend-svg.js +8 -0
  19. package/dist/tex/backend-svg.js.map +1 -0
  20. package/dist/tex/bundles.d.ts +49 -0
  21. package/dist/tex/bundles.js +170 -0
  22. package/dist/tex/bundles.js.map +1 -0
  23. package/dist/tex/bundles.json +26 -0
  24. package/dist/tex/detect.d.ts +27 -0
  25. package/dist/tex/detect.js +212 -0
  26. package/dist/tex/detect.js.map +1 -0
  27. package/dist/tex/dvi.d.ts +44 -0
  28. package/dist/tex/dvi.js +280 -0
  29. package/dist/tex/dvi.js.map +1 -0
  30. package/dist/tex/host.d.ts +82 -0
  31. package/dist/tex/host.js +313 -0
  32. package/dist/tex/host.js.map +1 -0
  33. package/dist/tex/index.d.ts +16 -0
  34. package/dist/tex/index.js +17 -0
  35. package/dist/tex/index.js.map +1 -0
  36. package/dist/tex/render.d.ts +66 -0
  37. package/dist/tex/render.js +72 -0
  38. package/dist/tex/render.js.map +1 -0
  39. package/dist/tex/run.d.ts +51 -0
  40. package/dist/tex/run.js +54 -0
  41. package/dist/tex/run.js.map +1 -0
  42. package/dist/tex/specials.d.ts +32 -0
  43. package/dist/tex/specials.js +145 -0
  44. package/dist/tex/specials.js.map +1 -0
  45. package/dist/tex/stage.d.ts +34 -0
  46. package/dist/tex/stage.js +102 -0
  47. package/dist/tex/stage.js.map +1 -0
  48. package/dist/tex/tfm.d.ts +15 -0
  49. package/dist/tex/tfm.js +33 -0
  50. package/dist/tex/tfm.js.map +1 -0
  51. package/dist/tex/type1.d.ts +32 -0
  52. package/dist/tex/type1.js +402 -0
  53. package/dist/tex/type1.js.map +1 -0
  54. package/dist/tex/vfs.d.ts +37 -0
  55. package/dist/tex/vfs.js +80 -0
  56. package/dist/tex/vfs.js.map +1 -0
  57. package/dist/tex/wasm.d.ts +16 -0
  58. package/dist/tex/wasm.js +8 -0
  59. package/dist/tex/wasm.js.map +1 -0
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/dist/worker/protocol.d.ts +6 -0
  63. package/package.json +110 -106
@@ -0,0 +1,280 @@
1
+ // DVI to SVG. Each glyph becomes one <path> with the outline of its Type 1 font; each rule becomes a <rect>.
2
+ // The format of the DVI file: dvitype.web, part 3. Units: the SVG unit is the TeX point, unless the option
3
+ // unitPerPt gives another unit.
4
+ import { readTfm } from "./tfm.js";
5
+ import { readType1 } from "./type1.js";
6
+ const r = (v) => String(Math.round(v * 1000) / 1000);
7
+ /**
8
+ * Converts a DVI file to SVG.
9
+ * `fontFiles` gives the files of a font by name. It returns `null` for an unknown font.
10
+ * A font with no PFB keeps its TFM advances, and each of its glyphs goes in the missing list.
11
+ */
12
+ export function dviToSvg(dvi, fontFiles, opt = {}) {
13
+ let p = 0;
14
+ const u = (n) => {
15
+ let v = 0;
16
+ for (let i = 0; i < n; i++)
17
+ v = v * 256 + dvi[p++];
18
+ return v;
19
+ };
20
+ const s = (n) => {
21
+ const v = u(n);
22
+ const lim = 2 ** (8 * n - 1);
23
+ return v >= lim ? v - 2 * lim : v;
24
+ };
25
+ if (dvi[0] !== 247 || dvi[1] !== 2)
26
+ throw new Error("not a DVI file");
27
+ p = 2;
28
+ const num = u(4);
29
+ const den = u(4);
30
+ const mag = u(4);
31
+ p += 1 + dvi[14];
32
+ // the SVG unit: the TeX point, or another unit with opt.unitPerPt (72/72.27 gives the big point)
33
+ const toPt = (num / den) * (mag / 1000) * (72.27 / 254000) * (opt.unitPerPt ?? 1);
34
+ const fonts = new Map();
35
+ const loaded = new Map();
36
+ const missing = new Set();
37
+ const out = [];
38
+ let glyphs = 0;
39
+ let rules = 0;
40
+ let specials = 0;
41
+ let page = 0;
42
+ let minX = Infinity;
43
+ let minY = Infinity;
44
+ let maxX = -Infinity;
45
+ let maxY = -Infinity;
46
+ const box = (x0, y0, x1, y1) => {
47
+ minX = Math.min(minX, x0);
48
+ minY = Math.min(minY, y0);
49
+ maxX = Math.max(maxX, x1);
50
+ maxY = Math.max(maxY, y1);
51
+ };
52
+ const want = opt.page ?? 1;
53
+ let h = 0;
54
+ let v = 0;
55
+ let w = 0;
56
+ let x = 0;
57
+ let y = 0;
58
+ let z = 0;
59
+ let f;
60
+ const stack = [];
61
+ const fontDef = (k) => {
62
+ u(4); // checksum
63
+ const sz = u(4);
64
+ u(4); // design size
65
+ const a = u(1);
66
+ const l = u(1);
67
+ let name = "";
68
+ for (let i = 0; i < a + l; i++)
69
+ name += String.fromCharCode(dvi[p++]);
70
+ if (fonts.has(k))
71
+ return;
72
+ let ld = loaded.get(name);
73
+ if (ld === undefined) {
74
+ const files = fontFiles(name);
75
+ if (!files) {
76
+ missing.add(name);
77
+ ld = null;
78
+ }
79
+ else
80
+ ld = { tfm: readTfm(files.tfm), t1: files.pfb ? readType1(files.pfb) : null };
81
+ loaded.set(name, ld);
82
+ }
83
+ fonts.set(k, { name, size: sz, ld });
84
+ };
85
+ const drawChar = (c) => {
86
+ const fnt = f;
87
+ if (!fnt)
88
+ throw new Error("char before a font");
89
+ let adv = 0;
90
+ if (fnt.ld) {
91
+ const wd = fnt.ld.tfm.widths.get(c);
92
+ if (wd === undefined)
93
+ throw new Error(`no width for char ${c} in ${fnt.name}`);
94
+ adv = wd * fnt.size; // TFM width times the font size, in DVI units
95
+ }
96
+ if (page === want && fnt.ld) {
97
+ const g = fnt.ld.t1?.glyph(c);
98
+ if (!g)
99
+ missing.add(`${fnt.name}:${c}`);
100
+ else if (g.d) {
101
+ const k = (fnt.size * toPt) / 1000;
102
+ const X = h * toPt;
103
+ const Y = v * toPt;
104
+ const ks = Number(k.toFixed(6));
105
+ out.push(`<path transform="translate(${r(X)} ${r(Y)}) scale(${ks} ${-ks})" d="${g.d}"/>`);
106
+ if (!opt.transformed?.())
107
+ box(X + g.bbox[0] * k, Y - g.bbox[3] * k, X + g.bbox[2] * k, Y - g.bbox[1] * k);
108
+ glyphs++;
109
+ }
110
+ }
111
+ return adv;
112
+ };
113
+ const drawRule = (a, b) => {
114
+ if (page === want && a > 0 && b > 0) {
115
+ const X = h * toPt;
116
+ const Y = (v - a) * toPt;
117
+ out.push(`<rect x="${r(X)}" y="${r(Y)}" width="${r(b * toPt)}" height="${r(a * toPt)}"/>`);
118
+ if (!opt.transformed?.())
119
+ box(X, Y, X + b * toPt, Y + a * toPt);
120
+ rules++;
121
+ }
122
+ };
123
+ for (;;) {
124
+ if (p >= dvi.length)
125
+ throw new Error("DVI ended without post");
126
+ const o = dvi[p++];
127
+ if (o < 128) {
128
+ h += drawChar(o);
129
+ continue;
130
+ }
131
+ if (o >= 171 && o <= 234) {
132
+ f = fonts.get(o - 171);
133
+ continue;
134
+ }
135
+ switch (o) {
136
+ case 128:
137
+ case 129:
138
+ case 130:
139
+ case 131:
140
+ h += drawChar(u(o - 127));
141
+ break;
142
+ case 133:
143
+ case 134:
144
+ case 135:
145
+ case 136:
146
+ drawChar(u(o - 132));
147
+ break;
148
+ case 132: {
149
+ const a = s(4);
150
+ const b = s(4);
151
+ drawRule(a, b);
152
+ h += b;
153
+ break;
154
+ }
155
+ case 137: {
156
+ const a = s(4);
157
+ const b = s(4);
158
+ drawRule(a, b);
159
+ break;
160
+ }
161
+ case 138:
162
+ break;
163
+ case 139:
164
+ p += 44;
165
+ page++;
166
+ h = v = w = x = y = z = 0;
167
+ stack.length = 0;
168
+ f = undefined;
169
+ break;
170
+ case 140:
171
+ break;
172
+ case 141:
173
+ stack.push([h, v, w, x, y, z]);
174
+ break;
175
+ case 142: {
176
+ const top = stack.pop();
177
+ if (!top)
178
+ throw new Error("DVI pop with an empty stack");
179
+ [h, v, w, x, y, z] = top;
180
+ break;
181
+ }
182
+ case 143:
183
+ case 144:
184
+ case 145:
185
+ case 146:
186
+ h += s(o - 142);
187
+ break;
188
+ case 147:
189
+ h += w;
190
+ break;
191
+ case 148:
192
+ case 149:
193
+ case 150:
194
+ case 151:
195
+ w = s(o - 147);
196
+ h += w;
197
+ break;
198
+ case 152:
199
+ h += x;
200
+ break;
201
+ case 153:
202
+ case 154:
203
+ case 155:
204
+ case 156:
205
+ x = s(o - 152);
206
+ h += x;
207
+ break;
208
+ case 157:
209
+ case 158:
210
+ case 159:
211
+ case 160:
212
+ v += s(o - 156);
213
+ break;
214
+ case 161:
215
+ v += y;
216
+ break;
217
+ case 162:
218
+ case 163:
219
+ case 164:
220
+ case 165:
221
+ y = s(o - 161);
222
+ v += y;
223
+ break;
224
+ case 166:
225
+ v += z;
226
+ break;
227
+ case 167:
228
+ case 168:
229
+ case 169:
230
+ case 170:
231
+ z = s(o - 166);
232
+ v += z;
233
+ break;
234
+ case 235:
235
+ case 236:
236
+ case 237:
237
+ case 238:
238
+ f = fonts.get(u(o - 234));
239
+ break;
240
+ case 239:
241
+ case 240:
242
+ case 241:
243
+ case 242: {
244
+ const k = u(o - 238);
245
+ let text = "";
246
+ for (let i = 0; i < k; i++)
247
+ text += String.fromCharCode(dvi[p + i]);
248
+ p += k;
249
+ specials++;
250
+ // opt.special reads one \special at the current position (in SVG units) and can
251
+ // give SVG text for the page and a box [x0, y0, x1, y1] for the bounds
252
+ const res = page === want && opt.special ? opt.special(text, { x: h * toPt, y: v * toPt, unit: opt.unitPerPt ?? 1 }) : null;
253
+ if (res?.svg)
254
+ out.push(res.svg);
255
+ if (res?.box)
256
+ box(res.box[0], res.box[1], res.box[2], res.box[3]);
257
+ break;
258
+ }
259
+ case 243:
260
+ case 244:
261
+ case 245:
262
+ case 246:
263
+ fontDef(u(o - 242));
264
+ break;
265
+ case 248: {
266
+ const m = opt.margin ?? 1;
267
+ if (!Number.isFinite(minX)) {
268
+ minX = minY = 0;
269
+ maxX = maxY = 1;
270
+ }
271
+ const vb = [minX - m, minY - m, maxX - minX + 2 * m, maxY - minY + 2 * m].map(r).join(" ");
272
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${vb}" width="${r(maxX - minX + 2 * m)}pt" height="${r(maxY - minY + 2 * m)}pt">\n${out.join("\n")}\n</svg>\n`;
273
+ return { svg, glyphs, rules, specials, pages: page, missing: [...missing], fonts: [...loaded.keys()] };
274
+ }
275
+ default:
276
+ throw new Error(`DVI opcode ${o} at byte ${p - 1}`);
277
+ }
278
+ }
279
+ }
280
+ //# sourceMappingURL=dvi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dvi.js","sourceRoot":"","sources":["../../src/tex/dvi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ import type { EngineImports, WasmInstance } from "./wasm.ts";
2
+ import { type TexTree } from "./vfs.ts";
3
+ /**
4
+ * The default bound on the bytes that one run writes, in the terminal output and in the output files together.
5
+ * It is 64 MiB: the log, the DVI and the terminal of a render hold well under 1 MiB, and the format build writes about 24 MB.
6
+ * A caller sets another bound with `maxOutputBytes`, for example from the `maxMemoryMb` key of the configuration.
7
+ */
8
+ export declare const DEFAULT_MAX_OUTPUT_BYTES: number;
9
+ /** Thrown by the `hostexit` import to leave the program with an exit code. */
10
+ export declare class ExitSignal extends Error {
11
+ readonly code: number;
12
+ constructor(code: number);
13
+ }
14
+ /** The options of the host. */
15
+ export interface HostOptions {
16
+ /** The virtual file tree. Output files go to the tree when the program closes them. */
17
+ files: TexTree;
18
+ /** The lines of terminal input. */
19
+ terminal?: string[];
20
+ /** The slot addresses of the standard files `input` and `output`. */
21
+ std: {
22
+ input: number;
23
+ output: number;
24
+ };
25
+ /** More imports (external procedures). */
26
+ extra?: Record<string, (...args: number[]) => unknown>;
27
+ /** The names that mean the terminal. The default is `TTY:`. */
28
+ ttyNames?: string[];
29
+ /**
30
+ * Turns a file name of the program into the key of the tree. The default is `treeName`.
31
+ * A caller key must return a name that `treeName` accepts, because the tree reduces the key again.
32
+ */
33
+ nameKey?: (raw: string) => string;
34
+ /** Echo the terminal input lines to the terminal output, as a terminal does. The default is true. */
35
+ echo?: boolean;
36
+ /** The time in milliseconds on the `performance.now()` clock after which a host call throws `E_TIMEOUT`. */
37
+ deadline?: number;
38
+ /** The time limit in milliseconds, for the message of the timeout. */
39
+ timeoutMs?: number;
40
+ /** The bound on the bytes that the run writes to the terminal and to files. The default is `DEFAULT_MAX_OUTPUT_BYTES`. */
41
+ maxOutputBytes?: number;
42
+ }
43
+ /** The host of one run. */
44
+ export declare class TexHost {
45
+ private readonly files;
46
+ private readonly std;
47
+ private readonly extra;
48
+ private readonly ttyNames;
49
+ private readonly echoInput;
50
+ private readonly nameKey;
51
+ private readonly termIn;
52
+ private readonly termOut;
53
+ private readonly handles;
54
+ private mem;
55
+ private dv;
56
+ private ticks;
57
+ private outputBytes;
58
+ private readonly maxOutputBytes;
59
+ private readonly refusedNames;
60
+ private readonly deadline;
61
+ private readonly timeoutMs;
62
+ constructor(o: HostOptions);
63
+ /** Connects the host to the instance, whose memory the host functions read and write. */
64
+ attach(instance: WasmInstance): void;
65
+ /** The text that the program wrote to the terminal. */
66
+ terminalText(): string;
67
+ /** The file names that the program tried to open and that escape the tree. Each open failed. */
68
+ get refused(): string[];
69
+ /** Stores every file that is still open for writing. */
70
+ finish(): void;
71
+ private flush;
72
+ private charge;
73
+ private tick;
74
+ private handleOf;
75
+ private newHandle;
76
+ private name;
77
+ private fill;
78
+ private echo;
79
+ private eofOf;
80
+ /** The import object for `WebAssembly.instantiate`. */
81
+ imports(): EngineImports;
82
+ }