GeezerVison is showing github.com — Merge pull request #29936 from QuLogic/bakoma-sizes · matplotlib/matplotlib@b6be596
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: lib/matplotlib/_mathtext.py +35-55Lines changed: 35 additions & 55 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -482,60 +482,40 @@ def _get_glyph(self, fontname: str, font_class: str, | 482 | 482 | else: | 483 | 483 | return self._stix_fallback._get_glyph(fontname, font_class, sym) | 484 | 484 |
| 485 | | - # The Bakoma fonts contain many pre-sized alternatives for the | 486 | | - # delimiters. The AutoSizedChar class will use these alternatives | 487 | | - # and select the best (closest sized) glyph. | | 485 | + # The Bakoma fonts contain many pre-sized alternatives for the delimiters. The | | 486 | + # Auto(Height|Width)Char classes will use these alternatives and select the best | | 487 | + # (closest sized) glyph. | | 488 | + _latex_sizes = ('big', 'Big', 'bigg', 'Bigg') | 488 | 489 | _size_alternatives = { | 489 | | - '(': [('rm', '('), ('ex', '\xa1'), ('ex', '\xb3'), | 490 | | - ('ex', '\xb5'), ('ex', '\xc3')], | 491 | | - ')': [('rm', ')'), ('ex', '\xa2'), ('ex', '\xb4'), | 492 | | - ('ex', '\xb6'), ('ex', '\x21')], | 493 | | - '{': [('cal', '{'), ('ex', '\xa9'), ('ex', '\x6e'), | 494 | | - ('ex', '\xbd'), ('ex', '\x28')], | 495 | | - '}': [('cal', '}'), ('ex', '\xaa'), ('ex', '\x6f'), | 496 | | - ('ex', '\xbe'), ('ex', '\x29')], | 497 | | - # The fourth size of '[' is mysteriously missing from the BaKoMa | 498 | | - # font, so I've omitted it for both '[' and ']' | 499 | | - '[': [('rm', '['), ('ex', '\xa3'), ('ex', '\x68'), | 500 | | - ('ex', '\x22')], | 501 | | - ']': [('rm', ']'), ('ex', '\xa4'), ('ex', '\x69'), | 502 | | - ('ex', '\x23')], | 503 | | - r'\lfloor': [('ex', '\xa5'), ('ex', '\x6a'), | 504 | | - ('ex', '\xb9'), ('ex', '\x24')], | 505 | | - r'\rfloor': [('ex', '\xa6'), ('ex', '\x6b'), | 506 | | - ('ex', '\xba'), ('ex', '\x25')], | 507 | | - r'\lceil': [('ex', '\xa7'), ('ex', '\x6c'), | 508 | | - ('ex', '\xbb'), ('ex', '\x26')], | 509 | | - r'\rceil': [('ex', '\xa8'), ('ex', '\x6d'), | 510 | | - ('ex', '\xbc'), ('ex', '\x27')], | 511 | | - r'\langle': [('ex', '\xad'), ('ex', '\x44'), | 512 | | - ('ex', '\xbf'), ('ex', '\x2a')], | 513 | | - r'\rangle': [('ex', '\xae'), ('ex', '\x45'), | 514 | | - ('ex', '\xc0'), ('ex', '\x2b')], | 515 | | - r'\__sqrt__': [('ex', '\x70'), ('ex', '\x71'), | 516 | | - ('ex', '\x72'), ('ex', '\x73')], | 517 | | - r'\backslash': [('ex', '\xb2'), ('ex', '\x2f'), | 518 | | - ('ex', '\xc2'), ('ex', '\x2d')], | 519 | | - r'/': [('rm', '/'), ('ex', '\xb1'), ('ex', '\x2e'), | 520 | | - ('ex', '\xcb'), ('ex', '\x2c')], | 521 | | - r'\widehat': [('rm', '\x5e'), ('ex', '\x62'), ('ex', '\x63'), | 522 | | - ('ex', '\x64')], | 523 | | - r'\widetilde': [('rm', '\x7e'), ('ex', '\x65'), ('ex', '\x66'), | 524 | | - ('ex', '\x67')], | 525 | | - r'<': [('cal', 'h'), ('ex', 'D')], | 526 | | - r'>': [('cal', 'i'), ('ex', 'E')] | 527 | | - } | | 490 | + '(': [('rm', '('), *[('ex', fr'\__parenleft{s}__') for s in _latex_sizes]], | | 491 | + ')': [('rm', ')'), *[('ex', fr'\__parenright{s}__') for s in _latex_sizes]], | | 492 | + '{': [('ex', fr'\__braceleft{s}__') for s in _latex_sizes], | | 493 | + '}': [('ex', fr'\__braceright{s}__') for s in _latex_sizes], | | 494 | + '[': [('rm', '['), *[('ex', fr'\__bracketleft{s}__') for s in _latex_sizes]], | | 495 | + ']': [('rm', ']'), *[('ex', fr'\__bracketright{s}__') for s in _latex_sizes]], | | 496 | + '<': [('cal', r'\__angbracketleft__'), | | 497 | + *[('ex', fr'\__angbracketleft{s}__') for s in _latex_sizes]], | | 498 | + '>': [('cal', r'\__angbracketright__'), | | 499 | + *[('ex', fr'\__angbracketright{s}__') for s in _latex_sizes]], | | 500 | + r'\lfloor': [('ex', fr'\__floorleft{s}__') for s in _latex_sizes], | | 501 | + r'\rfloor': [('ex', fr'\__floorright{s}__') for s in _latex_sizes], | | 502 | + r'\lceil': [('ex', fr'\__ceilingleft{s}__') for s in _latex_sizes], | | 503 | + r'\rceil': [('ex', fr'\__ceilingright{s}__') for s in _latex_sizes], | | 504 | + r'\__sqrt__': [('ex', fr'\__radical{s}__') for s in _latex_sizes], | | 505 | + r'\backslash': [('ex', fr'\__backslash{s}__') for s in _latex_sizes], | | 506 | + r'/': [('rm', '/'), *[('ex', fr'\__slash{s}__') for s in _latex_sizes]], | | 507 | + r'\widehat': [('rm', '\x5e'), ('ex', r'\__hatwide__'), ('ex', r'\__hatwider__'), | | 508 | + ('ex', r'\__hatwidest__')], | | 509 | + r'\widetilde': [('rm', '\x7e'), ('ex', r'\__tildewide__'), | | 510 | + ('ex', r'\__tildewider__'), ('ex', r'\__tildewidest__')], | | 511 | + } | 528 | 512 |
| 529 | | - for alias, target in [(r'\leftparen', '('), | 530 | | - (r'\rightparen', ')'), | 531 | | - (r'\leftbrace', '{'), | 532 | | - (r'\rightbrace', '}'), | 533 | | - (r'\leftbracket', '['), | 534 | | - (r'\rightbracket', ']'), | 535 | | - (r'\{', '{'), | 536 | | - (r'\}', '}'), | 537 | | - (r'\[', '['), | 538 | | - (r'\]', ']')]: | | 513 | + for alias, target in [(r'\leftparen', '('), (r'\rightparen', ')'), | | 514 | + (r'\leftbrace', '{'), (r'\rightbrace', '}'), | | 515 | + (r'\leftbracket', '['), (r'\rightbracket', ']'), | | 516 | + (r'\langle', '<'), (r'\rangle', '>'), | | 517 | + (r'\{', '{'), (r'\}', '}'), | | 518 | + (r'\[', '['), (r'\]', ']')]: | 539 | 519 | _size_alternatives[alias] = _size_alternatives[target] | 540 | 520 |
| 541 | 521 | def get_sized_alternatives_for_symbol(self, fontname: str, | @@ -1531,7 +1511,7 @@ class AutoHeightChar(Hlist): | 1531 | 1511 | """ | 1532 | 1512 |
| 1533 | 1513 | def __init__(self, c: str, height: float, depth: float, state: ParserState, | 1534 | | - always: bool = False, factor: float | None = None): | | 1514 | + factor: float | None = None): | 1535 | 1515 | alternatives = state.fontset.get_sized_alternatives_for_symbol(state.font, c) | 1536 | 1516 |
| 1537 | 1517 | x_height = state.fontset.get_xheight(state.font, state.fontsize, state.dpi) | @@ -1568,7 +1548,7 @@ class AutoWidthChar(Hlist): | 1568 | 1548 | always just return a scaled version of the glyph. | 1569 | 1549 | """ | 1570 | 1550 |
| 1571 | | - def __init__(self, c: str, width: float, state: ParserState, always: bool = False, | | 1551 | + def __init__(self, c: str, width: float, state: ParserState, | 1572 | 1552 | char_class: type[Char] = Char): | 1573 | 1553 | alternatives = state.fontset.get_sized_alternatives_for_symbol(state.font, c) | 1574 | 1554 |
| @@ -2706,7 +2686,7 @@ def sqrt(self, toks: ParseResults) -> T.Any: | 2706 | 2686 | # the height so it doesn't seem cramped | 2707 | 2687 | height = body.height - body.shift_amount + 5 * thickness | 2708 | 2688 | depth = body.depth + body.shift_amount | 2709 | | - check = AutoHeightChar(r'\__sqrt__', height, depth, state, always=True) | | 2689 | + check = AutoHeightChar(r'\__sqrt__', height, depth, state) | 2710 | 2690 | height = check.height - check.shift_amount | 2711 | 2691 | depth = check.depth + check.shift_amount | 2712 | 2692 |
| |
Collapse file Copy file name to clipboardExpand all lines: lib/matplotlib/_mathtext_data.py +71Lines changed: 71 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 36 | 36 | '{' : ('cmex10', 0xa9), | 37 | 37 | '}' : ('cmex10', 0xaa), | 38 | 38 |
| | 39 | + '\\__angbracketleft__' : ('cmsy10', 0x68), | | 40 | + '\\__angbracketright__' : ('cmsy10', 0x69), | | 41 | + '\\__angbracketleftbig__' : ('cmex10', 0xad), | | 42 | + '\\__angbracketleftBig__' : ('cmex10', 0x44), | | 43 | + '\\__angbracketleftbigg__' : ('cmex10', 0xbf), | | 44 | + '\\__angbracketleftBigg__' : ('cmex10', 0x2a), | | 45 | + '\\__angbracketrightbig__' : ('cmex10', 0xae), | | 46 | + '\\__angbracketrightBig__' : ('cmex10', 0x45), | | 47 | + '\\__angbracketrightbigg__' : ('cmex10', 0xc0), | | 48 | + '\\__angbracketrightBigg__' : ('cmex10', 0x2b), | | 49 | + '\\__backslashbig__' : ('cmex10', 0xb2), | | 50 | + '\\__backslashBig__' : ('cmex10', 0x2f), | | 51 | + '\\__backslashbigg__' : ('cmex10', 0xc2), | | 52 | + '\\__backslashBigg__' : ('cmex10', 0x2d), | | 53 | + '\\__braceleftbig__' : ('cmex10', 0xa9), | | 54 | + '\\__braceleftBig__' : ('cmex10', 0x6e), | | 55 | + '\\__braceleftbigg__' : ('cmex10', 0xbd), | | 56 | + '\\__braceleftBigg__' : ('cmex10', 0x28), | | 57 | + '\\__bracerightbig__' : ('cmex10', 0xaa), | | 58 | + '\\__bracerightBig__' : ('cmex10', 0x6f), | | 59 | + '\\__bracerightbigg__' : ('cmex10', 0xbe), | | 60 | + '\\__bracerightBigg__' : ('cmex10', 0x29), | | 61 | + '\\__bracketleftbig__' : ('cmex10', 0xa3), | | 62 | + '\\__bracketleftBig__' : ('cmex10', 0x68), | | 63 | + '\\__bracketleftbigg__' : ('cmex10', 0x2219), | | 64 | + '\\__bracketleftBigg__' : ('cmex10', 0x22), | | 65 | + '\\__bracketrightbig__' : ('cmex10', 0xa4), | | 66 | + '\\__bracketrightBig__' : ('cmex10', 0x69), | | 67 | + '\\__bracketrightbigg__' : ('cmex10', 0xb8), | | 68 | + '\\__bracketrightBigg__' : ('cmex10', 0x23), | | 69 | + '\\__ceilingleftbig__' : ('cmex10', 0xa7), | | 70 | + '\\__ceilingleftBig__' : ('cmex10', 0x6c), | | 71 | + '\\__ceilingleftbigg__' : ('cmex10', 0xbb), | | 72 | + '\\__ceilingleftBigg__' : ('cmex10', 0x26), | | 73 | + '\\__ceilingrightbig__' : ('cmex10', 0xa8), | | 74 | + '\\__ceilingrightBig__' : ('cmex10', 0x6d), | | 75 | + '\\__ceilingrightbigg__' : ('cmex10', 0xbc), | | 76 | + '\\__ceilingrightBigg__' : ('cmex10', 0x27), | | 77 | + '\\__floorleftbig__' : ('cmex10', 0xa5), | | 78 | + '\\__floorleftBig__' : ('cmex10', 0x6a), | | 79 | + '\\__floorleftbigg__' : ('cmex10', 0xb9), | | 80 | + '\\__floorleftBigg__' : ('cmex10', 0x24), | | 81 | + '\\__floorrightbig__' : ('cmex10', 0xa6), | | 82 | + '\\__floorrightBig__' : ('cmex10', 0x6b), | | 83 | + '\\__floorrightbigg__' : ('cmex10', 0xba), | | 84 | + '\\__floorrightBigg__' : ('cmex10', 0x25), | | 85 | + '\\__hatwide__' : ('cmex10', 0x62), | | 86 | + '\\__hatwider__' : ('cmex10', 0x63), | | 87 | + '\\__hatwidest__' : ('cmex10', 0x64), | | 88 | + '\\__parenleftbig__' : ('cmex10', 0xa1), | | 89 | + '\\__parenleftBig__' : ('cmex10', 0xb3), | | 90 | + '\\__parenleftbigg__' : ('cmex10', 0xb5), | | 91 | + '\\__parenleftBigg__' : ('cmex10', 0xc3), | | 92 | + '\\__parenrightbig__' : ('cmex10', 0xa2), | | 93 | + '\\__parenrightBig__' : ('cmex10', 0xb4), | | 94 | + '\\__parenrightbigg__' : ('cmex10', 0xb6), | | 95 | + '\\__parenrightBigg__' : ('cmex10', 0x21), | | 96 | + '\\__radicalbig__' : ('cmex10', 0x70), | | 97 | + '\\__radicalBig__' : ('cmex10', 0x71), | | 98 | + '\\__radicalbigg__' : ('cmex10', 0x72), | | 99 | + '\\__radicalBigg__' : ('cmex10', 0x73), | | 100 | + '\\__slashbig__' : ('cmex10', 0xb1), | | 101 | + '\\__slashBig__' : ('cmex10', 0x2e), | | 102 | + '\\__slashbigg__' : ('cmex10', 0xc1), | | 103 | + '\\__slashBigg__' : ('cmex10', 0x2c), | | 104 | + '\\__tildewide__' : ('cmex10', 0x65), | | 105 | + '\\__tildewider__' : ('cmex10', 0x66), | | 106 | + '\\__tildewidest__' : ('cmex10', 0x67), | | 107 | + | 39 | 108 | ',' : ('cmmi10', 0x3b), | 40 | 109 | '.' : ('cmmi10', 0x3a), | 41 | 110 | '/' : ('cmmi10', 0x3d), | | 1112 | 1181 | '|' : 0x2016, | 1113 | 1182 | '}' : 0x7d, | 1114 | 1183 | } | | 1184 | +tex2uni['__angbracketleft__'] = tex2uni['langle'] | | 1185 | +tex2uni['__angbracketright__'] = tex2uni['rangle'] | 1115 | 1186 |
| 1116 | 1187 | # Each element is a 4-tuple of the form: | 1117 | 1188 | # src_start, src_end, dst_font, dst_start | |
Collapse file Copy file name to clipboardExpand all lines: lib/matplotlib/tests/test_mathtext.py +11-2Lines changed: 11 additions & 2 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 125 | 125 | r'$,$ $.$ $1{,}234{, }567{ , }890$ and $1,234,567,890$', # github issue 5799 | 126 | 126 | r'$\left(X\right)_{a}^{b}$', # github issue 7615 | 127 | 127 | r'$\dfrac{\$100.00}{y}$', # github issue #1888 | 128 | | - r'$a=-b-c$' # github issue #28180 | | 128 | + r'$a=-b-c$', # github issue #28180 | 129 | 129 | ] | 130 | 130 | # 'svgastext' tests switch svg output to embed text as text (rather than as | 131 | 131 | # paths). | 132 | 132 | svgastext_math_tests = [ | 133 | 133 | r'$-$-', | | 134 | + # Check all AutoHeightChar substitutions. | | 135 | + *[ | | 136 | + r'$\left' + lc + r' M \middle/ ? \middle\backslash ? \right' + rc + ' ' + # Normal size. | | 137 | + r'\left' + lc + r' \frac{M}{B} \middle/ ? \middle\backslash ? \right' + rc + ' ' + # big size. | | 138 | + r'\left' + lc + r' \frac{\frac{M}{I}}{B} \middle/ ? \middle\backslash ? \right' + rc + ' ' + # bigg size. | | 139 | + r'\left' + lc + r' \frac{\frac{M}{I}}{\frac{B}{U}} \middle/ ? \middle\backslash ? \right' + rc + ' ' + # Big size. | | 140 | + r'\left' + lc + r'\frac{\frac{\frac{M}{I}}{N}}{\frac{\frac{B}{U}}{G}} \middle/ ? \middle\backslash ? \right' + rc + '$' # Bigg size. | | 141 | + for lc, rc in ['()', '[]', '<>', (r'\{', r'\}'), (r'\lfloor', r'\rfloor'), (r'\lceil', r'\rceil')] | | 142 | + ], | 134 | 143 | ] | 135 | 144 | # 'lightweight' tests test only a single fontset (dejavusans, which is the | 136 | 145 | # default) and only png outputs, in order to minimize the size of baseline | @@ -237,7 +246,7 @@ def test_mathtext_rendering_svgastext(baseline_images, fontset, index, text): | 237 | 246 | mpl.rcParams['svg.fonttype'] = 'none' # Minimize image size. | 238 | 247 | fig = plt.figure(figsize=(5.25, 0.75)) | 239 | 248 | fig.patch.set(visible=False) # Minimize image size. | 240 | | - fig.text(0.5, 0.5, text, | | 249 | + fig.text(0.5, 0.5, text, fontsize=16, | 241 | 250 | horizontalalignment='center', verticalalignment='center') | 242 | 251 |
| 243 | 252 |
| |
|