-/*\r
- * gcc -DFT2_BUILD_LIBRARY -I../../include -o test_afm test_afm.c \\r
- * -L../../objs/.libs -lfreetype -lz -static\r
- */\r
-#include <ft2build.h>\r
-#include FT_FREETYPE_H\r
-#include FT_INTERNAL_STREAM_H\r
-#include FT_INTERNAL_POSTSCRIPT_AUX_H\r
-\r
- void dump_fontinfo( AFM_FontInfo fi )\r
- {\r
- FT_Int i;\r
-\r
-\r
- printf( "This AFM is for %sCID font.\n\n",\r
- ( fi->IsCIDFont ) ? "" : "non-" );\r
-\r
- printf( "FontBBox: %.2f %.2f %.2f %.2f\n", fi->FontBBox.xMin / 65536.,\r
- fi->FontBBox.yMin / 65536.,\r
- fi->FontBBox.xMax / 65536.,\r
- fi->FontBBox.yMax / 65536. );\r
- printf( "Ascender: %.2f\n", fi->Ascender / 65536. );\r
- printf( "Descender: %.2f\n\n", fi->Descender / 65536. );\r
-\r
- if ( fi->NumTrackKern )\r
- printf( "There are %d sets of track kernings:\n",\r
- fi->NumTrackKern );\r
- else\r
- printf( "There is no track kerning.\n" );\r
-\r
- for ( i = 0; i < fi->NumTrackKern; i++ )\r
- {\r
- AFM_TrackKern tk = fi->TrackKerns + i;\r
-\r
-\r
- printf( "\t%2d: %5.2f %5.2f %5.2f %5.2f\n", tk->degree,\r
- tk->min_ptsize / 65536.,\r
- tk->min_kern / 65536.,\r
- tk->max_ptsize / 65536.,\r
- tk->max_kern / 65536. );\r
- }\r
-\r
- printf( "\n" );\r
-\r
- if ( fi->NumKernPair )\r
- printf( "There are %d kerning pairs:\n",\r
- fi->NumKernPair );\r
- else\r
- printf( "There is no kerning pair.\n" );\r
-\r
- for ( i = 0; i < fi->NumKernPair; i++ )\r
- {\r
- AFM_KernPair kp = fi->KernPairs + i;\r
-\r
-\r
- printf( "\t%3d + %3d => (%4d, %4d)\n", kp->index1,\r
- kp->index2,\r
- kp->x,\r
- kp->y );\r
- }\r
-\r
- }\r
-\r
- int\r
- dummy_get_index( const char* name,\r
- FT_UInt len,\r
- void* user_data )\r
- {\r
- if ( len )\r
- return name[0];\r
- else\r
- return 0;\r
- }\r
-\r
- FT_Error\r
- parse_afm( FT_Library library,\r
- FT_Stream stream,\r
- AFM_FontInfo fi )\r
- {\r
- PSAux_Service psaux;\r
- AFM_ParserRec parser;\r
- FT_Error error = FT_Err_Ok;\r
-\r
-\r
- psaux = (PSAux_Service)FT_Get_Module_Interface( library, "psaux" );\r
- if ( !psaux || !psaux->afm_parser_funcs )\r
- return -1;\r
-\r
- error = FT_Stream_EnterFrame( stream, stream->size );\r
- if ( error )\r
- return error;\r
-\r
- error = psaux->afm_parser_funcs->init( &parser,\r
- library->memory,\r
- stream->cursor,\r
- stream->limit );\r
- if ( error )\r
- return error;\r
-\r
- parser.FontInfo = fi;\r
- parser.get_index = dummy_get_index;\r
-\r
- error = psaux->afm_parser_funcs->parse( &parser );\r
-\r
- psaux->afm_parser_funcs->done( &parser );\r
-\r
- return error;\r
- }\r
-\r
-\r
- int main( int argc,\r
- char** argv )\r
- {\r
- FT_Library library;\r
- FT_StreamRec stream;\r
- FT_Error error = FT_Err_Ok;\r
- AFM_FontInfoRec fi;\r
-\r
-\r
- if ( argc < 2 )\r
- return FT_Err_Invalid_Argument;\r
-\r
- error = FT_Init_FreeType( &library );\r
- if ( error )\r
- return error;\r
-\r
- FT_ZERO( &stream );\r
- error = FT_Stream_Open( &stream, argv[1] );\r
- if ( error )\r
- goto Exit;\r
- stream.memory = library->memory;\r
-\r
- FT_ZERO( &fi );\r
- error = parse_afm( library, &stream, &fi );\r
-\r
- if ( !error )\r
- {\r
- FT_Memory memory = library->memory;\r
-\r
-\r
- dump_fontinfo( &fi );\r
-\r
- if ( fi.KernPairs )\r
- FT_FREE( fi.KernPairs );\r
- if ( fi.TrackKerns )\r
- FT_FREE( fi.TrackKerns );\r
- }\r
- else\r
- printf( "parse error\n" );\r
-\r
- FT_Stream_Close( &stream );\r
-\r
- Exit:\r
- FT_Done_FreeType( library );\r
-\r
- return error;\r
- }\r
+/*
+ * gcc -DFT2_BUILD_LIBRARY -I../../include -o test_afm test_afm.c \
+ * -L../../objs/.libs -lfreetype -lz -static
+ */
+#include <ft2build.h>
+#include FT_FREETYPE_H
+#include FT_INTERNAL_STREAM_H
+#include FT_INTERNAL_POSTSCRIPT_AUX_H
+
+ void dump_fontinfo( AFM_FontInfo fi )
+ {
+ FT_Int i;
+
+
+ printf( "This AFM is for %sCID font.\n\n",
+ ( fi->IsCIDFont ) ? "" : "non-" );
+
+ printf( "FontBBox: %.2f %.2f %.2f %.2f\n", fi->FontBBox.xMin / 65536.,
+ fi->FontBBox.yMin / 65536.,
+ fi->FontBBox.xMax / 65536.,
+ fi->FontBBox.yMax / 65536. );
+ printf( "Ascender: %.2f\n", fi->Ascender / 65536. );
+ printf( "Descender: %.2f\n\n", fi->Descender / 65536. );
+
+ if ( fi->NumTrackKern )
+ printf( "There are %d sets of track kernings:\n",
+ fi->NumTrackKern );
+ else
+ printf( "There is no track kerning.\n" );
+
+ for ( i = 0; i < fi->NumTrackKern; i++ )
+ {
+ AFM_TrackKern tk = fi->TrackKerns + i;
+
+
+ printf( "\t%2d: %5.2f %5.2f %5.2f %5.2f\n", tk->degree,
+ tk->min_ptsize / 65536.,
+ tk->min_kern / 65536.,
+ tk->max_ptsize / 65536.,
+ tk->max_kern / 65536. );
+ }
+
+ printf( "\n" );
+
+ if ( fi->NumKernPair )
+ printf( "There are %d kerning pairs:\n",
+ fi->NumKernPair );
+ else
+ printf( "There is no kerning pair.\n" );
+
+ for ( i = 0; i < fi->NumKernPair; i++ )
+ {
+ AFM_KernPair kp = fi->KernPairs + i;
+
+
+ printf( "\t%3d + %3d => (%4d, %4d)\n", kp->index1,
+ kp->index2,
+ kp->x,
+ kp->y );
+ }
+
+ }
+
+ int
+ dummy_get_index( const char* name,
+ FT_UInt len,
+ void* user_data )
+ {
+ if ( len )
+ return name[0];
+ else
+ return 0;
+ }
+
+ FT_Error
+ parse_afm( FT_Library library,
+ FT_Stream stream,
+ AFM_FontInfo fi )
+ {
+ PSAux_Service psaux;
+ AFM_ParserRec parser;
+ FT_Error error = FT_Err_Ok;
+
+
+ psaux = (PSAux_Service)FT_Get_Module_Interface( library, "psaux" );
+ if ( !psaux || !psaux->afm_parser_funcs )
+ return -1;
+
+ error = FT_Stream_EnterFrame( stream, stream->size );
+ if ( error )
+ return error;
+
+ error = psaux->afm_parser_funcs->init( &parser,
+ library->memory,
+ stream->cursor,
+ stream->limit );
+ if ( error )
+ return error;
+
+ parser.FontInfo = fi;
+ parser.get_index = dummy_get_index;
+
+ error = psaux->afm_parser_funcs->parse( &parser );
+
+ psaux->afm_parser_funcs->done( &parser );
+
+ return error;
+ }
+
+
+ int main( int argc,
+ char** argv )
+ {
+ FT_Library library;
+ FT_StreamRec stream;
+ FT_Error error = FT_Err_Ok;
+ AFM_FontInfoRec fi;
+
+
+ if ( argc < 2 )
+ return FT_Err_Invalid_Argument;
+
+ error = FT_Init_FreeType( &library );
+ if ( error )
+ return error;
+
+ FT_ZERO( &stream );
+ error = FT_Stream_Open( &stream, argv[1] );
+ if ( error )
+ goto Exit;
+ stream.memory = library->memory;
+
+ FT_ZERO( &fi );
+ error = parse_afm( library, &stream, &fi );
+
+ if ( !error )
+ {
+ FT_Memory memory = library->memory;
+
+
+ dump_fontinfo( &fi );
+
+ if ( fi.KernPairs )
+ FT_FREE( fi.KernPairs );
+ if ( fi.TrackKerns )
+ FT_FREE( fi.TrackKerns );
+ }
+ else
+ printf( "parse error\n" );
+
+ FT_Stream_Close( &stream );
+
+ Exit:
+ FT_Done_FreeType( library );
+
+ return error;
+ }