desmost 0.10.1 → 0.11.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/README.md +5 -5
- package/dist/compiler/compile.d.ts +1 -1
- package/dist/compiler/compile.js +1 -1
- package/dist/compiler/compiler.d.ts.map +1 -1
- package/dist/compiler/compiler.js +9 -8
- package/dist/compiler/compiler.js.map +1 -1
- package/dist/compiler/format.js +1 -1
- package/dist/compiler/format.js.map +1 -1
- package/dist/decompiler/decompile.d.ts +13 -5
- package/dist/decompiler/decompile.d.ts.map +1 -1
- package/dist/decompiler/decompile.js +24 -13
- package/dist/decompiler/decompile.js.map +1 -1
- package/dist/decompiler/emit.d.ts +5 -2
- package/dist/decompiler/emit.d.ts.map +1 -1
- package/dist/decompiler/emit.js +41 -20
- package/dist/decompiler/emit.js.map +1 -1
- package/dist/decompiler/extract.d.ts +1 -9
- package/dist/decompiler/extract.d.ts.map +1 -1
- package/dist/decompiler/extract.js +24 -58
- package/dist/decompiler/extract.js.map +1 -1
- package/dist/decompiler/format.d.ts +0 -1
- package/dist/decompiler/format.d.ts.map +1 -1
- package/dist/decompiler/format.js +3 -9
- package/dist/decompiler/format.js.map +1 -1
- package/dist/errors.d.ts +14 -7
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -2
- package/dist/errors.js.map +1 -1
- package/dist/magic/expr/index.js +6 -6
- package/dist/magic/expr/index.js.map +1 -1
- package/dist/magic/expr/latex.d.ts +5 -2
- package/dist/magic/expr/latex.d.ts.map +1 -1
- package/dist/magic/expr/latex.js +4 -2
- package/dist/magic/expr/latex.js.map +1 -1
- package/dist/magic/expr/text.d.ts +5 -2
- package/dist/magic/expr/text.d.ts.map +1 -1
- package/dist/magic/expr/text.js +4 -2
- package/dist/magic/expr/text.js.map +1 -1
- package/dist/magic/global/{dark-mode.d.ts → dark.d.ts} +6 -2
- package/dist/magic/global/dark.d.ts.map +1 -0
- package/dist/magic/global/dark.js +20 -0
- package/dist/magic/global/dark.js.map +1 -0
- package/dist/magic/global/desmos.d.ts +4 -1
- package/dist/magic/global/desmos.d.ts.map +1 -1
- package/dist/magic/global/desmos.js +23 -0
- package/dist/magic/global/desmos.js.map +1 -1
- package/dist/magic/global/index.d.ts +5 -5
- package/dist/magic/global/index.d.ts.map +1 -1
- package/dist/magic/global/index.js +8 -11
- package/dist/magic/global/index.js.map +1 -1
- package/dist/magic/global/viewport.d.ts +3 -0
- package/dist/magic/global/viewport.d.ts.map +1 -1
- package/dist/magic/global/viewport.js +20 -0
- package/dist/magic/global/viewport.js.map +1 -1
- package/dist/magic/incantation.d.ts +15 -2
- package/dist/magic/incantation.d.ts.map +1 -1
- package/dist/magic/incantation.js +8 -1
- package/dist/magic/incantation.js.map +1 -1
- package/dist/magic/local/anim.d.ts +5 -1
- package/dist/magic/local/anim.d.ts.map +1 -1
- package/dist/magic/local/anim.js +12 -1
- package/dist/magic/local/anim.js.map +1 -1
- package/dist/magic/local/colour.d.ts +7 -3
- package/dist/magic/local/colour.d.ts.map +1 -1
- package/dist/magic/local/colour.js +13 -3
- package/dist/magic/local/colour.js.map +1 -1
- package/dist/magic/local/dashed.d.ts +5 -1
- package/dist/magic/local/dashed.d.ts.map +1 -1
- package/dist/magic/local/dashed.js +12 -1
- package/dist/magic/local/dashed.js.map +1 -1
- package/dist/magic/local/fill.d.ts +5 -1
- package/dist/magic/local/fill.d.ts.map +1 -1
- package/dist/magic/local/fill.js +15 -1
- package/dist/magic/local/fill.js.map +1 -1
- package/dist/magic/local/hide.d.ts +5 -1
- package/dist/magic/local/hide.d.ts.map +1 -1
- package/dist/magic/local/hide.js +12 -1
- package/dist/magic/local/hide.js.map +1 -1
- package/dist/magic/local/index.d.ts +13 -2
- package/dist/magic/local/index.d.ts.map +1 -1
- package/dist/magic/local/index.js +24 -24
- package/dist/magic/local/index.js.map +1 -1
- package/dist/magic/local/label.d.ts +6 -2
- package/dist/magic/local/label.d.ts.map +1 -1
- package/dist/magic/local/label.js +19 -1
- package/dist/magic/local/label.js.map +1 -1
- package/dist/magic/local/line.d.ts +5 -1
- package/dist/magic/local/line.d.ts.map +1 -1
- package/dist/magic/local/line.js +19 -1
- package/dist/magic/local/line.js.map +1 -1
- package/dist/magic/local/no-line.d.ts +5 -1
- package/dist/magic/local/no-line.d.ts.map +1 -1
- package/dist/magic/local/no-line.js +12 -1
- package/dist/magic/local/no-line.js.map +1 -1
- package/dist/magic/local/point.d.ts +5 -1
- package/dist/magic/local/point.d.ts.map +1 -1
- package/dist/magic/local/point.js +19 -1
- package/dist/magic/local/point.js.map +1 -1
- package/dist/magic/local/secret.d.ts +5 -1
- package/dist/magic/local/secret.d.ts.map +1 -1
- package/dist/magic/local/secret.js +12 -1
- package/dist/magic/local/secret.js.map +1 -1
- package/dist/magic/local/slider.d.ts +5 -1
- package/dist/magic/local/slider.d.ts.map +1 -1
- package/dist/magic/local/slider.js +13 -1
- package/dist/magic/local/slider.js.map +1 -1
- package/dist/parser/ast.d.ts +9 -3
- package/dist/parser/ast.d.ts.map +1 -1
- package/dist/parser/ast.js +3 -1
- package/dist/parser/ast.js.map +1 -1
- package/dist/parser/desmost-parser.d.ts +2 -2
- package/dist/parser/desmost-parser.d.ts.map +1 -1
- package/dist/parser/desmost-parser.js +6 -4
- package/dist/parser/desmost-parser.js.map +1 -1
- package/dist/parser/errors.d.ts +11 -0
- package/dist/parser/errors.d.ts.map +1 -0
- package/dist/parser/errors.js +4 -0
- package/dist/parser/errors.js.map +1 -0
- package/dist/parser/generic-parser.d.ts +7 -5
- package/dist/parser/generic-parser.d.ts.map +1 -1
- package/dist/parser/generic-parser.js +7 -10
- package/dist/parser/generic-parser.js.map +1 -1
- package/package.json +1 -1
- package/src/compiler/compile.ts +1 -1
- package/src/compiler/compiler.ts +10 -9
- package/src/compiler/format.ts +1 -1
- package/src/decompiler/decompile.ts +30 -14
- package/src/decompiler/emit.ts +57 -25
- package/src/decompiler/extract.ts +30 -89
- package/src/decompiler/format.ts +3 -14
- package/src/decompiler/readme.md +2 -2
- package/src/errors.ts +13 -7
- package/src/magic/.template.ts +8 -0
- package/src/magic/expr/index.ts +6 -7
- package/src/magic/expr/latex.ts +8 -4
- package/src/magic/expr/text.ts +8 -4
- package/src/magic/global/dark.ts +29 -0
- package/src/magic/global/desmos.ts +35 -5
- package/src/magic/global/index.ts +8 -14
- package/src/magic/global/viewport.ts +29 -0
- package/src/magic/incantation.ts +28 -6
- package/src/magic/local/anim.ts +16 -3
- package/src/magic/local/colour.ts +18 -6
- package/src/magic/local/dashed.ts +16 -2
- package/src/magic/local/fill.ts +20 -3
- package/src/magic/local/hide.ts +16 -2
- package/src/magic/local/index.ts +24 -25
- package/src/magic/local/label.ts +31 -8
- package/src/magic/local/line.ts +25 -3
- package/src/magic/local/no-line.ts +16 -2
- package/src/magic/local/point.ts +27 -3
- package/src/magic/local/secret.ts +16 -2
- package/src/magic/local/slider.ts +18 -3
- package/src/parser/ast.ts +10 -7
- package/src/parser/desmost-parser.ts +10 -6
- package/src/parser/errors.ts +10 -0
- package/src/parser/generic-parser.ts +9 -11
- package/svelte/desmost.svelte +107 -107
- package/dist/magic/expr/index.d.ts +0 -3
- package/dist/magic/expr/index.d.ts.map +0 -1
- package/dist/magic/global/dark-mode.d.ts.map +0 -1
- package/dist/magic/global/dark-mode.js +0 -9
- package/dist/magic/global/dark-mode.js.map +0 -1
- package/src/magic/global/dark-mode.ts +0 -15
package/README.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
[**Docs**](https://github.com/Sup2point0/desmost/tree/main/docs)  ·  [**Changelog**](https://github.com/Sup2point0/desmost/blob/main/CHANGELOG.md)  ·  [**Learn**](https://github.com/Sup2point0/desmost/blob/main/docs/writing/learn-x-in-y.md)  ·  [**Playground**](https://sup2point0.github.io/desmost)
|
|
4
4
|
|
|
5
|
+
<a href="https://brainmade.org">
|
|
6
|
+
<img align="right" height="40" src=".github/brainmade-black.svg" />
|
|
7
|
+
</a>
|
|
8
|
+
|
|
5
9
|
A tiny DSL for compiling LaTeX to Desmos.
|
|
6
10
|
|
|
7
11
|
|
|
@@ -9,6 +13,7 @@ A tiny DSL for compiling LaTeX to Desmos.
|
|
|
9
13
|
|
|
10
14
|
|
|
11
15
|
<table>
|
|
16
|
+
<tr></tr>
|
|
12
17
|
<tr>
|
|
13
18
|
<th> You write this: </th>
|
|
14
19
|
<th> and Desmost gives you this: </th>
|
|
@@ -97,8 +102,3 @@ This will replace all ` ```desmos ` blocks from your Markdown source with Desmos
|
|
|
97
102
|
|
|
98
103
|
|
|
99
104
|
<br>
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
<a href="https://brainmade.org">
|
|
103
|
-
<img height="40" src=".github/brainmade-black.svg" />
|
|
104
|
-
</a>
|
|
@@ -25,7 +25,7 @@ source: string,
|
|
|
25
25
|
/**
|
|
26
26
|
* Compilation options.
|
|
27
27
|
*
|
|
28
|
-
* See {@linkcode DesmostOptions} for
|
|
28
|
+
* See {@linkcode DesmostOptions} for available options.
|
|
29
29
|
*/
|
|
30
30
|
options?: Partial<DesmostOptions>): void | DesmostDebug;
|
|
31
31
|
//# sourceMappingURL=compile.d.ts.map
|
package/dist/compiler/compile.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAiB,GAAG,EAAE,MAAM,WAAW,CAAC;AAI/C,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAE5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,GAAG,EAAE,CAAC;CACX;AAGD,qBAAa,eAAe;IAE3B,OAAO,CAAC,MAAM,CAAmB;IAEjC,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,MAAM,CAAe;IAE7B,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAqB;IAEnC;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAQ;IAE9B;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAY;IAElC,OAAO,CAAC,KAAK,CAA4B;IAGzC,8DAA8D;gBAE7D,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc;IAUxB;;OAEG;IACI,OAAO,IAAI,IAAI,GAAG,YAAY;IAuDrC;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC,OAAO,CAAC;IAkBjC,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAoC/B;;OAEG;IACH,2BAA2B,CAAC,UAAU,EAAE,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC;IAgBlF;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;IAsCnD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAiB,GAAG,EAAE,MAAM,WAAW,CAAC;AAI/C,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAE5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,GAAG,EAAE,CAAC;CACX;AAGD,qBAAa,eAAe;IAE3B,OAAO,CAAC,MAAM,CAAmB;IAEjC,kCAAkC;IAClC,OAAO,CAAC,MAAM,CAAQ;IAEtB,OAAO,CAAC,OAAO,CAAgB;IAE/B,OAAO,CAAC,MAAM,CAAe;IAE7B,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAqB;IAEnC;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAQ;IAE9B;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAAY;IAElC,OAAO,CAAC,KAAK,CAA4B;IAGzC,8DAA8D;gBAE7D,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,cAAc;IAUxB;;OAEG;IACI,OAAO,IAAI,IAAI,GAAG,YAAY;IAuDrC;;OAEG;IACH,YAAY,IAAI,QAAQ,CAAC,OAAO,CAAC;IAkBjC,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAoC/B;;OAEG;IACH,2BAA2B,CAAC,UAAU,EAAE,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC;IAgBlF;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC;IAsCnD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;IA2B5D,oBAAoB,IAAI,IAAI;CAM5B"}
|
|
@@ -44,7 +44,7 @@ export class DesmostCompiler {
|
|
|
44
44
|
}
|
|
45
45
|
/* To aggregate errors at the start, we need a target to retroactively inject errors into */
|
|
46
46
|
if (this.options.place_errors === "start") {
|
|
47
|
-
this.desmos.setExpression({ id: "deferred",
|
|
47
|
+
this.desmos.setExpression({ id: "desmost-deferred", type: "text", text: "" });
|
|
48
48
|
}
|
|
49
49
|
/* The compiler is lazy, parsing and evaluating one block at a time (as opposed to first parsing the entire AST). We don't need the whole AST, so this saves memory. */
|
|
50
50
|
/* NOTE: It also doesn't sacrifice performance, since `.setExpressions()` internally just calls `.setExpression()` in a loop anyway. Benchmarks in the frontend produce similar times for both, so there's no performance improvement. */
|
|
@@ -53,12 +53,12 @@ export class DesmostCompiler {
|
|
|
53
53
|
while (!done) {
|
|
54
54
|
done = this.compile_next();
|
|
55
55
|
}
|
|
56
|
+
if (this.options.keep_trailing_blanks) {
|
|
57
|
+
this.flush_pending_blanks();
|
|
58
|
+
}
|
|
56
59
|
}
|
|
57
60
|
catch (e) {
|
|
58
|
-
this.
|
|
59
|
-
}
|
|
60
|
-
if (this.options.keep_trailing_blanks) {
|
|
61
|
-
this.flush_pending_blanks();
|
|
61
|
+
this.evaluate_error(e);
|
|
62
62
|
}
|
|
63
63
|
/* NOTE: No need to check `options.place_errors`!
|
|
64
64
|
|
|
@@ -68,13 +68,13 @@ export class DesmostCompiler {
|
|
|
68
68
|
*/
|
|
69
69
|
if (this.errors.length > 0) {
|
|
70
70
|
this.desmos.setExpression({
|
|
71
|
-
id: "deferred",
|
|
71
|
+
id: "desmost-deferred",
|
|
72
72
|
type: "text",
|
|
73
|
-
text: this.errors.map(err => format_error(err, this.options)).join(
|
|
73
|
+
text: this.errors.map(err => format_error(err, this.options)).join(`\n\n`),
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
|
-
this.desmos.removeExpression({ id: "deferred" });
|
|
77
|
+
this.desmos.removeExpression({ id: "desmost-deferred" });
|
|
78
78
|
}
|
|
79
79
|
if (this.options.debug) {
|
|
80
80
|
this.debug.duration = performance.now() - this.debug.duration;
|
|
@@ -182,6 +182,7 @@ export class DesmostCompiler {
|
|
|
182
182
|
evaluate_error(error) {
|
|
183
183
|
switch (this.options.errors) {
|
|
184
184
|
case "crash":
|
|
185
|
+
this.desmos.setBlank();
|
|
185
186
|
throw error;
|
|
186
187
|
case "suppress":
|
|
187
188
|
console.error(format_error(error, this.options));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGzE,OAAO,EAAE,YAAY,EAAiB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAYpC,MAAM,OAAO,eAAe;IAEnB,MAAM,CAAmB;IAEjC,kCAAkC;IAC1B,MAAM,CAAQ;IAEd,OAAO,CAAgB;IAEvB,MAAM,CAAe;IAE7B,8CAA8C;IACtC,MAAM,GAAmB,EAAE,CAAA;IAEnC;;;;OAIG;IACK,cAAc,GAAG,KAAK,CAAA;IAE9B;;;;OAIG;IACK,cAAc,GAAW,CAAC,CAAA;IAE1B,KAAK,GAAwB,IAAI,CAAA;IAGzC,8DAA8D;IAC9D,YACC,MAAyB,EACzB,MAAc,EACd,OAAuB;QAGvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAGD;;OAEG;IACI,OAAO;QAEb,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,GAAG;gBACZ,QAAQ,EAAE,WAAW,CAAC,GAAG,EAAE;gBAC3B,UAAU,EAAE,CAAC;gBACb,GAAG,EAAE,EAAE;aACP,CAAC;QACH,CAAC;QAED,4FAA4F;QAC5F,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/compiler/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/compiler/format.js
CHANGED
|
@@ -46,7 +46,7 @@ export function prettify_latex(latex) {
|
|
|
46
46
|
latex = latex.replaceAll(/(?<!\\right)(\)|\]|\\\})/g, "\\right$1");
|
|
47
47
|
latex = latex.replaceAll(/(?:\\right\s?)+/g, "\\right");
|
|
48
48
|
latex = latex.replaceAll(/(:|,)(?!\\ ) */g, "$1\\ ");
|
|
49
|
-
latex = latex.replaceAll(/(?<=[^\w]|^)\\?(length|mean|median|count|total|repeat|join|sort|shuffle|unique|mod|ceil|floor|round|sign) ?(?=\(|\\left\()/g, "\\operatorname{$1}");
|
|
49
|
+
latex = latex.replaceAll(/(?<=[^\w]|^)\\?(length|mean|median|min|max|count|total|repeat|join|sort|shuffle|unique|mod|ceil|floor|round|sign) ?(?=\(|\\left\()/g, "\\operatorname{$1}");
|
|
50
50
|
latex = latex.replaceAll(/\s(and|or)\s/g, "\\operatorname{$1}");
|
|
51
51
|
return latex;
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/compiler/format.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,MAAM,UAAU,YAAY,CAC3B,CAAe,EACf,OAAuB;IAGvB,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAE9D,4CAA4C;IAC5C,IAAI,OAAO,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAEvD,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YACnC,OAAO,IAAI,IAAI,CAAC;YAChB,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAK,SAAS;YAAE,OAAO,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAK,SAAS;YAAE,OAAO,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAE5C,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC;AACd,CAAC;AAGD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAE3C,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;IACjE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACtD,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;IACnE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACxD,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAErD,KAAK,GAAG,KAAK,CAAC,UAAU,CACvB,
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/compiler/format.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAGhC,MAAM,UAAU,YAAY,CAC3B,CAAe,EACf,OAAuB;IAGvB,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IAE9D,4CAA4C;IAC5C,IAAI,OAAO,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IAEvD,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YACnC,OAAO,IAAI,IAAI,CAAC;YAChB,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAK,SAAS;YAAE,OAAO,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,IAAK,SAAS;YAAE,OAAO,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7E,CAAC;IAED,OAAO,OAAO,CAAC;AAChB,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAE5C,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,OAAO,KAAK,CAAC;AACd,CAAC;AAGD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAE3C,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;IACjE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;IACtD,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,2BAA2B,EAAE,WAAW,CAAC,CAAC;IACnE,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACxD,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAErD,KAAK,GAAG,KAAK,CAAC,UAAU,CACvB,qIAAqI,EACrI,oBAAoB,CACpB,CAAC;IAEF,KAAK,GAAG,KAAK,CAAC,UAAU,CACvB,eAAe,EACf,oBAAoB,CACpB,CAAC;IAEF,OAAO,KAAK,CAAC;AACd,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { type DesmostOptions } from "../options.js";
|
|
1
2
|
import { Ast } from "../parser/index.js";
|
|
2
|
-
import type { DesmostOptions } from "../options.js";
|
|
3
3
|
export interface SemiStructuredAst {
|
|
4
4
|
globals: Ast.IncantationInvocation[];
|
|
5
5
|
locals: Ast.Expression[];
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
* Decompile Desmos into
|
|
8
|
+
* Decompile Desmos into Desmost.
|
|
9
|
+
*
|
|
10
|
+
* This extracts relevant state from the given `desmos` calculator instance, emitting the minimal raw source code that would reconstruct that calculator instance.
|
|
9
11
|
*
|
|
10
12
|
* The caller must also supply a `blank` calculator instance. This is used as a reference for default field values, so that emitted incantations like `/desmos{}` don't get filled with a huge amount of noise.
|
|
11
13
|
*/
|
|
@@ -19,13 +21,19 @@ desmos: Desmos.Calculator,
|
|
|
19
21
|
*
|
|
20
22
|
* This is used in deciding what settings are noise that can be omitted. For instance, most of your calculator settings are probably set to their default values, so there's no need to include *every single one of them* in `/desmos{}`.
|
|
21
23
|
*/
|
|
22
|
-
blank?: Desmos.Calculator,
|
|
24
|
+
blank?: Desmos.Calculator,
|
|
25
|
+
/**
|
|
26
|
+
* Decompilation options.
|
|
27
|
+
*
|
|
28
|
+
* See {@linkcode DesmostOptions} for available options.
|
|
29
|
+
*/
|
|
30
|
+
options?: Partial<DesmostOptions>): string;
|
|
23
31
|
/**
|
|
24
32
|
* Decompile `desmos` into a semi-structured AST.
|
|
25
33
|
*/
|
|
26
|
-
export declare function desmos_to_ast(desmos: Desmos.Calculator, blank: Desmos.Calculator): SemiStructuredAst;
|
|
34
|
+
export declare function desmos_to_ast(desmos: Desmos.Calculator, blank: Desmos.Calculator, options: DesmostOptions): SemiStructuredAst;
|
|
27
35
|
/**
|
|
28
36
|
* Emit the Desmost source code representation of `ast`.
|
|
29
37
|
*/
|
|
30
|
-
export declare function ast_to_source(ast: SemiStructuredAst): string;
|
|
38
|
+
export declare function ast_to_source(ast: SemiStructuredAst, options: DesmostOptions): string;
|
|
31
39
|
//# sourceMappingURL=decompile.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompile.d.ts","sourceRoot":"","sources":["../../src/decompiler/decompile.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"decompile.d.ts","sourceRoot":"","sources":["../../src/decompiler/decompile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAIhC,MAAM,WAAW,iBAAiB;IAE/B,OAAO,EAAE,GAAG,CAAC,qBAAqB,EAAE,CAAC;IACvC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;CACzB;AAGD;;;;;;GAMG;AACH,wBAAgB,SAAS;AACxB,mDAAmD;AACnD,MAAM,EAAE,MAAM,CAAC,UAAU;AAEzB;;;;;;GAMG;AACH,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU;AAEzB;;;;GAIG;AACH,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,MAAM,CAQR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,MAAM,CAAC,UAAU,EACzB,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,OAAO,EAAE,cAAc,GACrB,iBAAiB,CASnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAOrF"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { emit_incantation, emit_expression } from "./emit.js";
|
|
2
|
+
import { extract_expression } from "./extract.js";
|
|
3
|
+
import { fill_defaults } from "../options.js";
|
|
3
4
|
import { Ast } from "../parser/index.js";
|
|
5
|
+
import { GLOBAL_INCANTATIONS } from "../magic/index.js";
|
|
4
6
|
/**
|
|
5
|
-
* Decompile Desmos into
|
|
7
|
+
* Decompile Desmos into Desmost.
|
|
8
|
+
*
|
|
9
|
+
* This extracts relevant state from the given `desmos` calculator instance, emitting the minimal raw source code that would reconstruct that calculator instance.
|
|
6
10
|
*
|
|
7
11
|
* The caller must also supply a `blank` calculator instance. This is used as a reference for default field values, so that emitted incantations like `/desmos{}` don't get filled with a huge amount of noise.
|
|
8
12
|
*/
|
|
@@ -17,28 +21,35 @@ desmos,
|
|
|
17
21
|
* This is used in deciding what settings are noise that can be omitted. For instance, most of your calculator settings are probably set to their default values, so there's no need to include *every single one of them* in `/desmos{}`.
|
|
18
22
|
*/
|
|
19
23
|
blank,
|
|
20
|
-
|
|
24
|
+
/**
|
|
25
|
+
* Decompilation options.
|
|
26
|
+
*
|
|
27
|
+
* See {@linkcode DesmostOptions} for available options.
|
|
28
|
+
*/
|
|
21
29
|
options) {
|
|
22
|
-
|
|
30
|
+
let opts = fill_defaults(options);
|
|
31
|
+
let ast = desmos_to_ast(desmos, blank ?? desmos, opts);
|
|
32
|
+
let src = ast_to_source(ast, opts);
|
|
33
|
+
return src;
|
|
23
34
|
}
|
|
24
35
|
/**
|
|
25
36
|
* Decompile `desmos` into a semi-structured AST.
|
|
26
37
|
*/
|
|
27
|
-
export function desmos_to_ast(desmos, blank) {
|
|
38
|
+
export function desmos_to_ast(desmos, blank, options) {
|
|
28
39
|
return {
|
|
29
40
|
globals: [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
].filter(x => x !=
|
|
41
|
+
GLOBAL_INCANTATIONS.desmos.extract(desmos, blank),
|
|
42
|
+
GLOBAL_INCANTATIONS.viewport.extract(desmos, blank),
|
|
43
|
+
].filter(x => x != undefined),
|
|
33
44
|
locals: desmos.getExpressions().map(extract_expression),
|
|
34
45
|
};
|
|
35
46
|
}
|
|
36
47
|
/**
|
|
37
48
|
* Emit the Desmost source code representation of `ast`.
|
|
38
49
|
*/
|
|
39
|
-
export function ast_to_source(ast) {
|
|
40
|
-
return (ast.globals.map(
|
|
41
|
-
+ "\n\n"
|
|
42
|
-
+ ast.locals.map(emit_expression).join("\n"));
|
|
50
|
+
export function ast_to_source(ast, options) {
|
|
51
|
+
return (ast.globals.map(inc => emit_incantation(inc, options, { expand: true })).join("\n")
|
|
52
|
+
+ (options.keep_leading_blanks ? "\n" : "\n\n")
|
|
53
|
+
+ ast.locals.map(expr => emit_expression(expr, options)).join("\n"));
|
|
43
54
|
}
|
|
44
55
|
//# sourceMappingURL=decompile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decompile.js","sourceRoot":"","sources":["../../src/decompiler/decompile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"decompile.js","sourceRoot":"","sources":["../../src/decompiler/decompile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAuB,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAU/C;;;;;;GAMG;AACH,MAAM,UAAU,SAAS;AACxB,mDAAmD;AACnD,MAAyB;AAEzB;;;;;;GAMG;AACH,KAAyB;AAEzB;;;;GAIG;AACH,OAAiC;IAGjC,IAAI,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAElC,IAAI,GAAG,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;IACvD,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAEnC,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC5B,MAAyB,EACzB,KAAwB,EACxB,OAAuB;IAGvB,OAAO;QACN,OAAO,EAAE;YACR,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;YACjD,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;SACnD,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,SAAS,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACvD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAsB,EAAE,OAAuB;IAE5E,OAAO,CACA,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;UACnF,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;UAC7C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACvE,CAAC;AACH,CAAC"}
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
+
import { type DesmostOptions } from "../options.js";
|
|
1
2
|
import type { Ast } from "../parser/index.js";
|
|
2
3
|
/**
|
|
3
4
|
* Emit the source code for a global incantation `invocation`.
|
|
4
5
|
*/
|
|
5
|
-
export declare function
|
|
6
|
+
export declare function emit_incantation(invocation: Ast.IncantationInvocation, options: DesmostOptions, _?: {
|
|
7
|
+
expand: boolean;
|
|
8
|
+
}): string;
|
|
6
9
|
/**
|
|
7
10
|
* Emit the source code for an `expr`.
|
|
8
11
|
*/
|
|
9
|
-
export declare function emit_expression(expr
|
|
12
|
+
export declare function emit_expression(expr: Ast.Expression, options: DesmostOptions): string;
|
|
10
13
|
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/decompiler/emit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/decompiler/emit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAElE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAGrC;;GAEG;AACH,wBAAgB,gBAAgB,CAC7B,UAAU,EAAE,GAAG,CAAC,qBAAqB,EACrC,OAAO,EAAE,cAAc,EACvB,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACvB,MAAM,CAiBR;AAGD;;GAEG;AACH,wBAAgB,eAAe,CAC5B,IAAI,EAAE,GAAG,CAAC,UAAU,EACpB,OAAO,EAAE,cAAc,GACvB,MAAM,CA+CR"}
|
package/dist/decompiler/emit.js
CHANGED
|
@@ -1,44 +1,65 @@
|
|
|
1
|
+
import { prettify_source } from "./format.js";
|
|
2
|
+
import { DEFAULT_OPTIONS } from "../options.js";
|
|
3
|
+
import { Incantation } from "../magic/index.js";
|
|
1
4
|
/**
|
|
2
5
|
* Emit the source code for a global incantation `invocation`.
|
|
3
6
|
*/
|
|
4
|
-
export function
|
|
7
|
+
export function emit_incantation(invocation, options, _) {
|
|
5
8
|
if (invocation == undefined)
|
|
6
9
|
return "";
|
|
7
10
|
let ident = invocation.incantation.identifier;
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
if ("arg_raw" in invocation) {
|
|
12
|
+
let arg_raw = invocation.arg_raw;
|
|
13
|
+
if (_?.expand && invocation.incantation.arg_type === Incantation.ArgType.OBJECT) {
|
|
14
|
+
return `/${ident}{\n ${arg_raw}\n}`;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return `/${ident}{${arg_raw}}`;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return `/${ident}`;
|
|
22
|
+
}
|
|
10
23
|
}
|
|
11
24
|
/**
|
|
12
25
|
* Emit the source code for an `expr`.
|
|
13
26
|
*/
|
|
14
|
-
export function emit_expression(expr) {
|
|
27
|
+
export function emit_expression(expr, options) {
|
|
15
28
|
if (expr == undefined)
|
|
16
29
|
return "";
|
|
17
|
-
// TODO
|
|
18
|
-
let locals = [];
|
|
19
|
-
let sep = expr.incantations.length > 0 ? " :: " : "";
|
|
20
|
-
let content;
|
|
21
30
|
switch (expr.data.type) {
|
|
22
31
|
case "text":
|
|
23
|
-
expr.data.text
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
if (expr.data.text?.startsWith(DEFAULT_OPTIONS.error_prefix)) {
|
|
33
|
+
var content = `% [invalid]`;
|
|
34
|
+
}
|
|
35
|
+
else if (expr.data.text?.includes("\n")) {
|
|
36
|
+
if (options.prettify) {
|
|
37
|
+
let indented = (expr.data.text
|
|
38
|
+
.split("\n")
|
|
39
|
+
.map(line => ` ${line}`)
|
|
40
|
+
.join("\n"));
|
|
41
|
+
var content = `/text{\n${indented}\n}`;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
var content = `/text{\n${expr.data.text}\n}`;
|
|
45
|
+
}
|
|
26
46
|
}
|
|
27
47
|
else {
|
|
28
|
-
content = `% ${expr.data.text}`;
|
|
48
|
+
var content = `% ${expr.data.text ?? ""}`;
|
|
29
49
|
}
|
|
30
50
|
break;
|
|
31
51
|
case "table":
|
|
32
|
-
content = "[tables are currently unsupported]";
|
|
52
|
+
var content = "% [tables are currently unsupported]";
|
|
33
53
|
break;
|
|
34
54
|
default:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
content = "";
|
|
40
|
-
}
|
|
55
|
+
var content = (expr.data.latex?.trim() === "" ? ""
|
|
56
|
+
: expr.data.latex == undefined ? "% [unsupported]"
|
|
57
|
+
: options.prettify ? prettify_source(expr.data.latex)
|
|
58
|
+
: expr.data.latex);
|
|
41
59
|
}
|
|
42
|
-
|
|
60
|
+
let locals = expr.incantations.map(inc => emit_incantation(inc, options));
|
|
61
|
+
let sep = (locals.length > 0) ? " :: " : "";
|
|
62
|
+
let space = (locals.length >= 3) ? '\n' : ' ';
|
|
63
|
+
return `${locals.join(space)}${sep}${content}`;
|
|
43
64
|
}
|
|
44
65
|
//# sourceMappingURL=emit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/decompiler/emit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/decompiler/emit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
import { Ast } from "../parser/index.js";
|
|
2
|
-
/**
|
|
3
|
-
* Extract a `/desmos` incantation from the settings of `desmos`.
|
|
4
|
-
*/
|
|
5
|
-
export declare function extract_settings(desmos: Desmos.Calculator, blank: Desmos.Calculator): Ast.IncantationInvocation | null;
|
|
6
|
-
/**
|
|
7
|
-
* Extract a `/viewport` incantation from the viewport bounds of `desmos`.
|
|
8
|
-
*/
|
|
9
|
-
export declare function extract_viewport(desmos: Desmos.Calculator, blank: Desmos.Calculator): Ast.IncantationInvocation | null;
|
|
10
2
|
/**
|
|
11
3
|
* Extract an expression and the local incantations that reproduce its state.
|
|
12
4
|
*/
|
|
13
|
-
export declare function extract_expression(
|
|
5
|
+
export declare function extract_expression(expr: Desmos.ExpressionState): Ast.Expression;
|
|
14
6
|
//# sourceMappingURL=extract.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/decompiler/extract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../src/decompiler/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAKhC;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,UAAU,CAc/E"}
|
|
@@ -1,68 +1,34 @@
|
|
|
1
|
-
import { stringify_json5, prettify_source } from "./format.js";
|
|
2
1
|
import { Ast } from "../parser/index.js";
|
|
3
|
-
import {
|
|
4
|
-
import { DesmosIncantation, ViewportIncantation } from "../magic/global/index.js";
|
|
5
|
-
/**
|
|
6
|
-
* Extract a `/desmos` incantation from the settings of `desmos`.
|
|
7
|
-
*/
|
|
8
|
-
export function extract_settings(desmos, blank) {
|
|
9
|
-
let defaults = blank.settings;
|
|
10
|
-
let arg_raw = stringify_json5(desmos.settings, (k, v) => (
|
|
11
|
-
// @ts-expect-error: weird
|
|
12
|
-
v === defaults[k]
|
|
13
|
-
|| k === "__observers"
|
|
14
|
-
|| k === "guid"
|
|
15
|
-
|| k === "randomSeed"
|
|
16
|
-
|| k === "colors") ? undefined : v, " ");
|
|
17
|
-
if (arg_raw.trim() === "")
|
|
18
|
-
return null;
|
|
19
|
-
return {
|
|
20
|
-
kind: Ast.Kind.INCANTATION_INVOCATION,
|
|
21
|
-
incantation: new DesmosIncantation(),
|
|
22
|
-
arg_raw,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Extract a `/viewport` incantation from the viewport bounds of `desmos`.
|
|
27
|
-
*/
|
|
28
|
-
export function extract_viewport(desmos, blank) {
|
|
29
|
-
let defaults = blank.graphpaperBounds.mathCoordinates;
|
|
30
|
-
let { left, right, bottom, top } = desmos.graphpaperBounds.mathCoordinates;
|
|
31
|
-
let arg_raw = stringify_json5({ left, right, bottom, top },
|
|
32
|
-
/// @ts-expect-error: weird
|
|
33
|
-
(k, v) => v === defaults[k] ? undefined : v, " ");
|
|
34
|
-
if (arg_raw.trim() === "")
|
|
35
|
-
return null;
|
|
36
|
-
return {
|
|
37
|
-
kind: Ast.Kind.INCANTATION_INVOCATION,
|
|
38
|
-
incantation: new ViewportIncantation(),
|
|
39
|
-
arg_raw,
|
|
40
|
-
};
|
|
41
|
-
}
|
|
2
|
+
import { LOCAL_INCANTATIONS } from "../magic/index.js";
|
|
42
3
|
/**
|
|
43
4
|
* Extract an expression and the local incantations that reproduce its state.
|
|
44
5
|
*/
|
|
45
|
-
export function extract_expression(
|
|
46
|
-
let data;
|
|
47
|
-
// @ts-expect-error: check type-narrows
|
|
48
|
-
if (expression.latex?.trim() === "") {
|
|
49
|
-
data = { latex: ` ` };
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
data = Object.fromEntries(Object.entries(expression)
|
|
53
|
-
.filter(([key, value]) => !is_insignificant(key, value)));
|
|
54
|
-
}
|
|
55
|
-
if (is_latex(expression)) {
|
|
56
|
-
data.latex = prettify_source(data.latex);
|
|
57
|
-
}
|
|
6
|
+
export function extract_expression(expr) {
|
|
58
7
|
return {
|
|
59
8
|
kind: Ast.Kind.EXPRESSION,
|
|
60
|
-
data
|
|
61
|
-
|
|
9
|
+
data: (expr.latex?.trim() === "" ? { latex: ` ` }
|
|
10
|
+
: {
|
|
11
|
+
type: expr.type,
|
|
12
|
+
latex: expr.latex,
|
|
13
|
+
text: expr.text,
|
|
14
|
+
}),
|
|
15
|
+
incantations: extract_locals(expr),
|
|
62
16
|
};
|
|
63
17
|
}
|
|
64
|
-
function
|
|
65
|
-
|
|
66
|
-
|
|
18
|
+
function extract_locals(expr) {
|
|
19
|
+
/* NOTE: Currently only LaTeX expressions can have local incantations applied to them, this will change in future */
|
|
20
|
+
switch (expr.type) {
|
|
21
|
+
case "text": return [];
|
|
22
|
+
case "table": return [];
|
|
23
|
+
default:
|
|
24
|
+
if (expr.latex?.trim() === "") {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return (Object.values(LOCAL_INCANTATIONS)
|
|
29
|
+
.map(inc => inc.extract(expr))
|
|
30
|
+
.filter(each => each != undefined));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
67
33
|
}
|
|
68
34
|
//# sourceMappingURL=extract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/decompiler/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/decompiler/extract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAI9C;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA4B;IAE9D,OAAO;QACN,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU;QACzB,IAAI,EAAE,CACC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE;YAC1C,CAAC,CAAC;gBACC,IAAI,EAAG,IAAI,CAAC,IAAI;gBAChB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAG,IAAI,CAAC,IAAI;aACQ,CAC7B;QACL,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC;KAClC,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAA4B;IAEjD,oHAAoH;IACpH,QAAQ,IAAI,CAAC,IAAI,EACjB,CAAC;QACE,KAAK,MAAM,CAAC,CAAE,OAAO,EAAE,CAAC;QACxB,KAAK,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACxB;YACG,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACb,CAAC;iBACI,CAAC;gBACH,OAAO,CACJ,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;qBAChC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;qBAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,SAAS,CAAC,CACpC,CAAC;YACL,CAAC;IACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/decompiler/format.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../src/decompiler/format.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQtD"}
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
export const stringify_json5 = (data, replacer, space) => {
|
|
2
|
-
return (
|
|
3
|
-
// @ts-expect-error: random `null`??
|
|
4
|
-
JSON.stringify(data, replacer, space)
|
|
5
|
-
.slice(1, -1) // strip surrounding {}
|
|
6
|
-
.trim()
|
|
7
|
-
.replaceAll(/"([^"]+)":/g, "$1:") // "key": <value> -> key: <value>
|
|
8
|
-
);
|
|
9
|
-
};
|
|
10
1
|
export function prettify_source(source) {
|
|
11
2
|
source = source.replaceAll(/(?<=[^ ])=(?=[^ ])/g, " = ");
|
|
3
|
+
source = source.replaceAll(/\\left\s*(\(|\[|\\\{)/g, "$1");
|
|
4
|
+
source = source.replaceAll(/\\right\s*(\)|\]|\\\})/g, "$1");
|
|
5
|
+
source = source.replaceAll(/(:|,)\\ /g, "$1 ");
|
|
12
6
|
return source;
|
|
13
7
|
}
|
|
14
8
|
//# sourceMappingURL=format.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/decompiler/format.ts"],"names":[],"mappings":"AAAA,MAAM,
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../../src/decompiler/format.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,MAAc;IAE3C,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACzD,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;IAC9D,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;AACjB,CAAC"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import type { Range } from "./utils.js";
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Multiple aggregated errors.
|
|
4
|
+
*
|
|
5
|
+
* Since the compiler does its best to recover from errors, it often needs to aggregate errors to report later, instead of immediately throwing.
|
|
6
|
+
*/
|
|
7
|
+
export declare class DesmostErrors {
|
|
8
|
+
errors: DesmostError[];
|
|
9
|
+
constructor(errors?: DesmostError[]);
|
|
10
|
+
}
|
|
8
11
|
/**
|
|
9
12
|
* The compiler encountered a fatal unrecoverable error, which will reach the end user.
|
|
10
13
|
*
|
|
@@ -17,7 +20,6 @@ export declare class DesmostError extends Error {
|
|
|
17
20
|
export declare namespace DesmostError {
|
|
18
21
|
interface Data {
|
|
19
22
|
msg?: string;
|
|
20
|
-
while?: string;
|
|
21
23
|
hint?: string;
|
|
22
24
|
note?: string;
|
|
23
25
|
debug?: string;
|
|
@@ -46,6 +48,11 @@ export declare namespace DesmostError {
|
|
|
46
48
|
data: Data;
|
|
47
49
|
constructor(data: Data);
|
|
48
50
|
}
|
|
51
|
+
/** No incantation with this identifier exists. */
|
|
52
|
+
class UnknownIncantation extends DesmostError {
|
|
53
|
+
data: Data;
|
|
54
|
+
constructor(data: Data);
|
|
55
|
+
}
|
|
49
56
|
/** An incantation can't be applied here. */
|
|
50
57
|
class IllegalIncantation extends DesmostError {
|
|
51
58
|
data: Data;
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC;;;;GAIG;AACH,qBAAa,aAAa;IACN,MAAM,EAAE,YAAY,EAAE;gBAAtB,MAAM,GAAE,YAAY,EAAO;CAC9C;AAED;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,KAAK;IAEtC,IAAI,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC;gBAEb,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM;CAIjD;AAED,yBAAiB,YAAY,CAC7B;IACC,UAAiB,IAAI;QAEpB,GAAG,CAAC,EAAI,MAAM,CAAA;QACd,IAAI,CAAC,EAAG,MAAM,CAAA;QACd,IAAI,CAAC,EAAG,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;QAEd,IAAI,CAAC,EAAE;YACN,IAAI,EAAG,MAAM,CAAA;YACb,IAAI,CAAC,EAAE,KAAK,CAAA;SACZ,CAAA;KACD;IAED,6DAA6D;IAC7D,MAAa,aAAc,SAAQ,YAAY;QACzB,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;IAED,yDAAyD;IACzD,MAAa,YAAa,SAAQ,YAAY;QACxB,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;IAED,qEAAqE;IACrE,MAAa,eAAgB,SAAQ,YAAY;QAC3B,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;IAED,+DAA+D;IAC/D,MAAa,WAAY,SAAQ,YAAY;QACvB,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;IAED,kDAAkD;IAClD,MAAa,kBAAmB,SAAQ,YAAY;QAC9B,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;IAED,4CAA4C;IAC5C,MAAa,kBAAmB,SAAQ,YAAY;QAC9B,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;IAED,mGAAmG;IACnG,MAAa,eAAgB,SAAQ,YAAY;QAC3B,IAAI,EAAE,IAAI;oBAAV,IAAI,EAAE,IAAI;KAC/B;CACD;AAED,4DAA4D;AAC5D,MAAM,MAAM,QAAQ,CAAC,MAAM,IACxB,MAAM,GACN,MAAM,GAAG;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC"}
|