* docs/CHANGES: Updated.
Improve support for WGL4 encoded fonts. * src/psnames/psmodule.c (WGL_EXTRA_LIST_SIZE): New macro. (ft_wgl_extra_unicodes, ft_wgl_extra_glyph_names, ft_wgl_extra_glyph_name_offsets): New arrays. (ps_check_wgl_name, ps_check_wgl_unicode): New functions. (ps_unicodes_init): Use them to add additional Unicode mappings.
This commit is contained in:
parent
bcc750e511
commit
a2f17cc150
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2008-05-16 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
|
* docs/CHANGES: Updated.
|
||||||
|
|
||||||
|
2008-05-16 Sergey Tolstov <stolstov@esri.com>
|
||||||
|
|
||||||
|
Improve support for WGL4 encoded fonts.
|
||||||
|
|
||||||
|
* src/psnames/psmodule.c (WGL_EXTRA_LIST_SIZE): New macro.
|
||||||
|
(ft_wgl_extra_unicodes, ft_wgl_extra_glyph_names,
|
||||||
|
ft_wgl_extra_glyph_name_offsets): New arrays.
|
||||||
|
(ps_check_wgl_name, ps_check_wgl_unicode): New functions.
|
||||||
|
(ps_unicodes_init): Use them to add additional Unicode mappings.
|
||||||
|
|
||||||
2008-05-15 Werner Lemberg <wl@gnu.org>
|
2008-05-15 Werner Lemberg <wl@gnu.org>
|
||||||
|
|
||||||
* src/psaux/t1decode.c (t1_decoder_parse_charstrings)
|
* src/psaux/t1decode.c (t1_decoder_parse_charstrings)
|
||||||
|
|
|
@ -42,6 +42,8 @@ CHANGES BETWEEN 2.3.6 and 2.3.5
|
||||||
|
|
||||||
- Build support for symbian has been contributed.
|
- Build support for symbian has been contributed.
|
||||||
|
|
||||||
|
- Better WGL4 glyph name support, contributed by Sergey Tolstov.
|
||||||
|
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/* */
|
/* */
|
||||||
/* PSNames module implementation (body). */
|
/* PSNames module implementation (body). */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007 by */
|
/* Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008 by */
|
||||||
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of the FreeType project, and may only be used, */
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
|
@ -180,6 +180,94 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* support for old WGL4 fonts */
|
||||||
|
|
||||||
|
#define WGL_EXTRA_LIST_SIZE 8
|
||||||
|
|
||||||
|
const FT_UInt32 ft_wgl_extra_unicodes[WGL_EXTRA_LIST_SIZE] =
|
||||||
|
{
|
||||||
|
0x0394,
|
||||||
|
0x03A9,
|
||||||
|
0x2215,
|
||||||
|
0x00AD,
|
||||||
|
0x02C9,
|
||||||
|
0x03BC,
|
||||||
|
0x2219,
|
||||||
|
0x00A0
|
||||||
|
};
|
||||||
|
|
||||||
|
const char ft_wgl_extra_glyph_names[] =
|
||||||
|
{
|
||||||
|
'D','e','l','t','a',0,
|
||||||
|
'O','m','e','g','a',0,
|
||||||
|
'f','r','a','c','t','i','o','n',0,
|
||||||
|
'h','y','p','h','e','n',0,
|
||||||
|
'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
|
||||||
|
};
|
||||||
|
|
||||||
|
const FT_Int ft_wgl_extra_glyph_name_offsets[WGL_EXTRA_LIST_SIZE] =
|
||||||
|
{
|
||||||
|
0,
|
||||||
|
6,
|
||||||
|
12,
|
||||||
|
21,
|
||||||
|
28,
|
||||||
|
35,
|
||||||
|
38,
|
||||||
|
53
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ps_check_wgl_name( const char* gname,
|
||||||
|
FT_UInt glyph,
|
||||||
|
FT_UInt* wgl_glyphs,
|
||||||
|
FT_UInt *states )
|
||||||
|
{
|
||||||
|
FT_UInt n;
|
||||||
|
|
||||||
|
|
||||||
|
for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
|
||||||
|
{
|
||||||
|
if ( ft_strcmp( ft_wgl_extra_glyph_names +
|
||||||
|
ft_wgl_extra_glyph_name_offsets[n], gname ) == 0 )
|
||||||
|
{
|
||||||
|
if ( states[n] == 0 )
|
||||||
|
{
|
||||||
|
/* mark this WGL extra glyph as a candidate for the cmap */
|
||||||
|
states[n] = 1;
|
||||||
|
wgl_glyphs[n] = glyph;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ps_check_wgl_unicode( FT_UInt32 uni_char,
|
||||||
|
FT_UInt *states )
|
||||||
|
{
|
||||||
|
FT_UInt n;
|
||||||
|
|
||||||
|
|
||||||
|
for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
|
||||||
|
{
|
||||||
|
if ( uni_char == ft_wgl_extra_unicodes[n] )
|
||||||
|
{
|
||||||
|
/* disable this WGL extra glyph from being added to the cmap */
|
||||||
|
states[n] = 2;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Build a table that maps Unicode values to glyph indices. */
|
/* Build a table that maps Unicode values to glyph indices. */
|
||||||
static FT_Error
|
static FT_Error
|
||||||
ps_unicodes_init( FT_Memory memory,
|
ps_unicodes_init( FT_Memory memory,
|
||||||
|
@ -191,12 +279,15 @@
|
||||||
{
|
{
|
||||||
FT_Error error;
|
FT_Error error;
|
||||||
|
|
||||||
|
FT_UInt wgl_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
FT_UInt wgl_glyphs[WGL_EXTRA_LIST_SIZE];
|
||||||
|
|
||||||
|
|
||||||
/* we first allocate the table */
|
/* we first allocate the table */
|
||||||
table->num_maps = 0;
|
table->num_maps = 0;
|
||||||
table->maps = 0;
|
table->maps = 0;
|
||||||
|
|
||||||
if ( !FT_NEW_ARRAY( table->maps, num_glyphs ) )
|
if ( !FT_NEW_ARRAY( table->maps, num_glyphs + WGL_EXTRA_LIST_SIZE ) )
|
||||||
{
|
{
|
||||||
FT_UInt n;
|
FT_UInt n;
|
||||||
FT_UInt count;
|
FT_UInt count;
|
||||||
|
@ -213,10 +304,12 @@
|
||||||
|
|
||||||
if ( gname )
|
if ( gname )
|
||||||
{
|
{
|
||||||
|
ps_check_wgl_name( gname, n, wgl_glyphs, wgl_list_states );
|
||||||
uni_char = ps_unicode_value( gname );
|
uni_char = ps_unicode_value( gname );
|
||||||
|
|
||||||
if ( BASE_GLYPH( uni_char ) != 0 )
|
if ( BASE_GLYPH( uni_char ) != 0 )
|
||||||
{
|
{
|
||||||
|
ps_check_wgl_unicode( uni_char, wgl_list_states );
|
||||||
map->unicode = uni_char;
|
map->unicode = uni_char;
|
||||||
map->glyph_index = n;
|
map->glyph_index = n;
|
||||||
map++;
|
map++;
|
||||||
|
@ -227,6 +320,19 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
|
||||||
|
{
|
||||||
|
if ( wgl_list_states[n] == 1 )
|
||||||
|
{
|
||||||
|
/* This glyph name has an additional WGL4 representation. */
|
||||||
|
/* Add it to the cmap. */
|
||||||
|
|
||||||
|
map->unicode = ft_wgl_extra_unicodes[n];
|
||||||
|
map->glyph_index = wgl_glyphs[n];
|
||||||
|
map++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* now compress the table a bit */
|
/* now compress the table a bit */
|
||||||
count = (FT_UInt)( map - table->maps );
|
count = (FT_UInt)( map - table->maps );
|
||||||
|
|
||||||
|
|
|
@ -699,8 +699,9 @@
|
||||||
|
|
||||||
error = tt_size_run_prep( size );
|
error = tt_size_run_prep( size );
|
||||||
if ( !error )
|
if ( !error )
|
||||||
size->cvt_ready = 1;
|
size->cvt_ready = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue