@@ -321,13 +321,8 @@ def set_linedash(self, offset, seq, store=True):
321
321
self .linedash = (offset , seq )
322
322
323
323
def set_font (self , fontname , fontsize , store = True ):
324
- if mpl .rcParams ['ps.useafm' ]:
325
- return
326
324
if (fontname , fontsize ) != (self .fontname , self .fontsize ):
327
- out = ("/%s findfont\n "
328
- "%1.3f scalefont\n "
329
- "setfont\n " % (fontname , fontsize ))
330
- self ._pswriter .write (out )
325
+ self ._pswriter .write (f"/{ fontname } { fontsize :1.3f} selectfont\n " )
331
326
if store :
332
327
self .fontname = fontname
333
328
self .fontsize = fontsize
@@ -616,65 +611,43 @@ def draw_text(self, gc, x, y, s, prop, angle, ismath=False, mtext=None):
616
611
if ismath == 'TeX' :
617
612
return self .draw_tex (gc , x , y , s , prop , angle )
618
613
619
- elif ismath :
614
+ if ismath :
620
615
return self .draw_mathtext (gc , x , y , s , prop , angle )
621
616
622
- elif mpl .rcParams ['ps.useafm' ]:
623
- self .set_color (* gc .get_rgb ())
624
-
617
+ if mpl .rcParams ['ps.useafm' ]:
625
618
font = self ._get_font_afm (prop )
626
- fontname = font .get_fontname ()
627
- fontsize = prop .get_size_in_points ()
628
- scale = 0.001 * fontsize
619
+ scale = 0.001 * prop .get_size_in_points ()
629
620
630
621
thisx = 0
631
- last_name = None
632
- lines = []
622
+ last_name = None # kerns returns 0 for None.
623
+ xs_names = []
633
624
for c in s :
634
625
name = uni2type1 .get (ord (c ), f"uni{ ord (c ):04X} " )
635
626
try :
636
627
width = font .get_width_from_char_name (name )
637
628
except KeyError :
638
629
name = 'question'
639
630
width = font .get_width_char ('?' )
640
- if last_name is not None :
641
- kern = font .get_kern_dist_from_name (last_name , name )
642
- else :
643
- kern = 0
631
+ kern = font .get_kern_dist_from_name (last_name , name )
644
632
last_name = name
645
633
thisx += kern * scale
646
-
647
- lines .append ('%f 0 m /%s glyphshow' % (thisx , name ))
648
-
634
+ xs_names .append ((thisx , name ))
649
635
thisx += width * scale
650
636
651
- thetext = "\n " .join (lines )
652
- self ._pswriter .write (f"""\
653
- gsave
654
- /{ fontname } findfont
655
- { fontsize } scalefont
656
- setfont
657
- { x :f} { y :f} translate
658
- { angle :f} rotate
659
- { thetext }
660
- grestore
661
- """ )
662
-
663
637
else :
664
638
font = self ._get_font_ttf (prop )
665
639
font .set_text (s , 0 , flags = LOAD_NO_HINTING )
666
640
self ._character_tracker .track (font , s )
641
+ xs_names = [(item .x , font .get_glyph_name (item .glyph_idx ))
642
+ for item in _text_layout .layout (s , font )]
667
643
668
- self .set_color (* gc .get_rgb ())
669
- ps_name = (font .postscript_name
670
- .encode ('ascii' , 'replace' ).decode ('ascii' ))
671
- self .set_font (ps_name , prop .get_size_in_points ())
672
-
673
- thetext = '\n ' .join (
674
- '{:f} 0 m /{:s} glyphshow'
675
- .format (item .x , font .get_glyph_name (item .glyph_idx ))
676
- for item in _text_layout .layout (s , font ))
677
- self ._pswriter .write (f"""\
644
+ self .set_color (* gc .get_rgb ())
645
+ ps_name = (font .postscript_name
646
+ .encode ("ascii" , "replace" ).decode ("ascii" ))
647
+ self .set_font (ps_name , prop .get_size_in_points ())
648
+ thetext = "\n " .join (f"{ x :f} 0 m /{ name :s} glyphshow"
649
+ for x , name in xs_names )
650
+ self ._pswriter .write (f"""\
678
651
gsave
679
652
{ x :f} { y :f} translate
680
653
{ angle :f} rotate
@@ -702,9 +675,7 @@ def draw_mathtext(self, gc, x, y, s, prop, angle):
702
675
if (font .postscript_name , fontsize ) != lastfont :
703
676
lastfont = font .postscript_name , fontsize
704
677
self ._pswriter .write (
705
- f"/{ font .postscript_name } findfont\n "
706
- f"{ fontsize } scalefont\n "
707
- f"setfont\n " )
678
+ f"/{ font .postscript_name } { fontsize } selectfont\n " )
708
679
symbol_name = (
709
680
font .get_name_char (chr (num )) if isinstance (font , AFM ) else
710
681
font .get_glyph_name (font .get_char_index (num )))
0 commit comments