Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ebfbc4a

Browse files
committed
Merge pull request #6073 from crazyo/master
fixed #6028
1 parent 732efa3 commit ebfbc4a

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

lib/matplotlib/mathtext.py

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,17 @@
6868
##############################################################################
6969
# FONTS
7070

71-
def get_unicode_index(symbol):
72-
"""get_unicode_index(symbol) -> integer
71+
def get_unicode_index(symbol, math=True):
72+
"""get_unicode_index(symbol, [bool]) -> integer
7373
7474
Return the integer index (from the Unicode table) of symbol. *symbol*
7575
can be a single unicode character, a TeX command (i.e. r'\pi'), or a
7676
Type1 symbol name (i.e. 'phi').
77+
If math is False, the current symbol should be treated as a non-math symbol.
7778
"""
79+
# for a non-math symbol, simply return its unicode index
80+
if not math:
81+
return ord(symbol)
7882
# From UTF #25: U+2212 minus sign is the preferred
7983
# representation of the unary and binary minus sign rather than
8084
# the ASCII-derived U+002D hyphen-minus, because minus sign is
@@ -438,7 +442,7 @@ def get_kern(self, font1, fontclass1, sym1, fontsize1,
438442
"""
439443
return 0.
440444

441-
def get_metrics(self, font, font_class, sym, fontsize, dpi):
445+
def get_metrics(self, font, font_class, sym, fontsize, dpi, math=True):
442446
"""
443447
*font*: one of the TeX font names::
444448
@@ -452,6 +456,8 @@ def get_metrics(self, font, font_class, sym, fontsize, dpi):
452456
453457
*dpi*: current dots-per-inch
454458
459+
*math*: whether sym is a math character
460+
455461
Returns an object with the following attributes:
456462
457463
- *advance*: The advance distance (in points) of the glyph.
@@ -466,7 +472,7 @@ def get_metrics(self, font, font_class, sym, fontsize, dpi):
466472
the glyph. This corresponds to TeX's definition of
467473
"height".
468474
"""
469-
info = self._get_info(font, font_class, sym, fontsize, dpi)
475+
info = self._get_info(font, font_class, sym, fontsize, dpi, math)
470476
return info.metrics
471477

472478
def set_canvas_size(self, w, h, d):
@@ -582,14 +588,14 @@ def _get_offset(self, font, glyph, fontsize, dpi):
582588
return ((glyph.height/64.0/2.0) + (fontsize/3.0 * dpi/72.0))
583589
return 0.
584590

585-
def _get_info(self, fontname, font_class, sym, fontsize, dpi):
591+
def _get_info(self, fontname, font_class, sym, fontsize, dpi, math=True):
586592
key = fontname, font_class, sym, fontsize, dpi
587593
bunch = self.glyphd.get(key)
588594
if bunch is not None:
589595
return bunch
590596

591597
font, num, symbol_name, fontsize, slanted = \
592-
self._get_glyph(fontname, font_class, sym, fontsize)
598+
self._get_glyph(fontname, font_class, sym, fontsize, math)
593599

594600
font.set_size(fontsize, dpi)
595601
glyph = font.load_char(
@@ -679,7 +685,7 @@ def __init__(self, *args, **kwargs):
679685

680686
_slanted_symbols = set(r"\int \oint".split())
681687

682-
def _get_glyph(self, fontname, font_class, sym, fontsize):
688+
def _get_glyph(self, fontname, font_class, sym, fontsize, math=True):
683689
symbol_name = None
684690
font = None
685691
if fontname in self.fontmap and sym in latex_to_bakoma:
@@ -699,7 +705,7 @@ def _get_glyph(self, fontname, font_class, sym, fontsize):
699705

700706
if symbol_name is None:
701707
return self._stix_fallback._get_glyph(
702-
fontname, font_class, sym, fontsize)
708+
fontname, font_class, sym, fontsize, math)
703709

704710
return font, num, symbol_name, fontsize, slanted
705711

@@ -796,7 +802,7 @@ def __init__(self, *args, **kwargs):
796802
def _map_virtual_font(self, fontname, font_class, uniindex):
797803
return fontname, uniindex
798804

799-
def _get_glyph(self, fontname, font_class, sym, fontsize):
805+
def _get_glyph(self, fontname, font_class, sym, fontsize, math=True):
800806
found_symbol = False
801807

802808
if self.use_cmex:
@@ -807,7 +813,7 @@ def _get_glyph(self, fontname, font_class, sym, fontsize):
807813

808814
if not found_symbol:
809815
try:
810-
uniindex = get_unicode_index(sym)
816+
uniindex = get_unicode_index(sym, math)
811817
found_symbol = True
812818
except ValueError:
813819
uniindex = ord('?')
@@ -901,11 +907,11 @@ def __init__(self, *args, **kwargs):
901907
self.fontmap[key] = fullpath
902908
self.fontmap[name] = fullpath
903909

904-
def _get_glyph(self, fontname, font_class, sym, fontsize):
910+
def _get_glyph(self, fontname, font_class, sym, fontsize, math=True):
905911
""" Override prime symbol to use Bakoma """
906912
if sym == r'\prime':
907913
return self.bakoma._get_glyph(fontname,
908-
font_class, sym, fontsize)
914+
font_class, sym, fontsize, math)
909915
else:
910916
# check whether the glyph is available in the display font
911917
uniindex = get_unicode_index(sym)
@@ -914,10 +920,10 @@ def _get_glyph(self, fontname, font_class, sym, fontsize):
914920
glyphindex = font.get_char_index(uniindex)
915921
if glyphindex != 0:
916922
return super(DejaVuFonts, self)._get_glyph('ex',
917-
font_class, sym, fontsize)
923+
font_class, sym, fontsize, math)
918924
# otherwise return regular glyph
919925
return super(DejaVuFonts, self)._get_glyph(fontname,
920-
font_class, sym, fontsize)
926+
font_class, sym, fontsize, math)
921927

922928

923929
class DejaVuSerifFonts(DejaVuFonts):
@@ -1123,7 +1129,7 @@ def _get_font(self, font):
11231129
self.fonts[cached_font.get_fontname()] = cached_font
11241130
return cached_font
11251131

1126-
def _get_info (self, fontname, font_class, sym, fontsize, dpi):
1132+
def _get_info (self, fontname, font_class, sym, fontsize, dpi, math=True):
11271133
'load the cmfont, metrics and glyph with caching'
11281134
key = fontname, sym, fontsize, dpi
11291135
tup = self.glyphd.get(key)
@@ -1449,14 +1455,15 @@ class Char(Node):
14491455
from width) must be converted into a :class:`Kern` node when the
14501456
:class:`Char` is added to its parent :class:`Hlist`.
14511457
"""
1452-
def __init__(self, c, state):
1458+
def __init__(self, c, state, math=True):
14531459
Node.__init__(self)
14541460
self.c = c
14551461
self.font_output = state.font_output
14561462
self.font = state.font
14571463
self.font_class = state.font_class
14581464
self.fontsize = state.fontsize
14591465
self.dpi = state.dpi
1466+
self.math = math
14601467
# The real width, height and depth will be set during the
14611468
# pack phase, after we know the real fontsize
14621469
self._update_metrics()
@@ -1466,7 +1473,7 @@ def __internal_repr__(self):
14661473

14671474
def _update_metrics(self):
14681475
metrics = self._metrics = self.font_output.get_metrics(
1469-
self.font, self.font_class, self.c, self.fontsize, self.dpi)
1476+
self.font, self.font_class, self.c, self.fontsize, self.dpi, self.math)
14701477
if self.c == ' ':
14711478
self.width = metrics.advance
14721479
else:
@@ -2580,7 +2587,7 @@ def math(self, s, loc, toks):
25802587
def non_math(self, s, loc, toks):
25812588
#~ print "non_math", toks
25822589
s = toks[0].replace(r'\$', '$')
2583-
symbols = [Char(c, self.get_state()) for c in s]
2590+
symbols = [Char(c, self.get_state(), math=False) for c in s]
25842591
hlist = Hlist(symbols)
25852592
# We're going into math now, so set font to 'it'
25862593
self.push_state()

0 commit comments

Comments
 (0)