@drghaliasri/butex 5.3.2 → 5.3.3

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/index.js CHANGED
@@ -151,17 +151,15 @@ mjx-container[jax="SVG"] svg text[data-butex-svg-text] {
151
151
  unicode-bidi: isolate;
152
152
  }
153
153
 
154
- .butex-preview-mirror {
154
+ /* CHTML only: CSS flip is safe here because layout is unaffected.
155
+ * SVG mirrors are baked into the transform attribute by patchBuTeXSvgMath
156
+ * (CSS transform would override MathJax's translate presentation attribute). */
157
+ mjx-container[jax="CHTML"] .butex-preview-mirror {
155
158
  transform: scaleX(-1);
156
159
  transform-origin: center;
157
160
  display: inline-block;
158
161
  }
159
162
 
160
- mjx-container[jax="SVG"] svg .butex-preview-mirror {
161
- transform-box: fill-box;
162
- transform-origin: center center;
163
- }
164
-
165
163
  /* Keeps Arabic text shaping sane after double flip; tweak fonts in page preamble */
166
164
  .mjx-rtl-unmirror .mjx-text,
167
165
  .mjx-rtl-unmirror .mjx-char {
@@ -1718,7 +1716,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1718
1716
  id: "neq",
1719
1717
  category: "operators1",
1720
1718
  Tex: "\\neq",
1721
- mirror: false,
1719
+ mirror: true,
1722
1720
  Label: "\u2260",
1723
1721
  title: "\u0644\u0627 \u064A\u0633\u0627\u0648\u064A",
1724
1722
  svg_path: null
@@ -1728,6 +1726,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1728
1726
  category: "operators1",
1729
1727
  Tex: "\\approx",
1730
1728
  mirror: false,
1729
+ displayMirror: true,
1731
1730
  Label: "\u2248",
1732
1731
  title: "\u062A\u0642\u0631\u064A\u0628\u0627 \u064A\u0633\u0627\u0648\u064A",
1733
1732
  svg_path: null
@@ -1737,6 +1736,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1737
1736
  category: "operators1",
1738
1737
  Tex: "\\sim",
1739
1738
  mirror: false,
1739
+ displayMirror: true,
1740
1740
  Label: "\u223C",
1741
1741
  title: "\u0645\u0634\u0627\u0628\u0647",
1742
1742
  svg_path: null
@@ -1755,6 +1755,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1755
1755
  category: "operators1",
1756
1756
  Tex: "\\leq",
1757
1757
  mirror: true,
1758
+ displayMirror: false,
1758
1759
  Label: "\u2264",
1759
1760
  title: "\u0623\u0635\u063A\u0631 \u0645\u0646 \u0623\u0648 \u064A\u0633\u0627\u0648\u064A",
1760
1761
  svg_path: null
@@ -1764,6 +1765,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1764
1765
  category: "operators1",
1765
1766
  Tex: "\\geq",
1766
1767
  mirror: true,
1768
+ displayMirror: false,
1767
1769
  Label: "\u2265",
1768
1770
  title: "\u0623\u0643\u0628\u0631 \u0645\u0646 \u0623\u0648 \u064A\u0633\u0627\u0648\u064A",
1769
1771
  svg_path: null
@@ -1773,6 +1775,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1773
1775
  category: "operators1",
1774
1776
  Tex: "\\coloneqq",
1775
1777
  mirror: true,
1778
+ displayMirror: false,
1776
1779
  Label: "\u2254",
1777
1780
  title: "\u064A\u0639\u0631\u0641 \u0628\u0623\u0646\u0647 \u064A\u0633\u0627\u0648\u064A",
1778
1781
  svg_path: null
@@ -1782,6 +1785,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1782
1785
  category: "operators1",
1783
1786
  Tex: "\\eqqcolon",
1784
1787
  mirror: true,
1788
+ displayMirror: false,
1785
1789
  Label: "\u2255",
1786
1790
  title: "\u064A\u0633\u0627\u0648\u064A \u0628\u0627\u0644\u062A\u0639\u0631\u064A\u0641",
1787
1791
  svg_path: null
@@ -1792,6 +1796,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1792
1796
  category: "operators2",
1793
1797
  Tex: "\\propto",
1794
1798
  mirror: true,
1799
+ displayMirror: false,
1795
1800
  Label: "\u221D",
1796
1801
  title: "\u064A\u062A\u0646\u0627\u0633\u0628 \u0645\u0639",
1797
1802
  svg_path: null
@@ -1801,6 +1806,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1801
1806
  category: "operators2",
1802
1807
  Tex: "\\in",
1803
1808
  mirror: true,
1809
+ displayMirror: false,
1804
1810
  Label: "\u2208",
1805
1811
  title: "\u064A\u0646\u062A\u0645\u064A \u0625\u0644\u0649",
1806
1812
  svg_path: null
@@ -1810,6 +1816,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1810
1816
  category: "operators2",
1811
1817
  Tex: "\\notin",
1812
1818
  mirror: false,
1819
+ displayMirror: true,
1813
1820
  Label: "\u2209",
1814
1821
  title: "\u0644\u0627 \u064A\u0646\u062A\u0645\u064A \u0625\u0644\u0649",
1815
1822
  svg_path: null
@@ -1819,6 +1826,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1819
1826
  category: "operators2",
1820
1827
  Tex: "\\subset",
1821
1828
  mirror: true,
1829
+ displayMirror: false,
1822
1830
  Label: "\u2282",
1823
1831
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u0632\u0626\u064A\u0629 \u0645\u0646",
1824
1832
  svg_path: null
@@ -1828,6 +1836,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1828
1836
  category: "operators2",
1829
1837
  Tex: "\\supset",
1830
1838
  mirror: true,
1839
+ displayMirror: false,
1831
1840
  Label: "\u2283",
1832
1841
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u0634\u0627\u0645\u0644\u0629 \u0644\u0640",
1833
1842
  svg_path: null
@@ -1837,6 +1846,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1837
1846
  category: "operators2",
1838
1847
  Tex: "\\subseteq",
1839
1848
  mirror: true,
1849
+ displayMirror: false,
1840
1850
  Label: "\u2286",
1841
1851
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u0632\u0626\u064A\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1842
1852
  svg_path: null
@@ -1846,6 +1856,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1846
1856
  category: "operators2",
1847
1857
  Tex: "\\supseteq",
1848
1858
  mirror: true,
1859
+ displayMirror: false,
1849
1860
  Label: "\u2287",
1850
1861
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u0634\u0627\u0645\u0644\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1851
1862
  svg_path: null
@@ -1855,6 +1866,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1855
1866
  category: "operators2",
1856
1867
  Tex: "\\cap",
1857
1868
  mirror: false,
1869
+ displayMirror: true,
1858
1870
  Label: "\u2229",
1859
1871
  title: "\u062A\u0642\u0627\u0637\u0639",
1860
1872
  svg_path: null
@@ -1864,6 +1876,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1864
1876
  category: "operators2",
1865
1877
  Tex: "\\cup",
1866
1878
  mirror: false,
1879
+ displayMirror: true,
1867
1880
  Label: "\u222A",
1868
1881
  title: "\u0627\u062A\u062D\u0627\u062F",
1869
1882
  svg_path: null
@@ -1873,6 +1886,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1873
1886
  category: "operators2",
1874
1887
  Tex: "\\emptyset",
1875
1888
  mirror: false,
1889
+ displayMirror: true,
1876
1890
  Label: "\u2205",
1877
1891
  title: "\u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062E\u0627\u0644\u064A\u0629",
1878
1892
  svg_path: null
@@ -1882,6 +1896,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1882
1896
  category: "operators2",
1883
1897
  Tex: "\\nsubseteq",
1884
1898
  mirror: true,
1899
+ displayMirror: false,
1885
1900
  Label: "\u2288",
1886
1901
  title: "\u0644\u064A\u0633\u062A \u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u0632\u0626\u064A\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1887
1902
  svg_path: null
@@ -1891,6 +1906,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1891
1906
  category: "operators2",
1892
1907
  Tex: "\\nsupseteq",
1893
1908
  mirror: true,
1909
+ displayMirror: false,
1894
1910
  Label: "\u2289",
1895
1911
  title: "\u0644\u064A\u0633\u062A \u0645\u062C\u0645\u0648\u0639\u0629 \u0634\u0627\u0645\u0644\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1896
1912
  svg_path: null
@@ -2102,6 +2118,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2102
2118
  category: "integrals",
2103
2119
  Tex: "\\iint",
2104
2120
  mirror: true,
2121
+ displayMirror: false,
2105
2122
  Label: "\u222C",
2106
2123
  title: "\u062A\u0643\u0627\u0645\u0644 \u0645\u0632\u062F\u0648\u062C",
2107
2124
  svg_path: null
@@ -2111,6 +2128,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2111
2128
  category: "integrals",
2112
2129
  Tex: "\\iiint",
2113
2130
  mirror: true,
2131
+ displayMirror: false,
2114
2132
  Label: "\u222D",
2115
2133
  title: "\u062A\u0643\u0627\u0645\u0644 \u062B\u0644\u0627\u062B\u064A",
2116
2134
  svg_path: null
@@ -2120,6 +2138,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2120
2138
  category: "integrals",
2121
2139
  Tex: "\\iiiint",
2122
2140
  mirror: true,
2141
+ displayMirror: false,
2123
2142
  Label: "\u2A0C",
2124
2143
  title: "\u062A\u0643\u0627\u0645\u0644 \u0631\u0628\u0627\u0639\u064A",
2125
2144
  svg_path: null
@@ -2129,6 +2148,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2129
2148
  category: "integrals",
2130
2149
  Tex: "\\oint",
2131
2150
  mirror: true,
2151
+ displayMirror: false,
2132
2152
  Label: "\u222E",
2133
2153
  title: "\u062A\u0643\u0627\u0645\u0644 \u0645\u063A\u0644\u0642",
2134
2154
  svg_path: null
@@ -2138,6 +2158,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2138
2158
  category: "integrals",
2139
2159
  Tex: "\\oiint",
2140
2160
  mirror: true,
2161
+ displayMirror: false,
2141
2162
  Label: "\u222F",
2142
2163
  title: "\u062A\u0643\u0627\u0645\u0644 \u0633\u0637\u062D\u064A \u0645\u063A\u0644\u0642",
2143
2164
  svg_path: null
@@ -2147,6 +2168,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2147
2168
  category: "integrals",
2148
2169
  Tex: "\\oiiint",
2149
2170
  mirror: true,
2171
+ displayMirror: false,
2150
2172
  Label: "\u2230",
2151
2173
  title: "\u062A\u0643\u0627\u0645\u0644 \u062D\u062C\u0645\u064A \u0645\u063A\u0644\u0642",
2152
2174
  svg_path: null
@@ -5868,7 +5890,10 @@ function parseBuTeX(input) {
5868
5890
  // src/mathjax/svgPatcher.ts
5869
5891
  var SVG_ARABSQRT_SELECTOR = 'mjx-container[jax="SVG"] svg .mjx-rtl-mirror[data-mjx-rtl-root="true"]';
5870
5892
  var ARABSQRT_SELECTOR = '.mjx-rtl-mirror[data-mjx-rtl-root="true"]';
5893
+ var SVG_PREVIEW_MIRROR_SELECTOR = 'mjx-container[jax="SVG"] svg .butex-preview-mirror';
5894
+ var PREVIEW_MIRROR_SELECTOR = ".butex-preview-mirror";
5871
5895
  var PATCHED_ATTR = "data-butex-svg-arabsqrt";
5896
+ var MIRROR_PATCHED_ATTR = "data-butex-svg-mirror";
5872
5897
  var ROOT_INDEX_SCALE = 0.72;
5873
5898
  var ROOT_INDEX_GAP_FACTOR = 0.08;
5874
5899
  var ROOT_INDEX_MIN_GAP = 2;
@@ -5893,11 +5918,12 @@ function directSvgElementChildren(element) {
5893
5918
  return Array.from(element.children).filter((child) => child instanceof SVGElement);
5894
5919
  }
5895
5920
  function boxFor(element) {
5896
- if (!(element instanceof SVGGraphicsElement) || typeof element.getBBox !== "function") {
5921
+ const candidate = element;
5922
+ if (typeof candidate.getBBox !== "function") {
5897
5923
  return null;
5898
5924
  }
5899
5925
  try {
5900
- const box = element.getBBox();
5926
+ const box = candidate.getBBox();
5901
5927
  return {
5902
5928
  x: box.x,
5903
5929
  y: box.y,
@@ -6141,6 +6167,31 @@ function patchArabSqrtRoot(root) {
6141
6167
  root.setAttribute(PATCHED_ATTR, "patched");
6142
6168
  rootNode.setAttribute(PATCHED_ATTR, "patched");
6143
6169
  }
6170
+ function patchPreviewMirror(element) {
6171
+ if (element.getAttribute(MIRROR_PATCHED_ATTR) === "patched") {
6172
+ return;
6173
+ }
6174
+ const box = boxFor(element);
6175
+ if (!box || box.width <= 0) {
6176
+ return;
6177
+ }
6178
+ const [tx, ty] = readTranslate(element);
6179
+ const mirrorX = tx + 2 * box.x + box.width;
6180
+ element.setAttribute(
6181
+ "transform",
6182
+ `translate(${roundSvg(mirrorX)},${roundSvg(ty)}) scale(-1,1)`
6183
+ );
6184
+ element.setAttribute(MIRROR_PATCHED_ATTR, "patched");
6185
+ }
6186
+ function collectPreviewMirrors(root) {
6187
+ let mirrors = Array.from(root.querySelectorAll(SVG_PREVIEW_MIRROR_SELECTOR));
6188
+ if (!mirrors.length) {
6189
+ mirrors = Array.from(root.querySelectorAll(PREVIEW_MIRROR_SELECTOR)).filter((candidate) => {
6190
+ return candidate.closest('mjx-container[jax="SVG"]') != null;
6191
+ });
6192
+ }
6193
+ return mirrors;
6194
+ }
6144
6195
  function patchBuTeXSvgMath(root) {
6145
6196
  if (typeof root.querySelectorAll !== "function") {
6146
6197
  return;
@@ -6152,6 +6203,7 @@ function patchBuTeXSvgMath(root) {
6152
6203
  });
6153
6204
  }
6154
6205
  roots.sort((a, b) => rootDepth(b) - rootDepth(a)).forEach((arabSqrtRoot) => patchArabSqrtRoot(arabSqrtRoot));
6206
+ collectPreviewMirrors(root).forEach((mirror) => patchPreviewMirror(mirror));
6155
6207
  }
6156
6208
 
6157
6209
  // src/mathjax/renderIsland.ts