def draw_unicode(self, gc, x, y, s, prop, angle): """draw a unicode string. ps doesn't have unicode support, so we have to do this the hard way """ font = self._get_font_ttf(prop) self.set_color(*gc.get_rgb()) self.set_font(font.get_sfnt()[(1, 0, 0, 6)], prop.get_size_in_points()) cmap = font.get_charmap() glyphd = reverse_dict(cmap) lastgind = None # print 'text', s lines = [] thisx, thisy = 0, 0 for c in s: ccode = ord(c) gind = glyphd.get(ccode) if gind is None: ccode = ord("?") name = ".notdef" gind = 0 else: name = font.get_glyph_name(gind) glyph = font.load_char(ccode) if lastgind is not None: kern = font.get_kerning(lastgind, gind, KERNING_UNFITTED) else: kern = 0 lastgind = gind thisx += kern / 64.0 lines.append("%f %f m /%s glyphshow" % (thisx, thisy, name)) thisx += glyph.linearHoriAdvance / 65536.0 thetext = "\n".join(lines) ps = ( """gsave %(x)f %(y)f translate %(angle)f rotate %(thetext)s grestore """ % locals() ) self._pswriter.write(ps)
def draw_unicode(self, gc, x, y, s, prop, angle): """draw a unicode string. ps doesn't have unicode support, so we have to do this the hard way """ font = self._get_font_ttf(prop) self.set_color(*gc.get_rgb()) self.set_font(font.get_sfnt()[(1,0,0,6)], prop.get_size_in_points()) cmap = font.get_charmap() glyphd = reverse_dict(cmap) lastgind = None #print 'text', s lines = [] thisx, thisy = 0,0 for c in s: ccode = ord(c) gind = glyphd.get(ccode) if gind is None: ccode = ord('?') name = '.notdef' gind = 0 else: name = font.get_glyph_name(gind) glyph = font.load_char(ccode) if lastgind is not None: kern = font.get_kerning(lastgind, gind, KERNING_UNFITTED) else: kern = 0 lastgind = gind thisx += kern/64.0 lines.append('%f %f m /%s glyphshow'%(thisx, thisy, name)) thisx += glyph.linearHoriAdvance/65536.0 thetext = '\n'.join(lines) ps = """gsave %(x)f %(y)f translate %(angle)f rotate %(thetext)s grestore """ % locals() self._pswriter.write(ps)