@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.mjs CHANGED
@@ -109,17 +109,15 @@ mjx-container[jax="SVG"] svg text[data-butex-svg-text] {
109
109
  unicode-bidi: isolate;
110
110
  }
111
111
 
112
- .butex-preview-mirror {
112
+ /* CHTML only: CSS flip is safe here because layout is unaffected.
113
+ * SVG mirrors are baked into the transform attribute by patchBuTeXSvgMath
114
+ * (CSS transform would override MathJax's translate presentation attribute). */
115
+ mjx-container[jax="CHTML"] .butex-preview-mirror {
113
116
  transform: scaleX(-1);
114
117
  transform-origin: center;
115
118
  display: inline-block;
116
119
  }
117
120
 
118
- mjx-container[jax="SVG"] svg .butex-preview-mirror {
119
- transform-box: fill-box;
120
- transform-origin: center center;
121
- }
122
-
123
121
  /* Keeps Arabic text shaping sane after double flip; tweak fonts in page preamble */
124
122
  .mjx-rtl-unmirror .mjx-text,
125
123
  .mjx-rtl-unmirror .mjx-char {
@@ -1676,7 +1674,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1676
1674
  id: "neq",
1677
1675
  category: "operators1",
1678
1676
  Tex: "\\neq",
1679
- mirror: false,
1677
+ mirror: true,
1680
1678
  Label: "\u2260",
1681
1679
  title: "\u0644\u0627 \u064A\u0633\u0627\u0648\u064A",
1682
1680
  svg_path: null
@@ -1686,6 +1684,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1686
1684
  category: "operators1",
1687
1685
  Tex: "\\approx",
1688
1686
  mirror: false,
1687
+ displayMirror: true,
1689
1688
  Label: "\u2248",
1690
1689
  title: "\u062A\u0642\u0631\u064A\u0628\u0627 \u064A\u0633\u0627\u0648\u064A",
1691
1690
  svg_path: null
@@ -1695,6 +1694,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1695
1694
  category: "operators1",
1696
1695
  Tex: "\\sim",
1697
1696
  mirror: false,
1697
+ displayMirror: true,
1698
1698
  Label: "\u223C",
1699
1699
  title: "\u0645\u0634\u0627\u0628\u0647",
1700
1700
  svg_path: null
@@ -1713,6 +1713,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1713
1713
  category: "operators1",
1714
1714
  Tex: "\\leq",
1715
1715
  mirror: true,
1716
+ displayMirror: false,
1716
1717
  Label: "\u2264",
1717
1718
  title: "\u0623\u0635\u063A\u0631 \u0645\u0646 \u0623\u0648 \u064A\u0633\u0627\u0648\u064A",
1718
1719
  svg_path: null
@@ -1722,6 +1723,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1722
1723
  category: "operators1",
1723
1724
  Tex: "\\geq",
1724
1725
  mirror: true,
1726
+ displayMirror: false,
1725
1727
  Label: "\u2265",
1726
1728
  title: "\u0623\u0643\u0628\u0631 \u0645\u0646 \u0623\u0648 \u064A\u0633\u0627\u0648\u064A",
1727
1729
  svg_path: null
@@ -1731,6 +1733,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1731
1733
  category: "operators1",
1732
1734
  Tex: "\\coloneqq",
1733
1735
  mirror: true,
1736
+ displayMirror: false,
1734
1737
  Label: "\u2254",
1735
1738
  title: "\u064A\u0639\u0631\u0641 \u0628\u0623\u0646\u0647 \u064A\u0633\u0627\u0648\u064A",
1736
1739
  svg_path: null
@@ -1740,6 +1743,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1740
1743
  category: "operators1",
1741
1744
  Tex: "\\eqqcolon",
1742
1745
  mirror: true,
1746
+ displayMirror: false,
1743
1747
  Label: "\u2255",
1744
1748
  title: "\u064A\u0633\u0627\u0648\u064A \u0628\u0627\u0644\u062A\u0639\u0631\u064A\u0641",
1745
1749
  svg_path: null
@@ -1750,6 +1754,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1750
1754
  category: "operators2",
1751
1755
  Tex: "\\propto",
1752
1756
  mirror: true,
1757
+ displayMirror: false,
1753
1758
  Label: "\u221D",
1754
1759
  title: "\u064A\u062A\u0646\u0627\u0633\u0628 \u0645\u0639",
1755
1760
  svg_path: null
@@ -1759,6 +1764,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1759
1764
  category: "operators2",
1760
1765
  Tex: "\\in",
1761
1766
  mirror: true,
1767
+ displayMirror: false,
1762
1768
  Label: "\u2208",
1763
1769
  title: "\u064A\u0646\u062A\u0645\u064A \u0625\u0644\u0649",
1764
1770
  svg_path: null
@@ -1768,6 +1774,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1768
1774
  category: "operators2",
1769
1775
  Tex: "\\notin",
1770
1776
  mirror: false,
1777
+ displayMirror: true,
1771
1778
  Label: "\u2209",
1772
1779
  title: "\u0644\u0627 \u064A\u0646\u062A\u0645\u064A \u0625\u0644\u0649",
1773
1780
  svg_path: null
@@ -1777,6 +1784,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1777
1784
  category: "operators2",
1778
1785
  Tex: "\\subset",
1779
1786
  mirror: true,
1787
+ displayMirror: false,
1780
1788
  Label: "\u2282",
1781
1789
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u0632\u0626\u064A\u0629 \u0645\u0646",
1782
1790
  svg_path: null
@@ -1786,6 +1794,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1786
1794
  category: "operators2",
1787
1795
  Tex: "\\supset",
1788
1796
  mirror: true,
1797
+ displayMirror: false,
1789
1798
  Label: "\u2283",
1790
1799
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u0634\u0627\u0645\u0644\u0629 \u0644\u0640",
1791
1800
  svg_path: null
@@ -1795,6 +1804,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1795
1804
  category: "operators2",
1796
1805
  Tex: "\\subseteq",
1797
1806
  mirror: true,
1807
+ displayMirror: false,
1798
1808
  Label: "\u2286",
1799
1809
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u0632\u0626\u064A\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1800
1810
  svg_path: null
@@ -1804,6 +1814,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1804
1814
  category: "operators2",
1805
1815
  Tex: "\\supseteq",
1806
1816
  mirror: true,
1817
+ displayMirror: false,
1807
1818
  Label: "\u2287",
1808
1819
  title: "\u0645\u062C\u0645\u0648\u0639\u0629 \u0634\u0627\u0645\u0644\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1809
1820
  svg_path: null
@@ -1813,6 +1824,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1813
1824
  category: "operators2",
1814
1825
  Tex: "\\cap",
1815
1826
  mirror: false,
1827
+ displayMirror: true,
1816
1828
  Label: "\u2229",
1817
1829
  title: "\u062A\u0642\u0627\u0637\u0639",
1818
1830
  svg_path: null
@@ -1822,6 +1834,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1822
1834
  category: "operators2",
1823
1835
  Tex: "\\cup",
1824
1836
  mirror: false,
1837
+ displayMirror: true,
1825
1838
  Label: "\u222A",
1826
1839
  title: "\u0627\u062A\u062D\u0627\u062F",
1827
1840
  svg_path: null
@@ -1831,6 +1844,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1831
1844
  category: "operators2",
1832
1845
  Tex: "\\emptyset",
1833
1846
  mirror: false,
1847
+ displayMirror: true,
1834
1848
  Label: "\u2205",
1835
1849
  title: "\u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629 \u0627\u0644\u062E\u0627\u0644\u064A\u0629",
1836
1850
  svg_path: null
@@ -1840,6 +1854,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1840
1854
  category: "operators2",
1841
1855
  Tex: "\\nsubseteq",
1842
1856
  mirror: true,
1857
+ displayMirror: false,
1843
1858
  Label: "\u2288",
1844
1859
  title: "\u0644\u064A\u0633\u062A \u0645\u062C\u0645\u0648\u0639\u0629 \u062C\u0632\u0626\u064A\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1845
1860
  svg_path: null
@@ -1849,6 +1864,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
1849
1864
  category: "operators2",
1850
1865
  Tex: "\\nsupseteq",
1851
1866
  mirror: true,
1867
+ displayMirror: false,
1852
1868
  Label: "\u2289",
1853
1869
  title: "\u0644\u064A\u0633\u062A \u0645\u062C\u0645\u0648\u0639\u0629 \u0634\u0627\u0645\u0644\u0629 \u0623\u0648 \u062A\u0633\u0627\u0648\u064A",
1854
1870
  svg_path: null
@@ -2060,6 +2076,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2060
2076
  category: "integrals",
2061
2077
  Tex: "\\iint",
2062
2078
  mirror: true,
2079
+ displayMirror: false,
2063
2080
  Label: "\u222C",
2064
2081
  title: "\u062A\u0643\u0627\u0645\u0644 \u0645\u0632\u062F\u0648\u062C",
2065
2082
  svg_path: null
@@ -2069,6 +2086,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2069
2086
  category: "integrals",
2070
2087
  Tex: "\\iiint",
2071
2088
  mirror: true,
2089
+ displayMirror: false,
2072
2090
  Label: "\u222D",
2073
2091
  title: "\u062A\u0643\u0627\u0645\u0644 \u062B\u0644\u0627\u062B\u064A",
2074
2092
  svg_path: null
@@ -2078,6 +2096,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2078
2096
  category: "integrals",
2079
2097
  Tex: "\\iiiint",
2080
2098
  mirror: true,
2099
+ displayMirror: false,
2081
2100
  Label: "\u2A0C",
2082
2101
  title: "\u062A\u0643\u0627\u0645\u0644 \u0631\u0628\u0627\u0639\u064A",
2083
2102
  svg_path: null
@@ -2087,6 +2106,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2087
2106
  category: "integrals",
2088
2107
  Tex: "\\oint",
2089
2108
  mirror: true,
2109
+ displayMirror: false,
2090
2110
  Label: "\u222E",
2091
2111
  title: "\u062A\u0643\u0627\u0645\u0644 \u0645\u063A\u0644\u0642",
2092
2112
  svg_path: null
@@ -2096,6 +2116,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2096
2116
  category: "integrals",
2097
2117
  Tex: "\\oiint",
2098
2118
  mirror: true,
2119
+ displayMirror: false,
2099
2120
  Label: "\u222F",
2100
2121
  title: "\u062A\u0643\u0627\u0645\u0644 \u0633\u0637\u062D\u064A \u0645\u063A\u0644\u0642",
2101
2122
  svg_path: null
@@ -2105,6 +2126,7 @@ var ATOMIC_OPERATOR_COMMANDS = {
2105
2126
  category: "integrals",
2106
2127
  Tex: "\\oiiint",
2107
2128
  mirror: true,
2129
+ displayMirror: false,
2108
2130
  Label: "\u2230",
2109
2131
  title: "\u062A\u0643\u0627\u0645\u0644 \u062D\u062C\u0645\u064A \u0645\u063A\u0644\u0642",
2110
2132
  svg_path: null
@@ -5826,7 +5848,10 @@ function parseBuTeX(input) {
5826
5848
  // src/mathjax/svgPatcher.ts
5827
5849
  var SVG_ARABSQRT_SELECTOR = 'mjx-container[jax="SVG"] svg .mjx-rtl-mirror[data-mjx-rtl-root="true"]';
5828
5850
  var ARABSQRT_SELECTOR = '.mjx-rtl-mirror[data-mjx-rtl-root="true"]';
5851
+ var SVG_PREVIEW_MIRROR_SELECTOR = 'mjx-container[jax="SVG"] svg .butex-preview-mirror';
5852
+ var PREVIEW_MIRROR_SELECTOR = ".butex-preview-mirror";
5829
5853
  var PATCHED_ATTR = "data-butex-svg-arabsqrt";
5854
+ var MIRROR_PATCHED_ATTR = "data-butex-svg-mirror";
5830
5855
  var ROOT_INDEX_SCALE = 0.72;
5831
5856
  var ROOT_INDEX_GAP_FACTOR = 0.08;
5832
5857
  var ROOT_INDEX_MIN_GAP = 2;
@@ -5851,11 +5876,12 @@ function directSvgElementChildren(element) {
5851
5876
  return Array.from(element.children).filter((child) => child instanceof SVGElement);
5852
5877
  }
5853
5878
  function boxFor(element) {
5854
- if (!(element instanceof SVGGraphicsElement) || typeof element.getBBox !== "function") {
5879
+ const candidate = element;
5880
+ if (typeof candidate.getBBox !== "function") {
5855
5881
  return null;
5856
5882
  }
5857
5883
  try {
5858
- const box = element.getBBox();
5884
+ const box = candidate.getBBox();
5859
5885
  return {
5860
5886
  x: box.x,
5861
5887
  y: box.y,
@@ -6099,6 +6125,31 @@ function patchArabSqrtRoot(root) {
6099
6125
  root.setAttribute(PATCHED_ATTR, "patched");
6100
6126
  rootNode.setAttribute(PATCHED_ATTR, "patched");
6101
6127
  }
6128
+ function patchPreviewMirror(element) {
6129
+ if (element.getAttribute(MIRROR_PATCHED_ATTR) === "patched") {
6130
+ return;
6131
+ }
6132
+ const box = boxFor(element);
6133
+ if (!box || box.width <= 0) {
6134
+ return;
6135
+ }
6136
+ const [tx, ty] = readTranslate(element);
6137
+ const mirrorX = tx + 2 * box.x + box.width;
6138
+ element.setAttribute(
6139
+ "transform",
6140
+ `translate(${roundSvg(mirrorX)},${roundSvg(ty)}) scale(-1,1)`
6141
+ );
6142
+ element.setAttribute(MIRROR_PATCHED_ATTR, "patched");
6143
+ }
6144
+ function collectPreviewMirrors(root) {
6145
+ let mirrors = Array.from(root.querySelectorAll(SVG_PREVIEW_MIRROR_SELECTOR));
6146
+ if (!mirrors.length) {
6147
+ mirrors = Array.from(root.querySelectorAll(PREVIEW_MIRROR_SELECTOR)).filter((candidate) => {
6148
+ return candidate.closest('mjx-container[jax="SVG"]') != null;
6149
+ });
6150
+ }
6151
+ return mirrors;
6152
+ }
6102
6153
  function patchBuTeXSvgMath(root) {
6103
6154
  if (typeof root.querySelectorAll !== "function") {
6104
6155
  return;
@@ -6110,6 +6161,7 @@ function patchBuTeXSvgMath(root) {
6110
6161
  });
6111
6162
  }
6112
6163
  roots.sort((a, b) => rootDepth(b) - rootDepth(a)).forEach((arabSqrtRoot) => patchArabSqrtRoot(arabSqrtRoot));
6164
+ collectPreviewMirrors(root).forEach((mirror) => patchPreviewMirror(mirror));
6113
6165
  }
6114
6166
 
6115
6167
  // src/mathjax/renderIsland.ts