diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-18 22:20:25 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-18 22:20:25 -0700 |
commit | 0a9d06e2b5cf75c3d6ba958026bfdf4745f576d6 (patch) | |
tree | bda73f0de3896a97ff4231e4600fccd89a3f9118 /src/psnames | |
parent | 049d6fea481044fcc000e7782e5bc7046fc70844 (diff) | |
download | android_external_freetype-0a9d06e2b5cf75c3d6ba958026bfdf4745f576d6.tar.gz android_external_freetype-0a9d06e2b5cf75c3d6ba958026bfdf4745f576d6.tar.bz2 android_external_freetype-0a9d06e2b5cf75c3d6ba958026bfdf4745f576d6.zip |
auto import //branches/master/...@140412
Diffstat (limited to 'src/psnames')
-rw-r--r-- | src/psnames/psmodule.c | 95 | ||||
-rw-r--r-- | src/psnames/pstables.h | 9 |
2 files changed, 67 insertions, 37 deletions
diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c index dbcfe44..41942a9 100644 --- a/src/psnames/psmodule.c +++ b/src/psnames/psmodule.c @@ -174,18 +174,34 @@ /* sort base glyphs before glyph variants */ if ( unicode1 == unicode2 ) - return map1->unicode - map2->unicode; + { + if ( map1->unicode > map2->unicode ) + return 1; + else if ( map1->unicode < map2->unicode ) + return -1; + else + return 0; + } else - return unicode1 - unicode2; + { + if ( unicode1 > unicode2 ) + return 1; + else if ( unicode1 < unicode2 ) + return -1; + else + return 0; + } } - /* support for old WGL4 fonts */ + /* support for extra glyphs not handled (well) in AGL; */ + /* we add extra mappings for them if necessary */ -#define WGL_EXTRA_LIST_SIZE 8 +#define EXTRA_GLYPH_LIST_SIZE 10 - static const FT_UInt32 ft_wgl_extra_unicodes[WGL_EXTRA_LIST_SIZE] = + static const FT_UInt32 ft_extra_glyph_unicodes[EXTRA_GLYPH_LIST_SIZE] = { + /* WGL 4 */ 0x0394, 0x03A9, 0x2215, @@ -193,10 +209,13 @@ 0x02C9, 0x03BC, 0x2219, - 0x00A0 + 0x00A0, + /* Romanian */ + 0x021A, + 0x021B }; - static const char ft_wgl_extra_glyph_names[] = + static const char ft_extra_glyph_names[] = { 'D','e','l','t','a',0, 'O','m','e','g','a',0, @@ -205,11 +224,13 @@ 'm','a','c','r','o','n',0, 'm','u',0, 'p','e','r','i','o','d','c','e','n','t','e','r','e','d',0, - 's','p','a','c','e',0 + 's','p','a','c','e',0, + 'T','c','o','m','m','a','a','c','c','e','n','t',0, + 't','c','o','m','m','a','a','c','c','e','n','t',0 }; static const FT_Int - ft_wgl_extra_glyph_name_offsets[WGL_EXTRA_LIST_SIZE] = + ft_extra_glyph_name_offsets[EXTRA_GLYPH_LIST_SIZE] = { 0, 6, @@ -218,29 +239,31 @@ 28, 35, 38, - 53 + 53, + 59, + 72 }; static void - ps_check_wgl_name( const char* gname, - FT_UInt glyph, - FT_UInt* wgl_glyphs, - FT_UInt *states ) + ps_check_extra_glyph_name( const char* gname, + FT_UInt glyph, + FT_UInt* extra_glyphs, + FT_UInt *states ) { FT_UInt n; - for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ ) + for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ ) { - if ( ft_strcmp( ft_wgl_extra_glyph_names + - ft_wgl_extra_glyph_name_offsets[n], gname ) == 0 ) + if ( ft_strcmp( ft_extra_glyph_names + + ft_extra_glyph_name_offsets[n], gname ) == 0 ) { if ( states[n] == 0 ) { - /* mark this WGL extra glyph as a candidate for the cmap */ + /* mark this extra glyph as a candidate for the cmap */ states[n] = 1; - wgl_glyphs[n] = glyph; + extra_glyphs[n] = glyph; } return; @@ -250,17 +273,17 @@ static void - ps_check_wgl_unicode( FT_UInt32 uni_char, - FT_UInt *states ) + ps_check_extra_glyph_unicode( FT_UInt32 uni_char, + FT_UInt *states ) { FT_UInt n; - for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ ) + for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ ) { - if ( uni_char == ft_wgl_extra_unicodes[n] ) + if ( uni_char == ft_extra_glyph_unicodes[n] ) { - /* disable this WGL extra glyph from being added to the cmap */ + /* disable this extra glyph from being added to the cmap */ states[n] = 2; return; @@ -280,15 +303,15 @@ { FT_Error error; - FT_UInt wgl_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - FT_UInt wgl_glyphs[WGL_EXTRA_LIST_SIZE]; + FT_UInt extra_glyph_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + FT_UInt extra_glyphs[EXTRA_GLYPH_LIST_SIZE]; /* we first allocate the table */ table->num_maps = 0; table->maps = 0; - if ( !FT_NEW_ARRAY( table->maps, num_glyphs + WGL_EXTRA_LIST_SIZE ) ) + if ( !FT_NEW_ARRAY( table->maps, num_glyphs + EXTRA_GLYPH_LIST_SIZE ) ) { FT_UInt n; FT_UInt count; @@ -305,12 +328,14 @@ if ( gname ) { - ps_check_wgl_name( gname, n, wgl_glyphs, wgl_list_states ); + ps_check_extra_glyph_name( gname, n, + extra_glyphs, extra_glyph_list_states ); uni_char = ps_unicode_value( gname ); if ( BASE_GLYPH( uni_char ) != 0 ) { - ps_check_wgl_unicode( uni_char, wgl_list_states ); + ps_check_extra_glyph_unicode( uni_char, + extra_glyph_list_states ); map->unicode = uni_char; map->glyph_index = n; map++; @@ -321,15 +346,15 @@ } } - for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ ) + for ( n = 0; n < EXTRA_GLYPH_LIST_SIZE; n++ ) { - if ( wgl_list_states[n] == 1 ) + if ( extra_glyph_list_states[n] == 1 ) { - /* This glyph name has an additional WGL4 representation. */ - /* Add it to the cmap. */ + /* This glyph name has an additional representation. */ + /* Add it to the cmap. */ - map->unicode = ft_wgl_extra_unicodes[n]; - map->glyph_index = wgl_glyphs[n]; + map->unicode = ft_extra_glyph_unicodes[n]; + map->glyph_index = extra_glyphs[n]; map++; } } diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h index cc40ef7..1521e9c 100644 --- a/src/psnames/pstables.h +++ b/src/psnames/pstables.h @@ -4,7 +4,7 @@ /* */ /* PostScript glyph names. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005, 2008 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -561,7 +561,10 @@ * The lookup function to get the Unicode value for a given string * is defined below the table. */ - static const unsigned char ft_adobe_glyph_list[54791] = + +#ifdef FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + + static const unsigned char ft_adobe_glyph_list[54791L] = { 0, 52, 0,106, 2,167, 3, 63, 4,220, 6,125, 9,143, 10, 23, 11,137, 12,199, 14,246, 15, 87, 16,233, 17,219, 18,104, 19, 88, @@ -4086,5 +4089,7 @@ return 0; } +#endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */ + /* END */ |