Ignore:
Timestamp:
Jun 30, 2008, 6:26:14 PM (14 years ago)
Author:
Eugene Romanenko
Message:

PDF plugin: freetype library updated to version 2.3.5

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/poppler/freetype2/src/psnames/psmodule.c

    r209 r251  
    55/*    PSNames module implementation (body).                                */
    66/*                                                                         */
    7 /*  Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007 by                   */
     7/*  Copyright 1996-2001, 2002, 2003, 2005, 2006, 2007, 2008 by             */
    88/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
    99/*                                                                         */
     
    2727
    2828
    29 #ifndef FT_CONFIG_OPTION_NO_POSTSCRIPT_NAMES
     29#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
    3030
    3131
     
    178178    else
    179179      return unicode1 - unicode2;
     180  }
     181
     182
     183  /* support for old WGL4 fonts */
     184
     185#define WGL_EXTRA_LIST_SIZE  8
     186
     187  static const FT_UInt32  ft_wgl_extra_unicodes[WGL_EXTRA_LIST_SIZE] =
     188  {
     189    0x0394,
     190    0x03A9,
     191    0x2215,
     192    0x00AD,
     193    0x02C9,
     194    0x03BC,
     195    0x2219,
     196    0x00A0
     197  };
     198
     199  static const char  ft_wgl_extra_glyph_names[] =
     200  {
     201    'D','e','l','t','a',0,
     202    'O','m','e','g','a',0,
     203    'f','r','a','c','t','i','o','n',0,
     204    'h','y','p','h','e','n',0,
     205    'm','a','c','r','o','n',0,
     206    'm','u',0,
     207    'p','e','r','i','o','d','c','e','n','t','e','r','e','d',0,
     208    's','p','a','c','e',0
     209  };
     210
     211  static const FT_Int
     212  ft_wgl_extra_glyph_name_offsets[WGL_EXTRA_LIST_SIZE] =
     213  {
     214     0,
     215     6,
     216    12,
     217    21,
     218    28,
     219    35,
     220    38,
     221    53
     222  };
     223
     224
     225  static void
     226  ps_check_wgl_name( const char*  gname,
     227                     FT_UInt      glyph,
     228                     FT_UInt*     wgl_glyphs,
     229                     FT_UInt     *states )
     230  {
     231    FT_UInt  n;
     232
     233
     234    for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
     235    {
     236      if ( ft_strcmp( ft_wgl_extra_glyph_names +
     237                        ft_wgl_extra_glyph_name_offsets[n], gname ) == 0 )
     238      {
     239        if ( states[n] == 0 )
     240        {
     241          /* mark this WGL extra glyph as a candidate for the cmap */
     242          states[n]     = 1;
     243          wgl_glyphs[n] = glyph;
     244        }
     245
     246        return;
     247      }
     248    }
     249  }
     250
     251
     252  static void
     253  ps_check_wgl_unicode( FT_UInt32  uni_char,
     254                        FT_UInt   *states )
     255  {
     256    FT_UInt  n;
     257
     258
     259    for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
     260    {
     261      if ( uni_char == ft_wgl_extra_unicodes[n] )
     262      {
     263        /* disable this WGL extra glyph from being added to the cmap */
     264        states[n] = 2;
     265
     266        return;
     267      }
     268    }
    180269  }
    181270
     
    192281    FT_Error  error;
    193282
     283    FT_UInt  wgl_list_states[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
     284    FT_UInt  wgl_glyphs[WGL_EXTRA_LIST_SIZE];
     285
    194286
    195287    /* we first allocate the table */
     
    197289    table->maps     = 0;
    198290
    199     if ( !FT_NEW_ARRAY( table->maps, num_glyphs ) )
     291    if ( !FT_NEW_ARRAY( table->maps, num_glyphs + WGL_EXTRA_LIST_SIZE ) )
    200292    {
    201293      FT_UInt     n;
     
    214306        if ( gname )
    215307        {
     308          ps_check_wgl_name( gname, n, wgl_glyphs, wgl_list_states );
    216309          uni_char = ps_unicode_value( gname );
    217310
    218311          if ( BASE_GLYPH( uni_char ) != 0 )
    219312          {
     313            ps_check_wgl_unicode( uni_char, wgl_list_states );
    220314            map->unicode     = uni_char;
    221315            map->glyph_index = n;
     
    225319          if ( free_glyph_name )
    226320            free_glyph_name( glyph_data, gname );
     321        }
     322      }
     323
     324      for ( n = 0; n < WGL_EXTRA_LIST_SIZE; n++ )
     325      {
     326        if ( wgl_list_states[n] == 1 )
     327        {
     328          /* This glyph name has an additional WGL4 representation. */
     329          /* Add it to the cmap.                                    */
     330
     331          map->unicode     = ft_wgl_extra_unicodes[n];
     332          map->glyph_index = wgl_glyphs[n];
     333          map++;
    227334        }
    228335      }
     
    428535  }
    429536
    430 #endif /* !FT_CONFIG_OPTION_NO_POSTSCRIPT_NAMES */
     537#endif /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
    431538
    432539
     
    442549    0x20000L,   /* driver requires FreeType 2 or above */
    443550
    444 #ifdef FT_CONFIG_OPTION_NO_POSTSCRIPT_NAMES
     551#ifndef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
    445552    0,
    446553    (FT_Module_Constructor)0,
Note: See TracChangeset for help on using the changeset viewer.