From b5d9b43ed5d18790d60e5ed43e5090dc1e526332 Mon Sep 17 00:00:00 2001 From: Ratnabali Dutta Date: Thu, 20 Jul 2023 11:05:46 +0530 Subject: [PATCH] Add middle for delims --- lib/matplotlib/_mathtext.py | 17 ++++++++++++++--- .../test_mathtext/mathtext1_dejavusans_07.png | Bin 0 -> 5696 bytes lib/matplotlib/tests/test_mathtext.py | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext1_dejavusans_07.png diff --git a/lib/matplotlib/_mathtext.py b/lib/matplotlib/_mathtext.py index 35f7f1c606cf..d86385e94589 100644 --- a/lib/matplotlib/_mathtext.py +++ b/lib/matplotlib/_mathtext.py @@ -1965,9 +1965,10 @@ def csnames(group, names): | p.boldsymbol ) + mdelim = r"\middle" - (p.delim("mdelim") | Error("Expected a delimiter")) p.auto_delim <<= ( r"\left" - (p.delim("left") | Error("Expected a delimiter")) - + ZeroOrMore(p.simple | p.auto_delim)("mid") + + ZeroOrMore(p.simple | p.auto_delim | mdelim)("mid") + r"\right" - (p.delim("right") | Error("Expected a delimiter")) ) @@ -2586,13 +2587,23 @@ def overline(self, s, loc, toks): def _auto_sized_delimiter(self, front, middle, back): state = self.get_state() if len(middle): - height = max(x.height for x in middle) - depth = max(x.depth for x in middle) + height = max([x.height for x in middle if not isinstance(x, str)]) + depth = max([x.depth for x in middle if not isinstance(x, str)]) factor = None + for idx, el in enumerate(middle): + if isinstance(el, str) and el == '\\middle': + c = middle[idx + 1] + if c != '.': + middle[idx + 1] = AutoHeightChar( + c, height, depth, state, factor=factor) + else: + middle.remove(c) + del middle[idx] else: height = 0 depth = 0 factor = 1.0 + parts = [] # \left. and \right. aren't supposed to produce any symbols if front != '.': diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext1_dejavusans_07.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext1_dejavusans_07.png new file mode 100644 index 0000000000000000000000000000000000000000..a84cd1d282740725005f87c53687a2dc7bed6996 GIT binary patch literal 5696 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 R1~9LMs48hGmcXCA{tq}X@Oc0L literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index 0a3354954280..dab981f29a23 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -136,6 +136,7 @@ r'$\text{text}_{\text{sub}}^{\text{sup}} + \text{\$foo\$} + \frac{\text{num}}{\mathbf{\text{den}}}\text{with space, curly brackets \{\}, and dash -}$', r'$\boldsymbol{abcde} \boldsymbol{+} \boldsymbol{\Gamma + \Omega} \boldsymbol{01234} \boldsymbol{\alpha * \beta}$', r'$\left\lbrace\frac{\left\lbrack A^b_c\right\rbrace}{\left\leftbrace D^e_f \right\rbrack}\right\rightbrace\ \left\leftparen\max_{x} \left\lgroup \frac{A}{B}\right\rgroup \right\rightparen$', + r'$\left( a\middle. b \right)$ $\left( \frac{a}{b} \middle\vert x_i \in P^S \right)$ $\left[ 1 - \middle| a\middle| + \left( x - \left\lfloor \dfrac{a}{b}\right\rfloor \right) \right]$', ] digits = "0123456789"