Revision: 7948
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7948&view=rev
Author:   leejjoon
Date:     2009-11-07 06:53:49 +0000 (Sat, 07 Nov 2009)

Log Message:
-----------
textpath.get_glyph_tex tries set the font charmap

Modified Paths:
--------------
    trunk/matplotlib/lib/matplotlib/textpath.py
    trunk/matplotlib/src/ft2font.cpp
    trunk/matplotlib/src/ft2font.h

Modified: trunk/matplotlib/lib/matplotlib/textpath.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/textpath.py 2009-11-06 22:33:34 UTC (rev 
7947)
+++ trunk/matplotlib/lib/matplotlib/textpath.py 2009-11-07 06:53:49 UTC (rev 
7948)
@@ -19,7 +19,7 @@
 
     FONT_SCALE = 50.
     DPI = 72
-    
+
     def __init__(self):
         """
         Initialization
@@ -44,7 +44,7 @@
 
     def _get_hinting_flag(self):
         return LOAD_NO_HINTING
-    
+
     def _get_char_id(self, font, ccode):
         """
         Return a unique id for the given font and character-code set.
@@ -64,7 +64,7 @@
 
     def glyph_to_path(self, glyph, currx=0.):
         """
-        convert the ft2font glyph to vertices and codes. 
+        convert the ft2font glyph to vertices and codes.
         """
         #Mostly copied from backend_svg.py.
 
@@ -102,14 +102,14 @@
 
         *s*
           text to be converted
-          
+
         *usetex*
           If True, use matplotlib usetex mode.
 
         *ismath*
           If True, use mathtext parser. Effective only if usetex == False.
 
-          
+
         """
         if usetex==False:
             if ismath == False:
@@ -121,26 +121,26 @@
             glyph_info, glyph_map, rects = self.get_glyphs_tex(prop, s)
 
         verts, codes = [], []
-        
+
         for glyph_id, xposition, yposition, scale in glyph_info:
             verts1, codes1 = glyph_map[glyph_id]
             if verts1:
-                verts1 = np.array(verts1)*scale + [xposition, yposition] 
+                verts1 = np.array(verts1)*scale + [xposition, yposition]
             verts.extend(verts1)
             codes.extend(codes1)
 
         for verts1, codes1 in rects:
             verts.extend(verts1)
             codes.extend(codes1)
-            
+
         return verts, codes
 
-            
+
     def get_glyphs_with_font(self, font, s, glyph_map=None,
                              return_new_glyphs_only=False):
         """
         convert the string *s* to vertices and codes using the
-        provided ttf font. 
+        provided ttf font.
         """
 
         # Mostly copied from backend_svg.py.
@@ -151,7 +151,7 @@
         currx = 0
         xpositions = []
         glyph_ids = []
-        
+
         if glyph_map is None:
             glyph_map = dict()
 
@@ -190,14 +190,14 @@
             glyph_ids.append(char_id)
 
             currx += horiz_advance
-            
+
             lastgind = gind
 
         ypositions = [0] * len(xpositions)
         sizes = [1.] * len(xpositions)
 
         rects = []
-        
+
         return zip(glyph_ids, xpositions, ypositions, sizes), glyph_map_new, 
rects
 
 
@@ -275,14 +275,14 @@
         """
 
         # codes are modstly borrowed from pdf backend.
-        
+
         texmanager = self.get_texmanager()
 
         if self.tex_font_map is None:
             self.tex_font_map = 
dviread.PsfontsMap(dviread.find_tex_file('pdftex.map'))
 
         fontsize = prop.get_size_in_points()
-        if hasattr(texmanager, "get_dvi"): # 
+        if hasattr(texmanager, "get_dvi"): #
             dvifilelike = texmanager.get_dvi(s, self.FONT_SCALE)
             dvi = dviread.DviFromFileLike(dvifilelike, self.DPI)
         else:
@@ -312,6 +312,10 @@
             if font_and_encoding is None:
                 font_bunch =  self.tex_font_map[dvifont.texname]
                 font = FT2Font(font_bunch.filename)
+                try:
+                    font.select_charmap(1094992451) # select ADOBE_CUSTOM
+                except ValueError:
+                    font.set_charmap(0)
                 if font_bunch.encoding:
                     enc = dviread.Encoding(font_bunch.encoding)
                 else:
@@ -322,25 +326,15 @@
                 font, enc = font_and_encoding
 
             ft2font_flag = LOAD_TARGET_LIGHT
-            if enc:
-                ng = font.get_name_index(enc.encoding[glyph])
-            else:
-                ng = glyph
 
-            char_id = self._get_char_id_ps(font, ng)
+            char_id = self._get_char_id_ps(font, glyph)
 
             if not char_id in glyph_map:
                 font.clear()
                 font.set_size(self.FONT_SCALE, self.DPI)
 
-                if ng == 0:
-                    # While 0 is a valid index (e.g., "-", "\Gamma"),
-                    # font.load_glyph(0) does not seem to work. This
-                    # may not be a general solution.
-                    glyph0 = font.load_glyph(128, flags=ft2font_flag)
-                else: 
-                    glyph0 = font.load_glyph(ng, flags=ft2font_flag)
-                    
+                glyph0 = font.load_char(glyph, flags=ft2font_flag)
+
                 glyph_map_new[char_id] = self.glyph_to_path(glyph0)
 
             glyph_ids.append(char_id)
@@ -349,7 +343,7 @@
             sizes.append(dvifont.size/self.FONT_SCALE)
 
         myrects = []
-        
+
         for ox, oy, h, w in page.boxes:
             vert1=[(ox, oy), (ox+w, oy), (ox+w, oy+h), (ox, oy+h), (ox, oy), 
(0,0)]
             code1 = [Path.MOVETO,
@@ -358,13 +352,14 @@
             myrects.append((vert1, code1))
 
 
-        return zip(glyph_ids, xpositions, ypositions, sizes), glyph_map, 
myrects
+        return zip(glyph_ids, xpositions, ypositions, sizes), \
+               glyph_map_new, myrects
 
 
 
 
-    
 
+
 from matplotlib.font_manager import FontProperties
 from matplotlib import rcParams
 from matplotlib.transforms import Affine2D
@@ -384,7 +379,7 @@
         it simply is a path, not an artist. You need to use the
         PathPatch (or other artists) to draw this path onto the
         canvas.
-        
+
         xy : position of the text.
         s : text
         size : font size
@@ -437,7 +432,7 @@
         Return the codes
         """
         return self._codes
-    
+
     vertices = property(_get_vertices)
     codes = property(_get_codes)
 
@@ -463,7 +458,7 @@
         Returns True if the given string *s* contains any mathtext.
         """
         # copied from Text.is_math_text -JJL
-        
+
         # Did we find an even number of non-escaped dollar signs?
         # If so, treat is as math text.
         dollar_count = s.count(r'$') - s.count(r'\$')
@@ -489,7 +484,7 @@
         else:
             clean_line, ismath = self.is_math_text(s)
             verts, codes = text_to_path.get_text_path(prop, clean_line, 
ismath=ismath)
-        
+
         return verts, codes
 
 

Modified: trunk/matplotlib/src/ft2font.cpp
===================================================================
--- trunk/matplotlib/src/ft2font.cpp    2009-11-06 22:33:34 UTC (rev 7947)
+++ trunk/matplotlib/src/ft2font.cpp    2009-11-07 06:53:49 UTC (rev 7948)
@@ -885,6 +885,24 @@
   return Py::Object();
 }
 
+char FT2Font::select_charmap__doc__[] =
+"select_charmap(i)\n"
+"\n"
+"select charmap i where i is one of the FT_Encoding number\n"
+;
+
+Py::Object
+FT2Font::select_charmap(const Py::Tuple & args) {
+  _VERBOSE("FT2Font::set_charmap");
+  args.verify_length(1);
+
+  unsigned long i = Py::Long(args[0]);
+  //if (FT_Select_Charmap( face, FT_ENCODING_ADOBE_CUSTOM ))
+  if (FT_Select_Charmap( face, (FT_Encoding) i ))
+    throw Py::ValueError("Could not set the charmap");
+  return Py::Object();
+}
+
 FT_BBox
 FT2Font::compute_string_bbox(  ) {
   _VERBOSE("FT2Font::compute_string_bbox");
@@ -1368,6 +1386,7 @@
   FT_UInt index;
   Py::Dict charmap;
 
+  //std::cout << "asd" << face->charmaps[1]->encoding << std::endl;
   FT_ULong code = FT_Get_First_Char(face, &index);
   while (index != 0) {
     charmap[Py::Long((long) code)] = Py::Int((int) index);
@@ -1841,6 +1860,8 @@
                     FT2Font::set_size__doc__);
   add_varargs_method("set_charmap", &FT2Font::set_charmap,
                     FT2Font::set_charmap__doc__);
+  add_varargs_method("select_charmap", &FT2Font::select_charmap,
+                    FT2Font::select_charmap__doc__);
 
   add_varargs_method("get_width_height", &FT2Font::get_width_height,
                     FT2Font::get_width_height__doc__);

Modified: trunk/matplotlib/src/ft2font.h
===================================================================
--- trunk/matplotlib/src/ft2font.h      2009-11-06 22:33:34 UTC (rev 7947)
+++ trunk/matplotlib/src/ft2font.h      2009-11-07 06:53:49 UTC (rev 7948)
@@ -95,6 +95,7 @@
   Py::Object clear(const Py::Tuple & args);
   Py::Object set_size(const Py::Tuple & args);
   Py::Object set_charmap(const Py::Tuple & args);
+  Py::Object select_charmap(const Py::Tuple & args);
   Py::Object set_text(const Py::Tuple & args, const Py::Dict & kwargs);
   Py::Object get_kerning(const Py::Tuple & args);
   Py::Object get_num_glyphs(const Py::Tuple & args);
@@ -137,6 +138,7 @@
   static char clear__doc__ [];
   static char set_size__doc__ [];
   static char set_charmap__doc__ [];
+  static char select_charmap__doc__ [];
   static char set_text__doc__ [];
   static char get_glyph__doc__ [];
   static char get_num_glyphs__doc__ [];


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to