temml 0.9.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -43,10 +43,6 @@ mo.tml-prime {
43
43
  font-feature-settings: 'salt';
44
44
  }
45
45
 
46
- .oldstylenums {
47
- font-feature-settings: 'onum';
48
- }
49
-
50
46
  /* AMS environment auto-numbering via CSS counter. */
51
47
  .tml-eqn::before {
52
48
  counter-increment: tmlEqnNo;
@@ -87,18 +83,21 @@ mtable.tml-align > mtr > mtd:nth-child(odd),
87
83
  mtable.tml-alignat > mtr > mtd:nth-child(odd),
88
84
  mtable.tml-aligned > mtr > mtd:nth-child(even) {
89
85
  text-align: -webkit-left;
86
+ text-align: -moz-left;
90
87
  }
91
88
 
92
89
  mtable.tml-align > mtr > mtd:nth-child(even),
93
90
  mtable.tml-alignat > mtr > mtd:nth-child(even),
94
91
  mtable.tml-aligned > mtr > mtd:nth-child(odd) {
95
92
  text-align: -webkit-right;
93
+ text-align: -moz-right;
96
94
  }
97
95
 
98
96
  mtable.tml-cases > mtr > mtd {
99
97
  padding-left: 0em;
100
98
  padding-right: 0em;
101
99
  text-align: -webkit-left;
100
+ text-align: -moz-left;
102
101
  }
103
102
 
104
103
  mtable.tml-cases > mtr > mtd:nth-child(2) {
@@ -52,11 +52,6 @@ math {
52
52
  font-family: "Temml";
53
53
  }
54
54
 
55
- .oldstylenums {
56
- font-family: "Cambria Math", math;
57
- font-feature-settings: 'onum';
58
- }
59
-
60
55
  mo.tml-prime {
61
56
  font-family: Temml;
62
57
  }
@@ -101,6 +96,7 @@ mtable.tml-align > mtr > mtd:nth-child(odd),
101
96
  mtable.tml-alignat > mtr > mtd:nth-child(odd),
102
97
  mtable.tml-aligned > mtr > mtd:nth-child(even) {
103
98
  text-align: -webkit-left;
99
+ text-align: -moz-left;
104
100
  }
105
101
 
106
102
  mtable.tml-align > mtr > mtd:nth-child(even),
@@ -108,12 +104,14 @@ mtable.tml-alignat > mtr > mtd:nth-child(even),
108
104
  mtable.tml-aligned > mtr > mtd:nth-child(odd),
109
105
  mtable.tml-align-star > mtr > mtd:nth-child(odd) {
110
106
  text-align: -webkit-right;
107
+ text-align: -moz-right;
111
108
  }
112
109
 
113
110
  mtable.tml-cases > mtr > mtd {
114
111
  padding-left: 0em;
115
112
  padding-right: 0em;
116
113
  text-align: -webkit-left;
114
+ text-align: -moz-left;
117
115
  }
118
116
 
119
117
  mtable.tml-cases > mtr > mtd:nth-child(2) {
@@ -50,11 +50,6 @@ math {
50
50
  font-family: "Cambria Math", 'STIXTwoMath-Regular', "Times New Roman", math;
51
51
  }
52
52
 
53
- .oldstylenums {
54
- font-family: "Cambria Math", math;
55
- font-feature-settings: 'onum';
56
- }
57
-
58
53
  mo.tml-prime {
59
54
  font-feature-settings: 'ssty';
60
55
  }
@@ -99,6 +94,7 @@ mtable.tml-align > mtr > mtd:nth-child(odd),
99
94
  mtable.tml-alignat > mtr > mtd:nth-child(odd),
100
95
  mtable.tml-aligned > mtr > mtd:nth-child(even) {
101
96
  text-align: -webkit-left;
97
+ text-align: -moz-left;
102
98
  }
103
99
 
104
100
  mtable.tml-align > mtr > mtd:nth-child(even),
@@ -106,12 +102,14 @@ mtable.tml-alignat > mtr > mtd:nth-child(even),
106
102
  mtable.tml-aligned > mtr > mtd:nth-child(odd),
107
103
  mtable.tml-align-star > mtr > mtd:nth-child(odd) {
108
104
  text-align: -webkit-right;
105
+ text-align: -moz-right;
109
106
  }
110
107
 
111
108
  mtable.tml-cases > mtr > mtd {
112
109
  padding-left: 0em;
113
110
  padding-right: 0em;
114
111
  text-align: -webkit-left;
112
+ text-align: -moz-left;
115
113
  }
116
114
 
117
115
  mtable.tml-cases > mtr > mtd:nth-child(2) {
@@ -32,10 +32,6 @@ math .mathscr {
32
32
  font-family: "Temml";
33
33
  }
34
34
 
35
- math .oldstylenums {
36
- font-feature-settings: 'onum';
37
- }
38
-
39
35
  mo.tml-prime {
40
36
  font-family: Temml;
41
37
  }
@@ -80,18 +76,21 @@ mtable.tml-align > mtr > mtd:nth-child(odd),
80
76
  mtable.tml-alignat > mtr > mtd:nth-child(odd),
81
77
  mtable.tml-aligned > mtr > mtd:nth-child(even) {
82
78
  text-align: -webkit-left;
79
+ text-align: -moz-left;
83
80
  }
84
81
 
85
82
  mtable.tml-align > mtr > mtd:nth-child(even),
86
83
  mtable.tml-alignat > mtr > mtd:nth-child(even),
87
84
  mtable.tml-aligned > mtr > mtd:nth-child(odd) {
88
85
  text-align: -webkit-right;
86
+ text-align: -moz-right;
89
87
  }
90
88
 
91
89
  mtable.tml-cases > mtr > mtd {
92
90
  padding-left: 0em;
93
91
  padding-right: 0em;
94
92
  text-align: -webkit-left;
93
+ text-align: -moz-left;
95
94
  }
96
95
 
97
96
  mtable.tml-cases > mtr > mtd:nth-child(2) {
@@ -40,11 +40,6 @@ math {
40
40
  font-feature-settings: 'ss01';
41
41
  }
42
42
 
43
- .oldstylenums {
44
- font-family: "Cambria Math", math;
45
- font-feature-settings: 'onum';
46
- }
47
-
48
43
  mo.tml-prime {
49
44
  font-feature-settings: 'ss04';
50
45
  }
@@ -89,18 +84,21 @@ mtable.tml-align > mtr > mtd:nth-child(odd),
89
84
  mtable.tml-alignat > mtr > mtd:nth-child(odd),
90
85
  mtable.tml-aligned > mtr > mtd:nth-child(even) {
91
86
  text-align: -webkit-left;
87
+ text-align: -moz-left;
92
88
  }
93
89
 
94
90
  mtable.tml-align > mtr > mtd:nth-child(even),
95
91
  mtable.tml-alignat > mtr > mtd:nth-child(even),
96
92
  mtable.tml-aligned > mtr > mtd:nth-child(odd) {
97
93
  text-align: -webkit-right;
94
+ text-align: -moz-right;
98
95
  }
99
96
 
100
97
  mtable.tml-cases > mtr > mtd {
101
98
  padding-left: 0em;
102
99
  padding-right: 0em;
103
100
  text-align: -webkit-left;
101
+ text-align: -moz-left;
104
102
  }
105
103
 
106
104
  mtable.tml-cases > mtr > mtd:nth-child(2) {
package/dist/temml.cjs CHANGED
@@ -1234,6 +1234,8 @@ defineSymbol(math, textord, "\u2018", "`");
1234
1234
  defineSymbol(math, textord, "$", "\\$");
1235
1235
  defineSymbol(text, textord, "$", "\\$");
1236
1236
  defineSymbol(text, textord, "$", "\\textdollar");
1237
+ defineSymbol(math, textord, "¢", "\\cent");
1238
+ defineSymbol(text, textord, "¢", "\\cent");
1237
1239
  defineSymbol(math, textord, "%", "\\%");
1238
1240
  defineSymbol(text, textord, "%", "\\%");
1239
1241
  defineSymbol(math, textord, "_", "\\_");
@@ -2079,8 +2081,6 @@ function buildMathML(tree, texExpression, style, settings) {
2079
2081
  let wrapper = expression.length === 1 && tag === null && (n1 instanceof MathNode)
2080
2082
  && !(n1.type === "mstyle" && n1.attributes.mathcolor)
2081
2083
  ? expression[0]
2082
- : expression.length > 1 && wrap === "none"
2083
- ? new mathMLTree.MathNode("mrow", expression)
2084
2084
  : setLineBreaks(expression, wrap, settings.displayMode);
2085
2085
 
2086
2086
  if (tag) {
@@ -2095,7 +2095,7 @@ function buildMathML(tree, texExpression, style, settings) {
2095
2095
  wrapper = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
2096
2096
  }
2097
2097
 
2098
- if (wrap !== "none") {
2098
+ if (wrap !== "none" && wrapper.children.length > 1) {
2099
2099
  const maths = [];
2100
2100
  for (let i = 0; i < wrapper.children.length; i++) {
2101
2101
  const math = new mathMLTree.MathNode("math", [wrapper.children[i]]);
@@ -3150,13 +3150,12 @@ defineFunction({
3150
3150
  names: ["\\\\"],
3151
3151
  props: {
3152
3152
  numArgs: 0,
3153
- numOptionalArgs: 1,
3154
- argTypes: ["size"],
3153
+ numOptionalArgs: 0,
3155
3154
  allowedInText: true
3156
3155
  },
3157
3156
 
3158
3157
  handler({ parser }, args, optArgs) {
3159
- const size = optArgs[0];
3158
+ const size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null;
3160
3159
  const newLine = !parser.settings.displayMode;
3161
3160
  return {
3162
3161
  type: "cr",
@@ -3909,7 +3908,7 @@ defineFunction({
3909
3908
 
3910
3909
  defineFunction({
3911
3910
  type: "enclose",
3912
- names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline", "\\underline"],
3911
+ names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"],
3913
3912
  // , "\\phase", "\\longdiv"
3914
3913
  props: {
3915
3914
  numArgs: 1
@@ -3926,6 +3925,25 @@ defineFunction({
3926
3925
  mathmlBuilder: mathmlBuilder$8
3927
3926
  });
3928
3927
 
3928
+ defineFunction({
3929
+ type: "enclose",
3930
+ names: ["\\underline"],
3931
+ props: {
3932
+ numArgs: 1,
3933
+ allowedInText: true
3934
+ },
3935
+ handler({ parser, funcName }, args) {
3936
+ const body = args[0];
3937
+ return {
3938
+ type: "enclose",
3939
+ mode: parser.mode,
3940
+ label: funcName,
3941
+ body
3942
+ };
3943
+ },
3944
+ mathmlBuilder: mathmlBuilder$8
3945
+ });
3946
+
3929
3947
  /**
3930
3948
  * All registered environments.
3931
3949
  * `environments.js` exports this same dictionary again and makes it public.
@@ -4897,7 +4915,6 @@ defineFunction({
4897
4915
  "\\mathscr",
4898
4916
  "\\mathsf",
4899
4917
  "\\mathtt",
4900
- "\\oldstylenums",
4901
4918
 
4902
4919
  // aliases
4903
4920
  "\\Bbb",
@@ -6731,10 +6748,9 @@ defineFunction({
6731
6748
  }
6732
6749
  });
6733
6750
 
6734
- // \pmb is a simulation of bold font.
6751
+ // In LaTeX, \pmb is a simulation of bold font.
6735
6752
  // The version of \pmb in ambsy.sty works by typesetting three copies of the argument
6736
- // with small offsets. We use CSS text-shadow.
6737
- // It's a hack. Not as good as a real bold font. Better than nothing.
6753
+ // with small offsets. We use CSS font-weight:bold.
6738
6754
 
6739
6755
  defineFunction({
6740
6756
  type: "pmb",
@@ -6754,7 +6770,7 @@ defineFunction({
6754
6770
  const inner = buildExpression(group.body, style);
6755
6771
  // Wrap with an <mstyle> element.
6756
6772
  const node = wrapWithMstyle(inner);
6757
- node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px");
6773
+ node.setAttribute("style", "font-weight:bold");
6758
6774
  return node
6759
6775
  }
6760
6776
  });
@@ -7312,8 +7328,7 @@ const fontMap = {
7312
7328
  mathfrak: "fraktur",
7313
7329
  mathscr: "script",
7314
7330
  mathsf: "sans-serif",
7315
- mathtt: "monospace",
7316
- oldstylenums: "oldstylenums"
7331
+ mathtt: "monospace"
7317
7332
  };
7318
7333
 
7319
7334
  /**
@@ -7383,8 +7398,6 @@ const getVariant = function(group, style) {
7383
7398
  return "sans-serif"
7384
7399
  case "mathtt":
7385
7400
  return "monospace"
7386
- case "oldstylenums":
7387
- return "oldstylenums"
7388
7401
  }
7389
7402
 
7390
7403
  let text = group.text;
@@ -7627,8 +7640,8 @@ const smallCaps = Object.freeze({
7627
7640
  const numberRegEx$1 = /^\d(?:[\d,.]*\d)?$/; // Keep in sync with numberRegEx in Parser.js
7628
7641
  const latinRegEx = /[A-Ba-z]/;
7629
7642
 
7630
- const italicNumber = (text, variant) => {
7631
- const mn = new mathMLTree.MathNode("mn", [text]);
7643
+ const italicNumber = (text, variant, tag) => {
7644
+ const mn = new mathMLTree.MathNode(tag, [text]);
7632
7645
  const wrapper = new mathMLTree.MathNode("mstyle", [mn]);
7633
7646
  wrapper.style["font-style"] = "italic";
7634
7647
  wrapper.style["font-family"] = "Cambria, 'Times New Roman', serif";
@@ -7678,28 +7691,21 @@ defineFunctionBuilders({
7678
7691
  const variant = getVariant(group, style) || "normal";
7679
7692
 
7680
7693
  let node;
7681
- if (group.mode === "text") {
7694
+ if (numberRegEx$1.test(group.text)) {
7695
+ const tag = group.mode === "text" ? "mtext" : "mn";
7682
7696
  if (variant === "italic" || variant === "bold-italic") {
7683
- if (numberRegEx$1.test(group.text)) {
7684
- return italicNumber(text, variant)
7697
+ return italicNumber(text, variant, tag)
7698
+ } else {
7699
+ if (variant !== "normal") {
7700
+ text.text = text.text.split("").map(c => variantChar(c, variant)).join("");
7685
7701
  }
7702
+ node = new mathMLTree.MathNode(tag, [text]);
7686
7703
  }
7704
+ } else if (group.mode === "text") {
7687
7705
  if (variant !== "normal") {
7688
7706
  text.text = variantChar(text.text, variant);
7689
7707
  }
7690
7708
  node = new mathMLTree.MathNode("mtext", [text]);
7691
- } else if (numberRegEx$1.test(group.text)) {
7692
- if (variant === "oldstylenums") {
7693
- const ms = new mathMLTree.MathNode("mstyle", [text], ["oldstylenums"]);
7694
- node = new mathMLTree.MathNode("mn", [ms]);
7695
- } else if (variant === "italic" || variant === "bold-italic") {
7696
- return italicNumber(text, variant)
7697
- } else {
7698
- if (variant !== "normal") {
7699
- text.text = text.text.split("").map(c => variantChar(c, variant)).join("");
7700
- }
7701
- node = new mathMLTree.MathNode("mn", [text]);
7702
- }
7703
7709
  } else if (group.text === "\\prime") {
7704
7710
  node = new mathMLTree.MathNode("mo", [text]);
7705
7711
  // TODO: If/when Chromium uses ssty variant for prime, remove the next line.
@@ -8398,7 +8404,7 @@ defineMacro("\\underbar", "\\underline{\\text{#1}}");
8398
8404
  // \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
8399
8405
  // We'll call \varvdots, which gets a glyph from symbols.js.
8400
8406
  // The zero-width rule gets us an equivalent to the vertical 6pt kern.
8401
- defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}");
8407
+ defineMacro("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}");
8402
8408
  defineMacro("\u22ee", "\\vdots");
8403
8409
 
8404
8410
  //////////////////////////////////////////////////////////////////////
@@ -11418,6 +11424,36 @@ const uSubsAndSups = Object.freeze({
11418
11424
  '\u1DBF': 'θ'
11419
11425
  });
11420
11426
 
11427
+ // Used for Unicode input of calligraphic and script letters
11428
+ const asciiFromScript = Object.freeze({
11429
+ "\ud835\udc9c": "A",
11430
+ "\u212c": "B",
11431
+ "\ud835\udc9e": "C",
11432
+ "\ud835\udc9f": "D",
11433
+ "\u2130": "E",
11434
+ "\u2131": "F",
11435
+ "\ud835\udca2": "G",
11436
+ "\u210B": "H",
11437
+ "\u2110": "I",
11438
+ "\ud835\udca5": "J",
11439
+ "\ud835\udca6": "K",
11440
+ "\u2112": "L",
11441
+ "\u2113": "M",
11442
+ "\ud835\udca9": "N",
11443
+ "\ud835\udcaa": "O",
11444
+ "\ud835\udcab": "P",
11445
+ "\ud835\udcac": "Q",
11446
+ "\u211B": "R",
11447
+ "\ud835\udcae": "S",
11448
+ "\ud835\udcaf": "T",
11449
+ "\ud835\udcb0": "U",
11450
+ "\ud835\udcb1": "V",
11451
+ "\ud835\udcb2": "W",
11452
+ "\ud835\udcb3": "X",
11453
+ "\ud835\udcb4": "Y",
11454
+ "\ud835\udcb5": "Z"
11455
+ });
11456
+
11421
11457
  // Mapping of Unicode accent characters to their LaTeX equivalent in text and
11422
11458
  // math mode (when they exist).
11423
11459
  var unicodeAccents = {
@@ -12653,6 +12689,22 @@ class Parser {
12653
12689
  text
12654
12690
  };
12655
12691
  } else {
12692
+ if (asciiFromScript[text]) {
12693
+ // Unicode 14 disambiguates chancery from roundhand.
12694
+ // See https://www.unicode.org/charts/PDF/U1D400.pdf
12695
+ this.consume();
12696
+ const nextCode = this.fetch().text.charCodeAt(0);
12697
+ // mathcal is Temml default. Use mathscript if called for.
12698
+ const font = nextCode === 0xfe01 ? "mathscr" : "mathcal";
12699
+ if (nextCode === 0xfe00 || nextCode === 0xfe01) { this.consume(); }
12700
+ return {
12701
+ type: "font",
12702
+ mode: "math",
12703
+ font,
12704
+ body: { type: "mathord", mode: "math", loc, text: asciiFromScript[text] }
12705
+ }
12706
+ }
12707
+ // Default ord character. No disambiguation necessary.
12656
12708
  s = {
12657
12709
  type: group,
12658
12710
  mode: this.mode,
@@ -12909,7 +12961,7 @@ class Style {
12909
12961
  * https://mit-license.org/
12910
12962
  */
12911
12963
 
12912
- const version = "0.9.1";
12964
+ const version = "0.10.0";
12913
12965
 
12914
12966
  function postProcess(block) {
12915
12967
  const labelMap = {};
package/dist/temml.js CHANGED
@@ -1235,6 +1235,8 @@ var temml = (function () {
1235
1235
  defineSymbol(math, textord, "$", "\\$");
1236
1236
  defineSymbol(text, textord, "$", "\\$");
1237
1237
  defineSymbol(text, textord, "$", "\\textdollar");
1238
+ defineSymbol(math, textord, "¢", "\\cent");
1239
+ defineSymbol(text, textord, "¢", "\\cent");
1238
1240
  defineSymbol(math, textord, "%", "\\%");
1239
1241
  defineSymbol(text, textord, "%", "\\%");
1240
1242
  defineSymbol(math, textord, "_", "\\_");
@@ -2080,8 +2082,6 @@ var temml = (function () {
2080
2082
  let wrapper = expression.length === 1 && tag === null && (n1 instanceof MathNode)
2081
2083
  && !(n1.type === "mstyle" && n1.attributes.mathcolor)
2082
2084
  ? expression[0]
2083
- : expression.length > 1 && wrap === "none"
2084
- ? new mathMLTree.MathNode("mrow", expression)
2085
2085
  : setLineBreaks(expression, wrap, settings.displayMode);
2086
2086
 
2087
2087
  if (tag) {
@@ -2096,7 +2096,7 @@ var temml = (function () {
2096
2096
  wrapper = new mathMLTree.MathNode("semantics", [wrapper, annotation]);
2097
2097
  }
2098
2098
 
2099
- if (wrap !== "none") {
2099
+ if (wrap !== "none" && wrapper.children.length > 1) {
2100
2100
  const maths = [];
2101
2101
  for (let i = 0; i < wrapper.children.length; i++) {
2102
2102
  const math = new mathMLTree.MathNode("math", [wrapper.children[i]]);
@@ -3151,13 +3151,12 @@ var temml = (function () {
3151
3151
  names: ["\\\\"],
3152
3152
  props: {
3153
3153
  numArgs: 0,
3154
- numOptionalArgs: 1,
3155
- argTypes: ["size"],
3154
+ numOptionalArgs: 0,
3156
3155
  allowedInText: true
3157
3156
  },
3158
3157
 
3159
3158
  handler({ parser }, args, optArgs) {
3160
- const size = optArgs[0];
3159
+ const size = parser.gullet.future().text === "[" ? parser.parseSizeGroup(true) : null;
3161
3160
  const newLine = !parser.settings.displayMode;
3162
3161
  return {
3163
3162
  type: "cr",
@@ -3910,7 +3909,7 @@ var temml = (function () {
3910
3909
 
3911
3910
  defineFunction({
3912
3911
  type: "enclose",
3913
- names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline", "\\underline"],
3912
+ names: ["\\angl", "\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\overline"],
3914
3913
  // , "\\phase", "\\longdiv"
3915
3914
  props: {
3916
3915
  numArgs: 1
@@ -3927,6 +3926,25 @@ var temml = (function () {
3927
3926
  mathmlBuilder: mathmlBuilder$8
3928
3927
  });
3929
3928
 
3929
+ defineFunction({
3930
+ type: "enclose",
3931
+ names: ["\\underline"],
3932
+ props: {
3933
+ numArgs: 1,
3934
+ allowedInText: true
3935
+ },
3936
+ handler({ parser, funcName }, args) {
3937
+ const body = args[0];
3938
+ return {
3939
+ type: "enclose",
3940
+ mode: parser.mode,
3941
+ label: funcName,
3942
+ body
3943
+ };
3944
+ },
3945
+ mathmlBuilder: mathmlBuilder$8
3946
+ });
3947
+
3930
3948
  /**
3931
3949
  * All registered environments.
3932
3950
  * `environments.js` exports this same dictionary again and makes it public.
@@ -4898,7 +4916,6 @@ var temml = (function () {
4898
4916
  "\\mathscr",
4899
4917
  "\\mathsf",
4900
4918
  "\\mathtt",
4901
- "\\oldstylenums",
4902
4919
 
4903
4920
  // aliases
4904
4921
  "\\Bbb",
@@ -6732,10 +6749,9 @@ var temml = (function () {
6732
6749
  }
6733
6750
  });
6734
6751
 
6735
- // \pmb is a simulation of bold font.
6752
+ // In LaTeX, \pmb is a simulation of bold font.
6736
6753
  // The version of \pmb in ambsy.sty works by typesetting three copies of the argument
6737
- // with small offsets. We use CSS text-shadow.
6738
- // It's a hack. Not as good as a real bold font. Better than nothing.
6754
+ // with small offsets. We use CSS font-weight:bold.
6739
6755
 
6740
6756
  defineFunction({
6741
6757
  type: "pmb",
@@ -6755,7 +6771,7 @@ var temml = (function () {
6755
6771
  const inner = buildExpression(group.body, style);
6756
6772
  // Wrap with an <mstyle> element.
6757
6773
  const node = wrapWithMstyle(inner);
6758
- node.setAttribute("style", "text-shadow: 0.02em 0.01em 0.04px");
6774
+ node.setAttribute("style", "font-weight:bold");
6759
6775
  return node
6760
6776
  }
6761
6777
  });
@@ -7313,8 +7329,7 @@ var temml = (function () {
7313
7329
  mathfrak: "fraktur",
7314
7330
  mathscr: "script",
7315
7331
  mathsf: "sans-serif",
7316
- mathtt: "monospace",
7317
- oldstylenums: "oldstylenums"
7332
+ mathtt: "monospace"
7318
7333
  };
7319
7334
 
7320
7335
  /**
@@ -7384,8 +7399,6 @@ var temml = (function () {
7384
7399
  return "sans-serif"
7385
7400
  case "mathtt":
7386
7401
  return "monospace"
7387
- case "oldstylenums":
7388
- return "oldstylenums"
7389
7402
  }
7390
7403
 
7391
7404
  let text = group.text;
@@ -7628,8 +7641,8 @@ var temml = (function () {
7628
7641
  const numberRegEx$1 = /^\d(?:[\d,.]*\d)?$/; // Keep in sync with numberRegEx in Parser.js
7629
7642
  const latinRegEx = /[A-Ba-z]/;
7630
7643
 
7631
- const italicNumber = (text, variant) => {
7632
- const mn = new mathMLTree.MathNode("mn", [text]);
7644
+ const italicNumber = (text, variant, tag) => {
7645
+ const mn = new mathMLTree.MathNode(tag, [text]);
7633
7646
  const wrapper = new mathMLTree.MathNode("mstyle", [mn]);
7634
7647
  wrapper.style["font-style"] = "italic";
7635
7648
  wrapper.style["font-family"] = "Cambria, 'Times New Roman', serif";
@@ -7679,28 +7692,21 @@ var temml = (function () {
7679
7692
  const variant = getVariant(group, style) || "normal";
7680
7693
 
7681
7694
  let node;
7682
- if (group.mode === "text") {
7695
+ if (numberRegEx$1.test(group.text)) {
7696
+ const tag = group.mode === "text" ? "mtext" : "mn";
7683
7697
  if (variant === "italic" || variant === "bold-italic") {
7684
- if (numberRegEx$1.test(group.text)) {
7685
- return italicNumber(text, variant)
7698
+ return italicNumber(text, variant, tag)
7699
+ } else {
7700
+ if (variant !== "normal") {
7701
+ text.text = text.text.split("").map(c => variantChar(c, variant)).join("");
7686
7702
  }
7703
+ node = new mathMLTree.MathNode(tag, [text]);
7687
7704
  }
7705
+ } else if (group.mode === "text") {
7688
7706
  if (variant !== "normal") {
7689
7707
  text.text = variantChar(text.text, variant);
7690
7708
  }
7691
7709
  node = new mathMLTree.MathNode("mtext", [text]);
7692
- } else if (numberRegEx$1.test(group.text)) {
7693
- if (variant === "oldstylenums") {
7694
- const ms = new mathMLTree.MathNode("mstyle", [text], ["oldstylenums"]);
7695
- node = new mathMLTree.MathNode("mn", [ms]);
7696
- } else if (variant === "italic" || variant === "bold-italic") {
7697
- return italicNumber(text, variant)
7698
- } else {
7699
- if (variant !== "normal") {
7700
- text.text = text.text.split("").map(c => variantChar(c, variant)).join("");
7701
- }
7702
- node = new mathMLTree.MathNode("mn", [text]);
7703
- }
7704
7710
  } else if (group.text === "\\prime") {
7705
7711
  node = new mathMLTree.MathNode("mo", [text]);
7706
7712
  // TODO: If/when Chromium uses ssty variant for prime, remove the next line.
@@ -8399,7 +8405,7 @@ var temml = (function () {
8399
8405
  // \kern6\p@\hbox{.}\hbox{.}\hbox{.}}}
8400
8406
  // We'll call \varvdots, which gets a glyph from symbols.js.
8401
8407
  // The zero-width rule gets us an equivalent to the vertical 6pt kern.
8402
- defineMacro("\\vdots", "\\mathord{\\varvdots\\rule{0pt}{15pt}}");
8408
+ defineMacro("\\vdots", "{\\varvdots\\rule{0pt}{15pt}}");
8403
8409
  defineMacro("\u22ee", "\\vdots");
8404
8410
 
8405
8411
  //////////////////////////////////////////////////////////////////////
@@ -9519,6 +9525,36 @@ var temml = (function () {
9519
9525
  '\u1DBF': 'θ'
9520
9526
  });
9521
9527
 
9528
+ // Used for Unicode input of calligraphic and script letters
9529
+ const asciiFromScript = Object.freeze({
9530
+ "\ud835\udc9c": "A",
9531
+ "\u212c": "B",
9532
+ "\ud835\udc9e": "C",
9533
+ "\ud835\udc9f": "D",
9534
+ "\u2130": "E",
9535
+ "\u2131": "F",
9536
+ "\ud835\udca2": "G",
9537
+ "\u210B": "H",
9538
+ "\u2110": "I",
9539
+ "\ud835\udca5": "J",
9540
+ "\ud835\udca6": "K",
9541
+ "\u2112": "L",
9542
+ "\u2113": "M",
9543
+ "\ud835\udca9": "N",
9544
+ "\ud835\udcaa": "O",
9545
+ "\ud835\udcab": "P",
9546
+ "\ud835\udcac": "Q",
9547
+ "\u211B": "R",
9548
+ "\ud835\udcae": "S",
9549
+ "\ud835\udcaf": "T",
9550
+ "\ud835\udcb0": "U",
9551
+ "\ud835\udcb1": "V",
9552
+ "\ud835\udcb2": "W",
9553
+ "\ud835\udcb3": "X",
9554
+ "\ud835\udcb4": "Y",
9555
+ "\ud835\udcb5": "Z"
9556
+ });
9557
+
9522
9558
  // Mapping of Unicode accent characters to their LaTeX equivalent in text and
9523
9559
  // math mode (when they exist).
9524
9560
  var unicodeAccents = {
@@ -10754,6 +10790,22 @@ var temml = (function () {
10754
10790
  text
10755
10791
  };
10756
10792
  } else {
10793
+ if (asciiFromScript[text]) {
10794
+ // Unicode 14 disambiguates chancery from roundhand.
10795
+ // See https://www.unicode.org/charts/PDF/U1D400.pdf
10796
+ this.consume();
10797
+ const nextCode = this.fetch().text.charCodeAt(0);
10798
+ // mathcal is Temml default. Use mathscript if called for.
10799
+ const font = nextCode === 0xfe01 ? "mathscr" : "mathcal";
10800
+ if (nextCode === 0xfe00 || nextCode === 0xfe01) { this.consume(); }
10801
+ return {
10802
+ type: "font",
10803
+ mode: "math",
10804
+ font,
10805
+ body: { type: "mathord", mode: "math", loc, text: asciiFromScript[text] }
10806
+ }
10807
+ }
10808
+ // Default ord character. No disambiguation necessary.
10757
10809
  s = {
10758
10810
  type: group,
10759
10811
  mode: this.mode,
@@ -11010,7 +11062,7 @@ var temml = (function () {
11010
11062
  * https://mit-license.org/
11011
11063
  */
11012
11064
 
11013
- const version = "0.9.1";
11065
+ const version = "0.10.0";
11014
11066
 
11015
11067
  function postProcess(block) {
11016
11068
  const labelMap = {};