PCF_Face_Init( FT_Stream stream, PCF_Face face, FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { FT_Error error = PCF_Err_Ok; FT_UNUSED( num_params ); FT_UNUSED( params ); FT_UNUSED( face_index ); error = pcf_load_font( stream, face ); if ( error ) { FT_Error error2; /* this didn't work, try gzip support! */ error2 = FT_Stream_OpenGzip( &face->gzip_stream, stream ); if ( error2 == PCF_Err_Unimplemented_Feature ) goto Fail; error = error2; if ( error ) goto Fail; face->gzip_source = stream; face->root.stream = &face->gzip_stream; stream = face->root.stream; error = pcf_load_font( stream, face ); if ( error ) goto Fail; } /* set-up charmap */ { FT_String *charset_registry, *charset_encoding; FT_Bool unicode_charmap = 0; charset_registry = face->charset_registry; charset_encoding = face->charset_encoding; if ( ( charset_registry != NULL ) && ( charset_encoding != NULL ) ) { char* s = face->charset_registry; /* Uh, oh, compare first letters manually to avoid dependency on locales. */ if ( ( s[0] == 'i' || s[0] == 'I' ) && ( s[1] == 's' || s[1] == 'S' ) && ( s[2] == 'o' || s[2] == 'O' ) ) { s += 3; if ( !ft_strcmp( s, "10646" ) || ( !ft_strcmp( s, "8859" ) && !ft_strcmp( face->charset_encoding, "1" ) ) ) unicode_charmap = 1; } } { FT_CharMapRec charmap; charmap.face = FT_FACE( face ); charmap.encoding = FT_ENCODING_NONE; charmap.platform_id = 0; charmap.encoding_id = 0; if ( unicode_charmap ) { charmap.encoding = FT_ENCODING_UNICODE; charmap.platform_id = 3; charmap.encoding_id = 1; } error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL ); #if 0 /* Select default charmap */ if (face->root.num_charmaps) face->root.charmap = face->root.charmaps[0]; #endif } } Exit: return error; Fail: FT_TRACE2(( "[not a valid PCF file]\n" )); error = PCF_Err_Unknown_File_Format; /* error */ goto Exit; }
PCF_Face_Init( FT_Stream stream, FT_Face pcfface, /* PCF_Face */ FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { PCF_Face face = (PCF_Face)pcfface; FT_Error error = PCF_Err_Ok; FT_UNUSED( num_params ); FT_UNUSED( params ); FT_UNUSED( face_index ); error = pcf_load_font( stream, face ); if ( error ) { FT_Error error2; PCF_Face_Done( pcfface ); /* this didn't work, try gzip support! */ error2 = FT_Stream_OpenGzip( &face->gzip_stream, stream ); if ( FT_ERROR_BASE( error2 ) == FT_Err_Unimplemented_Feature ) goto Fail; error = error2; if ( error ) #ifdef FT_CONFIG_OPTION_USE_LZW { FT_Error error3; /* this didn't work, try LZW support! */ error3 = FT_Stream_OpenLZW( &face->gzip_stream, stream ); if ( FT_ERROR_BASE( error3 ) == FT_Err_Unimplemented_Feature ) goto Fail; error = error3; if ( error ) goto Fail; face->gzip_source = stream; pcfface->stream = &face->gzip_stream; stream = pcfface->stream; error = pcf_load_font( stream, face ); if ( error ) goto Fail; } #else goto Fail; #endif else { face->gzip_source = stream; pcfface->stream = &face->gzip_stream; stream = pcfface->stream; error = pcf_load_font( stream, face ); if ( error ) goto Fail; } }
PCF_Face_Init( FT_Stream stream, PCF_Face face, FT_Int face_index, FT_Int num_params, FT_Parameter* params ) { FT_Error error = PCF_Err_Ok; FT_UNUSED( num_params ); FT_UNUSED( params ); FT_UNUSED( face_index ); error = pcf_load_font( stream, face ); if ( error ) goto Fail; /* set-up charmap */ { FT_String *charset_registry, *charset_encoding; FT_Bool unicode_charmap = 0; charset_registry = face->charset_registry; charset_encoding = face->charset_encoding; if ( ( charset_registry != NULL ) && ( charset_encoding != NULL ) ) { if ( !ft_strcmp( face->charset_registry, "ISO10646" ) || ( !ft_strcmp( face->charset_registry, "ISO8859" ) && !ft_strcmp( face->charset_encoding, "1" ) ) ) unicode_charmap = 1; } #ifdef FT_CONFIG_OPTION_USE_CMAPS { FT_CharMapRec charmap; charmap.face = FT_FACE( face ); charmap.encoding = ft_encoding_none; charmap.platform_id = 0; charmap.encoding_id = 0; if ( unicode_charmap ) { charmap.encoding = ft_encoding_unicode; charmap.platform_id = 3; charmap.encoding_id = 1; } error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL ); /* Select default charmap */ if (face->root.num_charmaps) face->root.charmap = face->root.charmaps[0]; } #else /* !FT_CONFIG_OPTION_USE_CMAPS */ /* XXX: charmaps. For now, report unicode for Unicode and Latin 1 */ face->root.charmaps = &face->charmap_handle; face->root.num_charmaps = 1; face->charmap.encoding = ft_encoding_none; face->charmap.platform_id = 0; face->charmap.encoding_id = 0; if ( unicode_charmap ) { face->charmap.encoding = ft_encoding_unicode; face->charmap.platform_id = 3; face->charmap.encoding_id = 1; } face->charmap.face = &face->root; face->charmap_handle = &face->charmap; face->root.charmap = face->charmap_handle; #endif /* !FT_CONFIG_OPTION_USE_CMAPS */ } Exit: return error; Fail: FT_TRACE2(( "[not a valid PCF file]\n" )); error = PCF_Err_Unknown_File_Format; /* error */ goto Exit; }