Package: freetype1-tools
Version: 1.4pre.20050518-0.5
Severity: normal
Tags: patch

I just discovered the ftstrpnm tool which is very useful for testing
font files without the need of installing them; unfortunately input is
limited to ASCII chars. The attached patch extends the support to wide
chars: the patch is less invasive as possible and I reckon there's
still space for loads of improvements.

regards,
Davide


--- test/ftstrpnm.c	2005-12-23 02:33:21.000000000 +0100
+++ test/ftstrpnm.c	2007-01-16 19:59:15.000000000 +0100
@@ -17,6 +17,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <locale.h>
 
 #include "common.h"
 #include "freetype.h"
@@ -175,7 +176,7 @@
 
   /* glyph management */
 
-  static void  Load_Glyphs( char*  txt, int  txtlen )
+  static void  Load_Glyphs( wchar_t*  txt, int  txtlen )
   {
     unsigned short  i, n, code, load_flags;
     unsigned short  num_glyphs = 0, no_cmap = 0;
@@ -224,8 +225,8 @@
 
     for ( i = 0; i < txtlen; ++i )
     {
-      unsigned char  j = txt[i];
 
+      wchar_t  j = txt[i];
 
       if ( TT_VALID( glyphs[j] ) )
         continue;
@@ -311,7 +312,7 @@
 
   /* rasterization stuff */
 
-  static void  Init_Raster_Areas( const char*  txt, int  txtlen )
+  static void  Init_Raster_Areas( wchar_t*  txt, int  txtlen )
   {
     int                  i, upm, ascent, descent;
     TT_Face_Properties   properties;
@@ -333,16 +334,16 @@
 
     for ( i = 0; i < txtlen; ++i )
     {
-      unsigned char  j = txt[i];
 
+      wchar_t  j = txt[i];
 
       if ( !TT_VALID( glyphs[j] ) )
         continue;
 
       TT_Get_Glyph_Metrics( glyphs[j], &gmetrics );
       pnm_width += gmetrics.advance / 64;
-    }
 
+    }
     Init_Raster_Map( &bit, pnm_width, pnm_height );
     Clear_Raster_Map( &bit );
 
@@ -392,7 +393,7 @@
   }
 
 
-  static void  Render_All_Glyphs( char*  txt, int  txtlen )
+  static void  Render_All_Glyphs( wchar_t*  txt, int  txtlen )
   {
     int               i;
     TT_F26Dot6        x, y, adjx;
@@ -404,7 +405,7 @@
 
     for ( i = 0; i < txtlen; i++ )
     {
-      unsigned char  j = txt[i];
+      wchar_t  j = txt[i];
 
       if ( !TT_VALID( glyphs[j] ) )
         continue;
@@ -445,6 +446,9 @@
     char      *txt, *filename;
     TT_Error  error;
 
+    wchar_t *wp;
+
+    setlocale(LC_ALL, "");
 
     /* Parse options */
 
@@ -498,7 +502,8 @@
     else
       txt = "The quick brown fox jumps over the lazy dog";
 
-    txtlen = strlen( txt );
+    wp = (wchar_t *)malloc( strlen(txt) * sizeof(wchar_t) );
+    txtlen = mbstowcs(wp, txt, strlen(txt) * sizeof(wchar_t));
 
     /* Initialize engine and other stuff */
 
@@ -507,12 +512,12 @@
       Panic( "Error while initializing engine, code = 0x%x.\n", error );
 
     Init_Face( filename );
-    Load_Glyphs( txt, txtlen );
-    Init_Raster_Areas( txt, txtlen );
 
+    Load_Glyphs( wp, txtlen );
+    Init_Raster_Areas( wp, txtlen );
     /* Do the real work now */
+    Render_All_Glyphs( wp, txtlen );
 
-    Render_All_Glyphs( txt, txtlen );
     Dump_Raster_Map( &bit, stdout );
 
     /* Clean up */

Attachment: signature.asc
Description: Digital signature

Reply via email to