@cortex-js/compute-engine 0.13.0 → 0.14.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/compute-engine.esm.js +1304 -987
- package/dist/compute-engine.js +1304 -987
- package/dist/compute-engine.min.esm.js +1304 -987
- package/dist/compute-engine.min.js +1304 -987
- package/dist/math-json.esm.js +2 -2
- package/dist/math-json.js +2 -2
- package/dist/math-json.min.esm.js +2 -2
- package/dist/math-json.min.js +2 -2
- package/dist/types/common/grapheme-splitter.d.ts +1 -1
- package/dist/types/common/signals.d.ts +1 -1
- package/dist/types/common/utils.d.ts +1 -1
- package/dist/types/compute-engine/assume.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +4 -2
- package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-domain.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-function-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-symbol-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
- package/dist/types/compute-engine/compile.d.ts +9 -2
- package/dist/types/compute-engine/compute-engine.d.ts +8 -7
- package/dist/types/compute-engine/cost-function.d.ts +1 -1
- package/dist/types/compute-engine/domain-utils.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-inequalities.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +32 -17
- package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-identifier.d.ts +12 -6
- package/dist/types/compute-engine/latex-syntax/parse.d.ts +30 -20
- package/dist/types/compute-engine/latex-syntax/public.d.ts +90 -47
- package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer.d.ts +4 -9
- package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic-add.d.ts +1 -2
- package/dist/types/compute-engine/library/arithmetic-divide.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic-multiply.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic-power.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/calculus.d.ts +1 -1
- package/dist/types/compute-engine/library/collections.d.ts +1 -1
- package/dist/types/compute-engine/library/core.d.ts +1 -1
- package/dist/types/compute-engine/library/domains.d.ts +1 -1
- package/dist/types/compute-engine/library/library.d.ts +1 -1
- package/dist/types/compute-engine/library/logic.d.ts +1 -1
- package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
- package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
- package/dist/types/compute-engine/library/sets.d.ts +1 -1
- package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/library/utils.d.ts +2 -1
- package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
- package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
- package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
- package/dist/types/compute-engine/public.d.ts +4 -1
- package/dist/types/compute-engine/rules.d.ts +1 -1
- package/dist/types/compute-engine/simplify-rules.d.ts +1 -1
- package/dist/types/compute-engine/solve.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/expand.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/flatten.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/negate.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/product.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/sum.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/utils.d.ts +1 -1
- package/dist/types/compute-engine.d.ts +2 -2
- package/dist/types/math-json/math-json-format.d.ts +1 -1
- package/dist/types/math-json/utils.d.ts +5 -1
- package/dist/types/math-json.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** CortexJS Compute Engine 0.
|
|
1
|
+
/** CortexJS Compute Engine 0.14.0 */
|
|
2
2
|
(function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ComputeEngine = {}));})(this, (function (exports) { 'use strict';
|
|
3
3
|
var ComputeEngine = (() => {
|
|
4
4
|
var __create = Object.create;
|
|
@@ -3766,7 +3766,7 @@ var ComputeEngine = (() => {
|
|
|
3766
3766
|
var DEFINITIONS_ALGEBRA = [
|
|
3767
3767
|
{
|
|
3768
3768
|
name: "To",
|
|
3769
|
-
|
|
3769
|
+
latexTrigger: ["\\to"],
|
|
3770
3770
|
kind: "infix",
|
|
3771
3771
|
precedence: 270
|
|
3772
3772
|
// MathML rightwards arrow
|
|
@@ -4028,10 +4028,10 @@ var ComputeEngine = (() => {
|
|
|
4028
4028
|
return null;
|
|
4029
4029
|
if (typeof expr === "number")
|
|
4030
4030
|
return expr;
|
|
4031
|
-
if (isNumberObject(expr))
|
|
4032
|
-
return machineValueOfString(expr.num);
|
|
4033
4031
|
if (typeof expr === "string")
|
|
4034
4032
|
return machineValueOfString(expr);
|
|
4033
|
+
if (isNumberObject(expr))
|
|
4034
|
+
return machineValue(expr.num);
|
|
4035
4035
|
return null;
|
|
4036
4036
|
}
|
|
4037
4037
|
function rationalValue(expr) {
|
|
@@ -4556,7 +4556,7 @@ var ComputeEngine = (() => {
|
|
|
4556
4556
|
{ name: "EulerGamma", serialize: "\\gamma" },
|
|
4557
4557
|
{
|
|
4558
4558
|
name: "Degrees",
|
|
4559
|
-
|
|
4559
|
+
latexTrigger: ["\\degree"],
|
|
4560
4560
|
kind: "postfix",
|
|
4561
4561
|
precedence: 880,
|
|
4562
4562
|
parse: (_parser, lhs) => ["Degrees", lhs],
|
|
@@ -4565,74 +4565,82 @@ var ComputeEngine = (() => {
|
|
|
4565
4565
|
}
|
|
4566
4566
|
},
|
|
4567
4567
|
{
|
|
4568
|
-
|
|
4568
|
+
latexTrigger: ["\\degree"],
|
|
4569
4569
|
kind: "postfix",
|
|
4570
4570
|
precedence: 880,
|
|
4571
4571
|
parse: (_parser, lhs) => ["Degrees", lhs]
|
|
4572
4572
|
},
|
|
4573
4573
|
{
|
|
4574
|
-
|
|
4574
|
+
latexTrigger: ["^", "<{>", "\\circ", "<}>"],
|
|
4575
4575
|
kind: "postfix",
|
|
4576
4576
|
parse: (_parser, lhs) => ["Degrees", lhs]
|
|
4577
4577
|
},
|
|
4578
4578
|
{
|
|
4579
|
-
|
|
4579
|
+
latexTrigger: ["^", "\\circ"],
|
|
4580
4580
|
kind: "postfix",
|
|
4581
4581
|
parse: (_parser, lhs) => ["Degrees", lhs]
|
|
4582
4582
|
},
|
|
4583
4583
|
{
|
|
4584
|
-
|
|
4584
|
+
latexTrigger: ["\xB0"],
|
|
4585
4585
|
kind: "postfix",
|
|
4586
4586
|
precedence: 880,
|
|
4587
4587
|
parse: (_parser, lhs) => ["Degrees", lhs]
|
|
4588
4588
|
},
|
|
4589
4589
|
{
|
|
4590
|
-
|
|
4590
|
+
latexTrigger: ["\\ang"],
|
|
4591
4591
|
parse: (parser) => {
|
|
4592
4592
|
const arg = parser.parseGroup();
|
|
4593
4593
|
return arg === null ? ["Degrees"] : ["Degrees", arg];
|
|
4594
4594
|
}
|
|
4595
4595
|
},
|
|
4596
4596
|
{
|
|
4597
|
-
|
|
4597
|
+
latexTrigger: ["\\infty"],
|
|
4598
4598
|
parse: { num: "+Infinity" }
|
|
4599
4599
|
},
|
|
4600
4600
|
{
|
|
4601
4601
|
name: "ComplexInfinity",
|
|
4602
|
-
|
|
4602
|
+
latexTrigger: ["\\tilde", "\\infty"],
|
|
4603
4603
|
serialize: "\\tilde\\infty"
|
|
4604
4604
|
},
|
|
4605
4605
|
{
|
|
4606
|
-
|
|
4606
|
+
latexTrigger: ["\\tilde", "<{>", "\\infty", "<}>"],
|
|
4607
4607
|
parse: "ComplexInfinity"
|
|
4608
4608
|
},
|
|
4609
|
-
{ name: "Pi", kind: "symbol",
|
|
4610
|
-
{
|
|
4609
|
+
{ name: "Pi", kind: "symbol", latexTrigger: ["\\pi"] },
|
|
4610
|
+
{ latexTrigger: ["\u03C0"], parse: "Pi" },
|
|
4611
4611
|
{
|
|
4612
4612
|
name: "ExponentialE",
|
|
4613
|
-
|
|
4613
|
+
latexTrigger: ["\\exponentialE"],
|
|
4614
4614
|
parse: "ExponentialE",
|
|
4615
4615
|
serialize: "\\exponentialE"
|
|
4616
4616
|
},
|
|
4617
4617
|
{
|
|
4618
|
-
|
|
4618
|
+
latexTrigger: "\\operatorname{e}",
|
|
4619
|
+
parse: "ExponentialE"
|
|
4620
|
+
},
|
|
4621
|
+
{
|
|
4622
|
+
latexTrigger: "\\mathrm{e}",
|
|
4619
4623
|
parse: "ExponentialE"
|
|
4620
4624
|
},
|
|
4621
4625
|
{
|
|
4622
4626
|
kind: "function",
|
|
4623
|
-
|
|
4627
|
+
identifierTrigger: "exp",
|
|
4624
4628
|
parse: "Exp"
|
|
4625
4629
|
},
|
|
4626
4630
|
{
|
|
4627
|
-
|
|
4631
|
+
latexTrigger: "\\exp",
|
|
4628
4632
|
parse: "Exp"
|
|
4629
4633
|
},
|
|
4630
4634
|
{
|
|
4631
4635
|
name: "ImaginaryUnit",
|
|
4632
|
-
|
|
4636
|
+
latexTrigger: ["\\imaginaryI"]
|
|
4633
4637
|
},
|
|
4634
4638
|
{
|
|
4635
|
-
|
|
4639
|
+
latexTrigger: "\\operatorname{i}",
|
|
4640
|
+
parse: "ImaginaryUnit"
|
|
4641
|
+
},
|
|
4642
|
+
{
|
|
4643
|
+
latexTrigger: "\\mathrm{i}",
|
|
4636
4644
|
parse: "ImaginaryUnit"
|
|
4637
4645
|
},
|
|
4638
4646
|
// Operations
|
|
@@ -4643,18 +4651,18 @@ var ComputeEngine = (() => {
|
|
|
4643
4651
|
* replaced with bars */
|
|
4644
4652
|
name: "Abs",
|
|
4645
4653
|
kind: "matchfix",
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
parse: (_parser,
|
|
4654
|
+
openTrigger: "|",
|
|
4655
|
+
closeTrigger: "|",
|
|
4656
|
+
parse: (_parser, body) => isEmptySequence(body) ? null : ["Abs", body]
|
|
4649
4657
|
},
|
|
4650
4658
|
{
|
|
4651
|
-
|
|
4659
|
+
identifierTrigger: "abs",
|
|
4652
4660
|
kind: "function",
|
|
4653
4661
|
parse: "Abs"
|
|
4654
4662
|
},
|
|
4655
4663
|
{
|
|
4656
4664
|
name: "Add",
|
|
4657
|
-
|
|
4665
|
+
latexTrigger: ["+"],
|
|
4658
4666
|
kind: "infix",
|
|
4659
4667
|
associativity: "both",
|
|
4660
4668
|
precedence: 275,
|
|
@@ -4670,7 +4678,7 @@ var ComputeEngine = (() => {
|
|
|
4670
4678
|
},
|
|
4671
4679
|
{
|
|
4672
4680
|
kind: "prefix",
|
|
4673
|
-
|
|
4681
|
+
latexTrigger: ["+"],
|
|
4674
4682
|
precedence: 275,
|
|
4675
4683
|
parse: (parser, until) => {
|
|
4676
4684
|
if (until && 275 < until.minPrec)
|
|
@@ -4681,20 +4689,22 @@ var ComputeEngine = (() => {
|
|
|
4681
4689
|
{
|
|
4682
4690
|
name: "Ceil",
|
|
4683
4691
|
kind: "matchfix",
|
|
4684
|
-
|
|
4685
|
-
|
|
4692
|
+
openTrigger: "\\lceil",
|
|
4693
|
+
closeTrigger: "\\rceil",
|
|
4694
|
+
parse: (_parser, body) => isEmptySequence(body) ? null : ["Ceil", body]
|
|
4686
4695
|
},
|
|
4687
4696
|
{
|
|
4688
4697
|
kind: "matchfix",
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
parse: (
|
|
4698
|
+
openTrigger: ["\u2308"],
|
|
4699
|
+
closeTrigger: ["\u2309"],
|
|
4700
|
+
parse: (_parser, body) => isEmptySequence(body) ? null : ["Ceil", body]
|
|
4692
4701
|
},
|
|
4693
4702
|
{
|
|
4694
|
-
|
|
4703
|
+
identifierTrigger: "ceil",
|
|
4695
4704
|
kind: "function",
|
|
4696
4705
|
parse: "Ceil"
|
|
4697
4706
|
},
|
|
4707
|
+
{ name: "Chop", identifierTrigger: "chop", kind: "function", parse: "Chop" },
|
|
4698
4708
|
{
|
|
4699
4709
|
name: "Complex",
|
|
4700
4710
|
precedence: 274,
|
|
@@ -4714,7 +4724,7 @@ var ComputeEngine = (() => {
|
|
|
4714
4724
|
},
|
|
4715
4725
|
{
|
|
4716
4726
|
name: "Divide",
|
|
4717
|
-
|
|
4727
|
+
latexTrigger: "\\frac",
|
|
4718
4728
|
precedence: 660,
|
|
4719
4729
|
// For \frac specifically, not for \div, etc..
|
|
4720
4730
|
// handles Leibnitz notation for partial derivatives
|
|
@@ -4723,12 +4733,12 @@ var ComputeEngine = (() => {
|
|
|
4723
4733
|
},
|
|
4724
4734
|
{
|
|
4725
4735
|
kind: "infix",
|
|
4726
|
-
|
|
4736
|
+
latexTrigger: "\\over",
|
|
4727
4737
|
precedence: 660,
|
|
4728
4738
|
parse: "Divide"
|
|
4729
4739
|
},
|
|
4730
4740
|
{
|
|
4731
|
-
|
|
4741
|
+
latexTrigger: ["\\/"],
|
|
4732
4742
|
kind: "infix",
|
|
4733
4743
|
associativity: "non",
|
|
4734
4744
|
precedence: 660,
|
|
@@ -4738,14 +4748,14 @@ var ComputeEngine = (() => {
|
|
|
4738
4748
|
parse: "Divide"
|
|
4739
4749
|
},
|
|
4740
4750
|
{
|
|
4741
|
-
|
|
4751
|
+
latexTrigger: ["/"],
|
|
4742
4752
|
kind: "infix",
|
|
4743
4753
|
associativity: "non",
|
|
4744
4754
|
precedence: 660,
|
|
4745
4755
|
parse: "Divide"
|
|
4746
4756
|
},
|
|
4747
4757
|
{
|
|
4748
|
-
|
|
4758
|
+
latexTrigger: ["\\div"],
|
|
4749
4759
|
kind: "infix",
|
|
4750
4760
|
associativity: "non",
|
|
4751
4761
|
precedence: 660,
|
|
@@ -4763,36 +4773,41 @@ var ComputeEngine = (() => {
|
|
|
4763
4773
|
},
|
|
4764
4774
|
{
|
|
4765
4775
|
name: "Factorial",
|
|
4766
|
-
|
|
4776
|
+
latexTrigger: ["!"],
|
|
4767
4777
|
kind: "postfix",
|
|
4768
4778
|
precedence: 810
|
|
4769
4779
|
},
|
|
4770
4780
|
{
|
|
4771
4781
|
name: "Factorial2",
|
|
4772
|
-
|
|
4782
|
+
latexTrigger: ["!", "!"],
|
|
4773
4783
|
kind: "postfix",
|
|
4774
4784
|
precedence: 810
|
|
4775
4785
|
},
|
|
4776
4786
|
{
|
|
4777
4787
|
name: "Floor",
|
|
4778
4788
|
kind: "matchfix",
|
|
4779
|
-
|
|
4780
|
-
|
|
4789
|
+
openTrigger: "\\lfloor",
|
|
4790
|
+
closeTrigger: "\\rfloor",
|
|
4791
|
+
parse: (_parser, body) => isEmptySequence(body) ? null : ["Floor", body]
|
|
4781
4792
|
},
|
|
4782
4793
|
{
|
|
4783
4794
|
kind: "matchfix",
|
|
4784
|
-
|
|
4785
|
-
|
|
4786
|
-
parse: (
|
|
4795
|
+
openTrigger: ["\u230A"],
|
|
4796
|
+
closeTrigger: ["\u230B"],
|
|
4797
|
+
parse: (_parser, body) => isEmptySequence(body) ? null : ["Floor", body]
|
|
4787
4798
|
},
|
|
4788
4799
|
{
|
|
4789
|
-
|
|
4800
|
+
identifierTrigger: "floor",
|
|
4790
4801
|
kind: "function",
|
|
4791
4802
|
parse: "Floor"
|
|
4792
4803
|
},
|
|
4804
|
+
{
|
|
4805
|
+
latexTrigger: ["\\Gamma"],
|
|
4806
|
+
parse: "Gamma"
|
|
4807
|
+
},
|
|
4793
4808
|
{
|
|
4794
4809
|
name: "Gcd",
|
|
4795
|
-
|
|
4810
|
+
identifierTrigger: "gcd",
|
|
4796
4811
|
kind: "function"
|
|
4797
4812
|
},
|
|
4798
4813
|
{
|
|
@@ -4801,34 +4816,34 @@ var ComputeEngine = (() => {
|
|
|
4801
4816
|
},
|
|
4802
4817
|
{
|
|
4803
4818
|
name: "Lg",
|
|
4804
|
-
|
|
4819
|
+
latexTrigger: ["\\lg"],
|
|
4805
4820
|
serialize: (serializer, expr) => "\\log_{10}" + serializer.wrapArguments(expr),
|
|
4806
4821
|
parse: (parser) => {
|
|
4807
|
-
const
|
|
4808
|
-
if (
|
|
4822
|
+
const args = parser.parseArguments("implicit");
|
|
4823
|
+
if (args === null)
|
|
4809
4824
|
return "Lg";
|
|
4810
|
-
return ["Log", ...
|
|
4825
|
+
return ["Log", ...args, 10];
|
|
4811
4826
|
}
|
|
4812
4827
|
},
|
|
4813
4828
|
{
|
|
4814
4829
|
name: "Lb",
|
|
4815
|
-
|
|
4830
|
+
latexTrigger: "\\lb",
|
|
4816
4831
|
parse: (parser) => {
|
|
4817
|
-
const
|
|
4818
|
-
if (
|
|
4832
|
+
const args = parser.parseArguments("implicit");
|
|
4833
|
+
if (args === null)
|
|
4819
4834
|
return "Log";
|
|
4820
|
-
return ["Log", ...
|
|
4835
|
+
return ["Log", ...args, 2];
|
|
4821
4836
|
}
|
|
4822
4837
|
},
|
|
4823
4838
|
{
|
|
4824
4839
|
name: "Ln",
|
|
4825
|
-
|
|
4840
|
+
latexTrigger: ["\\ln"],
|
|
4826
4841
|
serialize: (serializer, expr) => "\\ln" + serializer.wrapArguments(expr),
|
|
4827
4842
|
parse: (parser) => parseLog("Ln", parser)
|
|
4828
4843
|
},
|
|
4829
4844
|
{
|
|
4830
4845
|
name: "Log",
|
|
4831
|
-
|
|
4846
|
+
latexTrigger: ["\\log"],
|
|
4832
4847
|
parse: (parser) => parseLog("Log", parser),
|
|
4833
4848
|
serialize: (serializer, expr) => {
|
|
4834
4849
|
const base = op2(expr);
|
|
@@ -4844,32 +4859,32 @@ var ComputeEngine = (() => {
|
|
|
4844
4859
|
},
|
|
4845
4860
|
{
|
|
4846
4861
|
name: "Lcm",
|
|
4847
|
-
|
|
4862
|
+
identifierTrigger: "lcm",
|
|
4848
4863
|
kind: "function"
|
|
4849
4864
|
},
|
|
4865
|
+
{ name: "Max", identifierTrigger: "max", kind: "function" },
|
|
4866
|
+
{ name: "Min", identifierTrigger: "min", kind: "function" },
|
|
4850
4867
|
{
|
|
4851
4868
|
name: "MinusPlus",
|
|
4852
|
-
|
|
4869
|
+
latexTrigger: ["\\mp"],
|
|
4853
4870
|
kind: "infix",
|
|
4854
4871
|
associativity: "both",
|
|
4855
4872
|
precedence: 270
|
|
4856
4873
|
},
|
|
4857
4874
|
{
|
|
4858
4875
|
name: "Multiply",
|
|
4859
|
-
|
|
4876
|
+
latexTrigger: ["\\times"],
|
|
4860
4877
|
kind: "infix",
|
|
4861
4878
|
associativity: "both",
|
|
4862
4879
|
precedence: 390,
|
|
4863
4880
|
serialize: serializeMultiply
|
|
4864
4881
|
},
|
|
4865
4882
|
{
|
|
4866
|
-
|
|
4883
|
+
latexTrigger: ["\\cdot"],
|
|
4867
4884
|
kind: "infix",
|
|
4868
4885
|
associativity: "both",
|
|
4869
4886
|
precedence: 390,
|
|
4870
4887
|
parse: (parser, lhs, terminator) => {
|
|
4871
|
-
if (terminator && 391 < terminator.minPrec)
|
|
4872
|
-
return null;
|
|
4873
4888
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 392 });
|
|
4874
4889
|
if (rhs === null)
|
|
4875
4890
|
return ["Multiply", lhs, MISSING];
|
|
@@ -4877,13 +4892,11 @@ var ComputeEngine = (() => {
|
|
|
4877
4892
|
}
|
|
4878
4893
|
},
|
|
4879
4894
|
{
|
|
4880
|
-
|
|
4895
|
+
latexTrigger: ["*"],
|
|
4881
4896
|
kind: "infix",
|
|
4882
4897
|
associativity: "both",
|
|
4883
4898
|
precedence: 390,
|
|
4884
4899
|
parse: (parser, lhs, terminator) => {
|
|
4885
|
-
if (terminator && 391 < terminator.minPrec)
|
|
4886
|
-
return null;
|
|
4887
4900
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 392 });
|
|
4888
4901
|
if (rhs === null)
|
|
4889
4902
|
return ["Multiply", lhs, MISSING];
|
|
@@ -4892,11 +4905,9 @@ var ComputeEngine = (() => {
|
|
|
4892
4905
|
},
|
|
4893
4906
|
{
|
|
4894
4907
|
name: "Negate",
|
|
4895
|
-
|
|
4908
|
+
latexTrigger: ["-"],
|
|
4896
4909
|
kind: "prefix",
|
|
4897
4910
|
parse: (parser, terminator) => {
|
|
4898
|
-
if (terminator && 276 < terminator.minPrec)
|
|
4899
|
-
return null;
|
|
4900
4911
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 400 });
|
|
4901
4912
|
return ["Negate", missingIfEmpty(rhs)];
|
|
4902
4913
|
},
|
|
@@ -4922,8 +4933,8 @@ var ComputeEngine = (() => {
|
|
|
4922
4933
|
// /** If the argument is a vector */
|
|
4923
4934
|
/** @todo: domain check */
|
|
4924
4935
|
kind: "matchfix",
|
|
4925
|
-
|
|
4926
|
-
|
|
4936
|
+
openTrigger: "||",
|
|
4937
|
+
closeTrigger: "||",
|
|
4927
4938
|
parse: (_parser, expr) => isEmptySequence(expr) ? null : ["Norm", expr]
|
|
4928
4939
|
},
|
|
4929
4940
|
{
|
|
@@ -4931,12 +4942,13 @@ var ComputeEngine = (() => {
|
|
|
4931
4942
|
/** @todo: domain check */
|
|
4932
4943
|
name: "Norm",
|
|
4933
4944
|
kind: "matchfix",
|
|
4934
|
-
|
|
4935
|
-
|
|
4945
|
+
openTrigger: ["\\left", "\\Vert"],
|
|
4946
|
+
closeTrigger: ["\\right", "\\Vert"],
|
|
4947
|
+
parse: (_parser, expr) => isEmptySequence(expr) ? null : ["Norm", expr]
|
|
4936
4948
|
},
|
|
4937
4949
|
{
|
|
4938
4950
|
name: "PlusMinus",
|
|
4939
|
-
|
|
4951
|
+
latexTrigger: ["\\pm"],
|
|
4940
4952
|
kind: "infix",
|
|
4941
4953
|
associativity: "both",
|
|
4942
4954
|
precedence: 270,
|
|
@@ -4955,47 +4967,41 @@ var ComputeEngine = (() => {
|
|
|
4955
4967
|
}
|
|
4956
4968
|
},
|
|
4957
4969
|
{
|
|
4958
|
-
|
|
4970
|
+
latexTrigger: ["\\pm"],
|
|
4959
4971
|
kind: "prefix",
|
|
4960
4972
|
precedence: 270,
|
|
4961
4973
|
parse: (parser, terminator) => {
|
|
4962
|
-
if (terminator && 270 < terminator.minPrec)
|
|
4963
|
-
return null;
|
|
4964
4974
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 400 });
|
|
4965
4975
|
return ["PlusMinus", missingIfEmpty(rhs)];
|
|
4966
4976
|
}
|
|
4967
4977
|
},
|
|
4968
4978
|
{
|
|
4969
|
-
|
|
4979
|
+
latexTrigger: ["\\plusmn"],
|
|
4970
4980
|
kind: "infix",
|
|
4971
4981
|
associativity: "both",
|
|
4972
4982
|
precedence: 270,
|
|
4973
4983
|
parse: (parser, lhs, terminator) => {
|
|
4974
|
-
if (270 < terminator.minPrec)
|
|
4975
|
-
return null;
|
|
4976
4984
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 400 });
|
|
4977
4985
|
return ["PlusMinus", lhs, missingIfEmpty(rhs)];
|
|
4978
4986
|
}
|
|
4979
4987
|
},
|
|
4980
4988
|
{
|
|
4981
|
-
|
|
4989
|
+
latexTrigger: ["\\plusmn"],
|
|
4982
4990
|
kind: "prefix",
|
|
4983
4991
|
precedence: 270,
|
|
4984
4992
|
parse: (parser, terminator) => {
|
|
4985
|
-
if (terminator && 270 < terminator.minPrec)
|
|
4986
|
-
return null;
|
|
4987
4993
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 400 });
|
|
4988
4994
|
return ["PlusMinus", missingIfEmpty(rhs)];
|
|
4989
4995
|
}
|
|
4990
4996
|
},
|
|
4991
4997
|
{
|
|
4992
4998
|
name: "Power",
|
|
4993
|
-
|
|
4999
|
+
latexTrigger: ["^"],
|
|
4994
5000
|
kind: "infix",
|
|
4995
5001
|
serialize: serializePower
|
|
4996
5002
|
},
|
|
4997
5003
|
{
|
|
4998
|
-
|
|
5004
|
+
latexTrigger: "\\prod",
|
|
4999
5005
|
precedence: 390,
|
|
5000
5006
|
name: "Product",
|
|
5001
5007
|
parse: parseBigOp("Product", 390),
|
|
@@ -5012,7 +5018,7 @@ var ComputeEngine = (() => {
|
|
|
5012
5018
|
precedence: 660,
|
|
5013
5019
|
serialize: (serializer, expr) => {
|
|
5014
5020
|
if (expr && nops(expr) === 1)
|
|
5015
|
-
return "\\
|
|
5021
|
+
return "\\operatorname{Rational}" + serializer.wrapArguments(expr);
|
|
5016
5022
|
return serializeFraction(serializer, expr);
|
|
5017
5023
|
}
|
|
5018
5024
|
},
|
|
@@ -5022,7 +5028,7 @@ var ComputeEngine = (() => {
|
|
|
5022
5028
|
},
|
|
5023
5029
|
{
|
|
5024
5030
|
name: "Round",
|
|
5025
|
-
|
|
5031
|
+
identifierTrigger: "round",
|
|
5026
5032
|
kind: "function"
|
|
5027
5033
|
},
|
|
5028
5034
|
{
|
|
@@ -5031,7 +5037,7 @@ var ComputeEngine = (() => {
|
|
|
5031
5037
|
serialize: (serializer, expr) => serializer.wrapShort(op(expr, 1)) + "^2"
|
|
5032
5038
|
},
|
|
5033
5039
|
{
|
|
5034
|
-
|
|
5040
|
+
latexTrigger: ["\\sum"],
|
|
5035
5041
|
precedence: 275,
|
|
5036
5042
|
name: "Sum",
|
|
5037
5043
|
parse: parseBigOp("Sum", 275),
|
|
@@ -5040,24 +5046,22 @@ var ComputeEngine = (() => {
|
|
|
5040
5046
|
{
|
|
5041
5047
|
name: "Sign",
|
|
5042
5048
|
// As per ISO 80000-2, "signum" is 'sgn'
|
|
5043
|
-
|
|
5049
|
+
identifierTrigger: "sgn",
|
|
5044
5050
|
kind: "function"
|
|
5045
5051
|
},
|
|
5046
5052
|
{
|
|
5047
5053
|
name: "Sqrt",
|
|
5048
|
-
|
|
5054
|
+
latexTrigger: ["\\sqrt"],
|
|
5049
5055
|
parse: parseRoot,
|
|
5050
5056
|
serialize: serializePower
|
|
5051
5057
|
},
|
|
5052
5058
|
{
|
|
5053
5059
|
name: "Subtract",
|
|
5054
|
-
|
|
5060
|
+
latexTrigger: ["-"],
|
|
5055
5061
|
kind: "infix",
|
|
5056
5062
|
associativity: "both",
|
|
5057
5063
|
precedence: 275,
|
|
5058
5064
|
parse: (parser, lhs, terminator) => {
|
|
5059
|
-
if (276 < terminator.minPrec)
|
|
5060
|
-
return null;
|
|
5061
5065
|
const rhs = parser.parseExpression({ ...terminator, minPrec: 277 });
|
|
5062
5066
|
return ["Subtract", lhs, missingIfEmpty(rhs)];
|
|
5063
5067
|
}
|
|
@@ -5154,16 +5158,16 @@ var ComputeEngine = (() => {
|
|
|
5154
5158
|
sub2 = parser.parseStringGroup()?.trim() ?? parser.nextToken();
|
|
5155
5159
|
base = Number.parseFloat(sub2 ?? "10");
|
|
5156
5160
|
}
|
|
5157
|
-
const
|
|
5158
|
-
if (
|
|
5161
|
+
const args = parser.parseArguments("implicit");
|
|
5162
|
+
if (args === null)
|
|
5159
5163
|
return [command];
|
|
5160
5164
|
if (base === 10)
|
|
5161
|
-
return ["Log",
|
|
5165
|
+
return ["Log", args[0]];
|
|
5162
5166
|
if (base === 2)
|
|
5163
|
-
return ["Lb", ...
|
|
5167
|
+
return ["Lb", ...args];
|
|
5164
5168
|
if (sub2 === null)
|
|
5165
|
-
return [command, ...
|
|
5166
|
-
return ["Log", ...
|
|
5169
|
+
return [command, ...args];
|
|
5170
|
+
return ["Log", ...args, sub2];
|
|
5167
5171
|
}
|
|
5168
5172
|
|
|
5169
5173
|
// src/compute-engine/latex-syntax/dictionary/definitions-core.ts
|
|
@@ -5202,7 +5206,7 @@ var ComputeEngine = (() => {
|
|
|
5202
5206
|
// Constants
|
|
5203
5207
|
//
|
|
5204
5208
|
{
|
|
5205
|
-
|
|
5209
|
+
latexTrigger: ["\\placeholder"],
|
|
5206
5210
|
kind: "symbol",
|
|
5207
5211
|
parse: (parser) => {
|
|
5208
5212
|
while (parser.match("<space>")) {
|
|
@@ -5221,6 +5225,27 @@ var ComputeEngine = (() => {
|
|
|
5221
5225
|
//
|
|
5222
5226
|
// Functions
|
|
5223
5227
|
//
|
|
5228
|
+
{
|
|
5229
|
+
name: "Apply",
|
|
5230
|
+
kind: "function",
|
|
5231
|
+
identifierTrigger: "apply",
|
|
5232
|
+
serialize: (serializer, expr) => serializer.serializeFunction(ops(expr))
|
|
5233
|
+
},
|
|
5234
|
+
{
|
|
5235
|
+
latexTrigger: "\\rhd",
|
|
5236
|
+
kind: "infix",
|
|
5237
|
+
precedence: 20,
|
|
5238
|
+
parse: "Apply"
|
|
5239
|
+
},
|
|
5240
|
+
{
|
|
5241
|
+
latexTrigger: "\\lhd",
|
|
5242
|
+
kind: "infix",
|
|
5243
|
+
precedence: 20,
|
|
5244
|
+
parse: (parser, lhs) => {
|
|
5245
|
+
const rhs = parser.parseExpression({ minPrec: 20 }) ?? "Nothing";
|
|
5246
|
+
return ["Apply", rhs, lhs];
|
|
5247
|
+
}
|
|
5248
|
+
},
|
|
5224
5249
|
{
|
|
5225
5250
|
name: "BaseForm",
|
|
5226
5251
|
serialize: (serializer, expr) => {
|
|
@@ -5286,7 +5311,7 @@ var ComputeEngine = (() => {
|
|
|
5286
5311
|
}
|
|
5287
5312
|
},
|
|
5288
5313
|
{
|
|
5289
|
-
|
|
5314
|
+
latexTrigger: ["\\mathtip"],
|
|
5290
5315
|
parse: (parser) => {
|
|
5291
5316
|
const op12 = parser.parseGroup();
|
|
5292
5317
|
const op22 = parser.parseGroup();
|
|
@@ -5294,7 +5319,7 @@ var ComputeEngine = (() => {
|
|
|
5294
5319
|
}
|
|
5295
5320
|
},
|
|
5296
5321
|
{
|
|
5297
|
-
|
|
5322
|
+
latexTrigger: ["\\texttip"],
|
|
5298
5323
|
parse: (parser) => {
|
|
5299
5324
|
const op12 = parser.parseGroup();
|
|
5300
5325
|
const op22 = parser.parseGroup();
|
|
@@ -5302,8 +5327,8 @@ var ComputeEngine = (() => {
|
|
|
5302
5327
|
}
|
|
5303
5328
|
},
|
|
5304
5329
|
{
|
|
5305
|
-
|
|
5306
|
-
parse: (parser) => parser.parseGroup()
|
|
5330
|
+
latexTrigger: ["\\error"],
|
|
5331
|
+
parse: (parser) => ["Error", parser.parseGroup()]
|
|
5307
5332
|
},
|
|
5308
5333
|
{
|
|
5309
5334
|
name: "Error",
|
|
@@ -5363,10 +5388,10 @@ var ComputeEngine = (() => {
|
|
|
5363
5388
|
{
|
|
5364
5389
|
name: "List",
|
|
5365
5390
|
kind: "matchfix",
|
|
5366
|
-
|
|
5367
|
-
|
|
5391
|
+
openTrigger: "[",
|
|
5392
|
+
closeTrigger: "]",
|
|
5368
5393
|
parse: (_parser, body) => {
|
|
5369
|
-
if (body === null)
|
|
5394
|
+
if (body === null || isEmptySequence(body))
|
|
5370
5395
|
return ["List"];
|
|
5371
5396
|
if (head(body) !== "Sequence" && head(body) !== "List")
|
|
5372
5397
|
return ["List", body];
|
|
@@ -5382,11 +5407,11 @@ var ComputeEngine = (() => {
|
|
|
5382
5407
|
},
|
|
5383
5408
|
{
|
|
5384
5409
|
kind: "matchfix",
|
|
5385
|
-
|
|
5386
|
-
|
|
5410
|
+
openTrigger: "(",
|
|
5411
|
+
closeTrigger: ")",
|
|
5387
5412
|
parse: (_parser, body) => {
|
|
5388
|
-
if (body === null)
|
|
5389
|
-
return
|
|
5413
|
+
if (body === null || isEmptySequence(body))
|
|
5414
|
+
return ["Sequence"];
|
|
5390
5415
|
if (head(body) === "Sequence" || head(body) === "List") {
|
|
5391
5416
|
if (nops(body) === 0)
|
|
5392
5417
|
return ["Delimiter"];
|
|
@@ -5396,7 +5421,7 @@ var ComputeEngine = (() => {
|
|
|
5396
5421
|
}
|
|
5397
5422
|
},
|
|
5398
5423
|
{
|
|
5399
|
-
|
|
5424
|
+
latexTrigger: [","],
|
|
5400
5425
|
kind: "infix",
|
|
5401
5426
|
precedence: 20,
|
|
5402
5427
|
// Unlike the matchfix version of List,
|
|
@@ -5416,7 +5441,7 @@ var ComputeEngine = (() => {
|
|
|
5416
5441
|
serialize: serializeOps("")
|
|
5417
5442
|
},
|
|
5418
5443
|
{
|
|
5419
|
-
|
|
5444
|
+
latexTrigger: [";"],
|
|
5420
5445
|
kind: "infix",
|
|
5421
5446
|
precedence: 19,
|
|
5422
5447
|
parse: (parser, lhs, terminator) => {
|
|
@@ -5433,7 +5458,7 @@ var ComputeEngine = (() => {
|
|
|
5433
5458
|
},
|
|
5434
5459
|
{
|
|
5435
5460
|
name: "String",
|
|
5436
|
-
|
|
5461
|
+
latexTrigger: ["\\text"],
|
|
5437
5462
|
parse: (scanner) => parseTextRun(scanner),
|
|
5438
5463
|
serialize: (serializer, expr) => {
|
|
5439
5464
|
const args = ops(expr);
|
|
@@ -5448,7 +5473,7 @@ var ComputeEngine = (() => {
|
|
|
5448
5473
|
},
|
|
5449
5474
|
{
|
|
5450
5475
|
name: "Subscript",
|
|
5451
|
-
|
|
5476
|
+
latexTrigger: ["_"],
|
|
5452
5477
|
kind: "infix",
|
|
5453
5478
|
serialize: (serializer, expr) => {
|
|
5454
5479
|
if (nops(expr) === 2) {
|
|
@@ -5457,53 +5482,121 @@ var ComputeEngine = (() => {
|
|
|
5457
5482
|
return "_{" + serializer.serialize(op(expr, 1)) + "}";
|
|
5458
5483
|
}
|
|
5459
5484
|
},
|
|
5460
|
-
{ name: "Superplus",
|
|
5461
|
-
{ name: "Subplus",
|
|
5462
|
-
{ name: "Superminus",
|
|
5463
|
-
{ name: "Subminus",
|
|
5485
|
+
{ name: "Superplus", latexTrigger: ["^", "+"], kind: "postfix" },
|
|
5486
|
+
{ name: "Subplus", latexTrigger: ["_", "+"], kind: "postfix" },
|
|
5487
|
+
{ name: "Superminus", latexTrigger: ["^", "-"], kind: "postfix" },
|
|
5488
|
+
{ name: "Subminus", latexTrigger: ["_", "-"], kind: "postfix" },
|
|
5464
5489
|
{
|
|
5465
|
-
|
|
5490
|
+
latexTrigger: ["^", "*"],
|
|
5466
5491
|
kind: "postfix",
|
|
5467
5492
|
parse: (_parser, lhs) => ["Superstar", lhs]
|
|
5468
5493
|
},
|
|
5469
5494
|
// @todo: when lhs is a complex number, 'Conjugate'
|
|
5470
5495
|
// { name: 'Conjugate', trigger: ['\\star'], kind: 'infix' },
|
|
5471
|
-
{ name: "Superstar",
|
|
5496
|
+
{ name: "Superstar", latexTrigger: ["^", "\\star"], kind: "postfix" },
|
|
5472
5497
|
{
|
|
5473
|
-
|
|
5498
|
+
latexTrigger: ["_", "*"],
|
|
5474
5499
|
kind: "postfix",
|
|
5475
5500
|
parse: (_parser, lhs) => ["Substar", lhs]
|
|
5476
5501
|
},
|
|
5477
|
-
{ name: "Substar",
|
|
5478
|
-
{ name: "Superdagger",
|
|
5502
|
+
{ name: "Substar", latexTrigger: ["_", "\\star"], kind: "postfix" },
|
|
5503
|
+
{ name: "Superdagger", latexTrigger: ["^", "\\dagger"], kind: "postfix" },
|
|
5479
5504
|
{
|
|
5480
|
-
|
|
5505
|
+
latexTrigger: ["^", "\\dag"],
|
|
5481
5506
|
kind: "postfix",
|
|
5482
5507
|
parse: (_parser, lhs) => ["Superdagger", lhs]
|
|
5483
5508
|
},
|
|
5484
5509
|
{
|
|
5485
5510
|
name: "Prime",
|
|
5486
|
-
|
|
5487
|
-
|
|
5511
|
+
latexTrigger: ["^", "\\prime"],
|
|
5512
|
+
// Note: we don't need a precedence because the trigger is '^'
|
|
5513
|
+
// and '^' (and '_') are treated specially by the parser.
|
|
5514
|
+
kind: "postfix",
|
|
5515
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 1),
|
|
5516
|
+
serialize: (serializer, expr) => {
|
|
5517
|
+
const n2 = machineValue(op(expr, 2)) ?? 1;
|
|
5518
|
+
const base = serializer.serialize(op(expr, 1));
|
|
5519
|
+
if (n2 === 1)
|
|
5520
|
+
return base + "^\\prime";
|
|
5521
|
+
if (n2 === 2)
|
|
5522
|
+
return base + "^\\doubleprime";
|
|
5523
|
+
if (n2 === 3)
|
|
5524
|
+
return base + "^\\tripleprime";
|
|
5525
|
+
return base + "^{(" + serializer.serialize(op(expr, 2)) + ")}";
|
|
5526
|
+
}
|
|
5527
|
+
},
|
|
5528
|
+
{
|
|
5529
|
+
latexTrigger: "^{\\prime\\prime}",
|
|
5530
|
+
kind: "postfix",
|
|
5531
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 2)
|
|
5532
|
+
},
|
|
5533
|
+
{
|
|
5534
|
+
latexTrigger: "^{\\prime\\prime\\prime}",
|
|
5535
|
+
kind: "postfix",
|
|
5536
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 3)
|
|
5537
|
+
},
|
|
5538
|
+
{
|
|
5539
|
+
latexTrigger: ["^", "\\doubleprime"],
|
|
5540
|
+
kind: "postfix",
|
|
5541
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 2)
|
|
5542
|
+
},
|
|
5543
|
+
{
|
|
5544
|
+
latexTrigger: ["^", "\\tripleprime"],
|
|
5545
|
+
kind: "postfix",
|
|
5546
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 3)
|
|
5547
|
+
},
|
|
5548
|
+
{
|
|
5549
|
+
latexTrigger: "'",
|
|
5550
|
+
kind: "postfix",
|
|
5551
|
+
precedence: 810,
|
|
5552
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 1)
|
|
5488
5553
|
},
|
|
5489
5554
|
{
|
|
5490
|
-
|
|
5555
|
+
latexTrigger: "\\prime",
|
|
5491
5556
|
kind: "postfix",
|
|
5492
|
-
|
|
5557
|
+
precedence: 810,
|
|
5558
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 1)
|
|
5493
5559
|
},
|
|
5494
5560
|
{
|
|
5495
|
-
|
|
5561
|
+
latexTrigger: "\\doubleprime",
|
|
5496
5562
|
kind: "postfix",
|
|
5497
|
-
|
|
5563
|
+
precedence: 810,
|
|
5564
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 2)
|
|
5565
|
+
},
|
|
5566
|
+
{
|
|
5567
|
+
latexTrigger: "\\tripleprime",
|
|
5568
|
+
kind: "postfix",
|
|
5569
|
+
precedence: 810,
|
|
5570
|
+
parse: (parser, lhs) => parsePrime(parser, lhs, 3)
|
|
5571
|
+
},
|
|
5572
|
+
{
|
|
5573
|
+
latexTrigger: ["^", "<{>", "("],
|
|
5574
|
+
kind: "postfix",
|
|
5575
|
+
parse: (parser, lhs) => {
|
|
5576
|
+
if (!parser.computeEngine?.box(lhs)?.domain.isFunction)
|
|
5577
|
+
return null;
|
|
5578
|
+
const start = parser.index;
|
|
5579
|
+
parser.addBoundary([")"]);
|
|
5580
|
+
const expr = parser.parseExpression();
|
|
5581
|
+
if (!parser.matchBoundary()) {
|
|
5582
|
+
parser.index = start;
|
|
5583
|
+
return null;
|
|
5584
|
+
}
|
|
5585
|
+
if (!parser.match("<}>")) {
|
|
5586
|
+
parser.index = start;
|
|
5587
|
+
return null;
|
|
5588
|
+
}
|
|
5589
|
+
return ["Derivative", lhs, expr];
|
|
5590
|
+
}
|
|
5498
5591
|
},
|
|
5499
5592
|
{
|
|
5500
5593
|
name: "InverseFunction",
|
|
5501
|
-
|
|
5594
|
+
latexTrigger: "^{-1}",
|
|
5502
5595
|
kind: "postfix",
|
|
5503
5596
|
parse: (parser, lhs) => {
|
|
5504
5597
|
if (parser.computeEngine?.box(lhs)?.domain.isFunction)
|
|
5505
5598
|
return ["InverseFunction", lhs];
|
|
5506
|
-
return
|
|
5599
|
+
return ["Power", missingIfEmpty(lhs), -1];
|
|
5507
5600
|
},
|
|
5508
5601
|
serialize: (serializer, expr) => serializer.serialize(op(expr, 1)) + "^{-1}"
|
|
5509
5602
|
},
|
|
@@ -5518,13 +5611,13 @@ var ComputeEngine = (() => {
|
|
|
5518
5611
|
return base + "^{\\doubleprime}";
|
|
5519
5612
|
if (degree === 3)
|
|
5520
5613
|
return base + "^{\\tripleprime}";
|
|
5521
|
-
return base + "^{(" +
|
|
5614
|
+
return base + "^{(" + serializer.serialize(op(expr, 2)) + ")}";
|
|
5522
5615
|
}
|
|
5523
5616
|
},
|
|
5524
5617
|
{
|
|
5525
|
-
name: "Which",
|
|
5526
|
-
trigger: "cases",
|
|
5527
5618
|
kind: "environment",
|
|
5619
|
+
name: "Which",
|
|
5620
|
+
identifierTrigger: "cases",
|
|
5528
5621
|
parse: (parser) => {
|
|
5529
5622
|
const tabular = parser.parseTabular();
|
|
5530
5623
|
if (!tabular)
|
|
@@ -5667,11 +5760,26 @@ var ComputeEngine = (() => {
|
|
|
5667
5760
|
return serializer.serialize(op(arg, 1));
|
|
5668
5761
|
return serializer.serialize(arg);
|
|
5669
5762
|
}
|
|
5763
|
+
function parsePrime(parser, lhs, order2) {
|
|
5764
|
+
const lhsh = head(lhs);
|
|
5765
|
+
if (lhsh === "Derivative" || lhsh === "Prime") {
|
|
5766
|
+
const n = machineValue(op(lhs, 2)) ?? 1;
|
|
5767
|
+
return [lhsh, missingIfEmpty(op(lhs, 1)), n + order2];
|
|
5768
|
+
}
|
|
5769
|
+
if (parser.computeEngine?.box(lhs)?.domain.isFunction) {
|
|
5770
|
+
if (order2 === 1)
|
|
5771
|
+
return ["Derivative", lhs];
|
|
5772
|
+
return ["Derivative", lhs, order2];
|
|
5773
|
+
}
|
|
5774
|
+
if (order2 === 1)
|
|
5775
|
+
return ["Prime", missingIfEmpty(lhs)];
|
|
5776
|
+
return ["Prime", missingIfEmpty(lhs), order2];
|
|
5777
|
+
}
|
|
5670
5778
|
|
|
5671
5779
|
// src/compute-engine/latex-syntax/dictionary/definitions-inequalities.ts
|
|
5672
5780
|
var DEFINITIONS_INEQUALITIES = [
|
|
5673
5781
|
{
|
|
5674
|
-
|
|
5782
|
+
latexTrigger: ["\\not", "<"],
|
|
5675
5783
|
kind: "infix",
|
|
5676
5784
|
associativity: "right",
|
|
5677
5785
|
precedence: 246,
|
|
@@ -5679,13 +5787,13 @@ var ComputeEngine = (() => {
|
|
|
5679
5787
|
},
|
|
5680
5788
|
{
|
|
5681
5789
|
name: "NotLess",
|
|
5682
|
-
|
|
5790
|
+
latexTrigger: ["\\nless"],
|
|
5683
5791
|
kind: "infix",
|
|
5684
5792
|
associativity: "right",
|
|
5685
5793
|
precedence: 246
|
|
5686
5794
|
},
|
|
5687
5795
|
{
|
|
5688
|
-
|
|
5796
|
+
latexTrigger: ["<"],
|
|
5689
5797
|
kind: "infix",
|
|
5690
5798
|
associativity: "right",
|
|
5691
5799
|
precedence: 245,
|
|
@@ -5693,13 +5801,13 @@ var ComputeEngine = (() => {
|
|
|
5693
5801
|
},
|
|
5694
5802
|
{
|
|
5695
5803
|
name: "Less",
|
|
5696
|
-
|
|
5804
|
+
latexTrigger: ["\\lt"],
|
|
5697
5805
|
kind: "infix",
|
|
5698
5806
|
associativity: "right",
|
|
5699
5807
|
precedence: 245
|
|
5700
5808
|
},
|
|
5701
5809
|
{
|
|
5702
|
-
|
|
5810
|
+
latexTrigger: ["<", "="],
|
|
5703
5811
|
kind: "infix",
|
|
5704
5812
|
associativity: "right",
|
|
5705
5813
|
precedence: 241,
|
|
@@ -5707,20 +5815,20 @@ var ComputeEngine = (() => {
|
|
|
5707
5815
|
},
|
|
5708
5816
|
{
|
|
5709
5817
|
name: "LessEqual",
|
|
5710
|
-
|
|
5818
|
+
latexTrigger: ["\\le"],
|
|
5711
5819
|
kind: "infix",
|
|
5712
5820
|
associativity: "right",
|
|
5713
5821
|
precedence: 241
|
|
5714
5822
|
},
|
|
5715
5823
|
{
|
|
5716
|
-
|
|
5824
|
+
latexTrigger: ["\\leq"],
|
|
5717
5825
|
kind: "infix",
|
|
5718
5826
|
associativity: "right",
|
|
5719
5827
|
precedence: 241,
|
|
5720
5828
|
parse: "LessEqual"
|
|
5721
5829
|
},
|
|
5722
5830
|
{
|
|
5723
|
-
|
|
5831
|
+
latexTrigger: ["\\leqslant"],
|
|
5724
5832
|
kind: "infix",
|
|
5725
5833
|
associativity: "right",
|
|
5726
5834
|
precedence: 265,
|
|
@@ -5729,28 +5837,28 @@ var ComputeEngine = (() => {
|
|
|
5729
5837
|
},
|
|
5730
5838
|
{
|
|
5731
5839
|
name: "LessNotEqual",
|
|
5732
|
-
|
|
5840
|
+
latexTrigger: ["\\lneqq"],
|
|
5733
5841
|
kind: "infix",
|
|
5734
5842
|
associativity: "right",
|
|
5735
5843
|
precedence: 260
|
|
5736
5844
|
},
|
|
5737
5845
|
{
|
|
5738
5846
|
name: "NotLessNotEqual",
|
|
5739
|
-
|
|
5847
|
+
latexTrigger: ["\\nleqq"],
|
|
5740
5848
|
kind: "infix",
|
|
5741
5849
|
associativity: "right",
|
|
5742
5850
|
precedence: 260
|
|
5743
5851
|
},
|
|
5744
5852
|
{
|
|
5745
5853
|
name: "LessOverEqual",
|
|
5746
|
-
|
|
5854
|
+
latexTrigger: ["\\leqq"],
|
|
5747
5855
|
kind: "infix",
|
|
5748
5856
|
associativity: "right",
|
|
5749
5857
|
precedence: 265
|
|
5750
5858
|
},
|
|
5751
5859
|
{
|
|
5752
5860
|
name: "GreaterOverEqual",
|
|
5753
|
-
|
|
5861
|
+
latexTrigger: ["\\geqq"],
|
|
5754
5862
|
kind: "infix",
|
|
5755
5863
|
associativity: "right",
|
|
5756
5864
|
precedence: 265,
|
|
@@ -5758,13 +5866,13 @@ var ComputeEngine = (() => {
|
|
|
5758
5866
|
},
|
|
5759
5867
|
{
|
|
5760
5868
|
name: "Equal",
|
|
5761
|
-
|
|
5869
|
+
latexTrigger: ["="],
|
|
5762
5870
|
kind: "infix",
|
|
5763
5871
|
associativity: "right",
|
|
5764
5872
|
precedence: 260
|
|
5765
5873
|
},
|
|
5766
5874
|
{
|
|
5767
|
-
|
|
5875
|
+
latexTrigger: ["*", "="],
|
|
5768
5876
|
kind: "infix",
|
|
5769
5877
|
associativity: "right",
|
|
5770
5878
|
precedence: 260,
|
|
@@ -5772,42 +5880,42 @@ var ComputeEngine = (() => {
|
|
|
5772
5880
|
},
|
|
5773
5881
|
{
|
|
5774
5882
|
name: "StarEqual",
|
|
5775
|
-
|
|
5883
|
+
latexTrigger: ["\\star", "="],
|
|
5776
5884
|
kind: "infix",
|
|
5777
5885
|
associativity: "right",
|
|
5778
5886
|
precedence: 260
|
|
5779
5887
|
},
|
|
5780
5888
|
{
|
|
5781
5889
|
name: "PlusEqual",
|
|
5782
|
-
|
|
5890
|
+
latexTrigger: ["+", "="],
|
|
5783
5891
|
kind: "infix",
|
|
5784
5892
|
associativity: "right",
|
|
5785
5893
|
precedence: 260
|
|
5786
5894
|
},
|
|
5787
5895
|
{
|
|
5788
5896
|
name: "MinusEqual",
|
|
5789
|
-
|
|
5897
|
+
latexTrigger: ["-", "="],
|
|
5790
5898
|
kind: "infix",
|
|
5791
5899
|
associativity: "right",
|
|
5792
5900
|
precedence: 260
|
|
5793
5901
|
},
|
|
5794
5902
|
{
|
|
5795
5903
|
name: "SlashEqual",
|
|
5796
|
-
|
|
5904
|
+
latexTrigger: ["/", "="],
|
|
5797
5905
|
kind: "infix",
|
|
5798
5906
|
associativity: "right",
|
|
5799
5907
|
precedence: 260
|
|
5800
5908
|
},
|
|
5801
5909
|
{
|
|
5802
5910
|
name: "EqualEqual",
|
|
5803
|
-
|
|
5911
|
+
latexTrigger: ["=", "="],
|
|
5804
5912
|
kind: "infix",
|
|
5805
5913
|
associativity: "right",
|
|
5806
5914
|
precedence: 260
|
|
5807
5915
|
},
|
|
5808
5916
|
{
|
|
5809
5917
|
name: "EqualEqualEqual",
|
|
5810
|
-
|
|
5918
|
+
latexTrigger: ["=", "=", "="],
|
|
5811
5919
|
kind: "infix",
|
|
5812
5920
|
associativity: "right",
|
|
5813
5921
|
precedence: 265
|
|
@@ -5815,7 +5923,7 @@ var ComputeEngine = (() => {
|
|
|
5815
5923
|
{
|
|
5816
5924
|
name: "TildeFullEqual",
|
|
5817
5925
|
// MathML: approximately equal to
|
|
5818
|
-
|
|
5926
|
+
latexTrigger: ["\\cong"],
|
|
5819
5927
|
kind: "infix",
|
|
5820
5928
|
associativity: "right",
|
|
5821
5929
|
precedence: 260
|
|
@@ -5823,13 +5931,13 @@ var ComputeEngine = (() => {
|
|
|
5823
5931
|
{
|
|
5824
5932
|
name: "NotTildeFullEqual",
|
|
5825
5933
|
// MathML: approximately but not actually equal to
|
|
5826
|
-
|
|
5934
|
+
latexTrigger: ["\\ncong"],
|
|
5827
5935
|
kind: "infix",
|
|
5828
5936
|
associativity: "right",
|
|
5829
5937
|
precedence: 260
|
|
5830
5938
|
},
|
|
5831
5939
|
{
|
|
5832
|
-
|
|
5940
|
+
latexTrigger: [":", "="],
|
|
5833
5941
|
kind: "infix",
|
|
5834
5942
|
associativity: "right",
|
|
5835
5943
|
precedence: 260,
|
|
@@ -5837,7 +5945,7 @@ var ComputeEngine = (() => {
|
|
|
5837
5945
|
},
|
|
5838
5946
|
{
|
|
5839
5947
|
name: "Assign",
|
|
5840
|
-
|
|
5948
|
+
latexTrigger: ["\\coloneq"],
|
|
5841
5949
|
kind: "infix",
|
|
5842
5950
|
associativity: "right",
|
|
5843
5951
|
precedence: 260
|
|
@@ -5845,7 +5953,7 @@ var ComputeEngine = (() => {
|
|
|
5845
5953
|
{
|
|
5846
5954
|
name: "Approx",
|
|
5847
5955
|
// Note: Mathematica TildeTilde
|
|
5848
|
-
|
|
5956
|
+
latexTrigger: ["\\approx"],
|
|
5849
5957
|
kind: "infix",
|
|
5850
5958
|
associativity: "right",
|
|
5851
5959
|
precedence: 247
|
|
@@ -5853,7 +5961,7 @@ var ComputeEngine = (() => {
|
|
|
5853
5961
|
{
|
|
5854
5962
|
name: "NotApprox",
|
|
5855
5963
|
// Note: Mathematica TildeTilde
|
|
5856
|
-
|
|
5964
|
+
latexTrigger: ["\\not", "\\approx"],
|
|
5857
5965
|
kind: "infix",
|
|
5858
5966
|
associativity: "right",
|
|
5859
5967
|
precedence: 247
|
|
@@ -5861,7 +5969,7 @@ var ComputeEngine = (() => {
|
|
|
5861
5969
|
{
|
|
5862
5970
|
name: "ApproxEqual",
|
|
5863
5971
|
// Note: Mathematica TildeEqual, MathML: `asymptotically equal to`
|
|
5864
|
-
|
|
5972
|
+
latexTrigger: ["\\approxeq"],
|
|
5865
5973
|
kind: "infix",
|
|
5866
5974
|
associativity: "right",
|
|
5867
5975
|
precedence: 260
|
|
@@ -5869,7 +5977,7 @@ var ComputeEngine = (() => {
|
|
|
5869
5977
|
{
|
|
5870
5978
|
name: "NotApproxEqual",
|
|
5871
5979
|
// Note: Mathematica NotTildeEqual
|
|
5872
|
-
|
|
5980
|
+
latexTrigger: ["\\not", "\\approxeq"],
|
|
5873
5981
|
kind: "infix",
|
|
5874
5982
|
// Note: no LaTeX symbol for char U+2249
|
|
5875
5983
|
associativity: "right",
|
|
@@ -5877,14 +5985,14 @@ var ComputeEngine = (() => {
|
|
|
5877
5985
|
},
|
|
5878
5986
|
{
|
|
5879
5987
|
name: "NotEqual",
|
|
5880
|
-
|
|
5988
|
+
latexTrigger: ["\\ne"],
|
|
5881
5989
|
kind: "infix",
|
|
5882
5990
|
associativity: "right",
|
|
5883
5991
|
precedence: 255
|
|
5884
5992
|
},
|
|
5885
5993
|
{
|
|
5886
5994
|
name: "Unequal",
|
|
5887
|
-
|
|
5995
|
+
latexTrigger: ["!", "="],
|
|
5888
5996
|
kind: "infix",
|
|
5889
5997
|
associativity: "right",
|
|
5890
5998
|
precedence: 260
|
|
@@ -5892,14 +6000,14 @@ var ComputeEngine = (() => {
|
|
|
5892
6000
|
},
|
|
5893
6001
|
{
|
|
5894
6002
|
name: "GreaterEqual",
|
|
5895
|
-
|
|
6003
|
+
latexTrigger: ["\\ge"],
|
|
5896
6004
|
kind: "infix",
|
|
5897
6005
|
associativity: "right",
|
|
5898
6006
|
precedence: 242
|
|
5899
6007
|
// Note: different precendence than `>=` as per MathML
|
|
5900
6008
|
},
|
|
5901
6009
|
{
|
|
5902
|
-
|
|
6010
|
+
latexTrigger: ["\\geq"],
|
|
5903
6011
|
kind: "infix",
|
|
5904
6012
|
associativity: "right",
|
|
5905
6013
|
precedence: 242,
|
|
@@ -5907,14 +6015,14 @@ var ComputeEngine = (() => {
|
|
|
5907
6015
|
parse: "GreaterEqual"
|
|
5908
6016
|
},
|
|
5909
6017
|
{
|
|
5910
|
-
|
|
6018
|
+
latexTrigger: [">", "="],
|
|
5911
6019
|
kind: "infix",
|
|
5912
6020
|
associativity: "right",
|
|
5913
6021
|
precedence: 243,
|
|
5914
6022
|
parse: "GreaterEqual"
|
|
5915
6023
|
},
|
|
5916
6024
|
{
|
|
5917
|
-
|
|
6025
|
+
latexTrigger: ["\\geqslant"],
|
|
5918
6026
|
kind: "infix",
|
|
5919
6027
|
associativity: "right",
|
|
5920
6028
|
precedence: 265,
|
|
@@ -5923,20 +6031,20 @@ var ComputeEngine = (() => {
|
|
|
5923
6031
|
},
|
|
5924
6032
|
{
|
|
5925
6033
|
name: "GreaterNotEqual",
|
|
5926
|
-
|
|
6034
|
+
latexTrigger: ["\\gneqq"],
|
|
5927
6035
|
kind: "infix",
|
|
5928
6036
|
associativity: "right",
|
|
5929
6037
|
precedence: 260
|
|
5930
6038
|
},
|
|
5931
6039
|
{
|
|
5932
6040
|
name: "NotGreaterNotEqual",
|
|
5933
|
-
|
|
6041
|
+
latexTrigger: ["\\ngeqq"],
|
|
5934
6042
|
kind: "infix",
|
|
5935
6043
|
associativity: "right",
|
|
5936
6044
|
precedence: 260
|
|
5937
6045
|
},
|
|
5938
6046
|
{
|
|
5939
|
-
|
|
6047
|
+
latexTrigger: [">"],
|
|
5940
6048
|
kind: "infix",
|
|
5941
6049
|
associativity: "right",
|
|
5942
6050
|
precedence: 245,
|
|
@@ -5944,20 +6052,20 @@ var ComputeEngine = (() => {
|
|
|
5944
6052
|
},
|
|
5945
6053
|
{
|
|
5946
6054
|
name: "Greater",
|
|
5947
|
-
|
|
6055
|
+
latexTrigger: ["\\gt"],
|
|
5948
6056
|
kind: "infix",
|
|
5949
6057
|
associativity: "right",
|
|
5950
6058
|
precedence: 245
|
|
5951
6059
|
},
|
|
5952
6060
|
{
|
|
5953
6061
|
name: "NotGreater",
|
|
5954
|
-
|
|
6062
|
+
latexTrigger: ["\\ngtr"],
|
|
5955
6063
|
kind: "infix",
|
|
5956
6064
|
associativity: "right",
|
|
5957
6065
|
precedence: 244
|
|
5958
6066
|
},
|
|
5959
6067
|
{
|
|
5960
|
-
|
|
6068
|
+
latexTrigger: ["\\not", ">"],
|
|
5961
6069
|
kind: "infix",
|
|
5962
6070
|
associativity: "right",
|
|
5963
6071
|
precedence: 244,
|
|
@@ -5965,7 +6073,7 @@ var ComputeEngine = (() => {
|
|
|
5965
6073
|
},
|
|
5966
6074
|
{
|
|
5967
6075
|
name: "RingEqual",
|
|
5968
|
-
|
|
6076
|
+
latexTrigger: ["\\circeq"],
|
|
5969
6077
|
kind: "infix",
|
|
5970
6078
|
associativity: "right",
|
|
5971
6079
|
precedence: 260
|
|
@@ -5973,7 +6081,7 @@ var ComputeEngine = (() => {
|
|
|
5973
6081
|
{
|
|
5974
6082
|
name: "TriangleEqual",
|
|
5975
6083
|
// MathML: delta equal to
|
|
5976
|
-
|
|
6084
|
+
latexTrigger: ["\\triangleq"],
|
|
5977
6085
|
kind: "infix",
|
|
5978
6086
|
associativity: "right",
|
|
5979
6087
|
precedence: 260
|
|
@@ -5981,7 +6089,7 @@ var ComputeEngine = (() => {
|
|
|
5981
6089
|
{
|
|
5982
6090
|
name: "DotEqual",
|
|
5983
6091
|
// MathML: approaches the limit
|
|
5984
|
-
|
|
6092
|
+
latexTrigger: ["\\doteq"],
|
|
5985
6093
|
kind: "infix",
|
|
5986
6094
|
associativity: "right",
|
|
5987
6095
|
precedence: 265
|
|
@@ -5989,7 +6097,7 @@ var ComputeEngine = (() => {
|
|
|
5989
6097
|
{
|
|
5990
6098
|
name: "DotEqualDot",
|
|
5991
6099
|
// MathML: Geometrically equal
|
|
5992
|
-
|
|
6100
|
+
latexTrigger: ["\\doteqdot"],
|
|
5993
6101
|
kind: "infix",
|
|
5994
6102
|
associativity: "right",
|
|
5995
6103
|
precedence: 265
|
|
@@ -5997,7 +6105,7 @@ var ComputeEngine = (() => {
|
|
|
5997
6105
|
{
|
|
5998
6106
|
name: "FallingDotEqual",
|
|
5999
6107
|
// MathML: approximately equal to or the image of
|
|
6000
|
-
|
|
6108
|
+
latexTrigger: ["\\fallingdotseq"],
|
|
6001
6109
|
kind: "infix",
|
|
6002
6110
|
associativity: "right",
|
|
6003
6111
|
precedence: 265
|
|
@@ -6005,92 +6113,77 @@ var ComputeEngine = (() => {
|
|
|
6005
6113
|
{
|
|
6006
6114
|
name: "RisingDotEqual",
|
|
6007
6115
|
// MathML: image of or approximately equal to
|
|
6008
|
-
|
|
6116
|
+
latexTrigger: ["\\fallingdotseq"],
|
|
6009
6117
|
kind: "infix",
|
|
6010
6118
|
associativity: "right",
|
|
6011
6119
|
precedence: 265
|
|
6012
6120
|
},
|
|
6013
6121
|
{
|
|
6014
6122
|
name: "QuestionEqual",
|
|
6015
|
-
|
|
6016
|
-
kind: "infix",
|
|
6017
|
-
associativity: "right",
|
|
6018
|
-
precedence: 260
|
|
6019
|
-
},
|
|
6020
|
-
{
|
|
6021
|
-
name: "Equivalent",
|
|
6022
|
-
// MathML: identical to, Mathematica: Congruent
|
|
6023
|
-
trigger: ["\\equiv"],
|
|
6123
|
+
latexTrigger: ["\\questeq"],
|
|
6024
6124
|
kind: "infix",
|
|
6025
6125
|
associativity: "right",
|
|
6026
6126
|
precedence: 260
|
|
6027
6127
|
},
|
|
6028
|
-
{
|
|
6029
|
-
trigger: ["\\iff"],
|
|
6030
|
-
kind: "infix",
|
|
6031
|
-
parse: "Equivalent",
|
|
6032
|
-
associativity: "right",
|
|
6033
|
-
precedence: 260
|
|
6034
|
-
},
|
|
6035
6128
|
{
|
|
6036
6129
|
name: "MuchLess",
|
|
6037
|
-
|
|
6130
|
+
latexTrigger: ["\\ll"],
|
|
6038
6131
|
kind: "infix",
|
|
6039
6132
|
associativity: "right",
|
|
6040
6133
|
precedence: 260
|
|
6041
6134
|
},
|
|
6042
6135
|
{
|
|
6043
6136
|
name: "MuchGreater",
|
|
6044
|
-
|
|
6137
|
+
latexTrigger: ["\\gg"],
|
|
6045
6138
|
kind: "infix",
|
|
6046
6139
|
associativity: "right",
|
|
6047
6140
|
precedence: 260
|
|
6048
6141
|
},
|
|
6049
6142
|
{
|
|
6050
6143
|
name: "Precedes",
|
|
6051
|
-
|
|
6144
|
+
latexTrigger: ["\\prec"],
|
|
6052
6145
|
kind: "infix",
|
|
6053
6146
|
associativity: "right",
|
|
6054
6147
|
precedence: 260
|
|
6055
6148
|
},
|
|
6056
6149
|
{
|
|
6057
6150
|
name: "Succeeds",
|
|
6058
|
-
|
|
6151
|
+
latexTrigger: ["\\succ"],
|
|
6059
6152
|
kind: "infix",
|
|
6060
6153
|
associativity: "right",
|
|
6061
6154
|
precedence: 260
|
|
6062
6155
|
},
|
|
6063
6156
|
{
|
|
6064
6157
|
name: "PrecedesEqual",
|
|
6065
|
-
|
|
6158
|
+
latexTrigger: ["\\preccurlyeq"],
|
|
6066
6159
|
kind: "infix",
|
|
6067
6160
|
associativity: "right",
|
|
6068
6161
|
precedence: 260
|
|
6069
6162
|
},
|
|
6070
6163
|
{
|
|
6071
6164
|
name: "SucceedsEqual",
|
|
6072
|
-
|
|
6165
|
+
latexTrigger: ["\\curlyeqprec"],
|
|
6073
6166
|
kind: "infix",
|
|
6074
6167
|
associativity: "right",
|
|
6075
6168
|
precedence: 260
|
|
6076
6169
|
},
|
|
6077
6170
|
{
|
|
6078
6171
|
name: "NotPrecedes",
|
|
6079
|
-
|
|
6172
|
+
latexTrigger: ["\\nprec"],
|
|
6080
6173
|
kind: "infix",
|
|
6081
6174
|
associativity: "right",
|
|
6082
6175
|
precedence: 260
|
|
6083
6176
|
},
|
|
6084
6177
|
{
|
|
6085
6178
|
name: "NotSucceeds",
|
|
6086
|
-
|
|
6179
|
+
latexTrigger: ["\\nsucc"],
|
|
6087
6180
|
kind: "infix",
|
|
6088
6181
|
associativity: "right",
|
|
6089
6182
|
precedence: 260
|
|
6090
6183
|
},
|
|
6091
6184
|
{
|
|
6092
6185
|
name: "Between",
|
|
6093
|
-
|
|
6186
|
+
latexTrigger: ["\\between"],
|
|
6094
6187
|
kind: "infix",
|
|
6095
6188
|
associativity: "right",
|
|
6096
6189
|
precedence: 265
|
|
@@ -6102,18 +6195,187 @@ var ComputeEngine = (() => {
|
|
|
6102
6195
|
// Constants
|
|
6103
6196
|
{
|
|
6104
6197
|
name: "True",
|
|
6105
|
-
|
|
6106
|
-
|
|
6198
|
+
kind: "symbol",
|
|
6199
|
+
latexTrigger: ["\\top"]
|
|
6200
|
+
// ⊤ U+22A4
|
|
6201
|
+
},
|
|
6202
|
+
{
|
|
6203
|
+
kind: "symbol",
|
|
6204
|
+
latexTrigger: "\\mathrm{True}",
|
|
6205
|
+
parse: "True"
|
|
6206
|
+
},
|
|
6207
|
+
{
|
|
6208
|
+
kind: "symbol",
|
|
6209
|
+
latexTrigger: "\\operator{True}",
|
|
6210
|
+
parse: "True"
|
|
6211
|
+
},
|
|
6212
|
+
{
|
|
6213
|
+
kind: "symbol",
|
|
6214
|
+
latexTrigger: "\\mathsf{T}",
|
|
6215
|
+
parse: "True"
|
|
6107
6216
|
},
|
|
6108
6217
|
{
|
|
6109
6218
|
name: "False",
|
|
6110
|
-
|
|
6111
|
-
|
|
6219
|
+
kind: "symbol",
|
|
6220
|
+
latexTrigger: ["\\bot"]
|
|
6221
|
+
// ⊥ U+22A5
|
|
6222
|
+
},
|
|
6223
|
+
{
|
|
6224
|
+
kind: "symbol",
|
|
6225
|
+
latexTrigger: "\\operator{False}",
|
|
6226
|
+
parse: "True"
|
|
6227
|
+
},
|
|
6228
|
+
{
|
|
6229
|
+
kind: "symbol",
|
|
6230
|
+
latexTrigger: "\\mathsf{F}",
|
|
6231
|
+
parse: "True"
|
|
6112
6232
|
},
|
|
6113
6233
|
{
|
|
6114
6234
|
name: "Maybe",
|
|
6115
|
-
|
|
6116
|
-
|
|
6235
|
+
kind: "symbol",
|
|
6236
|
+
latexTrigger: "\\operatorname{Maybe}",
|
|
6237
|
+
serialize: "\\operatorname{Maybe}"
|
|
6238
|
+
},
|
|
6239
|
+
{
|
|
6240
|
+
kind: "symbol",
|
|
6241
|
+
latexTrigger: "\\mathrm{Maybe}",
|
|
6242
|
+
parse: "Maybe"
|
|
6243
|
+
},
|
|
6244
|
+
// Operators
|
|
6245
|
+
{
|
|
6246
|
+
name: "And",
|
|
6247
|
+
kind: "infix",
|
|
6248
|
+
latexTrigger: ["\\land"],
|
|
6249
|
+
precedence: 317
|
|
6250
|
+
// serialize: '\\land',
|
|
6251
|
+
},
|
|
6252
|
+
{ kind: "infix", latexTrigger: ["\\wedge"], parse: "And", precedence: 317 },
|
|
6253
|
+
{ kind: "infix", latexTrigger: "\\&", parse: "And", precedence: 317 },
|
|
6254
|
+
{
|
|
6255
|
+
kind: "infix",
|
|
6256
|
+
latexTrigger: "\\operatorname{and}",
|
|
6257
|
+
parse: "And",
|
|
6258
|
+
precedence: 317
|
|
6259
|
+
},
|
|
6260
|
+
{
|
|
6261
|
+
name: "Or",
|
|
6262
|
+
kind: "infix",
|
|
6263
|
+
latexTrigger: ["\\lor"],
|
|
6264
|
+
precedence: 310
|
|
6265
|
+
},
|
|
6266
|
+
{ kind: "infix", latexTrigger: ["\\vee"], parse: "Or", precedence: 310 },
|
|
6267
|
+
{ kind: "infix", latexTrigger: "\\parallel", parse: "Or", precedence: 310 },
|
|
6268
|
+
{
|
|
6269
|
+
kind: "infix",
|
|
6270
|
+
latexTrigger: "\\operatorname{or}",
|
|
6271
|
+
parse: "And",
|
|
6272
|
+
precedence: 310
|
|
6273
|
+
},
|
|
6274
|
+
{
|
|
6275
|
+
name: "Xor",
|
|
6276
|
+
kind: "infix",
|
|
6277
|
+
latexTrigger: ["\\veebar"],
|
|
6278
|
+
precedence: 315
|
|
6279
|
+
},
|
|
6280
|
+
// Possible alt: \oplus ⊕ U+2295
|
|
6281
|
+
{
|
|
6282
|
+
name: "Not",
|
|
6283
|
+
kind: "prefix",
|
|
6284
|
+
latexTrigger: ["\\lnot"],
|
|
6285
|
+
precedence: 880
|
|
6286
|
+
},
|
|
6287
|
+
{
|
|
6288
|
+
name: "Nand",
|
|
6289
|
+
kind: "infix",
|
|
6290
|
+
latexTrigger: ["\\barwedge"],
|
|
6291
|
+
precedence: 315
|
|
6292
|
+
// serialize: '\\mid',
|
|
6293
|
+
},
|
|
6294
|
+
{
|
|
6295
|
+
name: "Nor",
|
|
6296
|
+
kind: "infix",
|
|
6297
|
+
latexTrigger: ["\u22BD"],
|
|
6298
|
+
// bar vee
|
|
6299
|
+
precedence: 315
|
|
6300
|
+
// serialize: '\\downarrow',
|
|
6301
|
+
},
|
|
6302
|
+
// Functions
|
|
6303
|
+
{
|
|
6304
|
+
kind: "function",
|
|
6305
|
+
identifierTrigger: "and",
|
|
6306
|
+
parse: "And"
|
|
6307
|
+
},
|
|
6308
|
+
{
|
|
6309
|
+
kind: "function",
|
|
6310
|
+
identifierTrigger: "or",
|
|
6311
|
+
parse: "Or"
|
|
6312
|
+
},
|
|
6313
|
+
{
|
|
6314
|
+
kind: "function",
|
|
6315
|
+
identifierTrigger: "not",
|
|
6316
|
+
parse: "Not"
|
|
6317
|
+
},
|
|
6318
|
+
// Relations
|
|
6319
|
+
{
|
|
6320
|
+
name: "Implies",
|
|
6321
|
+
kind: "infix",
|
|
6322
|
+
precedence: 220,
|
|
6323
|
+
associativity: "right",
|
|
6324
|
+
latexTrigger: ["\\implies"],
|
|
6325
|
+
serialize: "\\implies"
|
|
6326
|
+
},
|
|
6327
|
+
{
|
|
6328
|
+
latexTrigger: ["\\Rightarrow"],
|
|
6329
|
+
kind: "infix",
|
|
6330
|
+
precedence: 220,
|
|
6331
|
+
associativity: "right",
|
|
6332
|
+
parse: "Implies"
|
|
6333
|
+
},
|
|
6334
|
+
{
|
|
6335
|
+
name: "Equivalent",
|
|
6336
|
+
// MathML: identical to, Mathematica: Congruent
|
|
6337
|
+
latexTrigger: ["\\iff"],
|
|
6338
|
+
kind: "infix",
|
|
6339
|
+
associativity: "right",
|
|
6340
|
+
precedence: 219
|
|
6341
|
+
},
|
|
6342
|
+
{
|
|
6343
|
+
latexTrigger: ["\\Leftrightarrow"],
|
|
6344
|
+
kind: "infix",
|
|
6345
|
+
associativity: "right",
|
|
6346
|
+
precedence: 219,
|
|
6347
|
+
parse: "Equivalent"
|
|
6348
|
+
},
|
|
6349
|
+
{
|
|
6350
|
+
latexTrigger: ["\\equiv"],
|
|
6351
|
+
kind: "infix",
|
|
6352
|
+
associativity: "right",
|
|
6353
|
+
precedence: 219,
|
|
6354
|
+
parse: "Equivalent"
|
|
6355
|
+
},
|
|
6356
|
+
{
|
|
6357
|
+
name: "Proves",
|
|
6358
|
+
kind: "infix",
|
|
6359
|
+
latexTrigger: ["\\vdash"],
|
|
6360
|
+
precedence: 220,
|
|
6361
|
+
associativity: "right",
|
|
6362
|
+
serialize: "\\vdash"
|
|
6363
|
+
},
|
|
6364
|
+
{
|
|
6365
|
+
name: "Entails",
|
|
6366
|
+
kind: "infix",
|
|
6367
|
+
latexTrigger: ["\\vDash"],
|
|
6368
|
+
precedence: 220,
|
|
6369
|
+
associativity: "right",
|
|
6370
|
+
serialize: "\\vDash"
|
|
6371
|
+
},
|
|
6372
|
+
{
|
|
6373
|
+
name: "Satisfies",
|
|
6374
|
+
kind: "infix",
|
|
6375
|
+
latexTrigger: ["\\models"],
|
|
6376
|
+
precedence: 220,
|
|
6377
|
+
associativity: "right",
|
|
6378
|
+
serialize: "\\models"
|
|
6117
6379
|
}
|
|
6118
6380
|
];
|
|
6119
6381
|
|
|
@@ -6127,72 +6389,73 @@ var ComputeEngine = (() => {
|
|
|
6127
6389
|
var DEFINITIONS_OTHERS = [
|
|
6128
6390
|
{
|
|
6129
6391
|
name: "Overscript",
|
|
6130
|
-
|
|
6392
|
+
latexTrigger: ["\\overset"],
|
|
6131
6393
|
kind: "infix",
|
|
6132
6394
|
precedence: 700
|
|
6133
6395
|
// @todo: not in MathML
|
|
6134
6396
|
},
|
|
6135
6397
|
{
|
|
6136
6398
|
name: "Underscript",
|
|
6137
|
-
|
|
6399
|
+
latexTrigger: ["\\underset"],
|
|
6138
6400
|
kind: "infix",
|
|
6139
6401
|
precedence: 700
|
|
6140
6402
|
// @todo: not in MathML
|
|
6141
6403
|
},
|
|
6142
6404
|
{
|
|
6143
6405
|
name: "Increment",
|
|
6144
|
-
|
|
6406
|
+
latexTrigger: ["+", "+"],
|
|
6145
6407
|
kind: "postfix",
|
|
6146
6408
|
precedence: 880
|
|
6147
6409
|
},
|
|
6148
6410
|
{
|
|
6149
6411
|
name: "Decrement",
|
|
6150
|
-
|
|
6412
|
+
latexTrigger: ["-", "-"],
|
|
6151
6413
|
kind: "postfix",
|
|
6152
6414
|
precedence: 880
|
|
6153
6415
|
},
|
|
6154
6416
|
{
|
|
6155
6417
|
name: "PreIncrement",
|
|
6156
|
-
|
|
6418
|
+
latexTrigger: ["+", "+"],
|
|
6157
6419
|
kind: "prefix",
|
|
6158
6420
|
precedence: 880
|
|
6159
6421
|
},
|
|
6160
6422
|
{
|
|
6161
6423
|
name: "PreDecrement",
|
|
6162
|
-
|
|
6424
|
+
latexTrigger: ["-", "-"],
|
|
6163
6425
|
kind: "prefix",
|
|
6164
6426
|
precedence: 880
|
|
6165
6427
|
},
|
|
6166
6428
|
{
|
|
6167
6429
|
name: "Ring",
|
|
6168
6430
|
// Aka 'Composition', i.e. function composition
|
|
6169
|
-
|
|
6431
|
+
latexTrigger: ["\\circ"],
|
|
6170
6432
|
kind: "infix",
|
|
6171
6433
|
precedence: 265
|
|
6434
|
+
// @todo: MathML is 950
|
|
6172
6435
|
// @todo: check lhs and rhs are functions
|
|
6173
6436
|
},
|
|
6174
6437
|
{
|
|
6175
6438
|
name: "Transpose",
|
|
6176
|
-
|
|
6439
|
+
latexTrigger: ["^", "T"],
|
|
6177
6440
|
kind: "postfix"
|
|
6178
6441
|
// @todo: if lhs is a list/tensor
|
|
6179
6442
|
},
|
|
6180
6443
|
{
|
|
6181
6444
|
// @todo: if lhs is a list/tensor
|
|
6182
6445
|
name: "ConjugateTranspose",
|
|
6183
|
-
|
|
6446
|
+
latexTrigger: ["^", "H"],
|
|
6184
6447
|
kind: "postfix"
|
|
6185
6448
|
},
|
|
6186
6449
|
{
|
|
6187
6450
|
name: "StringJoin",
|
|
6188
6451
|
// @todo From Mathematica...?
|
|
6189
|
-
|
|
6452
|
+
latexTrigger: ["\\lt", "\\gt"],
|
|
6190
6453
|
kind: "infix",
|
|
6191
6454
|
precedence: 780
|
|
6192
6455
|
},
|
|
6193
6456
|
{
|
|
6194
6457
|
name: "Starstar",
|
|
6195
|
-
|
|
6458
|
+
latexTrigger: ["\\star", "\\star"],
|
|
6196
6459
|
kind: "infix",
|
|
6197
6460
|
precedence: 780
|
|
6198
6461
|
},
|
|
@@ -6202,7 +6465,7 @@ var ComputeEngine = (() => {
|
|
|
6202
6465
|
// For the Leibniz notation see 'Divide' that handles `∂f/∂x`
|
|
6203
6466
|
name: "PartialDerivative",
|
|
6204
6467
|
// PartialDerivative(expr, {lists of vars}, degree)
|
|
6205
|
-
|
|
6468
|
+
latexTrigger: ["\\partial"],
|
|
6206
6469
|
kind: "prefix",
|
|
6207
6470
|
parse: (parser) => {
|
|
6208
6471
|
let done = false;
|
|
@@ -6225,8 +6488,8 @@ var ComputeEngine = (() => {
|
|
|
6225
6488
|
return null;
|
|
6226
6489
|
let rhs = parser.parseGroup() ?? "Nothing";
|
|
6227
6490
|
if (rhs !== "Nothing" && !isEmptySequence(rhs)) {
|
|
6228
|
-
const
|
|
6229
|
-
rhs = [rhs, ...
|
|
6491
|
+
const args = parser.parseArguments() ?? ["Nothing"];
|
|
6492
|
+
rhs = [rhs, ...args];
|
|
6230
6493
|
}
|
|
6231
6494
|
return ["PartialDerivative", rhs, sub2, sup];
|
|
6232
6495
|
},
|
|
@@ -6252,128 +6515,128 @@ var ComputeEngine = (() => {
|
|
|
6252
6515
|
},
|
|
6253
6516
|
{
|
|
6254
6517
|
name: "OverBar",
|
|
6255
|
-
|
|
6518
|
+
latexTrigger: ["\\overline"],
|
|
6256
6519
|
parse: parseSingleArg("OverBar")
|
|
6257
6520
|
},
|
|
6258
6521
|
{
|
|
6259
6522
|
name: "UnderBar",
|
|
6260
|
-
|
|
6523
|
+
latexTrigger: ["\\underline"],
|
|
6261
6524
|
parse: parseSingleArg("UnderBar")
|
|
6262
6525
|
},
|
|
6263
6526
|
{
|
|
6264
6527
|
name: "OverVector",
|
|
6265
|
-
|
|
6528
|
+
latexTrigger: ["\\vec"],
|
|
6266
6529
|
parse: parseSingleArg("OverVector")
|
|
6267
6530
|
},
|
|
6268
6531
|
{
|
|
6269
6532
|
name: "OverTilde",
|
|
6270
|
-
|
|
6533
|
+
latexTrigger: ["\\tilde"],
|
|
6271
6534
|
parse: parseSingleArg("OverTilde")
|
|
6272
6535
|
},
|
|
6273
6536
|
{
|
|
6274
6537
|
name: "OverHat",
|
|
6275
|
-
|
|
6538
|
+
latexTrigger: ["\\hat"],
|
|
6276
6539
|
parse: parseSingleArg("OverHat")
|
|
6277
6540
|
},
|
|
6278
6541
|
{
|
|
6279
6542
|
name: "OverRightArrow",
|
|
6280
|
-
|
|
6543
|
+
latexTrigger: ["\\overrightarrow"],
|
|
6281
6544
|
parse: parseSingleArg("OverRightArrow")
|
|
6282
6545
|
},
|
|
6283
6546
|
{
|
|
6284
6547
|
name: "OverLeftArrow",
|
|
6285
|
-
|
|
6548
|
+
latexTrigger: ["\\overleftarrow"],
|
|
6286
6549
|
parse: parseSingleArg("OverLeftArrow")
|
|
6287
6550
|
},
|
|
6288
6551
|
{
|
|
6289
6552
|
name: "OverRightDoubleArrow",
|
|
6290
|
-
|
|
6553
|
+
latexTrigger: ["\\Overrightarrow"],
|
|
6291
6554
|
parse: parseSingleArg("OverRightDoubleArrow")
|
|
6292
6555
|
},
|
|
6293
6556
|
{
|
|
6294
6557
|
name: "OverLeftHarpoon",
|
|
6295
|
-
|
|
6558
|
+
latexTrigger: ["\\overleftharpoon"],
|
|
6296
6559
|
parse: parseSingleArg("OverLeftHarpoon")
|
|
6297
6560
|
},
|
|
6298
6561
|
{
|
|
6299
6562
|
name: "OverRightHarpoon",
|
|
6300
|
-
|
|
6563
|
+
latexTrigger: ["\\overrightharpoon"],
|
|
6301
6564
|
parse: parseSingleArg("OverRightHarpoon")
|
|
6302
6565
|
},
|
|
6303
6566
|
{
|
|
6304
6567
|
name: "OverLeftRightArrow",
|
|
6305
|
-
|
|
6568
|
+
latexTrigger: ["\\overleftrightarrow"],
|
|
6306
6569
|
parse: parseSingleArg("OverLeftRightArrow")
|
|
6307
6570
|
},
|
|
6308
6571
|
{
|
|
6309
6572
|
name: "OverBrace",
|
|
6310
|
-
|
|
6573
|
+
latexTrigger: ["\\overbrace"],
|
|
6311
6574
|
parse: parseSingleArg("OverBrace")
|
|
6312
6575
|
},
|
|
6313
6576
|
{
|
|
6314
6577
|
name: "OverLineSegment",
|
|
6315
|
-
|
|
6578
|
+
latexTrigger: ["\\overlinesegment"],
|
|
6316
6579
|
parse: parseSingleArg("OverLineSegment")
|
|
6317
6580
|
},
|
|
6318
6581
|
{
|
|
6319
6582
|
name: "OverGroup",
|
|
6320
|
-
|
|
6583
|
+
latexTrigger: ["\\overgroup"],
|
|
6321
6584
|
parse: parseSingleArg("OverGroup")
|
|
6322
6585
|
},
|
|
6323
6586
|
{
|
|
6324
|
-
|
|
6587
|
+
latexTrigger: ["\\displaystyle"],
|
|
6325
6588
|
parse: () => ["Sequence"]
|
|
6326
6589
|
},
|
|
6327
6590
|
{
|
|
6328
|
-
|
|
6591
|
+
latexTrigger: ["\\textstyle"],
|
|
6329
6592
|
parse: () => ["Sequence"]
|
|
6330
6593
|
},
|
|
6331
6594
|
{
|
|
6332
|
-
|
|
6595
|
+
latexTrigger: ["\\scriptstyle"],
|
|
6333
6596
|
parse: () => ["Sequence"]
|
|
6334
6597
|
},
|
|
6335
6598
|
{
|
|
6336
|
-
|
|
6599
|
+
latexTrigger: ["\\scriptscriptstyle"],
|
|
6337
6600
|
parse: () => ["Sequence"]
|
|
6338
6601
|
},
|
|
6339
6602
|
{
|
|
6340
|
-
|
|
6603
|
+
latexTrigger: ["\\tiny"],
|
|
6341
6604
|
parse: () => ["Sequence"]
|
|
6342
6605
|
},
|
|
6343
6606
|
{
|
|
6344
|
-
|
|
6607
|
+
latexTrigger: ["\\scriptsize"],
|
|
6345
6608
|
parse: () => ["Sequence"]
|
|
6346
6609
|
},
|
|
6347
6610
|
{
|
|
6348
|
-
|
|
6611
|
+
latexTrigger: ["\\footnotesize"],
|
|
6349
6612
|
parse: () => ["Sequence"]
|
|
6350
6613
|
},
|
|
6351
6614
|
{
|
|
6352
|
-
|
|
6615
|
+
latexTrigger: ["\\small"],
|
|
6353
6616
|
parse: () => ["Sequence"]
|
|
6354
6617
|
},
|
|
6355
6618
|
{
|
|
6356
|
-
|
|
6619
|
+
latexTrigger: ["\\normalsize"],
|
|
6357
6620
|
parse: () => ["Sequence"]
|
|
6358
6621
|
},
|
|
6359
6622
|
{
|
|
6360
|
-
|
|
6623
|
+
latexTrigger: ["\\large"],
|
|
6361
6624
|
parse: () => ["Sequence"]
|
|
6362
6625
|
},
|
|
6363
6626
|
{
|
|
6364
|
-
|
|
6627
|
+
latexTrigger: ["\\Large"],
|
|
6365
6628
|
parse: () => ["Sequence"]
|
|
6366
6629
|
},
|
|
6367
6630
|
{
|
|
6368
|
-
|
|
6631
|
+
latexTrigger: ["\\LARGE"],
|
|
6369
6632
|
parse: () => ["Sequence"]
|
|
6370
6633
|
},
|
|
6371
6634
|
{
|
|
6372
|
-
|
|
6635
|
+
latexTrigger: ["\\huge"],
|
|
6373
6636
|
parse: () => ["Sequence"]
|
|
6374
6637
|
},
|
|
6375
6638
|
{
|
|
6376
|
-
|
|
6639
|
+
latexTrigger: ["\\Huge"],
|
|
6377
6640
|
parse: () => ["Sequence"]
|
|
6378
6641
|
},
|
|
6379
6642
|
{
|
|
@@ -6415,39 +6678,39 @@ var ComputeEngine = (() => {
|
|
|
6415
6678
|
}
|
|
6416
6679
|
},
|
|
6417
6680
|
{
|
|
6418
|
-
|
|
6681
|
+
latexTrigger: ["\\!"],
|
|
6419
6682
|
parse: () => ["HorizontalSpacing", -3]
|
|
6420
6683
|
},
|
|
6421
6684
|
{
|
|
6422
|
-
|
|
6685
|
+
latexTrigger: ["\\ "],
|
|
6423
6686
|
parse: () => ["HorizontalSpacing", 6]
|
|
6424
6687
|
},
|
|
6425
6688
|
{
|
|
6426
|
-
|
|
6689
|
+
latexTrigger: ["\\:"],
|
|
6427
6690
|
parse: () => ["HorizontalSpacing", 4]
|
|
6428
6691
|
},
|
|
6429
6692
|
{
|
|
6430
|
-
|
|
6693
|
+
latexTrigger: ["\\enskip"],
|
|
6431
6694
|
parse: () => ["HorizontalSpacing", 9]
|
|
6432
6695
|
},
|
|
6433
6696
|
{
|
|
6434
|
-
|
|
6697
|
+
latexTrigger: ["\\quad"],
|
|
6435
6698
|
parse: () => ["HorizontalSpacing", 18]
|
|
6436
6699
|
},
|
|
6437
6700
|
{
|
|
6438
|
-
|
|
6701
|
+
latexTrigger: ["\\qquad"],
|
|
6439
6702
|
parse: () => ["HorizontalSpacing", 36]
|
|
6440
6703
|
},
|
|
6441
6704
|
{
|
|
6442
|
-
|
|
6705
|
+
latexTrigger: ["\\,"],
|
|
6443
6706
|
parse: () => ["HorizontalSpacing", 3]
|
|
6444
6707
|
},
|
|
6445
6708
|
{
|
|
6446
|
-
|
|
6709
|
+
latexTrigger: ["\\;"],
|
|
6447
6710
|
parse: () => ["HorizontalSpacing", 5]
|
|
6448
6711
|
},
|
|
6449
6712
|
{
|
|
6450
|
-
|
|
6713
|
+
latexTrigger: ["\\enspace"],
|
|
6451
6714
|
parse: () => ["HorizontalSpacing", 9]
|
|
6452
6715
|
},
|
|
6453
6716
|
{
|
|
@@ -6547,146 +6810,146 @@ var ComputeEngine = (() => {
|
|
|
6547
6810
|
var DEFINITIONS_TRIGONOMETRY = [
|
|
6548
6811
|
{
|
|
6549
6812
|
name: "Arcsin",
|
|
6550
|
-
|
|
6813
|
+
latexTrigger: ["\\arcsin"],
|
|
6551
6814
|
parse: parseTrig("Arcsin")
|
|
6552
6815
|
},
|
|
6553
6816
|
{
|
|
6554
6817
|
name: "Arccos",
|
|
6555
|
-
|
|
6818
|
+
latexTrigger: ["\\arccos"],
|
|
6556
6819
|
parse: parseTrig("Arccos")
|
|
6557
6820
|
},
|
|
6558
6821
|
{
|
|
6559
6822
|
name: "Arctan",
|
|
6560
|
-
|
|
6823
|
+
latexTrigger: ["\\arctan"],
|
|
6561
6824
|
parse: parseTrig("Arctan")
|
|
6562
6825
|
},
|
|
6563
6826
|
{
|
|
6564
|
-
|
|
6827
|
+
latexTrigger: ["\\arctg"],
|
|
6565
6828
|
parse: parseTrig("Arctan")
|
|
6566
6829
|
},
|
|
6567
6830
|
{
|
|
6568
6831
|
name: "Arccot",
|
|
6569
|
-
|
|
6832
|
+
latexTrigger: ["\\arcctg"],
|
|
6570
6833
|
parse: parseTrig("Arccot")
|
|
6571
6834
|
},
|
|
6572
6835
|
{
|
|
6573
6836
|
name: "Arcsec",
|
|
6574
|
-
|
|
6837
|
+
latexTrigger: "arcsec",
|
|
6575
6838
|
parse: parseTrig("Arcsec")
|
|
6576
6839
|
},
|
|
6577
6840
|
{
|
|
6578
6841
|
name: "Arccsc",
|
|
6579
|
-
|
|
6842
|
+
latexTrigger: ["\\arccsc"],
|
|
6580
6843
|
parse: parseTrig("Arccsc")
|
|
6581
6844
|
},
|
|
6582
6845
|
{
|
|
6583
6846
|
name: "Arsinh",
|
|
6584
|
-
|
|
6847
|
+
latexTrigger: ["\\arsinh"],
|
|
6585
6848
|
parse: parseTrig("Arsinh")
|
|
6586
6849
|
},
|
|
6587
6850
|
{
|
|
6588
6851
|
name: "Arcosh",
|
|
6589
|
-
|
|
6852
|
+
latexTrigger: ["\\arcosh"],
|
|
6590
6853
|
parse: parseTrig("Arcosh")
|
|
6591
6854
|
},
|
|
6592
6855
|
{
|
|
6593
6856
|
name: "Artanh",
|
|
6594
|
-
|
|
6857
|
+
latexTrigger: ["\\artanh"],
|
|
6595
6858
|
parse: parseTrig("Artanh")
|
|
6596
6859
|
},
|
|
6597
6860
|
{
|
|
6598
6861
|
name: "Arsech",
|
|
6599
|
-
|
|
6862
|
+
latexTrigger: ["\\arsech"],
|
|
6600
6863
|
parse: parseTrig("Arsech")
|
|
6601
6864
|
},
|
|
6602
6865
|
{
|
|
6603
6866
|
name: "Arcsch",
|
|
6604
|
-
|
|
6867
|
+
latexTrigger: ["\\arcsch"],
|
|
6605
6868
|
parse: parseTrig("Arcsch")
|
|
6606
6869
|
},
|
|
6607
6870
|
{
|
|
6608
6871
|
// Rusian hyperbolic cosine
|
|
6609
|
-
|
|
6872
|
+
latexTrigger: ["\\ch"],
|
|
6610
6873
|
parse: parseTrig("Cosh")
|
|
6611
6874
|
},
|
|
6612
6875
|
{
|
|
6613
6876
|
name: "Cosec",
|
|
6614
|
-
|
|
6877
|
+
latexTrigger: ["\\cosec"],
|
|
6615
6878
|
parse: parseTrig("Cosec")
|
|
6616
6879
|
},
|
|
6617
6880
|
{
|
|
6618
6881
|
name: "Cosh",
|
|
6619
|
-
|
|
6882
|
+
latexTrigger: ["\\cosh"],
|
|
6620
6883
|
parse: parseTrig("Cosh")
|
|
6621
6884
|
},
|
|
6622
6885
|
{
|
|
6623
6886
|
name: "Cot",
|
|
6624
|
-
|
|
6887
|
+
latexTrigger: ["\\cot"],
|
|
6625
6888
|
parse: parseTrig("Cot")
|
|
6626
6889
|
},
|
|
6627
6890
|
{
|
|
6628
|
-
|
|
6891
|
+
latexTrigger: ["\\cotg"],
|
|
6629
6892
|
parse: parseTrig("Cot")
|
|
6630
6893
|
},
|
|
6631
6894
|
{
|
|
6632
6895
|
name: "Coth",
|
|
6633
|
-
|
|
6896
|
+
latexTrigger: ["\\coth"],
|
|
6634
6897
|
parse: parseTrig("Coth")
|
|
6635
6898
|
},
|
|
6636
6899
|
{
|
|
6637
6900
|
name: "Csc",
|
|
6638
|
-
|
|
6901
|
+
latexTrigger: ["\\csc"],
|
|
6639
6902
|
parse: parseTrig("Csc")
|
|
6640
6903
|
},
|
|
6641
6904
|
{
|
|
6642
6905
|
// Rusian cotangent
|
|
6643
|
-
|
|
6906
|
+
latexTrigger: ["\\ctg"],
|
|
6644
6907
|
parse: parseTrig("Cot")
|
|
6645
6908
|
},
|
|
6646
6909
|
{
|
|
6647
|
-
|
|
6910
|
+
latexTrigger: ["\\cth"],
|
|
6648
6911
|
parse: parseTrig("Cotanh")
|
|
6649
6912
|
},
|
|
6650
6913
|
{
|
|
6651
6914
|
name: "Sec",
|
|
6652
|
-
|
|
6915
|
+
latexTrigger: ["\\sec"],
|
|
6653
6916
|
parse: parseTrig("Sec")
|
|
6654
6917
|
},
|
|
6655
6918
|
{
|
|
6656
6919
|
name: "Sinh",
|
|
6657
|
-
|
|
6920
|
+
latexTrigger: ["\\sinh"],
|
|
6658
6921
|
parse: parseTrig("Sinh")
|
|
6659
6922
|
},
|
|
6660
6923
|
{
|
|
6661
|
-
|
|
6924
|
+
latexTrigger: ["\\sh"],
|
|
6662
6925
|
parse: parseTrig("Sinh")
|
|
6663
6926
|
},
|
|
6664
6927
|
{
|
|
6665
6928
|
name: "Tan",
|
|
6666
|
-
|
|
6929
|
+
latexTrigger: ["\\tan"],
|
|
6667
6930
|
parse: parseTrig("Tan")
|
|
6668
6931
|
},
|
|
6669
6932
|
{
|
|
6670
|
-
|
|
6933
|
+
latexTrigger: ["\\tg"],
|
|
6671
6934
|
parse: parseTrig("Tan")
|
|
6672
6935
|
},
|
|
6673
6936
|
{
|
|
6674
6937
|
name: "Tanh",
|
|
6675
|
-
|
|
6938
|
+
latexTrigger: ["\\tanh"],
|
|
6676
6939
|
parse: parseTrig("Tanh")
|
|
6677
6940
|
},
|
|
6678
6941
|
{
|
|
6679
|
-
|
|
6942
|
+
latexTrigger: ["\\th"],
|
|
6680
6943
|
parse: parseTrig("Tanh")
|
|
6681
6944
|
},
|
|
6682
6945
|
{
|
|
6683
6946
|
name: "Cos",
|
|
6684
|
-
|
|
6947
|
+
latexTrigger: ["\\cos"],
|
|
6685
6948
|
parse: parseTrig("Cos")
|
|
6686
6949
|
},
|
|
6687
6950
|
{
|
|
6688
6951
|
name: "Sin",
|
|
6689
|
-
|
|
6952
|
+
latexTrigger: ["\\sin"],
|
|
6690
6953
|
parse: parseTrig("Sin")
|
|
6691
6954
|
}
|
|
6692
6955
|
];
|
|
@@ -6694,77 +6957,77 @@ var ComputeEngine = (() => {
|
|
|
6694
6957
|
// src/compute-engine/latex-syntax/dictionary/definitions-sets.ts
|
|
6695
6958
|
var DEFINITIONS_SETS = [
|
|
6696
6959
|
// Constants
|
|
6697
|
-
{ name: "AlgebraicNumber",
|
|
6698
|
-
{ name: "ComplexNumber",
|
|
6699
|
-
{
|
|
6700
|
-
{ name: "ImaginaryNumber",
|
|
6701
|
-
{ name: "ExtendedComplexNumber",
|
|
6702
|
-
{ name: "EmptySet",
|
|
6703
|
-
{
|
|
6960
|
+
{ name: "AlgebraicNumber", latexTrigger: "\\bar\\Q" },
|
|
6961
|
+
{ name: "ComplexNumber", latexTrigger: ["\\C"] },
|
|
6962
|
+
{ latexTrigger: "\\mathbb{C}", parse: "ComplexNumber" },
|
|
6963
|
+
{ name: "ImaginaryNumber", latexTrigger: ["\\imaginaryI", "\\R"] },
|
|
6964
|
+
{ name: "ExtendedComplexNumber", latexTrigger: ["\\bar", "\\C"] },
|
|
6965
|
+
{ name: "EmptySet", latexTrigger: ["\\emptyset"] },
|
|
6966
|
+
{ latexTrigger: ["\\varnothing"], parse: "EmptySet" },
|
|
6704
6967
|
// Parsing only
|
|
6705
|
-
{ name: "Integer",
|
|
6706
|
-
{
|
|
6707
|
-
{ name: "RationalNumber",
|
|
6708
|
-
{ name: "RealNumber",
|
|
6709
|
-
{
|
|
6710
|
-
{ name: "ExtendedRealNumber",
|
|
6711
|
-
{ name: "TranscendentalNumber",
|
|
6712
|
-
{
|
|
6968
|
+
{ name: "Integer", latexTrigger: ["\\Z"] },
|
|
6969
|
+
{ latexTrigger: "\\mathbb{Z}", parse: "Integer" },
|
|
6970
|
+
{ name: "RationalNumber", latexTrigger: ["\\Q"] },
|
|
6971
|
+
{ name: "RealNumber", latexTrigger: ["\\R"] },
|
|
6972
|
+
{ latexTrigger: "\\mathbb{R}", parse: "RealNumber" },
|
|
6973
|
+
{ name: "ExtendedRealNumber", latexTrigger: ["\\bar", "\\R"] },
|
|
6974
|
+
{ name: "TranscendentalNumber", latexTrigger: "\\R-\\bar\\Q" },
|
|
6975
|
+
{ latexTrigger: "\\R\\backslash\\bar\\Q", parse: "TranscendentalNumber" },
|
|
6713
6976
|
// Real numbers < 0
|
|
6714
|
-
{ name: "NegativeNumber",
|
|
6715
|
-
{
|
|
6716
|
-
{
|
|
6717
|
-
{
|
|
6718
|
-
{
|
|
6977
|
+
{ name: "NegativeNumber", latexTrigger: "\\R^-" },
|
|
6978
|
+
{ latexTrigger: "\\R^{-}", parse: "NegativeNumber" },
|
|
6979
|
+
{ latexTrigger: "\\R_-", parse: "NegativeNumber" },
|
|
6980
|
+
{ latexTrigger: "\\R_{-}", parse: "NegativeNumber" },
|
|
6981
|
+
{ latexTrigger: "\\R^{\\lt}", parse: "NegativeNumber" },
|
|
6719
6982
|
// Real numbers > 0
|
|
6720
|
-
{ name: "PositiveNumber",
|
|
6721
|
-
{
|
|
6722
|
-
{
|
|
6723
|
-
{
|
|
6724
|
-
{
|
|
6983
|
+
{ name: "PositiveNumber", latexTrigger: "\\R^+" },
|
|
6984
|
+
{ latexTrigger: "\\R^{+}", parse: "PositiveNumber" },
|
|
6985
|
+
{ latexTrigger: "\\R_+", parse: "PositiveNumber" },
|
|
6986
|
+
{ latexTrigger: "\\R_{+}", parse: "PositiveNumber" },
|
|
6987
|
+
{ latexTrigger: "\\R^{\\gt}", parse: "PositiveNumber" },
|
|
6725
6988
|
// Real numbers <= 0
|
|
6726
|
-
{ name: "NonPositiveNumber",
|
|
6727
|
-
{
|
|
6728
|
-
{
|
|
6989
|
+
{ name: "NonPositiveNumber", latexTrigger: "\\R^{0-}" },
|
|
6990
|
+
{ latexTrigger: "\\R^{-0}", parse: "NonPositiveNumber" },
|
|
6991
|
+
{ latexTrigger: "\\R^{\\leq}", parse: "NonPositiveNumber" },
|
|
6729
6992
|
// Integers < 0
|
|
6730
|
-
{ name: "NegativeInteger",
|
|
6731
|
-
{
|
|
6732
|
-
{
|
|
6733
|
-
{
|
|
6734
|
-
{
|
|
6735
|
-
{
|
|
6993
|
+
{ name: "NegativeInteger", latexTrigger: "\\Z^-" },
|
|
6994
|
+
{ latexTrigger: "\\Z^-", parse: "NegativeInteger" },
|
|
6995
|
+
{ latexTrigger: "\\Z^{-}", parse: "NegativeInteger" },
|
|
6996
|
+
{ latexTrigger: "\\Z_-", parse: "NegativeInteger" },
|
|
6997
|
+
{ latexTrigger: "\\Z_{-}", parse: "NegativeInteger" },
|
|
6998
|
+
{ latexTrigger: "\\Z^{\\lt}", parse: "NegativeInteger" },
|
|
6736
6999
|
// Integers > 0
|
|
6737
|
-
{ name: "PositiveInteger",
|
|
6738
|
-
{
|
|
6739
|
-
{
|
|
6740
|
-
{
|
|
6741
|
-
{
|
|
6742
|
-
{
|
|
6743
|
-
{
|
|
6744
|
-
{
|
|
6745
|
-
{
|
|
6746
|
-
{
|
|
6747
|
-
{
|
|
6748
|
-
{
|
|
6749
|
-
{
|
|
6750
|
-
{
|
|
7000
|
+
{ name: "PositiveInteger", latexTrigger: "\\Z^+" },
|
|
7001
|
+
{ latexTrigger: "\\Z^{+}", parse: "PositiveInteger" },
|
|
7002
|
+
{ latexTrigger: "\\Z_+", parse: "PositiveInteger" },
|
|
7003
|
+
{ latexTrigger: "\\Z_{+}", parse: "PositiveInteger" },
|
|
7004
|
+
{ latexTrigger: "\\Z^{\\gt}", parse: "PositiveInteger" },
|
|
7005
|
+
{ latexTrigger: "\\Z^{\\gt0}", parse: "PositiveInteger" },
|
|
7006
|
+
{ latexTrigger: "\\N^+", parse: "PositiveInteger" },
|
|
7007
|
+
{ latexTrigger: "\\N^{+}", parse: "PositiveInteger" },
|
|
7008
|
+
{ latexTrigger: "\\N^*", parse: "PositiveInteger" },
|
|
7009
|
+
{ latexTrigger: "\\N^{*}", parse: "PositiveInteger" },
|
|
7010
|
+
{ latexTrigger: "\\N^\\star", parse: "PositiveInteger" },
|
|
7011
|
+
{ latexTrigger: "\\N^{\\star}", parse: "PositiveInteger" },
|
|
7012
|
+
{ latexTrigger: "\\N_1", parse: "PositiveInteger" },
|
|
7013
|
+
{ latexTrigger: "\\N_{1}", parse: "PositiveInteger" },
|
|
6751
7014
|
// https://mathvault.ca/hub/higher-math/math-symbols/algebra-symbols/
|
|
6752
7015
|
// Integers >= 0
|
|
6753
|
-
{ name: "NonNegativeInteger",
|
|
6754
|
-
{
|
|
6755
|
-
{
|
|
6756
|
-
{
|
|
6757
|
-
{
|
|
6758
|
-
{
|
|
6759
|
-
{
|
|
6760
|
-
{
|
|
7016
|
+
{ name: "NonNegativeInteger", latexTrigger: ["\\N"] },
|
|
7017
|
+
{ latexTrigger: "\\Z^{+0}", parse: "NonNegativeInteger" },
|
|
7018
|
+
{ latexTrigger: "\\Z^{\\geq}", parse: "NonNegativeInteger" },
|
|
7019
|
+
{ latexTrigger: "\\Z^{\\geq0}", parse: "NonNegativeInteger" },
|
|
7020
|
+
{ latexTrigger: "\\Z^{0+}", parse: "NonNegativeInteger" },
|
|
7021
|
+
{ latexTrigger: "\\mathbb{N}", parse: "NonNegativeInteger" },
|
|
7022
|
+
{ latexTrigger: "\\N_0", parse: "NonNegativeInteger" },
|
|
7023
|
+
{ latexTrigger: "\\N_{0}", parse: "NonNegativeInteger" },
|
|
6761
7024
|
//
|
|
6762
7025
|
// Set Expressions
|
|
6763
7026
|
//
|
|
6764
7027
|
// @todo: could also have a `CartesianPower` function with a number `rhs`
|
|
6765
7028
|
{
|
|
6766
7029
|
name: "CartesianProduct",
|
|
6767
|
-
|
|
7030
|
+
latexTrigger: ["\\times"],
|
|
6768
7031
|
kind: "infix",
|
|
6769
7032
|
associativity: "right",
|
|
6770
7033
|
// Caution: cartesian product is not associative
|
|
@@ -6786,7 +7049,7 @@ var ComputeEngine = (() => {
|
|
|
6786
7049
|
}
|
|
6787
7050
|
},
|
|
6788
7051
|
{
|
|
6789
|
-
|
|
7052
|
+
latexTrigger: ["^", "\\complement"],
|
|
6790
7053
|
kind: "postfix",
|
|
6791
7054
|
parse: (_parser, lhs) => {
|
|
6792
7055
|
return ["Complement", lhs];
|
|
@@ -6796,14 +7059,14 @@ var ComputeEngine = (() => {
|
|
|
6796
7059
|
},
|
|
6797
7060
|
{
|
|
6798
7061
|
name: "Complement",
|
|
6799
|
-
|
|
7062
|
+
latexTrigger: ["^", "<{>", "\\complement", "<}>"],
|
|
6800
7063
|
kind: "postfix"
|
|
6801
7064
|
// precedence: 240,
|
|
6802
7065
|
// @todo: serialize for the multiple argument case
|
|
6803
7066
|
},
|
|
6804
7067
|
{
|
|
6805
7068
|
name: "Intersection",
|
|
6806
|
-
|
|
7069
|
+
latexTrigger: ["\\cap"],
|
|
6807
7070
|
kind: "infix",
|
|
6808
7071
|
precedence: 350
|
|
6809
7072
|
},
|
|
@@ -6819,7 +7082,7 @@ var ComputeEngine = (() => {
|
|
|
6819
7082
|
},
|
|
6820
7083
|
{
|
|
6821
7084
|
name: "Union",
|
|
6822
|
-
|
|
7085
|
+
latexTrigger: ["\\cup"],
|
|
6823
7086
|
kind: "infix",
|
|
6824
7087
|
precedence: 350
|
|
6825
7088
|
},
|
|
@@ -6838,13 +7101,13 @@ var ComputeEngine = (() => {
|
|
|
6838
7101
|
// },
|
|
6839
7102
|
{
|
|
6840
7103
|
name: "SetMinus",
|
|
6841
|
-
|
|
7104
|
+
latexTrigger: ["\\setminus"],
|
|
6842
7105
|
kind: "infix",
|
|
6843
7106
|
precedence: 650
|
|
6844
7107
|
},
|
|
6845
7108
|
{
|
|
6846
7109
|
name: "SymmetricDifference",
|
|
6847
|
-
|
|
7110
|
+
latexTrigger: ["\\triangle"],
|
|
6848
7111
|
// or \\ominus
|
|
6849
7112
|
kind: "infix",
|
|
6850
7113
|
// @todo: parser could check that lhs and rhs are sets
|
|
@@ -6852,7 +7115,7 @@ var ComputeEngine = (() => {
|
|
|
6852
7115
|
},
|
|
6853
7116
|
// Predicates/Relations
|
|
6854
7117
|
{
|
|
6855
|
-
|
|
7118
|
+
latexTrigger: ["\\ni"],
|
|
6856
7119
|
kind: "infix",
|
|
6857
7120
|
associativity: "right",
|
|
6858
7121
|
precedence: 160,
|
|
@@ -6864,40 +7127,40 @@ var ComputeEngine = (() => {
|
|
|
6864
7127
|
},
|
|
6865
7128
|
{
|
|
6866
7129
|
name: "Element",
|
|
6867
|
-
|
|
7130
|
+
latexTrigger: ["\\in"],
|
|
6868
7131
|
kind: "infix",
|
|
6869
7132
|
precedence: 240
|
|
6870
7133
|
},
|
|
6871
7134
|
{
|
|
6872
7135
|
name: "NotElement",
|
|
6873
|
-
|
|
7136
|
+
latexTrigger: ["\\notin"],
|
|
6874
7137
|
kind: "infix",
|
|
6875
7138
|
precedence: 240
|
|
6876
7139
|
},
|
|
6877
7140
|
{
|
|
6878
7141
|
name: "NotSubset",
|
|
6879
|
-
|
|
7142
|
+
latexTrigger: ["\\nsubset"],
|
|
6880
7143
|
kind: "infix",
|
|
6881
7144
|
associativity: "right",
|
|
6882
7145
|
precedence: 240
|
|
6883
7146
|
},
|
|
6884
7147
|
{
|
|
6885
7148
|
name: "NotSuperset",
|
|
6886
|
-
|
|
7149
|
+
latexTrigger: ["\\nsupset"],
|
|
6887
7150
|
kind: "infix",
|
|
6888
7151
|
associativity: "right",
|
|
6889
7152
|
precedence: 240
|
|
6890
7153
|
},
|
|
6891
7154
|
{
|
|
6892
7155
|
name: "NotSubsetNotEqual",
|
|
6893
|
-
|
|
7156
|
+
latexTrigger: ["\\nsubseteq"],
|
|
6894
7157
|
kind: "infix",
|
|
6895
7158
|
associativity: "right",
|
|
6896
7159
|
precedence: 240
|
|
6897
7160
|
},
|
|
6898
7161
|
{
|
|
6899
7162
|
name: "NotSupersetNotEqual",
|
|
6900
|
-
|
|
7163
|
+
latexTrigger: ["\\nsupseteq"],
|
|
6901
7164
|
kind: "infix",
|
|
6902
7165
|
associativity: "right",
|
|
6903
7166
|
precedence: 240
|
|
@@ -6905,7 +7168,7 @@ var ComputeEngine = (() => {
|
|
|
6905
7168
|
{
|
|
6906
7169
|
name: "SquareSubset",
|
|
6907
7170
|
// MathML: square image of
|
|
6908
|
-
|
|
7171
|
+
latexTrigger: ["\\sqsubset"],
|
|
6909
7172
|
kind: "infix",
|
|
6910
7173
|
associativity: "right",
|
|
6911
7174
|
precedence: 265
|
|
@@ -6913,7 +7176,7 @@ var ComputeEngine = (() => {
|
|
|
6913
7176
|
{
|
|
6914
7177
|
name: "SquareSubsetEqual",
|
|
6915
7178
|
// MathML: square image of or equal to
|
|
6916
|
-
|
|
7179
|
+
latexTrigger: ["\\sqsubseteq"],
|
|
6917
7180
|
kind: "infix",
|
|
6918
7181
|
associativity: "right",
|
|
6919
7182
|
precedence: 265
|
|
@@ -6921,7 +7184,7 @@ var ComputeEngine = (() => {
|
|
|
6921
7184
|
{
|
|
6922
7185
|
name: "SquareSuperset",
|
|
6923
7186
|
// MathML: square original of
|
|
6924
|
-
|
|
7187
|
+
latexTrigger: ["\\sqsupset"],
|
|
6925
7188
|
kind: "infix",
|
|
6926
7189
|
associativity: "right",
|
|
6927
7190
|
precedence: 265
|
|
@@ -6929,27 +7192,27 @@ var ComputeEngine = (() => {
|
|
|
6929
7192
|
{
|
|
6930
7193
|
name: "SquareSupersetEqual",
|
|
6931
7194
|
// MathML: square original of or equal
|
|
6932
|
-
|
|
7195
|
+
latexTrigger: ["\\sqsupseteq"],
|
|
6933
7196
|
kind: "infix",
|
|
6934
7197
|
associativity: "right",
|
|
6935
7198
|
precedence: 265
|
|
6936
7199
|
},
|
|
6937
7200
|
{
|
|
6938
7201
|
name: "Subset",
|
|
6939
|
-
|
|
7202
|
+
latexTrigger: ["\\subset"],
|
|
6940
7203
|
kind: "infix",
|
|
6941
7204
|
associativity: "right",
|
|
6942
7205
|
precedence: 240
|
|
6943
7206
|
},
|
|
6944
7207
|
{
|
|
6945
|
-
|
|
7208
|
+
latexTrigger: ["\\subsetneq"],
|
|
6946
7209
|
kind: "infix",
|
|
6947
7210
|
associativity: "right",
|
|
6948
7211
|
precedence: 240,
|
|
6949
7212
|
parse: "Subset"
|
|
6950
7213
|
},
|
|
6951
7214
|
{
|
|
6952
|
-
|
|
7215
|
+
latexTrigger: ["\\varsubsetneqq"],
|
|
6953
7216
|
kind: "infix",
|
|
6954
7217
|
associativity: "right",
|
|
6955
7218
|
precedence: 240,
|
|
@@ -6957,26 +7220,26 @@ var ComputeEngine = (() => {
|
|
|
6957
7220
|
},
|
|
6958
7221
|
{
|
|
6959
7222
|
name: "SubsetEqual",
|
|
6960
|
-
|
|
7223
|
+
latexTrigger: ["\\subseteq"],
|
|
6961
7224
|
kind: "infix",
|
|
6962
7225
|
precedence: 240
|
|
6963
7226
|
},
|
|
6964
7227
|
{
|
|
6965
7228
|
name: "Superset",
|
|
6966
|
-
|
|
7229
|
+
latexTrigger: ["\\supset"],
|
|
6967
7230
|
kind: "infix",
|
|
6968
7231
|
associativity: "right",
|
|
6969
7232
|
precedence: 240
|
|
6970
7233
|
},
|
|
6971
7234
|
{
|
|
6972
|
-
|
|
7235
|
+
latexTrigger: ["\\supsetneq"],
|
|
6973
7236
|
kind: "infix",
|
|
6974
7237
|
associativity: "right",
|
|
6975
7238
|
precedence: 240,
|
|
6976
7239
|
parse: "Superset"
|
|
6977
7240
|
},
|
|
6978
7241
|
{
|
|
6979
|
-
|
|
7242
|
+
latexTrigger: ["\\varsupsetneq"],
|
|
6980
7243
|
kind: "infix",
|
|
6981
7244
|
associativity: "right",
|
|
6982
7245
|
precedence: 240,
|
|
@@ -6984,7 +7247,7 @@ var ComputeEngine = (() => {
|
|
|
6984
7247
|
},
|
|
6985
7248
|
{
|
|
6986
7249
|
name: "SupersetEqual",
|
|
6987
|
-
|
|
7250
|
+
latexTrigger: ["\\supseteq"],
|
|
6988
7251
|
kind: "infix",
|
|
6989
7252
|
associativity: "right",
|
|
6990
7253
|
precedence: 240
|
|
@@ -7147,6 +7410,8 @@ var ComputeEngine = (() => {
|
|
|
7147
7410
|
condition: () => {
|
|
7148
7411
|
if (parser.matchAll(["\\mathrm", "<{>", "d", "<}>"]))
|
|
7149
7412
|
found = true;
|
|
7413
|
+
else if (parser.matchAll(["\\operatorname", "<{>", "d", "<}>"]))
|
|
7414
|
+
found = true;
|
|
7150
7415
|
return found;
|
|
7151
7416
|
}
|
|
7152
7417
|
});
|
|
@@ -7264,7 +7529,7 @@ var ComputeEngine = (() => {
|
|
|
7264
7529
|
command,
|
|
7265
7530
|
"\\!",
|
|
7266
7531
|
serializer.serialize(fn),
|
|
7267
|
-
"\\,\\
|
|
7532
|
+
"\\,\\operatorname{d}",
|
|
7268
7533
|
serializer.serialize(index)
|
|
7269
7534
|
]);
|
|
7270
7535
|
}
|
|
@@ -7282,7 +7547,7 @@ var ComputeEngine = (() => {
|
|
|
7282
7547
|
sub2,
|
|
7283
7548
|
"\\!",
|
|
7284
7549
|
serializer.serialize(fn),
|
|
7285
|
-
...index && symbol(index) !== "Nothing" ? ["\\,\\
|
|
7550
|
+
...index && symbol(index) !== "Nothing" ? ["\\,\\operatorname{d}", serializer.serialize(index)] : []
|
|
7286
7551
|
]);
|
|
7287
7552
|
};
|
|
7288
7553
|
}
|
|
@@ -7290,35 +7555,35 @@ var ComputeEngine = (() => {
|
|
|
7290
7555
|
{
|
|
7291
7556
|
kind: "expression",
|
|
7292
7557
|
name: "Integrate",
|
|
7293
|
-
|
|
7558
|
+
latexTrigger: ["\\int"],
|
|
7294
7559
|
parse: parseIntegral("Integrate"),
|
|
7295
7560
|
serialize: serializeIntegral("\\int")
|
|
7296
7561
|
},
|
|
7297
7562
|
{
|
|
7298
7563
|
kind: "expression",
|
|
7299
|
-
|
|
7564
|
+
latexTrigger: ["\\iint"],
|
|
7300
7565
|
parse: parseIntegral("Integrate", 2)
|
|
7301
7566
|
},
|
|
7302
7567
|
{
|
|
7303
7568
|
kind: "expression",
|
|
7304
|
-
|
|
7569
|
+
latexTrigger: ["\\iiint"],
|
|
7305
7570
|
parse: parseIntegral("Integrate", 3)
|
|
7306
7571
|
},
|
|
7307
7572
|
{
|
|
7308
7573
|
kind: "expression",
|
|
7309
7574
|
name: "CircularIntegrate",
|
|
7310
|
-
|
|
7575
|
+
latexTrigger: ["\\oint"],
|
|
7311
7576
|
parse: parseIntegral("CircularIntegrate"),
|
|
7312
7577
|
serialize: serializeIntegral("\\oint")
|
|
7313
7578
|
},
|
|
7314
7579
|
{
|
|
7315
7580
|
kind: "expression",
|
|
7316
|
-
|
|
7581
|
+
latexTrigger: ["\\oiint"],
|
|
7317
7582
|
parse: parseIntegral("CircularIntegrate", 2)
|
|
7318
7583
|
},
|
|
7319
7584
|
{
|
|
7320
7585
|
kind: "expression",
|
|
7321
|
-
|
|
7586
|
+
latexTrigger: ["\\oiiint"],
|
|
7322
7587
|
parse: parseIntegral("CircularIntegrate", 3)
|
|
7323
7588
|
}
|
|
7324
7589
|
];
|
|
@@ -7425,14 +7690,14 @@ var ComputeEngine = (() => {
|
|
|
7425
7690
|
return {
|
|
7426
7691
|
kind: "symbol",
|
|
7427
7692
|
name: symbol2,
|
|
7428
|
-
|
|
7693
|
+
latexTrigger: [latex],
|
|
7429
7694
|
parse: symbol2
|
|
7430
7695
|
};
|
|
7431
7696
|
}),
|
|
7432
7697
|
...SYMBOLS.map(([symbol2, _latex, codepoint]) => {
|
|
7433
7698
|
return {
|
|
7434
7699
|
kind: "symbol",
|
|
7435
|
-
|
|
7700
|
+
latexTrigger: [String.fromCodePoint(codepoint)],
|
|
7436
7701
|
parse: symbol2
|
|
7437
7702
|
};
|
|
7438
7703
|
})
|
|
@@ -7456,294 +7721,349 @@ var ComputeEngine = (() => {
|
|
|
7456
7721
|
"\\rfloor": "\\rfloor"
|
|
7457
7722
|
};
|
|
7458
7723
|
function addEntry(result, entry, onError) {
|
|
7459
|
-
const
|
|
7724
|
+
const indexedEntry = makeIndexedEntry(entry, onError);
|
|
7460
7725
|
if (indexedEntry === null)
|
|
7461
7726
|
return;
|
|
7462
7727
|
const kind = "kind" in entry ? entry.kind : "expression";
|
|
7463
|
-
|
|
7728
|
+
const latexTrigger = indexedEntry.latexTrigger;
|
|
7729
|
+
if (typeof latexTrigger === "string")
|
|
7730
|
+
result.lookahead = Math.max(result.lookahead, countTokens(latexTrigger));
|
|
7731
|
+
const tokensTrigger = tokenize(latexTrigger ?? "", []);
|
|
7732
|
+
if (latexTrigger?.[1] === "\\prime")
|
|
7733
|
+
;
|
|
7734
|
+
if (tokensTrigger.length === 2 && /[_^]/.test(tokensTrigger[0]) && tokensTrigger[1] !== "<{>" && kind !== "function" && kind !== "environment" && kind !== "matchfix") {
|
|
7464
7735
|
let parse = entry.parse;
|
|
7465
|
-
if (parse
|
|
7466
|
-
if (kind === "symbol")
|
|
7467
|
-
parse = entry.name;
|
|
7736
|
+
if (!parse && entry.name) {
|
|
7468
7737
|
if (kind === "postfix" || kind === "prefix")
|
|
7469
7738
|
parse = (_parser, expr) => [entry.name, expr];
|
|
7739
|
+
else
|
|
7740
|
+
parse = entry.name;
|
|
7470
7741
|
}
|
|
7471
7742
|
addEntry(
|
|
7472
7743
|
result,
|
|
7473
7744
|
{
|
|
7474
7745
|
...entry,
|
|
7475
7746
|
kind,
|
|
7476
|
-
parse,
|
|
7477
7747
|
name: void 0,
|
|
7478
|
-
|
|
7748
|
+
serialize: void 0,
|
|
7749
|
+
parse,
|
|
7750
|
+
latexTrigger: [tokensTrigger[0], "<{>", tokensTrigger[1], "<}>"]
|
|
7479
7751
|
},
|
|
7480
7752
|
onError
|
|
7481
7753
|
);
|
|
7482
7754
|
}
|
|
7755
|
+
result.defs.push(indexedEntry);
|
|
7483
7756
|
if (indexedEntry.name !== void 0) {
|
|
7484
|
-
if (result.
|
|
7757
|
+
if (result.ids.has(indexedEntry.name)) {
|
|
7485
7758
|
onError({
|
|
7486
7759
|
severity: "warning",
|
|
7487
7760
|
message: [
|
|
7488
7761
|
"invalid-dictionary-entry",
|
|
7489
7762
|
indexedEntry.name,
|
|
7490
|
-
"Duplicate definition. The name must be unique, but
|
|
7491
|
-
]
|
|
7492
|
-
});
|
|
7493
|
-
}
|
|
7494
|
-
result.name.set(indexedEntry.name, indexedEntry);
|
|
7495
|
-
}
|
|
7496
|
-
if (indexedEntry.kind === "matchfix") {
|
|
7497
|
-
result.matchfix.push(indexedEntry);
|
|
7498
|
-
} else if (indexedEntry.kind === "environment") {
|
|
7499
|
-
const triggerString = tokensToString(entry.trigger ?? []);
|
|
7500
|
-
if (result.environment.has(triggerString)) {
|
|
7501
|
-
onError({
|
|
7502
|
-
severity: "warning",
|
|
7503
|
-
message: [
|
|
7504
|
-
"invalid-dictionary-entry",
|
|
7505
|
-
triggerString,
|
|
7506
|
-
"Duplicate environment definition"
|
|
7763
|
+
"Duplicate definition. The name (MathJSON identifier) must be unique, but triggers can be shared by multiple definitions."
|
|
7507
7764
|
]
|
|
7508
7765
|
});
|
|
7509
7766
|
}
|
|
7510
|
-
result.
|
|
7511
|
-
} else if (trigger) {
|
|
7512
|
-
/* @__PURE__ */ console.assert(entry.trigger);
|
|
7513
|
-
if (indexedEntry.kind === "function") {
|
|
7514
|
-
/* @__PURE__ */ console.assert(typeof entry.trigger === "string");
|
|
7515
|
-
const fnName = entry.trigger;
|
|
7516
|
-
if (!result.function.has(fnName))
|
|
7517
|
-
result.function.set(fnName, [indexedEntry]);
|
|
7518
|
-
else
|
|
7519
|
-
result.function.set(fnName, [
|
|
7520
|
-
...result.function.get(fnName),
|
|
7521
|
-
indexedEntry
|
|
7522
|
-
]);
|
|
7523
|
-
} else {
|
|
7524
|
-
let triggerString;
|
|
7525
|
-
let tokenCount;
|
|
7526
|
-
if (typeof entry.trigger === "string") {
|
|
7527
|
-
triggerString = entry.trigger;
|
|
7528
|
-
tokenCount = countTokens(triggerString);
|
|
7529
|
-
} else {
|
|
7530
|
-
triggerString = tokensToString(entry.trigger ?? []);
|
|
7531
|
-
tokenCount = entry.trigger.length;
|
|
7532
|
-
}
|
|
7533
|
-
result.lookahead = Math.max(result.lookahead, tokenCount);
|
|
7534
|
-
const kind2 = indexedEntry.kind;
|
|
7535
|
-
if (result[kind2][tokenCount] === void 0)
|
|
7536
|
-
result[kind2][tokenCount] = /* @__PURE__ */ new Map();
|
|
7537
|
-
const list = result[kind2][tokenCount];
|
|
7538
|
-
if (list.has(triggerString))
|
|
7539
|
-
list.get(triggerString).push(indexedEntry);
|
|
7540
|
-
else
|
|
7541
|
-
list.set(triggerString, [indexedEntry]);
|
|
7542
|
-
}
|
|
7767
|
+
result.ids.set(indexedEntry.name, indexedEntry);
|
|
7543
7768
|
}
|
|
7544
7769
|
}
|
|
7545
7770
|
function indexLatexDictionary(dic, onError) {
|
|
7546
7771
|
const result = {
|
|
7547
7772
|
lookahead: 1,
|
|
7548
|
-
|
|
7549
|
-
|
|
7550
|
-
symbol: [],
|
|
7551
|
-
infix: [],
|
|
7552
|
-
prefix: [],
|
|
7553
|
-
postfix: [],
|
|
7554
|
-
function: /* @__PURE__ */ new Map(),
|
|
7555
|
-
environment: /* @__PURE__ */ new Map(),
|
|
7556
|
-
matchfix: []
|
|
7773
|
+
ids: /* @__PURE__ */ new Map(),
|
|
7774
|
+
defs: []
|
|
7557
7775
|
};
|
|
7558
7776
|
for (const entry of dic)
|
|
7559
7777
|
addEntry(result, entry, onError);
|
|
7560
7778
|
return result;
|
|
7561
7779
|
}
|
|
7562
7780
|
function makeIndexedEntry(entry, onError) {
|
|
7563
|
-
if (!
|
|
7564
|
-
return
|
|
7781
|
+
if (!isValidEntry(entry, onError))
|
|
7782
|
+
return null;
|
|
7565
7783
|
const result = {
|
|
7566
|
-
name: entry.name,
|
|
7567
7784
|
kind: "kind" in entry ? entry.kind : "expression"
|
|
7568
7785
|
};
|
|
7786
|
+
let tokensTrigger = null;
|
|
7787
|
+
if ("latexTrigger" in entry) {
|
|
7788
|
+
if (typeof entry.latexTrigger === "string")
|
|
7789
|
+
tokensTrigger = tokenize(entry.latexTrigger, []);
|
|
7790
|
+
else
|
|
7791
|
+
tokensTrigger = entry.latexTrigger;
|
|
7792
|
+
}
|
|
7793
|
+
let idTrigger = null;
|
|
7794
|
+
if ("identifierTrigger" in entry) {
|
|
7795
|
+
idTrigger = entry.identifierTrigger;
|
|
7796
|
+
}
|
|
7797
|
+
if (tokensTrigger !== null)
|
|
7798
|
+
result.latexTrigger = tokensToString(tokensTrigger);
|
|
7799
|
+
if (idTrigger !== null)
|
|
7800
|
+
result.identifierTrigger = idTrigger;
|
|
7801
|
+
if (entry.name) {
|
|
7802
|
+
result.name = entry.name;
|
|
7803
|
+
result.serialize = makeSerializeHandler(entry, tokensTrigger, idTrigger);
|
|
7804
|
+
}
|
|
7569
7805
|
if (result.kind === "matchfix" && isMatchfixEntry(entry)) {
|
|
7570
|
-
result.openDelimiter = entry.
|
|
7571
|
-
result.closeDelimiter = entry.
|
|
7572
|
-
if (typeof entry.serialize === "function")
|
|
7573
|
-
result.serialize = entry.serialize;
|
|
7574
|
-
else {
|
|
7575
|
-
const openDelim = typeof result.openDelimiter === "string" ? DEFAULT_DELIMITER[result.openDelimiter] : tokensToString(result.openDelimiter);
|
|
7576
|
-
const closeDelim = typeof result.closeDelimiter === "string" ? DEFAULT_DELIMITER[result.closeDelimiter] : tokensToString(result.closeDelimiter);
|
|
7577
|
-
result.serialize = (serializer, expr) => joinLatex([openDelim, serializer.serialize(op(expr, 1)), closeDelim]);
|
|
7578
|
-
}
|
|
7579
|
-
if (typeof entry.parse === "function")
|
|
7580
|
-
result.parse = entry.parse;
|
|
7581
|
-
else {
|
|
7582
|
-
/* @__PURE__ */ console.assert(entry.parse || entry.name);
|
|
7583
|
-
const head2 = entry.parse ?? entry.name;
|
|
7584
|
-
result.parse = (_parser, expr) => [head2, expr];
|
|
7585
|
-
}
|
|
7586
|
-
return [null, result];
|
|
7587
|
-
}
|
|
7588
|
-
if (result.kind === "environment" && isEnvironmentEntry(entry)) {
|
|
7589
|
-
const envName = entry.trigger;
|
|
7590
|
-
result.serialize = entry.serialize ?? ((serializer, expr) => `\\begin{${envName}}${serializer.serialize(
|
|
7591
|
-
op(expr, 1)
|
|
7592
|
-
)}\\end{${envName}}`);
|
|
7593
|
-
result.parse = entry.parse ?? (() => null);
|
|
7594
|
-
return [envName, result];
|
|
7595
|
-
}
|
|
7596
|
-
const trigger = typeof entry.trigger === "string" ? tokenize(entry.trigger, []) : entry.trigger;
|
|
7597
|
-
const triggerString = trigger ? tokensToString(trigger) : "";
|
|
7598
|
-
if (result.kind === "function" && isFunctionEntry(entry)) {
|
|
7599
|
-
result.serialize = entry.serialize;
|
|
7600
|
-
if (triggerString && !entry.serialize) {
|
|
7601
|
-
if (triggerString.startsWith("\\")) {
|
|
7602
|
-
result.serialize = (serializer, expr) => `${triggerString}${serializer.wrapArguments(expr)}`;
|
|
7603
|
-
} else
|
|
7604
|
-
result.serialize = (serializer, expr) => `\\mathrm{${triggerString}}${serializer.wrapArguments(expr)}`;
|
|
7605
|
-
}
|
|
7606
|
-
if (typeof entry.parse === "function")
|
|
7607
|
-
result.parse = entry.parse;
|
|
7608
|
-
else if (typeof entry.parse === "string")
|
|
7609
|
-
result.parse = () => entry.parse;
|
|
7610
|
-
else if (entry.name)
|
|
7611
|
-
result.parse = () => entry.name;
|
|
7612
|
-
return [triggerString, result];
|
|
7613
|
-
}
|
|
7614
|
-
if (result.kind === "expression" && isExpressionEntry(entry)) {
|
|
7615
|
-
result.serialize = entry.serialize ?? triggerString;
|
|
7616
|
-
if (typeof result.serialize === "string") {
|
|
7617
|
-
const serializeStr = result.serialize;
|
|
7618
|
-
result.serialize = (serializer, expr) => {
|
|
7619
|
-
if (!head(expr))
|
|
7620
|
-
return serializeStr;
|
|
7621
|
-
return `${serializeStr}${serializer.wrapArguments(expr)}`;
|
|
7622
|
-
};
|
|
7623
|
-
}
|
|
7624
|
-
{
|
|
7625
|
-
if (typeof entry.parse === "function") {
|
|
7626
|
-
result.parse = entry.parse;
|
|
7627
|
-
} else {
|
|
7628
|
-
const parseResult = entry.parse ?? entry.name;
|
|
7629
|
-
result.parse = () => parseResult;
|
|
7630
|
-
}
|
|
7631
|
-
}
|
|
7632
|
-
return [triggerString, result];
|
|
7806
|
+
result.openDelimiter = entry.openTrigger;
|
|
7807
|
+
result.closeDelimiter = entry.closeTrigger;
|
|
7633
7808
|
}
|
|
7634
|
-
/* @__PURE__ */ console.assert(
|
|
7635
|
-
typeof entry.trigger !== "string" || entry.parse || trigger.length > 1 || "kind" in entry && entry.kind === "function",
|
|
7636
|
-
`Trigger shortcuts should produce more than one token. Otherwise, not worth using them. (${triggerString})`
|
|
7637
|
-
);
|
|
7638
7809
|
if (result.kind === "symbol" && isSymbolEntry(entry)) {
|
|
7639
7810
|
result.precedence = entry.precedence ?? 1e4;
|
|
7640
7811
|
}
|
|
7641
|
-
if ((result.kind === "
|
|
7642
|
-
if (
|
|
7812
|
+
if ((result.kind === "prefix" || result.kind === "postfix") && (isPrefixEntry(entry) || isPostfixEntry(entry))) {
|
|
7813
|
+
if (tokensTrigger && (tokensTrigger[0] === "^" || tokensTrigger[0] === "_")) {
|
|
7643
7814
|
result.precedence = 720;
|
|
7644
7815
|
/* @__PURE__ */ console.assert(
|
|
7645
7816
|
entry.precedence === void 0,
|
|
7646
|
-
"'precedence'
|
|
7817
|
+
"'precedence' is fixed and cannot be modified with ^ and _ triggers"
|
|
7647
7818
|
);
|
|
7648
7819
|
} else
|
|
7649
7820
|
result.precedence = entry.precedence ?? 1e4;
|
|
7650
7821
|
}
|
|
7651
7822
|
if (result.kind === "infix" && isInfixEntry(entry)) {
|
|
7652
7823
|
/* @__PURE__ */ console.assert(
|
|
7653
|
-
!
|
|
7824
|
+
!tokensTrigger || tokensTrigger[0] !== "^" && tokensTrigger[0] !== "_" || !entry.associativity || entry.associativity === "non"
|
|
7654
7825
|
);
|
|
7655
7826
|
result.associativity = entry.associativity ?? "non";
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
7660
|
-
|
|
7661
|
-
|
|
7662
|
-
|
|
7827
|
+
result.precedence = entry.precedence ?? 1e4;
|
|
7828
|
+
}
|
|
7829
|
+
const parse = makeParseHandler(entry, tokensTrigger, idTrigger);
|
|
7830
|
+
if (parse)
|
|
7831
|
+
result.parse = parse;
|
|
7832
|
+
return result;
|
|
7833
|
+
}
|
|
7834
|
+
function makeSerializeHandler(entry, latexTrigger, idTrigger) {
|
|
7835
|
+
if (typeof entry.serialize === "function")
|
|
7836
|
+
return entry.serialize;
|
|
7837
|
+
const kind = entry["kind"] ?? "expression";
|
|
7838
|
+
if (kind === "environment") {
|
|
7839
|
+
const envName = entry["identifierTrigger"] ?? entry.name ?? "unknown";
|
|
7840
|
+
return (serializer, expr) => joinLatex([
|
|
7841
|
+
`\\begin{${envName}}`,
|
|
7842
|
+
serializer.serialize(op(expr, 1)),
|
|
7843
|
+
`\\end{${envName}}`
|
|
7844
|
+
]);
|
|
7845
|
+
}
|
|
7846
|
+
if (isMatchfixEntry(entry)) {
|
|
7847
|
+
const openDelim = typeof entry.openTrigger === "string" ? DEFAULT_DELIMITER[entry.openTrigger] : tokensToString(entry["openDelimiter"]);
|
|
7848
|
+
const closeDelim = typeof entry.closeTrigger === "string" ? DEFAULT_DELIMITER[entry.closeTrigger] : tokensToString(entry["closeDelimiter"]);
|
|
7849
|
+
return (serializer, expr) => joinLatex([openDelim, serializer.serialize(op(expr, 1)), closeDelim]);
|
|
7850
|
+
}
|
|
7851
|
+
let latex = entry.serialize;
|
|
7852
|
+
if (latex === void 0 && latexTrigger)
|
|
7853
|
+
latex = tokensToString(latexTrigger);
|
|
7854
|
+
if (latex) {
|
|
7855
|
+
if (kind === "postfix")
|
|
7856
|
+
return (serializer, expr) => joinLatex([serializer.serialize(op(expr, 1)), latex]);
|
|
7857
|
+
if (kind === "prefix")
|
|
7858
|
+
return (serializer, expr) => joinLatex([latex, serializer.serialize(op(expr, 1))]);
|
|
7859
|
+
if (kind === "infix") {
|
|
7860
|
+
return (serializer, expr) => joinLatex(
|
|
7861
|
+
(ops(expr) ?? []).flatMap(
|
|
7862
|
+
(val, i) => i < nops(expr) - 1 ? [serializer.serialize(val), latex] : [serializer.serialize(val)]
|
|
7863
|
+
)
|
|
7864
|
+
);
|
|
7865
|
+
}
|
|
7866
|
+
return (serializer, expr) => head(expr) ? joinLatex([latex, serializer.wrapArguments(expr)]) : latex;
|
|
7867
|
+
}
|
|
7868
|
+
const id = idTrigger ?? entry.name ?? "unknown";
|
|
7869
|
+
if (kind === "postfix")
|
|
7870
|
+
return (serializer, expr) => joinLatex([
|
|
7871
|
+
serializer.serialize(op(expr, 1)),
|
|
7872
|
+
serializer.serializeSymbol(id)
|
|
7873
|
+
]);
|
|
7874
|
+
if (kind === "prefix")
|
|
7875
|
+
return (serializer, expr) => joinLatex([
|
|
7876
|
+
serializer.serializeSymbol(id),
|
|
7877
|
+
serializer.serialize(op(expr, 1))
|
|
7878
|
+
]);
|
|
7879
|
+
if (kind === "infix")
|
|
7880
|
+
return (serializer, expr) => joinLatex([
|
|
7881
|
+
serializer.serialize(op(expr, 1)),
|
|
7882
|
+
serializer.serializeSymbol(id),
|
|
7883
|
+
serializer.serialize(op(expr, 2))
|
|
7884
|
+
]);
|
|
7885
|
+
return (serializer, expr) => head(expr) ? joinLatex([
|
|
7886
|
+
serializer.serializeSymbol(id),
|
|
7887
|
+
serializer.wrapArguments(expr)
|
|
7888
|
+
]) : serializer.serializeSymbol(id);
|
|
7889
|
+
}
|
|
7890
|
+
function makeParseHandler(entry, latexTrigger, idTrigger) {
|
|
7891
|
+
if ("parse" in entry && typeof entry.parse === "function")
|
|
7892
|
+
return entry.parse;
|
|
7893
|
+
const kind = "kind" in entry ? entry.kind : "expression";
|
|
7894
|
+
if (kind === "environment") {
|
|
7895
|
+
const envName = entry.parse ?? idTrigger ?? entry.name;
|
|
7896
|
+
if (envName)
|
|
7897
|
+
return (parser, _until) => {
|
|
7898
|
+
const array = parser.parseTabular();
|
|
7899
|
+
if (array === null)
|
|
7900
|
+
return null;
|
|
7901
|
+
return [envName, ["List", array.map((row) => ["List", ...row])]];
|
|
7902
|
+
};
|
|
7903
|
+
}
|
|
7904
|
+
if (kind === "function") {
|
|
7905
|
+
const fnName = entry.parse ?? idTrigger ?? entry.name;
|
|
7906
|
+
if (fnName)
|
|
7907
|
+
return (parser, until) => {
|
|
7908
|
+
const args = parser.parseArguments("enclosure", until);
|
|
7909
|
+
return args === null ? fnName : [fnName, ...args];
|
|
7910
|
+
};
|
|
7911
|
+
}
|
|
7912
|
+
if (kind === "symbol") {
|
|
7913
|
+
const symName = entry.parse ?? idTrigger ?? entry.name;
|
|
7914
|
+
if (symName)
|
|
7915
|
+
return (_parser, _terminator) => symName;
|
|
7916
|
+
}
|
|
7917
|
+
if (kind === "prefix") {
|
|
7918
|
+
const h = entry.parse ?? idTrigger ?? entry.name;
|
|
7919
|
+
if (h) {
|
|
7920
|
+
const prec = entry["precedence"] ?? 1e4;
|
|
7921
|
+
return (parser, until) => {
|
|
7922
|
+
const rhs = parser.parseExpression({
|
|
7923
|
+
...until ?? [],
|
|
7924
|
+
minPrec: prec
|
|
7925
|
+
});
|
|
7926
|
+
return rhs === null ? null : [h, rhs];
|
|
7927
|
+
};
|
|
7928
|
+
}
|
|
7929
|
+
}
|
|
7930
|
+
if (kind === "postfix") {
|
|
7931
|
+
const h = entry.parse ?? entry.name;
|
|
7932
|
+
if (h)
|
|
7933
|
+
return (_parser, lhs) => lhs === null ? null : [h, lhs];
|
|
7934
|
+
}
|
|
7935
|
+
if (kind === "infix") {
|
|
7936
|
+
if (/[_^]/.test(latexTrigger?.[0] ?? "")) {
|
|
7937
|
+
const h2 = entry.name ?? entry.parse;
|
|
7938
|
+
return (_parser, arg) => [
|
|
7939
|
+
h2,
|
|
7663
7940
|
missingIfEmpty(op(arg, 1)),
|
|
7664
7941
|
missingIfEmpty(op(arg, 2))
|
|
7665
7942
|
];
|
|
7666
|
-
}
|
|
7667
|
-
|
|
7668
|
-
|
|
7669
|
-
|
|
7670
|
-
|
|
7671
|
-
|
|
7943
|
+
}
|
|
7944
|
+
const h = entry.parse ?? idTrigger ?? entry.name;
|
|
7945
|
+
const prec = entry["precedence"] ?? 1e4;
|
|
7946
|
+
const associativity = entry["associativity"] ?? "non";
|
|
7947
|
+
if (h)
|
|
7948
|
+
return (parser, lhs, until) => {
|
|
7949
|
+
if (lhs === null)
|
|
7950
|
+
return null;
|
|
7951
|
+
if (prec < until.minPrec)
|
|
7672
7952
|
return null;
|
|
7673
7953
|
const rhs = missingIfEmpty(
|
|
7674
|
-
|
|
7675
|
-
...terminator,
|
|
7676
|
-
minPrec: prec
|
|
7677
|
-
})
|
|
7954
|
+
parser.parseExpression({ ...until, minPrec: prec })
|
|
7678
7955
|
);
|
|
7679
|
-
return typeof
|
|
7956
|
+
return typeof h === "string" ? applyAssociativeOperator(h, lhs, rhs, associativity) : [h, lhs, rhs];
|
|
7957
|
+
};
|
|
7958
|
+
}
|
|
7959
|
+
if (kind === "matchfix") {
|
|
7960
|
+
const h = entry.parse ?? entry.name;
|
|
7961
|
+
if (h)
|
|
7962
|
+
return (_parser, body) => {
|
|
7963
|
+
if (body === null || isEmptySequence(body))
|
|
7964
|
+
return null;
|
|
7965
|
+
return [h, body];
|
|
7680
7966
|
};
|
|
7681
|
-
}
|
|
7682
|
-
} else {
|
|
7683
|
-
if (typeof entry.parse === "function") {
|
|
7684
|
-
result.parse = entry.parse;
|
|
7685
|
-
} else if (entry.parse !== void 0) {
|
|
7686
|
-
/* @__PURE__ */ console.assert(result.kind === "symbol" || result.kind === "expression");
|
|
7687
|
-
result.parse = () => entry.parse;
|
|
7688
|
-
} else if (entry.parse === void 0 && entry.name !== void 0) {
|
|
7689
|
-
if (result.kind === "postfix") {
|
|
7690
|
-
result.parse = (_parser, lhs) => lhs ? [entry.name, lhs] : null;
|
|
7691
|
-
} else if (result.kind === "prefix") {
|
|
7692
|
-
const prec = result.precedence;
|
|
7693
|
-
/* @__PURE__ */ console.assert(entry.name);
|
|
7694
|
-
const head2 = entry.name;
|
|
7695
|
-
result.parse = (parser, terminator) => {
|
|
7696
|
-
if (terminator && prec < terminator.minPrec)
|
|
7697
|
-
return null;
|
|
7698
|
-
const rhs = parser.parseExpression({ ...terminator, minPrec: prec });
|
|
7699
|
-
return rhs === null ? null : [head2, rhs];
|
|
7700
|
-
};
|
|
7701
|
-
}
|
|
7702
|
-
}
|
|
7703
|
-
}
|
|
7704
|
-
if (typeof entry.serialize === "function" || typeof entry.serialize === "string") {
|
|
7705
|
-
result.serialize = entry.serialize;
|
|
7706
|
-
} else if (trigger) {
|
|
7707
|
-
if (result.kind === "postfix") {
|
|
7708
|
-
result.serialize = "#1" + triggerString;
|
|
7709
|
-
} else if (result.kind === "prefix") {
|
|
7710
|
-
result.serialize = triggerString + "#1";
|
|
7711
|
-
} else if (result.kind === "infix") {
|
|
7712
|
-
result.serialize = "#1" + triggerString + "#2";
|
|
7713
|
-
} else if (result.kind === "symbol") {
|
|
7714
|
-
result.serialize = triggerString;
|
|
7715
|
-
} else {
|
|
7716
|
-
result.serialize = "";
|
|
7717
|
-
}
|
|
7718
7967
|
}
|
|
7719
|
-
|
|
7968
|
+
if (kind === "expression") {
|
|
7969
|
+
const parseResult = entry.parse ?? idTrigger ?? entry.name;
|
|
7970
|
+
if (parseResult)
|
|
7971
|
+
return () => parseResult;
|
|
7972
|
+
}
|
|
7973
|
+
if ("parse" in entry) {
|
|
7974
|
+
const parseResult = entry.parse;
|
|
7975
|
+
return () => parseResult;
|
|
7976
|
+
}
|
|
7977
|
+
return void 0;
|
|
7720
7978
|
}
|
|
7721
|
-
function
|
|
7722
|
-
|
|
7979
|
+
function isValidEntry(entry, onError) {
|
|
7980
|
+
let subject = entry.name ?? entry["latexTrigger"] ?? entry["identifierTrigger"] ?? entry["openDelimiter"];
|
|
7981
|
+
if (!subject) {
|
|
7982
|
+
try {
|
|
7983
|
+
subject = JSON.stringify(entry);
|
|
7984
|
+
} catch (e) {
|
|
7985
|
+
subject = "???";
|
|
7986
|
+
}
|
|
7987
|
+
}
|
|
7988
|
+
if (Array.isArray(subject))
|
|
7989
|
+
subject = tokensToString(subject);
|
|
7990
|
+
if ("kind" in entry && ![
|
|
7991
|
+
"expression",
|
|
7992
|
+
"symbol",
|
|
7993
|
+
"function",
|
|
7994
|
+
"infix",
|
|
7995
|
+
"postfix",
|
|
7996
|
+
"prefix",
|
|
7997
|
+
"matchfix",
|
|
7998
|
+
"environment"
|
|
7999
|
+
].includes(entry.kind)) {
|
|
8000
|
+
onError({
|
|
8001
|
+
severity: "warning",
|
|
8002
|
+
message: [
|
|
8003
|
+
"invalid-dictionary-entry",
|
|
8004
|
+
subject,
|
|
8005
|
+
`The 'kind' property must be one of 'expression', 'symbol', 'function', 'infix', 'postfix', 'prefix', 'matchfix', 'environment'`
|
|
8006
|
+
]
|
|
8007
|
+
});
|
|
8008
|
+
}
|
|
7723
8009
|
if (entry.serialize !== void 0 && !entry.name) {
|
|
7724
8010
|
onError({
|
|
7725
8011
|
severity: "warning",
|
|
7726
8012
|
message: [
|
|
7727
8013
|
"invalid-dictionary-entry",
|
|
7728
8014
|
subject,
|
|
7729
|
-
`
|
|
8015
|
+
`A 'name' property must be provided if a 'serialize' handler is provided`
|
|
7730
8016
|
]
|
|
7731
8017
|
});
|
|
7732
8018
|
return false;
|
|
7733
8019
|
}
|
|
8020
|
+
if ("identifierTrigger" in entry) {
|
|
8021
|
+
if (typeof entry.identifierTrigger !== "string" || !isValidIdentifier(entry.identifierTrigger)) {
|
|
8022
|
+
onError({
|
|
8023
|
+
severity: "warning",
|
|
8024
|
+
message: [
|
|
8025
|
+
"invalid-dictionary-entry",
|
|
8026
|
+
subject,
|
|
8027
|
+
`The 'identifierTrigger' property must be a valid identifier`
|
|
8028
|
+
]
|
|
8029
|
+
});
|
|
8030
|
+
}
|
|
8031
|
+
}
|
|
8032
|
+
if ("name" in entry) {
|
|
8033
|
+
if (typeof entry.name !== "string") {
|
|
8034
|
+
if (entry.name !== void 0)
|
|
8035
|
+
onError({
|
|
8036
|
+
severity: "warning",
|
|
8037
|
+
message: [
|
|
8038
|
+
"invalid-dictionary-entry",
|
|
8039
|
+
subject,
|
|
8040
|
+
`The 'name' property must be a string`
|
|
8041
|
+
]
|
|
8042
|
+
});
|
|
8043
|
+
} else if (!isValidIdentifier(entry.name)) {
|
|
8044
|
+
onError({
|
|
8045
|
+
severity: "warning",
|
|
8046
|
+
message: [
|
|
8047
|
+
"invalid-dictionary-entry",
|
|
8048
|
+
entry.name,
|
|
8049
|
+
`The 'name' property must be a valid identifier`
|
|
8050
|
+
]
|
|
8051
|
+
});
|
|
8052
|
+
}
|
|
8053
|
+
}
|
|
7734
8054
|
if (isMatchfixEntry(entry)) {
|
|
7735
|
-
if (entry
|
|
8055
|
+
if ("latexTrigger" in entry || "identifierTrigger" in isPrefixEntry) {
|
|
7736
8056
|
onError({
|
|
7737
8057
|
severity: "warning",
|
|
7738
8058
|
message: [
|
|
7739
8059
|
"invalid-dictionary-entry",
|
|
7740
8060
|
subject,
|
|
7741
|
-
`
|
|
8061
|
+
`'matchfix' operators use a 'openDelimiter' and 'closeDelimiter' instead of a 'latexTrigger' or 'identifierTrigger'. `
|
|
7742
8062
|
]
|
|
7743
8063
|
});
|
|
7744
8064
|
return false;
|
|
7745
8065
|
}
|
|
7746
|
-
if (!entry.
|
|
8066
|
+
if (!entry.openTrigger || !entry.closeTrigger) {
|
|
7747
8067
|
onError({
|
|
7748
8068
|
severity: "warning",
|
|
7749
8069
|
message: [
|
|
@@ -7754,7 +8074,7 @@ var ComputeEngine = (() => {
|
|
|
7754
8074
|
});
|
|
7755
8075
|
return false;
|
|
7756
8076
|
}
|
|
7757
|
-
if (typeof entry.
|
|
8077
|
+
if (typeof entry.openTrigger !== typeof entry.closeTrigger) {
|
|
7758
8078
|
onError({
|
|
7759
8079
|
severity: "warning",
|
|
7760
8080
|
message: [
|
|
@@ -7767,7 +8087,7 @@ var ComputeEngine = (() => {
|
|
|
7767
8087
|
}
|
|
7768
8088
|
}
|
|
7769
8089
|
if (isInfixEntry(entry) || isPostfixEntry(entry) || isPrefixEntry(entry)) {
|
|
7770
|
-
if (Array.isArray(entry.
|
|
8090
|
+
if (Array.isArray(entry.latexTrigger) && (entry.latexTrigger[0] === "_" || entry.latexTrigger[0] === "^") || typeof entry.latexTrigger === "string" && (entry.latexTrigger.startsWith("^") || entry.latexTrigger.startsWith("_"))) {
|
|
7771
8091
|
if (entry.precedence !== void 0 || entry["associativity"] !== void 0) {
|
|
7772
8092
|
onError({
|
|
7773
8093
|
severity: "warning",
|
|
@@ -7803,14 +8123,14 @@ var ComputeEngine = (() => {
|
|
|
7803
8123
|
return false;
|
|
7804
8124
|
}
|
|
7805
8125
|
}
|
|
7806
|
-
if (!isMatchfixEntry(entry)) {
|
|
7807
|
-
if (!entry.
|
|
8126
|
+
if (!isMatchfixEntry(entry) && !isEnvironmentEntry(entry)) {
|
|
8127
|
+
if (!entry.latexTrigger && !entry.identifierTrigger && !entry.name) {
|
|
7808
8128
|
onError({
|
|
7809
8129
|
severity: "warning",
|
|
7810
8130
|
message: [
|
|
7811
8131
|
"invalid-dictionary-entry",
|
|
7812
8132
|
subject,
|
|
7813
|
-
`Expected
|
|
8133
|
+
`Expected a 'name', a 'latexTrigger' or a 'identifierTrigger'`
|
|
7814
8134
|
]
|
|
7815
8135
|
});
|
|
7816
8136
|
return false;
|
|
@@ -7841,7 +8161,7 @@ var ComputeEngine = (() => {
|
|
|
7841
8161
|
{
|
|
7842
8162
|
name: "mu0",
|
|
7843
8163
|
kind: "symbol",
|
|
7844
|
-
|
|
8164
|
+
latexTrigger: "\\mu_0"
|
|
7845
8165
|
}
|
|
7846
8166
|
],
|
|
7847
8167
|
sets: DEFINITIONS_SETS,
|
|
@@ -7851,7 +8171,24 @@ var ComputeEngine = (() => {
|
|
|
7851
8171
|
|
|
7852
8172
|
// src/compute-engine/latex-syntax/parse-identifier.ts
|
|
7853
8173
|
var IDENTIFIER_PREFIX = {
|
|
7854
|
-
"
|
|
8174
|
+
// Those are "grouping" prefix that also specify spacing
|
|
8175
|
+
// around the symbol. We ignore the spacing, though.
|
|
8176
|
+
"\\mathord": "",
|
|
8177
|
+
"\\mathop": "",
|
|
8178
|
+
"\\mathbin": "",
|
|
8179
|
+
"\\mathrel": "",
|
|
8180
|
+
"\\mathopen": "",
|
|
8181
|
+
"\\mathclose": "",
|
|
8182
|
+
"\\mathpunct": "",
|
|
8183
|
+
"\\mathinner": "",
|
|
8184
|
+
// This is the preferred way to specify an identifier
|
|
8185
|
+
// it defines both spacing and font. By default, identifiers
|
|
8186
|
+
// are wrapper with `\\operatorname{}`.
|
|
8187
|
+
"\\operatorname": "",
|
|
8188
|
+
// These styling commands are used to change the font of an identifier
|
|
8189
|
+
// They may be problematic, as adjacent identifiers may be merged
|
|
8190
|
+
// into a single identifier when used in editors, such a MathLive.
|
|
8191
|
+
// For example `\mathrm{speed}\mathrm{sound}` can be confused with `\mathrm{speedsound}`
|
|
7855
8192
|
"\\mathrm": "_upright",
|
|
7856
8193
|
"\\mathit": "_italic",
|
|
7857
8194
|
"\\mathbf": "_bold",
|
|
@@ -7878,7 +8215,7 @@ var ComputeEngine = (() => {
|
|
|
7878
8215
|
"\\breve": "_breve",
|
|
7879
8216
|
"\\check": "_check"
|
|
7880
8217
|
};
|
|
7881
|
-
function
|
|
8218
|
+
function parseIdentifierToken(parser, options) {
|
|
7882
8219
|
if (parser.atEnd)
|
|
7883
8220
|
return null;
|
|
7884
8221
|
const token = parser.peek;
|
|
@@ -7916,7 +8253,7 @@ var ComputeEngine = (() => {
|
|
|
7916
8253
|
}
|
|
7917
8254
|
return parser.matchChar() ?? parser.nextToken();
|
|
7918
8255
|
}
|
|
7919
|
-
function
|
|
8256
|
+
function parseIdentifierBody(parser) {
|
|
7920
8257
|
let id = matchPrefixedIdentifier(parser);
|
|
7921
8258
|
const start = parser.index;
|
|
7922
8259
|
const prefix = IDENTIFIER_MODIFIER[parser.peek] ?? null;
|
|
@@ -7926,7 +8263,7 @@ var ComputeEngine = (() => {
|
|
|
7926
8263
|
parser.index = start;
|
|
7927
8264
|
return null;
|
|
7928
8265
|
}
|
|
7929
|
-
const body =
|
|
8266
|
+
const body = parseIdentifierBody(parser);
|
|
7930
8267
|
if (body === null || !parser.match("<}>")) {
|
|
7931
8268
|
parser.index = start;
|
|
7932
8269
|
return null;
|
|
@@ -7939,7 +8276,7 @@ var ComputeEngine = (() => {
|
|
|
7939
8276
|
const token = parser.peek;
|
|
7940
8277
|
if (token === "<}>" || token === "_" || token === "^")
|
|
7941
8278
|
break;
|
|
7942
|
-
const next =
|
|
8279
|
+
const next = parseIdentifierToken(parser, { toplevel: false });
|
|
7943
8280
|
if (next === null) {
|
|
7944
8281
|
parser.index = start;
|
|
7945
8282
|
return null;
|
|
@@ -7968,7 +8305,7 @@ var ComputeEngine = (() => {
|
|
|
7968
8305
|
while (!parser.atEnd) {
|
|
7969
8306
|
if (parser.match("_")) {
|
|
7970
8307
|
const hasBrace = parser.match("<{>");
|
|
7971
|
-
const sub2 =
|
|
8308
|
+
const sub2 = parseIdentifierBody(parser);
|
|
7972
8309
|
if (hasBrace && !parser.match("<}>") || sub2 === null) {
|
|
7973
8310
|
parser.index = start;
|
|
7974
8311
|
return null;
|
|
@@ -7976,7 +8313,7 @@ var ComputeEngine = (() => {
|
|
|
7976
8313
|
subs2.push(sub2);
|
|
7977
8314
|
} else if (parser.match("^")) {
|
|
7978
8315
|
const hasBrace = parser.match("<{>");
|
|
7979
|
-
const sup =
|
|
8316
|
+
const sup = parseIdentifierBody(parser);
|
|
7980
8317
|
if (hasBrace && !parser.match("<}>") || sup === null) {
|
|
7981
8318
|
parser.index = start;
|
|
7982
8319
|
return null;
|
|
@@ -8015,7 +8352,7 @@ var ComputeEngine = (() => {
|
|
|
8015
8352
|
body = digit;
|
|
8016
8353
|
parser.nextToken();
|
|
8017
8354
|
}
|
|
8018
|
-
body +=
|
|
8355
|
+
body += parseIdentifierBody(parser);
|
|
8019
8356
|
if (body === null || !parser.match("<}>")) {
|
|
8020
8357
|
parser.index = start;
|
|
8021
8358
|
return null;
|
|
@@ -8039,7 +8376,7 @@ var ComputeEngine = (() => {
|
|
|
8039
8376
|
start
|
|
8040
8377
|
);
|
|
8041
8378
|
}
|
|
8042
|
-
function
|
|
8379
|
+
function parseIdentifier(parser) {
|
|
8043
8380
|
if (/^[a-zA-Z]$/.test(parser.peek) || /^\p{XIDS}$/u.test(parser.peek))
|
|
8044
8381
|
return parser.nextToken();
|
|
8045
8382
|
const start = parser.index;
|
|
@@ -8048,19 +8385,14 @@ var ComputeEngine = (() => {
|
|
|
8048
8385
|
id = "";
|
|
8049
8386
|
while (!parser.atEnd && ONLY_EMOJIS.test(id + parser.peek))
|
|
8050
8387
|
id += parser.nextToken();
|
|
8388
|
+
if (!id)
|
|
8389
|
+
id = null;
|
|
8051
8390
|
}
|
|
8391
|
+
id ?? (id = parseIdentifierToken(parser, { toplevel: true }));
|
|
8052
8392
|
if (id) {
|
|
8053
8393
|
id = id.normalize();
|
|
8054
8394
|
if (isValidIdentifier(id))
|
|
8055
|
-
return id;
|
|
8056
|
-
parser.index = start;
|
|
8057
|
-
return null;
|
|
8058
|
-
}
|
|
8059
|
-
let next = matchIdentifierToken(parser, { toplevel: true });
|
|
8060
|
-
if (next) {
|
|
8061
|
-
next = next.normalize();
|
|
8062
|
-
if (isValidIdentifier(next))
|
|
8063
|
-
return next;
|
|
8395
|
+
return id;
|
|
8064
8396
|
}
|
|
8065
8397
|
parser.index = start;
|
|
8066
8398
|
return null;
|
|
@@ -8129,7 +8461,7 @@ var ComputeEngine = (() => {
|
|
|
8129
8461
|
// with machine numbers, up to 15 assuming 2^53 bits floating points
|
|
8130
8462
|
positiveInfinity: "\\infty",
|
|
8131
8463
|
negativeInfinity: "-\\infty",
|
|
8132
|
-
notANumber: "\\
|
|
8464
|
+
notANumber: "\\operatorname{NaN}",
|
|
8133
8465
|
decimalMarker: ".",
|
|
8134
8466
|
// Use `{,}` for comma as a decimal marker
|
|
8135
8467
|
groupSeparator: "\\,",
|
|
@@ -8269,13 +8601,12 @@ var ComputeEngine = (() => {
|
|
|
8269
8601
|
* Note: the `minPrec` condition is not checked. It should be checked separately.
|
|
8270
8602
|
*/
|
|
8271
8603
|
atTerminator(t) {
|
|
8272
|
-
|
|
8273
|
-
return true;
|
|
8274
|
-
if (t?.condition && t.condition(this))
|
|
8275
|
-
return true;
|
|
8276
|
-
return false;
|
|
8604
|
+
return this.atBoundary || ((t?.condition && t.condition(this)) ?? false);
|
|
8277
8605
|
}
|
|
8278
|
-
/**
|
|
8606
|
+
/**
|
|
8607
|
+
* True if the current token matches any of the boundaries we are
|
|
8608
|
+
* waiting for.
|
|
8609
|
+
*/
|
|
8279
8610
|
get atBoundary() {
|
|
8280
8611
|
if (this.atEnd)
|
|
8281
8612
|
return true;
|
|
@@ -8337,42 +8668,32 @@ var ComputeEngine = (() => {
|
|
|
8337
8668
|
this._dictionary.lookahead,
|
|
8338
8669
|
this._tokens.length - this.index
|
|
8339
8670
|
);
|
|
8340
|
-
if (n
|
|
8671
|
+
if (n <= 0)
|
|
8341
8672
|
return [];
|
|
8342
|
-
const result =
|
|
8673
|
+
const result = [];
|
|
8343
8674
|
while (n > 0)
|
|
8344
|
-
result[n
|
|
8675
|
+
result.push([n, this.latexAhead(n--)]);
|
|
8345
8676
|
return result;
|
|
8346
8677
|
}
|
|
8347
8678
|
peekDefinitions(kind) {
|
|
8348
|
-
let defs;
|
|
8349
|
-
if (kind === "function") {
|
|
8350
|
-
const start = this.index;
|
|
8351
|
-
if (this.match("\\operatorname") || this.match("\\mathrm") || this.match("\\mathit")) {
|
|
8352
|
-
const fn = this.parseStringGroup()?.trim();
|
|
8353
|
-
const n = this.index - start;
|
|
8354
|
-
this.index = start;
|
|
8355
|
-
if (!fn || !this._dictionary.function.has(fn))
|
|
8356
|
-
return null;
|
|
8357
|
-
return this._dictionary.function.get(fn).map((x) => [x, n]);
|
|
8358
|
-
}
|
|
8359
|
-
return null;
|
|
8360
|
-
} else if (kind === "operator") {
|
|
8361
|
-
defs = this.lookAhead().map(
|
|
8362
|
-
(x, n) => this._dictionary.infix[n]?.get(x) ?? this._dictionary.postfix[n]?.get(x) ?? this._dictionary.prefix[n]?.get(x)
|
|
8363
|
-
);
|
|
8364
|
-
} else {
|
|
8365
|
-
defs = this.lookAhead().map((x, n) => this._dictionary[kind][n]?.get(x));
|
|
8366
|
-
}
|
|
8367
8679
|
const result = [];
|
|
8368
|
-
|
|
8369
|
-
|
|
8370
|
-
|
|
8371
|
-
|
|
8372
|
-
|
|
8680
|
+
const defs = [...this.getDefs(kind)];
|
|
8681
|
+
for (const def of defs)
|
|
8682
|
+
if (def.latexTrigger === "")
|
|
8683
|
+
result.push([def, 0]);
|
|
8684
|
+
for (const [n, tokens] of this.lookAhead()) {
|
|
8685
|
+
for (const def of defs)
|
|
8686
|
+
if (def.latexTrigger === tokens)
|
|
8687
|
+
result.push([def, n]);
|
|
8688
|
+
}
|
|
8689
|
+
for (const def of defs) {
|
|
8690
|
+
if (def.identifierTrigger) {
|
|
8691
|
+
const n = peekComplexId(this, def.identifierTrigger);
|
|
8692
|
+
if (n > 0)
|
|
8693
|
+
result.push([def, n]);
|
|
8373
8694
|
}
|
|
8374
8695
|
}
|
|
8375
|
-
return result
|
|
8696
|
+
return result;
|
|
8376
8697
|
}
|
|
8377
8698
|
/** Skip strictly `<space>` tokens.
|
|
8378
8699
|
* To also skip `{}` see `skipSpace()`.
|
|
@@ -8486,9 +8807,8 @@ var ComputeEngine = (() => {
|
|
|
8486
8807
|
digits += digit;
|
|
8487
8808
|
n += 1;
|
|
8488
8809
|
}
|
|
8489
|
-
if (digits.length === caretCount)
|
|
8810
|
+
if (digits.length === caretCount)
|
|
8490
8811
|
return String.fromCodePoint(Number.parseInt(digits, 16));
|
|
8491
|
-
}
|
|
8492
8812
|
} else if (this.match("\\char")) {
|
|
8493
8813
|
let codepoint = Math.floor(this.matchLatexNumber() ?? Number.NaN);
|
|
8494
8814
|
if (!Number.isFinite(codepoint) || codepoint < 0 || codepoint > 1114111) {
|
|
@@ -8497,17 +8817,15 @@ var ComputeEngine = (() => {
|
|
|
8497
8817
|
return String.fromCodePoint(codepoint);
|
|
8498
8818
|
} else if (this.match("\\unicode")) {
|
|
8499
8819
|
this.skipSpaceTokens();
|
|
8500
|
-
if (this.
|
|
8501
|
-
this.nextToken();
|
|
8820
|
+
if (this.match("<{>")) {
|
|
8502
8821
|
const codepoint = this.matchLatexNumber();
|
|
8503
8822
|
if (this.match("<}>") && codepoint !== null && codepoint >= 0 && codepoint <= 1114111) {
|
|
8504
8823
|
return String.fromCodePoint(codepoint);
|
|
8505
8824
|
}
|
|
8506
8825
|
} else {
|
|
8507
8826
|
const codepoint = this.matchLatexNumber();
|
|
8508
|
-
if (codepoint !== null && codepoint >= 0 && codepoint <= 1114111)
|
|
8827
|
+
if (codepoint !== null && codepoint >= 0 && codepoint <= 1114111)
|
|
8509
8828
|
return String.fromCodePoint(codepoint);
|
|
8510
|
-
}
|
|
8511
8829
|
}
|
|
8512
8830
|
}
|
|
8513
8831
|
this.index = index;
|
|
@@ -8534,7 +8852,7 @@ var ComputeEngine = (() => {
|
|
|
8534
8852
|
// Some LaTeX commands (but not all) can accept an argument without braces,
|
|
8535
8853
|
// for example `^` , `\sqrt` or `\frac`.
|
|
8536
8854
|
// This argument will usually be a single token, but can be a sequence of
|
|
8537
|
-
// tokens (e.g. `\sqrt\frac12` or `\sqrt\
|
|
8855
|
+
// tokens (e.g. `\sqrt\frac12` or `\sqrt\operatorname{speed}`).
|
|
8538
8856
|
parseToken() {
|
|
8539
8857
|
const excluding = [
|
|
8540
8858
|
...'!"#$%&(),/;:?@[]\\`|~'.split(""),
|
|
@@ -8593,6 +8911,7 @@ var ComputeEngine = (() => {
|
|
|
8593
8911
|
let peek = this.peek;
|
|
8594
8912
|
while (peek !== "&" && peek !== "\\\\" && peek !== "\\cr" && !this.atBoundary) {
|
|
8595
8913
|
expr = this.parseExpression({
|
|
8914
|
+
minPrec: 0,
|
|
8596
8915
|
condition: (p) => {
|
|
8597
8916
|
const peek2 = p.peek;
|
|
8598
8917
|
return peek2 === "&" || peek2 === "\\\\" || peek2 === "\\cr";
|
|
@@ -8636,7 +8955,7 @@ var ComputeEngine = (() => {
|
|
|
8636
8955
|
}
|
|
8637
8956
|
/** Parse an environment: `\begin{env}...\end{end}`
|
|
8638
8957
|
*/
|
|
8639
|
-
parseEnvironment() {
|
|
8958
|
+
parseEnvironment(until) {
|
|
8640
8959
|
const index = this.index;
|
|
8641
8960
|
if (!this.match("\\begin"))
|
|
8642
8961
|
return null;
|
|
@@ -8644,22 +8963,22 @@ var ComputeEngine = (() => {
|
|
|
8644
8963
|
if (!name)
|
|
8645
8964
|
return this.error("expected-environment-name", index);
|
|
8646
8965
|
this.addBoundary(["\\end", "<{>", ...name.split(""), "<}>"]);
|
|
8647
|
-
const def
|
|
8648
|
-
|
|
8649
|
-
|
|
8650
|
-
|
|
8651
|
-
|
|
8652
|
-
|
|
8653
|
-
|
|
8654
|
-
|
|
8655
|
-
|
|
8966
|
+
for (const def of this.getDefs("environment"))
|
|
8967
|
+
if (def.identifierTrigger === name) {
|
|
8968
|
+
const expr = def.parse(this, until);
|
|
8969
|
+
this.skipSpace();
|
|
8970
|
+
if (!this.matchBoundary())
|
|
8971
|
+
return this.boundaryError("unbalanced-environment");
|
|
8972
|
+
if (expr !== null)
|
|
8973
|
+
return this.decorate(expr, index);
|
|
8974
|
+
this.index = index;
|
|
8975
|
+
return null;
|
|
8976
|
+
}
|
|
8977
|
+
this.parseTabular();
|
|
8656
8978
|
this.skipSpace();
|
|
8657
8979
|
if (!this.matchBoundary())
|
|
8658
8980
|
return this.boundaryError("unbalanced-environment");
|
|
8659
|
-
|
|
8660
|
-
return this.decorate(expr, index);
|
|
8661
|
-
this.index = index;
|
|
8662
|
-
return null;
|
|
8981
|
+
return this.error(["unknown-environment", { str: name }], index);
|
|
8663
8982
|
}
|
|
8664
8983
|
/** If the next token matches a `+` or `-` sign, return it and advance the index.
|
|
8665
8984
|
* Otherwise return `''` and do not advance */
|
|
@@ -8903,11 +9222,8 @@ var ComputeEngine = (() => {
|
|
|
8903
9222
|
until = { minPrec: 0 };
|
|
8904
9223
|
if (!until.minPrec)
|
|
8905
9224
|
until = { ...until, minPrec: 0 };
|
|
8906
|
-
const defs = this.peekDefinitions("prefix");
|
|
8907
|
-
if (defs === null)
|
|
8908
|
-
return null;
|
|
8909
9225
|
const start = this.index;
|
|
8910
|
-
for (const [def, n] of
|
|
9226
|
+
for (const [def, n] of this.peekDefinitions("prefix")) {
|
|
8911
9227
|
this.index = start + n;
|
|
8912
9228
|
const rhs = def.parse(this, until);
|
|
8913
9229
|
if (rhs)
|
|
@@ -8918,13 +9234,11 @@ var ComputeEngine = (() => {
|
|
|
8918
9234
|
}
|
|
8919
9235
|
parseInfixOperator(lhs, until) {
|
|
8920
9236
|
until ?? (until = { minPrec: 0 });
|
|
9237
|
+
/* @__PURE__ */ console.assert(until.minPrec !== void 0);
|
|
8921
9238
|
if (until.minPrec === void 0)
|
|
8922
9239
|
until = { ...until, minPrec: 0 };
|
|
8923
|
-
const defs = this.peekDefinitions("infix");
|
|
8924
|
-
if (defs === null)
|
|
8925
|
-
return null;
|
|
8926
9240
|
const start = this.index;
|
|
8927
|
-
for (const [def, n] of
|
|
9241
|
+
for (const [def, n] of this.peekDefinitions("infix")) {
|
|
8928
9242
|
if (def.precedence >= until.minPrec) {
|
|
8929
9243
|
this.index = start + n;
|
|
8930
9244
|
const rhs = def.parse(this, lhs, until);
|
|
@@ -8966,44 +9280,6 @@ var ComputeEngine = (() => {
|
|
|
8966
9280
|
this.index = savedIndex;
|
|
8967
9281
|
return null;
|
|
8968
9282
|
}
|
|
8969
|
-
/** A prime suffix is a sequence of `'`, `\prime` or `\doubleprime`
|
|
8970
|
-
* after a function or in a superscript.
|
|
8971
|
-
*/
|
|
8972
|
-
// matchPrimeSuffix(): number {
|
|
8973
|
-
// this.skipSpace();
|
|
8974
|
-
// const start = this.index;
|
|
8975
|
-
// let count = 0;
|
|
8976
|
-
// if (this.match('^')) {
|
|
8977
|
-
// if (this.match('<{>')) {
|
|
8978
|
-
// if (this.match('(')) {
|
|
8979
|
-
// const n = this.parseNumber();
|
|
8980
|
-
// if (n && this.match(')')) return parseInt(n);
|
|
8981
|
-
// this.index = start;
|
|
8982
|
-
// return 0;
|
|
8983
|
-
// }
|
|
8984
|
-
// do {
|
|
8985
|
-
// const c = countPrimeLevel(this);
|
|
8986
|
-
// if (c === 0) break;
|
|
8987
|
-
// count += c;
|
|
8988
|
-
// } while (true);
|
|
8989
|
-
// if (count !== 0 && this.match('<}>')) return count;
|
|
8990
|
-
// this.index = start;
|
|
8991
|
-
// return 0;
|
|
8992
|
-
// }
|
|
8993
|
-
// count = countPrimeLevel(this);
|
|
8994
|
-
// if (count !== 0) return count;
|
|
8995
|
-
// this.index = start;
|
|
8996
|
-
// return 0;
|
|
8997
|
-
// }
|
|
8998
|
-
// do {
|
|
8999
|
-
// const c = countPrimeLevel(this);
|
|
9000
|
-
// if (c === 0) break;
|
|
9001
|
-
// count += c;
|
|
9002
|
-
// } while (true);
|
|
9003
|
-
// if (count !== 0) return count;
|
|
9004
|
-
// this.index = start;
|
|
9005
|
-
// return 0;
|
|
9006
|
-
// }
|
|
9007
9283
|
/** If matches the normalized open delimiter, return the
|
|
9008
9284
|
* expected closing delimiter.
|
|
9009
9285
|
*
|
|
@@ -9059,9 +9335,7 @@ var ComputeEngine = (() => {
|
|
|
9059
9335
|
* @internal
|
|
9060
9336
|
*/
|
|
9061
9337
|
matchEnclosureOpen() {
|
|
9062
|
-
const defs = this.
|
|
9063
|
-
if (defs.length === 0)
|
|
9064
|
-
return null;
|
|
9338
|
+
const defs = this.getDefs("matchfix");
|
|
9065
9339
|
const start = this.index;
|
|
9066
9340
|
for (const def of defs) {
|
|
9067
9341
|
this.index = start;
|
|
@@ -9084,9 +9358,7 @@ var ComputeEngine = (() => {
|
|
|
9084
9358
|
* Used for error handling
|
|
9085
9359
|
* @internal */
|
|
9086
9360
|
matchEnclosureClose() {
|
|
9087
|
-
const defs = this.
|
|
9088
|
-
if (defs.length === 0)
|
|
9089
|
-
return null;
|
|
9361
|
+
const defs = this.getDefs("matchfix");
|
|
9090
9362
|
const start = this.index;
|
|
9091
9363
|
for (const def of defs) {
|
|
9092
9364
|
this.index = start;
|
|
@@ -9125,9 +9397,7 @@ var ComputeEngine = (() => {
|
|
|
9125
9397
|
* and finally a closing matching operator.
|
|
9126
9398
|
*/
|
|
9127
9399
|
parseEnclosure() {
|
|
9128
|
-
const defs = this.
|
|
9129
|
-
if (defs.length === 0)
|
|
9130
|
-
return null;
|
|
9400
|
+
const defs = this.getDefs("matchfix");
|
|
9131
9401
|
const start = this.index;
|
|
9132
9402
|
for (const def of defs) {
|
|
9133
9403
|
this.index = start;
|
|
@@ -9214,8 +9484,7 @@ var ComputeEngine = (() => {
|
|
|
9214
9484
|
return null;
|
|
9215
9485
|
const start = this.index;
|
|
9216
9486
|
let fn = null;
|
|
9217
|
-
const
|
|
9218
|
-
for (const [def, tokenCount] of fnDefs) {
|
|
9487
|
+
for (const [def, tokenCount] of this.peekDefinitions("function")) {
|
|
9219
9488
|
this.index = start + tokenCount;
|
|
9220
9489
|
if (typeof def.parse === "function") {
|
|
9221
9490
|
fn = def.parse(this, until);
|
|
@@ -9228,7 +9497,7 @@ var ComputeEngine = (() => {
|
|
|
9228
9497
|
}
|
|
9229
9498
|
if (fn === null) {
|
|
9230
9499
|
this.index = start;
|
|
9231
|
-
fn =
|
|
9500
|
+
fn = parseIdentifier(this);
|
|
9232
9501
|
if (!this.isFunctionHead(fn)) {
|
|
9233
9502
|
this.index = start;
|
|
9234
9503
|
return null;
|
|
@@ -9247,20 +9516,17 @@ var ComputeEngine = (() => {
|
|
|
9247
9516
|
if (this.atTerminator(until))
|
|
9248
9517
|
return null;
|
|
9249
9518
|
const start = this.index;
|
|
9250
|
-
const
|
|
9251
|
-
|
|
9252
|
-
|
|
9253
|
-
|
|
9254
|
-
if (
|
|
9255
|
-
|
|
9256
|
-
|
|
9257
|
-
|
|
9258
|
-
} else
|
|
9259
|
-
return def.name;
|
|
9260
|
-
}
|
|
9519
|
+
for (const [def, tokenCount] of this.peekDefinitions("symbol")) {
|
|
9520
|
+
this.index = start + tokenCount;
|
|
9521
|
+
if (typeof def.parse === "function") {
|
|
9522
|
+
const result = def.parse(this, until);
|
|
9523
|
+
if (result)
|
|
9524
|
+
return result;
|
|
9525
|
+
} else
|
|
9526
|
+
return def.name;
|
|
9261
9527
|
}
|
|
9262
9528
|
this.index = start;
|
|
9263
|
-
const id =
|
|
9529
|
+
const id = parseIdentifier(this);
|
|
9264
9530
|
if (id === null)
|
|
9265
9531
|
return null;
|
|
9266
9532
|
if (this.options.parseUnknownIdentifier?.(id, this) === "symbol")
|
|
@@ -9317,7 +9583,9 @@ var ComputeEngine = (() => {
|
|
|
9317
9583
|
}
|
|
9318
9584
|
let result = lhs;
|
|
9319
9585
|
if (subscripts.length > 0) {
|
|
9320
|
-
const defs = this.
|
|
9586
|
+
const defs = [...this.getDefs("infix")].filter(
|
|
9587
|
+
(x) => x.latexTrigger === "_"
|
|
9588
|
+
);
|
|
9321
9589
|
if (defs) {
|
|
9322
9590
|
const arg = [
|
|
9323
9591
|
"Subscript",
|
|
@@ -9335,7 +9603,9 @@ var ComputeEngine = (() => {
|
|
|
9335
9603
|
}
|
|
9336
9604
|
}
|
|
9337
9605
|
if (superscripts.length > 0) {
|
|
9338
|
-
const defs = this.
|
|
9606
|
+
const defs = [...this.getDefs("infix")].filter(
|
|
9607
|
+
(x) => x.latexTrigger === "^"
|
|
9608
|
+
);
|
|
9339
9609
|
if (defs) {
|
|
9340
9610
|
const arg = [
|
|
9341
9611
|
"Superscript",
|
|
@@ -9360,11 +9630,8 @@ var ComputeEngine = (() => {
|
|
|
9360
9630
|
/* @__PURE__ */ console.assert(lhs !== null);
|
|
9361
9631
|
if (lhs === null)
|
|
9362
9632
|
return null;
|
|
9363
|
-
const defs = this.peekDefinitions("postfix");
|
|
9364
|
-
if (defs === null)
|
|
9365
|
-
return null;
|
|
9366
9633
|
const start = this.index;
|
|
9367
|
-
for (const [def, n] of
|
|
9634
|
+
for (const [def, n] of this.peekDefinitions("postfix")) {
|
|
9368
9635
|
this.index = start + n;
|
|
9369
9636
|
const result = def.parse(this, lhs, until);
|
|
9370
9637
|
if (result !== null)
|
|
@@ -9428,14 +9695,14 @@ var ComputeEngine = (() => {
|
|
|
9428
9695
|
applyInvisibleOperator(until, lhs) {
|
|
9429
9696
|
if (lhs === null || this.options.applyInvisibleOperator === null || head(lhs) === "Error" || symbol(lhs) === "Nothing" || isEmptySequence(lhs) || this.atTerminator(until))
|
|
9430
9697
|
return null;
|
|
9698
|
+
if (this.peekDefinitions("operator").length > 0)
|
|
9699
|
+
return null;
|
|
9431
9700
|
if (this.isFunctionHead(lhs)) {
|
|
9432
|
-
const args = this.parseArguments("enclosure", until);
|
|
9701
|
+
const args = this.parseArguments("enclosure", { ...until, minPrec: 0 });
|
|
9433
9702
|
if (args === null)
|
|
9434
9703
|
return null;
|
|
9435
9704
|
return [lhs, ...args];
|
|
9436
9705
|
}
|
|
9437
|
-
if (this.peekDefinitions("operator") !== null)
|
|
9438
|
-
return null;
|
|
9439
9706
|
const start = this.index;
|
|
9440
9707
|
const rhs = this.parseExpression({ ...until, minPrec: 390 });
|
|
9441
9708
|
if (rhs === null || symbol(rhs) === "Nothing" || isEmptySequence(rhs)) {
|
|
@@ -9482,9 +9749,9 @@ var ComputeEngine = (() => {
|
|
|
9482
9749
|
parseUnexpectedLatexCommand() {
|
|
9483
9750
|
const start = this.index;
|
|
9484
9751
|
let opDefs = this.peekDefinitions("operator");
|
|
9485
|
-
if (opDefs) {
|
|
9752
|
+
if (opDefs.length > 0) {
|
|
9486
9753
|
opDefs = this.peekDefinitions("postfix");
|
|
9487
|
-
if (opDefs) {
|
|
9754
|
+
if (opDefs.length > 0) {
|
|
9488
9755
|
const [def, n] = opDefs[0];
|
|
9489
9756
|
this.index += n;
|
|
9490
9757
|
if (typeof def.parse === "function") {
|
|
@@ -9497,7 +9764,7 @@ var ComputeEngine = (() => {
|
|
|
9497
9764
|
return this.error("unexpected-operator", start);
|
|
9498
9765
|
}
|
|
9499
9766
|
opDefs = this.peekDefinitions("prefix");
|
|
9500
|
-
if (opDefs) {
|
|
9767
|
+
if (opDefs.length > 0) {
|
|
9501
9768
|
const [def, n] = opDefs[0];
|
|
9502
9769
|
this.index += n;
|
|
9503
9770
|
if (typeof def.parse === "function") {
|
|
@@ -9508,12 +9775,13 @@ var ComputeEngine = (() => {
|
|
|
9508
9775
|
if (def.name)
|
|
9509
9776
|
return [
|
|
9510
9777
|
def.name,
|
|
9778
|
+
// @todo: pass a precedence?
|
|
9511
9779
|
this.parseExpression() ?? this.error("missing", start)
|
|
9512
9780
|
];
|
|
9513
9781
|
return this.error("unexpected-operator", start);
|
|
9514
9782
|
}
|
|
9515
9783
|
opDefs = this.peekDefinitions("infix");
|
|
9516
|
-
if (opDefs) {
|
|
9784
|
+
if (opDefs.length > 0) {
|
|
9517
9785
|
const [def, n] = opDefs[0];
|
|
9518
9786
|
this.index += n;
|
|
9519
9787
|
if (typeof def.parse === "function") {
|
|
@@ -9607,7 +9875,10 @@ var ComputeEngine = (() => {
|
|
|
9607
9875
|
if (this.match("<}>"))
|
|
9608
9876
|
return this.error("unexpected-closing-delimiter", start);
|
|
9609
9877
|
if (this.match("<{>")) {
|
|
9610
|
-
result = this.parseExpression({
|
|
9878
|
+
result = this.parseExpression({
|
|
9879
|
+
minPrec: 0,
|
|
9880
|
+
condition: (p) => p.peek === "<}>"
|
|
9881
|
+
});
|
|
9611
9882
|
if (result === null)
|
|
9612
9883
|
return this.error("expected-expression", start);
|
|
9613
9884
|
if (!this.match("<}>")) {
|
|
@@ -9623,7 +9894,7 @@ var ComputeEngine = (() => {
|
|
|
9623
9894
|
result = { num };
|
|
9624
9895
|
}
|
|
9625
9896
|
result ?? (result = this.parseEnclosure());
|
|
9626
|
-
result ?? (result = this.parseEnvironment());
|
|
9897
|
+
result ?? (result = this.parseEnvironment(until));
|
|
9627
9898
|
if (result === null && this.matchAll(this._positiveInfinityTokens))
|
|
9628
9899
|
result = { num: "+Infinity" };
|
|
9629
9900
|
if (result === null && this.matchAll(this._negativeInfinityTokens))
|
|
@@ -9668,8 +9939,9 @@ var ComputeEngine = (() => {
|
|
|
9668
9939
|
return null;
|
|
9669
9940
|
}
|
|
9670
9941
|
until ?? (until = { minPrec: 0 });
|
|
9942
|
+
/* @__PURE__ */ console.assert(until.minPrec !== void 0);
|
|
9671
9943
|
if (until.minPrec === void 0)
|
|
9672
|
-
until
|
|
9944
|
+
until = { ...until, minPrec: 0 };
|
|
9673
9945
|
let lhs = this.parsePrefixOperator({ ...until, minPrec: 0 });
|
|
9674
9946
|
if (lhs === null) {
|
|
9675
9947
|
lhs = this.parsePrimary(until);
|
|
@@ -9738,7 +10010,28 @@ var ComputeEngine = (() => {
|
|
|
9738
10010
|
return true;
|
|
9739
10011
|
return false;
|
|
9740
10012
|
}
|
|
10013
|
+
/** Return all defs of the specified kind */
|
|
10014
|
+
*getDefs(kind) {
|
|
10015
|
+
if (kind === "operator") {
|
|
10016
|
+
for (const def of this._dictionary.defs)
|
|
10017
|
+
if (/^prefix|infix|postfix/.test(def.kind))
|
|
10018
|
+
yield def;
|
|
10019
|
+
} else {
|
|
10020
|
+
for (const def of this._dictionary.defs)
|
|
10021
|
+
if (def.kind === kind)
|
|
10022
|
+
yield def;
|
|
10023
|
+
}
|
|
10024
|
+
}
|
|
9741
10025
|
};
|
|
10026
|
+
function peekComplexId(parser, id) {
|
|
10027
|
+
const start = parser.index;
|
|
10028
|
+
const candidate = parseIdentifier(parser)?.trim();
|
|
10029
|
+
if (candidate === null)
|
|
10030
|
+
return 0;
|
|
10031
|
+
const result = candidate !== id ? 0 : parser.index - start;
|
|
10032
|
+
parser.index = start;
|
|
10033
|
+
return result;
|
|
10034
|
+
}
|
|
9742
10035
|
|
|
9743
10036
|
// src/compute-engine/latex-syntax/serialize-number.ts
|
|
9744
10037
|
function formatFractionalPart(m, options) {
|
|
@@ -9978,68 +10271,11 @@ var ComputeEngine = (() => {
|
|
|
9978
10271
|
// Unicode uses 'double-struck' for 'blackboard'
|
|
9979
10272
|
// Supplemental
|
|
9980
10273
|
blackboard: (s) => `\\mathbb{${s}}`,
|
|
9981
|
-
// boldItalic: (s) => `\\mathbf{\\mathit{${s}}}`,
|
|
9982
10274
|
calligraphic: (s) => `\\mathcal{${s}}`,
|
|
9983
|
-
// scriptBold: (s) => `\\mathbf{\\mathscr{${s}}}`,
|
|
9984
|
-
// calligraphicBold: (s) => `\\mathbf{\\mathcal{${s}}}`,
|
|
9985
10275
|
gothic: (s) => `\\mathfrak{${s}}`,
|
|
9986
|
-
|
|
9987
|
-
// frakturBold: (s) => `\\mathbf{\\mathfrak{${s}}}`,
|
|
9988
|
-
sansSerif: (s) => `\\mathsf{${s}}`,
|
|
9989
|
-
// sansSerifBold: (s) => `\\mathbf{\\mathsf{${s}}}`,
|
|
9990
|
-
// sansSerifItalic: (s) => `\\mathit{\\mathsf{${s}}}`,
|
|
10276
|
+
sansserif: (s) => `\\mathsf{${s}}`,
|
|
9991
10277
|
monospace: (s) => `\\mathtt{${s}}`
|
|
9992
10278
|
};
|
|
9993
|
-
function serializeOperator(serializer, expr, def) {
|
|
9994
|
-
let result = "";
|
|
9995
|
-
const count = nops(expr);
|
|
9996
|
-
const name = headName(expr);
|
|
9997
|
-
if (def.kind === "postfix") {
|
|
9998
|
-
if (count !== 1) {
|
|
9999
|
-
serializer.onError([
|
|
10000
|
-
{
|
|
10001
|
-
severity: "warning",
|
|
10002
|
-
message: [
|
|
10003
|
-
"postfix-operator-requires-one-operand",
|
|
10004
|
-
serializer.serializeSymbol(name)
|
|
10005
|
-
]
|
|
10006
|
-
}
|
|
10007
|
-
]);
|
|
10008
|
-
}
|
|
10009
|
-
return replaceLatex(def.serialize, [
|
|
10010
|
-
serializer.wrap(op(expr, 1), def.precedence)
|
|
10011
|
-
]);
|
|
10012
|
-
}
|
|
10013
|
-
if (def.kind === "prefix") {
|
|
10014
|
-
if (count !== 1) {
|
|
10015
|
-
serializer.onError([
|
|
10016
|
-
{
|
|
10017
|
-
severity: "warning",
|
|
10018
|
-
message: [
|
|
10019
|
-
"prefix-operator-requires-one-operand",
|
|
10020
|
-
serializer.serializeSymbol(name)
|
|
10021
|
-
]
|
|
10022
|
-
}
|
|
10023
|
-
]);
|
|
10024
|
-
}
|
|
10025
|
-
return replaceLatex(def.serialize, [
|
|
10026
|
-
serializer.wrap(op(expr, 1), def.precedence + 1)
|
|
10027
|
-
]);
|
|
10028
|
-
}
|
|
10029
|
-
if (def.kind === "infix") {
|
|
10030
|
-
result = serializer.wrap(op(expr, 1), def.precedence);
|
|
10031
|
-
for (let i = 2; i < count + 1; i++) {
|
|
10032
|
-
const arg = op(expr, i);
|
|
10033
|
-
if (arg !== null) {
|
|
10034
|
-
result = replaceLatex(def.serialize, [
|
|
10035
|
-
result,
|
|
10036
|
-
serializer.wrap(arg, def.precedence)
|
|
10037
|
-
]);
|
|
10038
|
-
}
|
|
10039
|
-
}
|
|
10040
|
-
}
|
|
10041
|
-
return result;
|
|
10042
|
-
}
|
|
10043
10279
|
var Serializer = class {
|
|
10044
10280
|
constructor(options, dictionary2, onError) {
|
|
10045
10281
|
this.level = -1;
|
|
@@ -10081,7 +10317,7 @@ var ComputeEngine = (() => {
|
|
|
10081
10317
|
}
|
|
10082
10318
|
const name = head(expr);
|
|
10083
10319
|
if (typeof name === "string" && name !== "Delimiter" && name !== "Subscript") {
|
|
10084
|
-
const def = this.dictionary.
|
|
10320
|
+
const def = this.dictionary.ids.get(name);
|
|
10085
10321
|
if (def && (def.kind === "symbol" || def.kind === "prefix" || def.kind === "infix" || def.kind === "postfix") && def.precedence < prec)
|
|
10086
10322
|
return this.wrapString(
|
|
10087
10323
|
this.serialize(expr),
|
|
@@ -10138,42 +10374,37 @@ var ComputeEngine = (() => {
|
|
|
10138
10374
|
);
|
|
10139
10375
|
}
|
|
10140
10376
|
serializeSymbol(expr, def) {
|
|
10141
|
-
const h = head(expr);
|
|
10142
|
-
if (h)
|
|
10143
|
-
return this.serializeFunction(expr, def);
|
|
10144
10377
|
/* @__PURE__ */ console.assert(typeof expr === "string" || isSymbolObject(expr));
|
|
10145
|
-
if (
|
|
10146
|
-
return
|
|
10147
|
-
|
|
10148
|
-
|
|
10149
|
-
return serializeIdentifier(symbol(expr)) ?? "";
|
|
10378
|
+
if (def?.kind === "function") {
|
|
10379
|
+
return serializeIdentifier(symbol(expr) ?? "") ?? "";
|
|
10380
|
+
}
|
|
10381
|
+
return def?.serialize?.(this, expr) ?? serializeIdentifier(symbol(expr)) ?? "";
|
|
10150
10382
|
}
|
|
10151
10383
|
serializeFunction(expr, def) {
|
|
10384
|
+
if (def?.serialize)
|
|
10385
|
+
return def.serialize(this, expr);
|
|
10152
10386
|
const h = head(expr);
|
|
10153
|
-
if (
|
|
10154
|
-
return this.
|
|
10387
|
+
if (typeof h === "string")
|
|
10388
|
+
return serializeIdentifier(h, "auto") + this.wrapArguments(expr);
|
|
10155
10389
|
const args = ops(expr) ?? [];
|
|
10156
|
-
if (
|
|
10157
|
-
if (typeof def.serialize === "function")
|
|
10158
|
-
return def.serialize(this, expr);
|
|
10390
|
+
if (args.length === 1) {
|
|
10159
10391
|
return joinLatex([
|
|
10160
|
-
|
|
10161
|
-
|
|
10392
|
+
this.serialize(args[0]),
|
|
10393
|
+
"\\rhd",
|
|
10394
|
+
this.wrapString(
|
|
10395
|
+
this.serialize(h),
|
|
10396
|
+
this.options.applyFunctionStyle(expr, this.level)
|
|
10397
|
+
)
|
|
10162
10398
|
]);
|
|
10163
10399
|
}
|
|
10164
|
-
if (typeof h === "string" && h.length > 0 && h[0] === "\\") {
|
|
10165
|
-
return joinLatex([h, ...args.map((x) => `{${this.serialize(x)}}`)]);
|
|
10166
|
-
}
|
|
10167
|
-
if (typeof h === "string") {
|
|
10168
|
-
if (h.length === 1)
|
|
10169
|
-
return serializeIdentifier(h) + this.wrapArguments(expr);
|
|
10170
|
-
return serializeIdentifier(h, "upright") + this.wrapArguments(expr);
|
|
10171
|
-
}
|
|
10172
10400
|
const style = this.options.applyFunctionStyle(expr, this.level);
|
|
10173
|
-
return
|
|
10174
|
-
|
|
10175
|
-
|
|
10176
|
-
|
|
10401
|
+
return joinLatex([
|
|
10402
|
+
"\\operatorname{apply}",
|
|
10403
|
+
this.wrapString(
|
|
10404
|
+
this.serialize(h) + ", " + this.serialize(["List", ...args]),
|
|
10405
|
+
style
|
|
10406
|
+
)
|
|
10407
|
+
]);
|
|
10177
10408
|
}
|
|
10178
10409
|
serializeDictionary(dict) {
|
|
10179
10410
|
return `\\left\\lbrack\\begin{array}{lll}${Object.keys(dict).map((x) => {
|
|
@@ -10192,37 +10423,22 @@ var ComputeEngine = (() => {
|
|
|
10192
10423
|
const s = stringValue(expr);
|
|
10193
10424
|
if (s !== null)
|
|
10194
10425
|
return `\\text{${s}}`;
|
|
10195
|
-
const symbolName = symbol(expr);
|
|
10196
|
-
if (symbolName !== null) {
|
|
10197
|
-
const def = this.dictionary.name.get(symbolName);
|
|
10198
|
-
if (def?.kind === "symbol")
|
|
10199
|
-
return this.serializeSymbol(expr, def);
|
|
10200
|
-
if (def?.kind === "function")
|
|
10201
|
-
return this.serializeFunction(expr, def);
|
|
10202
|
-
if (typeof def?.serialize === "function")
|
|
10203
|
-
return def.serialize(this, expr);
|
|
10204
|
-
}
|
|
10205
10426
|
const dict = dictionary(expr);
|
|
10206
10427
|
if (dict !== null)
|
|
10207
10428
|
return this.serializeDictionary(dict);
|
|
10429
|
+
const symbolName = symbol(expr);
|
|
10430
|
+
if (symbolName !== null) {
|
|
10431
|
+
return this.serializeSymbol(
|
|
10432
|
+
expr,
|
|
10433
|
+
this.dictionary.ids.get(symbolName)
|
|
10434
|
+
);
|
|
10435
|
+
}
|
|
10208
10436
|
const fnName = headName(expr);
|
|
10209
10437
|
if (fnName) {
|
|
10210
|
-
|
|
10211
|
-
if (def) {
|
|
10212
|
-
if (typeof def.serialize === "function")
|
|
10213
|
-
return def.serialize(this, expr);
|
|
10214
|
-
if (def.kind === "infix" || def.kind === "postfix" || def.kind === "prefix")
|
|
10215
|
-
return serializeOperator(this, expr, def);
|
|
10216
|
-
if (def.kind === "symbol")
|
|
10217
|
-
return this.serializeSymbol(expr, def);
|
|
10218
|
-
if (def.kind === "function")
|
|
10219
|
-
return this.serializeFunction(expr, def);
|
|
10220
|
-
return "";
|
|
10221
|
-
}
|
|
10222
|
-
}
|
|
10223
|
-
if (symbolName !== null || Array.isArray(expr) || isFunctionObject(expr)) {
|
|
10224
|
-
return this.serializeSymbol(expr);
|
|
10438
|
+
return this.serializeFunction(expr, this.dictionary.ids.get(fnName));
|
|
10225
10439
|
}
|
|
10440
|
+
if (head(expr) !== null)
|
|
10441
|
+
return this.serializeFunction(expr);
|
|
10226
10442
|
this.onError([
|
|
10227
10443
|
{
|
|
10228
10444
|
severity: "warning",
|
|
@@ -10262,22 +10478,6 @@ var ComputeEngine = (() => {
|
|
|
10262
10478
|
return this.options.numericSetStyle(expr, level);
|
|
10263
10479
|
}
|
|
10264
10480
|
};
|
|
10265
|
-
function replaceLatex(template, replacement) {
|
|
10266
|
-
/* @__PURE__ */ console.assert(typeof template === "string");
|
|
10267
|
-
/* @__PURE__ */ console.assert(template.length > 0);
|
|
10268
|
-
let result = template;
|
|
10269
|
-
for (let i = 0; i < replacement.length; i++) {
|
|
10270
|
-
let s = replacement[i] ?? "";
|
|
10271
|
-
if (/[a-zA-Z*]/.test(s[0])) {
|
|
10272
|
-
const m = result.match(new RegExp("(.*)#" + Number(i + 1).toString()));
|
|
10273
|
-
if (m && /\\[a-zA-Z*]+/.test(m[1])) {
|
|
10274
|
-
s = " " + s;
|
|
10275
|
-
}
|
|
10276
|
-
}
|
|
10277
|
-
result = result.replace("#" + Number(i + 1).toString(), s);
|
|
10278
|
-
}
|
|
10279
|
-
return result;
|
|
10280
|
-
}
|
|
10281
10481
|
function specialName(s) {
|
|
10282
10482
|
const prefix = s.match(/^([^_]+)/)?.[1] ?? "";
|
|
10283
10483
|
let i = SYMBOLS.findIndex((x) => prefix === x[0]);
|
|
@@ -10353,7 +10553,7 @@ var ComputeEngine = (() => {
|
|
|
10353
10553
|
}
|
|
10354
10554
|
return [body, accent, styles, rest];
|
|
10355
10555
|
}
|
|
10356
|
-
function
|
|
10556
|
+
function parseIdentifierBody2(s, topLevel = true, style = "auto") {
|
|
10357
10557
|
let [body, accents, styles, rest] = parseModifiers(s);
|
|
10358
10558
|
for (const accent of accents) {
|
|
10359
10559
|
if (ACCENT_MODIFIERS[accent])
|
|
@@ -10369,7 +10569,7 @@ var ComputeEngine = (() => {
|
|
|
10369
10569
|
}
|
|
10370
10570
|
while (rest.length > 0) {
|
|
10371
10571
|
if (rest.startsWith("__")) {
|
|
10372
|
-
const [sup, rest2] =
|
|
10572
|
+
const [sup, rest2] = parseIdentifierBody2(
|
|
10373
10573
|
rest.substring(2),
|
|
10374
10574
|
false,
|
|
10375
10575
|
"none"
|
|
@@ -10377,7 +10577,7 @@ var ComputeEngine = (() => {
|
|
|
10377
10577
|
sups.push(sup);
|
|
10378
10578
|
rest = rest2;
|
|
10379
10579
|
} else if (rest.startsWith("_")) {
|
|
10380
|
-
const [sub2, rest2] =
|
|
10580
|
+
const [sub2, rest2] = parseIdentifierBody2(
|
|
10381
10581
|
rest.substring(1),
|
|
10382
10582
|
false,
|
|
10383
10583
|
"none"
|
|
@@ -10416,19 +10616,19 @@ var ComputeEngine = (() => {
|
|
|
10416
10616
|
}
|
|
10417
10617
|
return [body, rest];
|
|
10418
10618
|
}
|
|
10419
|
-
function serializeIdentifier(s,
|
|
10619
|
+
function serializeIdentifier(s, style = "auto") {
|
|
10420
10620
|
if (s === null)
|
|
10421
10621
|
return null;
|
|
10422
10622
|
if (ONLY_EMOJIS.test(s))
|
|
10423
10623
|
return s;
|
|
10424
10624
|
const m = s.match(/^(_+)(.*)/);
|
|
10425
10625
|
if (m) {
|
|
10426
|
-
const [body2, rest2] =
|
|
10427
|
-
return `\\
|
|
10626
|
+
const [body2, rest2] = parseIdentifierBody2(m[2], true, "none");
|
|
10627
|
+
return `\\operatorname{${"\\_".repeat(m[1].length) + body2 + rest2}}`;
|
|
10428
10628
|
}
|
|
10429
|
-
const [body, rest] =
|
|
10629
|
+
const [body, rest] = parseIdentifierBody2(s, true, style);
|
|
10430
10630
|
if (rest.length > 0)
|
|
10431
|
-
return `\\
|
|
10631
|
+
return `\\operatorname{${s}}`;
|
|
10432
10632
|
return body;
|
|
10433
10633
|
}
|
|
10434
10634
|
|
|
@@ -10518,7 +10718,7 @@ var ComputeEngine = (() => {
|
|
|
10518
10718
|
let expr = parser.parseExpression();
|
|
10519
10719
|
if (!parser.atEnd) {
|
|
10520
10720
|
const opDefs = parser.peekDefinitions("infix");
|
|
10521
|
-
if (opDefs) {
|
|
10721
|
+
if (opDefs.length > 0) {
|
|
10522
10722
|
const start = parser.index;
|
|
10523
10723
|
const [def, n] = opDefs[0];
|
|
10524
10724
|
parser.index += n;
|
|
@@ -10539,20 +10739,23 @@ var ComputeEngine = (() => {
|
|
|
10539
10739
|
parser.index = start;
|
|
10540
10740
|
}
|
|
10541
10741
|
const index = parser.index;
|
|
10542
|
-
const id =
|
|
10742
|
+
const id = parseIdentifier(parser);
|
|
10543
10743
|
if (id) {
|
|
10544
10744
|
const idError = parser.error(["unexpected-identifier", id], index);
|
|
10545
10745
|
return expr ? ["Sequence", expr, idError] : idError;
|
|
10546
10746
|
}
|
|
10747
|
+
let openDelimiter = parser.peek;
|
|
10547
10748
|
const closeDelimiter = parser.matchEnclosureOpen();
|
|
10548
10749
|
if (closeDelimiter) {
|
|
10750
|
+
parser.parseExpression();
|
|
10751
|
+
parser.match(closeDelimiter);
|
|
10549
10752
|
const enclosureError = parser.error(
|
|
10550
|
-
["
|
|
10753
|
+
["unexpected-open-delimiter", { str: openDelimiter }],
|
|
10551
10754
|
index
|
|
10552
10755
|
);
|
|
10553
10756
|
return expr ? ["Sequence", expr, enclosureError] : enclosureError;
|
|
10554
10757
|
}
|
|
10555
|
-
|
|
10758
|
+
openDelimiter = parser.matchEnclosureClose();
|
|
10556
10759
|
if (openDelimiter) {
|
|
10557
10760
|
const enclosureError = parser.error(
|
|
10558
10761
|
["expected-open-delimiter", { str: openDelimiter }],
|
|
@@ -11700,6 +11903,9 @@ var ComputeEngine = (() => {
|
|
|
11700
11903
|
[a, b] = [b, a % b];
|
|
11701
11904
|
return a < 0 ? -a : a;
|
|
11702
11905
|
}
|
|
11906
|
+
function lcm(a, b) {
|
|
11907
|
+
return a * b / gcd(a, b);
|
|
11908
|
+
}
|
|
11703
11909
|
function factorial(n) {
|
|
11704
11910
|
if (!Number.isInteger(n) || n < 0)
|
|
11705
11911
|
return NaN;
|
|
@@ -13181,11 +13387,79 @@ var ComputeEngine = (() => {
|
|
|
13181
13387
|
// src/compute-engine/boxed-expression/abstract-boxed-expression.ts
|
|
13182
13388
|
var import_complex6 = __toESM(require_complex());
|
|
13183
13389
|
|
|
13390
|
+
// src/compute-engine/library/utils.ts
|
|
13391
|
+
function isSymbolDefinition(def) {
|
|
13392
|
+
return !!def && typeof def === "object" && ("domain" in def || "value" in def || "constant" in def);
|
|
13393
|
+
}
|
|
13394
|
+
function isFunctionDefinition(def) {
|
|
13395
|
+
if (def === void 0 || def === null)
|
|
13396
|
+
return false;
|
|
13397
|
+
if (typeof def !== "object")
|
|
13398
|
+
return false;
|
|
13399
|
+
if ("complexity" in def || "numeric" in def || "signature" in def)
|
|
13400
|
+
return true;
|
|
13401
|
+
if (!("domain" in def))
|
|
13402
|
+
return false;
|
|
13403
|
+
if (def.domain === void 0)
|
|
13404
|
+
return false;
|
|
13405
|
+
if (typeof def.domain === "string")
|
|
13406
|
+
return def.domain === "Function";
|
|
13407
|
+
return def.domain.isFunction;
|
|
13408
|
+
}
|
|
13409
|
+
function normalizeLimits(range) {
|
|
13410
|
+
let lower = 1;
|
|
13411
|
+
let upper = lower + MAX_ITERATION;
|
|
13412
|
+
let index = "Nothing";
|
|
13413
|
+
let isFinite2 = true;
|
|
13414
|
+
if (range.head === "Tuple" || range.head === "Triple" || range.head === "Pair" || range.head === "Single") {
|
|
13415
|
+
index = (range.op1.head === "Hold" ? range.op1.op1.symbol : range.op1.symbol) ?? "Nothing";
|
|
13416
|
+
lower = asSmallInteger(range.op2) ?? 1;
|
|
13417
|
+
if (!Number.isFinite(lower))
|
|
13418
|
+
isFinite2 = false;
|
|
13419
|
+
if (range.op3.isNothing || range.op3.isInfinity) {
|
|
13420
|
+
isFinite2 = false;
|
|
13421
|
+
} else {
|
|
13422
|
+
const u = asSmallInteger(range.op3);
|
|
13423
|
+
if (u === null)
|
|
13424
|
+
isFinite2 = false;
|
|
13425
|
+
else {
|
|
13426
|
+
upper = u;
|
|
13427
|
+
if (!Number.isFinite(upper))
|
|
13428
|
+
isFinite2 = false;
|
|
13429
|
+
}
|
|
13430
|
+
}
|
|
13431
|
+
if (!isFinite2 && Number.isFinite(lower))
|
|
13432
|
+
upper = lower + MAX_ITERATION;
|
|
13433
|
+
}
|
|
13434
|
+
return [index, lower, upper, isFinite2];
|
|
13435
|
+
}
|
|
13436
|
+
|
|
13184
13437
|
// src/compute-engine/compile.ts
|
|
13438
|
+
var ComputeEngineFunction = class extends Function {
|
|
13439
|
+
constructor(body) {
|
|
13440
|
+
super("_SYS", "_", `return ${body}`);
|
|
13441
|
+
this.sys = {
|
|
13442
|
+
factorial,
|
|
13443
|
+
gamma,
|
|
13444
|
+
lngamma,
|
|
13445
|
+
gcd,
|
|
13446
|
+
lcm,
|
|
13447
|
+
chop
|
|
13448
|
+
};
|
|
13449
|
+
return new Proxy(this, {
|
|
13450
|
+
apply: (target, thisArg, argumentsList) => super.apply(thisArg, [this.sys, ...argumentsList]),
|
|
13451
|
+
get: (target, prop) => {
|
|
13452
|
+
if (prop === "toString")
|
|
13453
|
+
return () => body;
|
|
13454
|
+
return target[prop];
|
|
13455
|
+
}
|
|
13456
|
+
});
|
|
13457
|
+
}
|
|
13458
|
+
};
|
|
13185
13459
|
function compileToJavascript(expr) {
|
|
13186
13460
|
const js = compile(expr, expr.freeVars);
|
|
13187
13461
|
try {
|
|
13188
|
-
return new
|
|
13462
|
+
return new ComputeEngineFunction(js);
|
|
13189
13463
|
} catch (e) {
|
|
13190
13464
|
console.error(`${e}
|
|
13191
13465
|
${expr.latex}
|
|
@@ -13206,7 +13480,12 @@ ${js}`);
|
|
|
13206
13480
|
ExponentialE: "Math.E",
|
|
13207
13481
|
I: "Math.I",
|
|
13208
13482
|
NaN: "Number.NaN",
|
|
13209
|
-
ImaginaryUnit: "NaN"
|
|
13483
|
+
ImaginaryUnit: "NaN",
|
|
13484
|
+
Half: "0.5",
|
|
13485
|
+
MachineEpsilon: "Number.EPSILON",
|
|
13486
|
+
GoldenRatio: "((1 + Math.sqrt(5)) / 2)",
|
|
13487
|
+
CatalanConstant: "0.91596559417721901",
|
|
13488
|
+
EulerGamma: "0.57721566490153286"
|
|
13210
13489
|
}[s];
|
|
13211
13490
|
if (result !== void 0)
|
|
13212
13491
|
return result;
|
|
@@ -13235,9 +13514,8 @@ ${js}`);
|
|
|
13235
13514
|
return "";
|
|
13236
13515
|
return `-${compile(arg, freeVars, 3)}`;
|
|
13237
13516
|
}
|
|
13238
|
-
if (h === "Error")
|
|
13239
|
-
|
|
13240
|
-
}
|
|
13517
|
+
if (h === "Error")
|
|
13518
|
+
throw new Error("Error");
|
|
13241
13519
|
if (h === "Sum")
|
|
13242
13520
|
return compileLoop(expr, "+");
|
|
13243
13521
|
if (h === "Product")
|
|
@@ -13245,7 +13523,7 @@ ${js}`);
|
|
|
13245
13523
|
if (h === "Root") {
|
|
13246
13524
|
const arg = expr.op1;
|
|
13247
13525
|
if (arg === null)
|
|
13248
|
-
|
|
13526
|
+
throw new Error("Root: no argument");
|
|
13249
13527
|
const exp2 = expr.op2;
|
|
13250
13528
|
if (exp2 === null)
|
|
13251
13529
|
return `Math.sqrt(${compile(arg, freeVars, 0)})`;
|
|
@@ -13254,24 +13532,63 @@ ${js}`);
|
|
|
13254
13532
|
if (h === "Factorial") {
|
|
13255
13533
|
const arg = expr.op1;
|
|
13256
13534
|
if (arg === null)
|
|
13257
|
-
|
|
13258
|
-
return
|
|
13535
|
+
throw new Error("Factorial: no argument");
|
|
13536
|
+
return `_SYS.factorial(${compile(arg, freeVars)})`;
|
|
13537
|
+
}
|
|
13538
|
+
if (h === "Power") {
|
|
13539
|
+
const arg = expr.op1;
|
|
13540
|
+
if (arg === null)
|
|
13541
|
+
throw new Error("Power: no argument");
|
|
13542
|
+
const exp2 = asFloat(expr.op2);
|
|
13543
|
+
if (exp2 === 0.5)
|
|
13544
|
+
return `Math.sqrt(${compile(arg, freeVars)})`;
|
|
13545
|
+
if (exp2 === 1 / 3)
|
|
13546
|
+
return `Math.cbrt(${compile(arg, freeVars)})`;
|
|
13547
|
+
if (exp2 === 1)
|
|
13548
|
+
return compile(arg, freeVars);
|
|
13549
|
+
if (exp2 === -1)
|
|
13550
|
+
return `1 / ${compile(arg, freeVars)}`;
|
|
13551
|
+
if (exp2 === -0.5)
|
|
13552
|
+
return `1 / Math.sqrt(${compile(arg, freeVars)})`;
|
|
13553
|
+
}
|
|
13554
|
+
if (h === "Square") {
|
|
13555
|
+
const arg = expr.op1;
|
|
13556
|
+
if (arg === null)
|
|
13557
|
+
throw new Error("Square: no argument");
|
|
13558
|
+
return `Math.pow(${compile(arg, freeVars)}, 2)`;
|
|
13259
13559
|
}
|
|
13260
13560
|
const OPS = {
|
|
13261
|
-
Add: ["+",
|
|
13262
|
-
|
|
13263
|
-
|
|
13264
|
-
|
|
13561
|
+
Add: ["+", 11],
|
|
13562
|
+
Negate: ["-", 14],
|
|
13563
|
+
// Unary operator
|
|
13564
|
+
Subtract: ["-", 11],
|
|
13565
|
+
Multiply: ["*", 12],
|
|
13566
|
+
Divide: ["/", 13],
|
|
13567
|
+
Equal: ["===", 8],
|
|
13568
|
+
NotEqual: ["!==", 8],
|
|
13569
|
+
LessEqual: ["<=", 9],
|
|
13570
|
+
GreaterEqual: [">=", 9],
|
|
13571
|
+
Less: ["<", 9],
|
|
13572
|
+
Greater: [">", 9],
|
|
13573
|
+
And: ["&&", 4],
|
|
13574
|
+
Or: ["||", 3],
|
|
13575
|
+
Not: ["!", 14]
|
|
13576
|
+
// Unary operator
|
|
13577
|
+
// Xor: ['^', 6], // That's bitwise XOR, not logical XOR
|
|
13578
|
+
// Possible solution is to use `a ? !b : b` instead of `a ^ b`
|
|
13265
13579
|
};
|
|
13266
13580
|
const op3 = OPS[h];
|
|
13267
13581
|
if (op3 !== void 0) {
|
|
13268
13582
|
const args2 = expr.ops;
|
|
13269
13583
|
if (args2 === null)
|
|
13270
13584
|
return "";
|
|
13271
|
-
|
|
13272
|
-
|
|
13273
|
-
|
|
13274
|
-
|
|
13585
|
+
let resultStr;
|
|
13586
|
+
if (args2.length === 1) {
|
|
13587
|
+
resultStr = `${op3[0]}${compile(args2[0], freeVars, op3[1])}`;
|
|
13588
|
+
} else {
|
|
13589
|
+
resultStr = args2.map((arg) => compile(arg, freeVars, op3[1])).join(` ${op3[0]} `);
|
|
13590
|
+
}
|
|
13591
|
+
return op3[1] < prec ? `(${resultStr})` : resultStr;
|
|
13275
13592
|
}
|
|
13276
13593
|
const fn = {
|
|
13277
13594
|
Abs: "Math.abs",
|
|
@@ -13283,13 +13600,18 @@ ${js}`);
|
|
|
13283
13600
|
Artanh: "Math.atanh",
|
|
13284
13601
|
// Math.cbrt
|
|
13285
13602
|
Ceiling: "Math.ceil",
|
|
13603
|
+
Chop: "_SYS.chop",
|
|
13286
13604
|
Cos: "Math.cos",
|
|
13287
13605
|
Cosh: "Math.cosh",
|
|
13288
13606
|
Exp: "Math.exp",
|
|
13289
13607
|
Floor: "Math.floor",
|
|
13608
|
+
Gamma: "_SYS.gamma",
|
|
13609
|
+
Gcd: "_SYS.gcd",
|
|
13290
13610
|
// Math.hypot
|
|
13611
|
+
Lcm: "_SYS.lcm",
|
|
13291
13612
|
Ln: "Math.log",
|
|
13292
13613
|
Log: "Math.log10",
|
|
13614
|
+
LogGamma: "_SYS.lngamma",
|
|
13293
13615
|
Lb: "Math.log2",
|
|
13294
13616
|
Max: "Math.max",
|
|
13295
13617
|
Min: "Math.min",
|
|
@@ -13323,7 +13645,7 @@ ${js}`);
|
|
|
13323
13645
|
// Erfi: 'Math.erfi',
|
|
13324
13646
|
// Zeta: 'Math.zeta',
|
|
13325
13647
|
// PolyGamma: 'Math.polygamma',
|
|
13326
|
-
// HurwitzZeta: 'Math.hurwitzZeta',
|
|
13648
|
+
// HurwitzZeta: 'Math.hurwitzZeta', $$\zeta (s,a)=\sum _{n=0}^{\infty }{\frac {1}{(n+a)^{s}}}$$
|
|
13327
13649
|
// DirichletEta: 'Math.dirichletEta',
|
|
13328
13650
|
// Beta: 'Math.beta',
|
|
13329
13651
|
// Binomial: 'Math.binomial',
|
|
@@ -13396,7 +13718,7 @@ ${js}`);
|
|
|
13396
13718
|
if (args !== null) {
|
|
13397
13719
|
const result = [];
|
|
13398
13720
|
for (const arg of args)
|
|
13399
|
-
result.push(compile(arg, freeVars
|
|
13721
|
+
result.push(compile(arg, freeVars));
|
|
13400
13722
|
return `${fn}(${result.join(", ")})`;
|
|
13401
13723
|
}
|
|
13402
13724
|
}
|
|
@@ -13405,18 +13727,18 @@ ${js}`);
|
|
|
13405
13727
|
function compileLoop(expr, op3) {
|
|
13406
13728
|
const args = expr.ops;
|
|
13407
13729
|
if (args === null)
|
|
13408
|
-
|
|
13730
|
+
throw new Error("Sum: no arguments");
|
|
13409
13731
|
if (!expr.op1 || !expr.op2)
|
|
13410
|
-
|
|
13732
|
+
throw new Error("Sum: no limits");
|
|
13411
13733
|
const [index, lower, upper, isFinite2] = normalizeLimits(expr.op2);
|
|
13412
13734
|
const fn = compile(expr.op1, [...expr.op1.freeVars, index], 0);
|
|
13413
|
-
return `((
|
|
13414
|
-
|
|
13415
|
-
|
|
13416
|
-
|
|
13417
|
-
|
|
13418
|
-
|
|
13419
|
-
|
|
13735
|
+
return `(() => {
|
|
13736
|
+
let acc = ${op3 === "+" ? "0" : "1"};
|
|
13737
|
+
const fn = (_) => ${fn};
|
|
13738
|
+
for (let i = ${lower}; i <= ${upper}; i++)
|
|
13739
|
+
acc ${op3}= fn({ ..._, ${index}: i });
|
|
13740
|
+
return acc;
|
|
13741
|
+
})()`;
|
|
13420
13742
|
}
|
|
13421
13743
|
|
|
13422
13744
|
// src/compute-engine/boxed-expression/abstract-boxed-expression.ts
|
|
@@ -13744,8 +14066,20 @@ ${js}`);
|
|
|
13744
14066
|
N(_options) {
|
|
13745
14067
|
return this.evaluate();
|
|
13746
14068
|
}
|
|
13747
|
-
compile() {
|
|
13748
|
-
|
|
14069
|
+
compile(to = "javascript", options) {
|
|
14070
|
+
if (to !== "javascript")
|
|
14071
|
+
return void 0;
|
|
14072
|
+
options ?? (options = { optimize: ["simplify", "evaluate"] });
|
|
14073
|
+
let expr = this;
|
|
14074
|
+
if (options.optimize.includes("simplify"))
|
|
14075
|
+
expr = expr.simplify();
|
|
14076
|
+
if (options.optimize.includes("evaluate"))
|
|
14077
|
+
expr = expr.evaluate();
|
|
14078
|
+
try {
|
|
14079
|
+
return compileToJavascript(expr);
|
|
14080
|
+
} catch (e) {
|
|
14081
|
+
}
|
|
14082
|
+
return void 0;
|
|
13749
14083
|
}
|
|
13750
14084
|
};
|
|
13751
14085
|
|
|
@@ -15578,33 +15912,6 @@ ${js}`);
|
|
|
15578
15912
|
ce.context = savedContext;
|
|
15579
15913
|
return result ?? void 0;
|
|
15580
15914
|
}
|
|
15581
|
-
function normalizeLimits(range) {
|
|
15582
|
-
let lower = 1;
|
|
15583
|
-
let upper = lower + MAX_ITERATION;
|
|
15584
|
-
let index = "Nothing";
|
|
15585
|
-
let isFinite2 = true;
|
|
15586
|
-
if (range.head === "Tuple" || range.head === "Triple" || range.head === "Pair" || range.head === "Single") {
|
|
15587
|
-
index = (range.op1.head === "Hold" ? range.op1.op1.symbol : range.op1.symbol) ?? "Nothing";
|
|
15588
|
-
lower = asSmallInteger(range.op2) ?? 1;
|
|
15589
|
-
if (!Number.isFinite(lower))
|
|
15590
|
-
isFinite2 = false;
|
|
15591
|
-
if (range.op3.isNothing || range.op3.isInfinity) {
|
|
15592
|
-
isFinite2 = false;
|
|
15593
|
-
} else {
|
|
15594
|
-
const u = asSmallInteger(range.op3);
|
|
15595
|
-
if (u === null)
|
|
15596
|
-
isFinite2 = false;
|
|
15597
|
-
else {
|
|
15598
|
-
upper = u;
|
|
15599
|
-
if (!Number.isFinite(upper))
|
|
15600
|
-
isFinite2 = false;
|
|
15601
|
-
}
|
|
15602
|
-
}
|
|
15603
|
-
if (!isFinite2 && Number.isFinite(lower))
|
|
15604
|
-
upper = lower + MAX_ITERATION;
|
|
15605
|
-
}
|
|
15606
|
-
return [index, lower, upper, isFinite2];
|
|
15607
|
-
}
|
|
15608
15915
|
|
|
15609
15916
|
// src/compute-engine/symbolic/negate.ts
|
|
15610
15917
|
var import_complex9 = __toESM(require_complex());
|
|
@@ -19057,7 +19364,7 @@ ${js}`);
|
|
|
19057
19364
|
}
|
|
19058
19365
|
},
|
|
19059
19366
|
Erf: {
|
|
19060
|
-
description: "
|
|
19367
|
+
description: "Error Function",
|
|
19061
19368
|
complexity: 7500
|
|
19062
19369
|
},
|
|
19063
19370
|
Erfc: {
|
|
@@ -19065,7 +19372,7 @@ ${js}`);
|
|
|
19065
19372
|
complexity: 7500
|
|
19066
19373
|
},
|
|
19067
19374
|
Factorial: {
|
|
19068
|
-
description: "
|
|
19375
|
+
description: "Factorial Function",
|
|
19069
19376
|
wikidata: "Q120976",
|
|
19070
19377
|
complexity: 9e3,
|
|
19071
19378
|
signature: {
|
|
@@ -19104,7 +19411,7 @@ ${js}`);
|
|
|
19104
19411
|
wikidata: "Q190573",
|
|
19105
19412
|
complexity: 8e3,
|
|
19106
19413
|
signature: {
|
|
19107
|
-
domain: ["Function", "Number", "Number"
|
|
19414
|
+
domain: ["Function", "Number", "Number"],
|
|
19108
19415
|
N: (ce, ops2) => applyN(
|
|
19109
19416
|
ops2[0],
|
|
19110
19417
|
(x) => gamma(x),
|
|
@@ -19116,7 +19423,7 @@ ${js}`);
|
|
|
19116
19423
|
LogGamma: {
|
|
19117
19424
|
complexity: 8e3,
|
|
19118
19425
|
signature: {
|
|
19119
|
-
domain: ["Function", "Number", "Number"
|
|
19426
|
+
domain: ["Function", "Number", "Number"],
|
|
19120
19427
|
N: (ce, ops2) => applyN(
|
|
19121
19428
|
ops2[0],
|
|
19122
19429
|
(x) => lngamma(x),
|
|
@@ -20159,7 +20466,7 @@ ${js}`);
|
|
|
20159
20466
|
Apply: {
|
|
20160
20467
|
signature: {
|
|
20161
20468
|
domain: "Function",
|
|
20162
|
-
evaluate: (
|
|
20469
|
+
evaluate: (_ce, ops2) => apply(ops2[0], ops2.slice(1))
|
|
20163
20470
|
}
|
|
20164
20471
|
},
|
|
20165
20472
|
About: { signature: { domain: "Function" } },
|
|
@@ -20171,6 +20478,11 @@ ${js}`);
|
|
|
20171
20478
|
*/
|
|
20172
20479
|
signature: { domain: "Function" }
|
|
20173
20480
|
},
|
|
20481
|
+
Derivative: {
|
|
20482
|
+
signature: {
|
|
20483
|
+
domain: ["Function", "Function", ["Maybe", "Number"], "Function"]
|
|
20484
|
+
}
|
|
20485
|
+
},
|
|
20174
20486
|
Domain: {
|
|
20175
20487
|
/** Return the domain of an expression */
|
|
20176
20488
|
signature: {
|
|
@@ -20546,7 +20858,7 @@ ${js}`);
|
|
|
20546
20858
|
// expressions into CNF (Conjunctive Normal Form)
|
|
20547
20859
|
// https://en.wikipedia.org/wiki/Conjunctive_normal_form
|
|
20548
20860
|
// using rules (with a rule set that's kinda the inverse of the
|
|
20549
|
-
// logic rules for simplify
|
|
20861
|
+
// logic rules for simplify)
|
|
20550
20862
|
And: {
|
|
20551
20863
|
wikidata: "Q191081",
|
|
20552
20864
|
threadable: true,
|
|
@@ -20620,6 +20932,10 @@ ${js}`);
|
|
|
20620
20932
|
return ops2[1] ? ops2[1].evaluate() : ce.box("Nothing");
|
|
20621
20933
|
return ops2[2] ? ops2[2].evaluate() : ce.box("Nothing");
|
|
20622
20934
|
},
|
|
20935
|
+
// @todo: probably don't need a N() handler. Doesn't make a difference
|
|
20936
|
+
// for the evaluation of booleans. Also, don't need to call N() on the
|
|
20937
|
+
// arguments, the caller should have done that. Same for evaluate()
|
|
20938
|
+
// and simplify() above
|
|
20623
20939
|
N: (ce, ops2) => {
|
|
20624
20940
|
const cond = ops2[0];
|
|
20625
20941
|
if (cond && cond.symbol === "True")
|
|
@@ -22792,26 +23108,6 @@ ${js}`);
|
|
|
22792
23108
|
);
|
|
22793
23109
|
}
|
|
22794
23110
|
|
|
22795
|
-
// src/compute-engine/library/utils.ts
|
|
22796
|
-
function isSymbolDefinition(def) {
|
|
22797
|
-
return !!def && typeof def === "object" && ("domain" in def || "value" in def || "constant" in def);
|
|
22798
|
-
}
|
|
22799
|
-
function isFunctionDefinition(def) {
|
|
22800
|
-
if (def === void 0 || def === null)
|
|
22801
|
-
return false;
|
|
22802
|
-
if (typeof def !== "object")
|
|
22803
|
-
return false;
|
|
22804
|
-
if ("complexity" in def || "numeric" in def || "signature" in def)
|
|
22805
|
-
return true;
|
|
22806
|
-
if (!("domain" in def))
|
|
22807
|
-
return false;
|
|
22808
|
-
if (def.domain === void 0)
|
|
22809
|
-
return false;
|
|
22810
|
-
if (typeof def.domain === "string")
|
|
22811
|
-
return def.domain === "Function";
|
|
22812
|
-
return def.domain.isFunction;
|
|
22813
|
-
}
|
|
22814
|
-
|
|
22815
23111
|
// src/compute-engine/library/library.ts
|
|
22816
23112
|
function getStandardLibrary(categories) {
|
|
22817
23113
|
if (categories === "all") {
|
|
@@ -23842,14 +24138,15 @@ ${JSON.stringify(entry)}`
|
|
|
23842
24138
|
* perform calculations using arbitrary precision floating point numbers.
|
|
23843
24139
|
* Use `"auto"` or `"complex"` to allow calculations on complex numbers.
|
|
23844
24140
|
*
|
|
23845
|
-
* @param options.numericPrecision Specific how many digits of precision
|
|
23846
|
-
* numeric calculations. Default is 100.
|
|
24141
|
+
* @param options.numericPrecision Specific how many digits of precision
|
|
24142
|
+
* for the numeric calculations. Default is 100.
|
|
23847
24143
|
*
|
|
23848
|
-
* @param options.tolerance If the absolute value of the difference of two
|
|
23849
|
-
* is less than `tolerance`, they are considered equal. Used by
|
|
24144
|
+
* @param options.tolerance If the absolute value of the difference of two
|
|
24145
|
+
* numbers is less than `tolerance`, they are considered equal. Used by
|
|
24146
|
+
* `chop()` as well.
|
|
23850
24147
|
*
|
|
23851
|
-
* @param options.defaultDomain If an unknown symbol is encountered, assume
|
|
23852
|
-
*
|
|
24148
|
+
* @param options.defaultDomain If an unknown symbol is encountered, assume
|
|
24149
|
+
* this is its domain. **Default** `ExtendedRealNumber`
|
|
23853
24150
|
*/
|
|
23854
24151
|
constructor(options) {
|
|
23855
24152
|
/** @internal */
|
|
@@ -24791,9 +25088,29 @@ ${JSON.stringify(entry)}`
|
|
|
24791
25088
|
this.latexSyntax.updateOptions(opts);
|
|
24792
25089
|
}
|
|
24793
25090
|
get jsonSerializationOptions() {
|
|
24794
|
-
if (this._useRawJsonSerializationOptions)
|
|
24795
|
-
return this._rawJsonSerializationOptions
|
|
24796
|
-
|
|
25091
|
+
if (this._useRawJsonSerializationOptions) {
|
|
25092
|
+
return new Proxy(this._rawJsonSerializationOptions, {
|
|
25093
|
+
get(options, prop) {
|
|
25094
|
+
if (!(prop in options))
|
|
25095
|
+
return void 0;
|
|
25096
|
+
return options[prop];
|
|
25097
|
+
}
|
|
25098
|
+
});
|
|
25099
|
+
}
|
|
25100
|
+
const self = this;
|
|
25101
|
+
return new Proxy(this._jsonSerializationOptions, {
|
|
25102
|
+
get(options, prop) {
|
|
25103
|
+
if (!(prop in options))
|
|
25104
|
+
return void 0;
|
|
25105
|
+
return options[prop];
|
|
25106
|
+
},
|
|
25107
|
+
set(options, prop, value) {
|
|
25108
|
+
if (!(prop in options))
|
|
25109
|
+
return false;
|
|
25110
|
+
self.jsonSerializationOptions = { [prop]: value };
|
|
25111
|
+
return true;
|
|
25112
|
+
}
|
|
25113
|
+
});
|
|
24797
25114
|
}
|
|
24798
25115
|
set jsonSerializationOptions(val) {
|
|
24799
25116
|
if (val.exclude)
|
|
@@ -24909,10 +25226,10 @@ ${JSON.stringify(entry)}`
|
|
|
24909
25226
|
};
|
|
24910
25227
|
|
|
24911
25228
|
// src/compute-engine.ts
|
|
24912
|
-
var version = "0.
|
|
25229
|
+
var version = "0.14.0";
|
|
24913
25230
|
globalThis[Symbol.for("io.cortexjs.compute-engine")] = {
|
|
24914
25231
|
ComputeEngine: ComputeEngine.prototype.constructor,
|
|
24915
|
-
version: "0.
|
|
25232
|
+
version: "0.14.0"
|
|
24916
25233
|
};
|
|
24917
25234
|
return __toCommonJS(compute_engine_exports);
|
|
24918
25235
|
})();
|