| Index: third_party/freetype/src/cff/cffdrivr.c
 | 
| diff --git a/third_party/freetype/src/cff/cffdrivr.c b/third_party/freetype/src/cff/cffdrivr.c
 | 
| index dde7d4488011d525e61f1c605d5fb302fb784206..a718b7a002484a300e571bcd49dfd5b041e015bc 100644
 | 
| --- a/third_party/freetype/src/cff/cffdrivr.c
 | 
| +++ b/third_party/freetype/src/cff/cffdrivr.c
 | 
| @@ -4,7 +4,7 @@
 | 
|  /*                                                                         */
 | 
|  /*    OpenType font driver implementation (body).                          */
 | 
|  /*                                                                         */
 | 
| -/*  Copyright 1996-2013 by                                                 */
 | 
| +/*  Copyright 1996-2015 by                                                 */
 | 
|  /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 | 
|  /*                                                                         */
 | 
|  /*  This file is part of the FreeType project, and may only be used,       */
 | 
| @@ -35,7 +35,7 @@
 | 
|  #include "cfferrs.h"
 | 
|  #include "cffpic.h"
 | 
|  
 | 
| -#include FT_SERVICE_XFREE86_NAME_H
 | 
| +#include FT_SERVICE_FONT_FORMAT_H
 | 
|  #include FT_SERVICE_GLYPH_DICT_H
 | 
|  #include FT_SERVICE_PROPERTIES_H
 | 
|  #include FT_CFF_DRIVER_H
 | 
| @@ -64,11 +64,6 @@
 | 
|    /*************************************************************************/
 | 
|  
 | 
|  
 | 
| -#undef  PAIR_TAG
 | 
| -#define PAIR_TAG( left, right )  ( ( (FT_ULong)left << 16 ) | \
 | 
| -                                     (FT_ULong)right        )
 | 
| -
 | 
| -
 | 
|    /*************************************************************************/
 | 
|    /*                                                                       */
 | 
|    /* <Function>                                                            */
 | 
| @@ -121,9 +116,6 @@
 | 
|    }
 | 
|  
 | 
|  
 | 
| -#undef PAIR_TAG
 | 
| -
 | 
| -
 | 
|    /*************************************************************************/
 | 
|    /*                                                                       */
 | 
|    /* <Function>                                                            */
 | 
| @@ -203,6 +195,68 @@
 | 
|      FT_GlyphSlot  slot  = face->glyph;
 | 
|  
 | 
|  
 | 
| +    if ( FT_IS_SFNT( face ) )
 | 
| +    {
 | 
| +      /* OpenType 1.7 mandates that the data from `hmtx' table be used; */
 | 
| +      /* it is no longer necessary that those values are identical to   */
 | 
| +      /* the values in the `CFF' table                                  */
 | 
| +
 | 
| +      TT_Face   ttface = (TT_Face)face;
 | 
| +      FT_Short  dummy;
 | 
| +
 | 
| +
 | 
| +      if ( flags & FT_LOAD_VERTICAL_LAYOUT )
 | 
| +      {
 | 
| +        /* check whether we have data from the `vmtx' table at all; */
 | 
| +        /* otherwise we extract the info from the CFF glyphstrings  */
 | 
| +        /* (instead of synthesizing a global value using the `OS/2' */
 | 
| +        /* table)                                                   */
 | 
| +        if ( !ttface->vertical_info )
 | 
| +          goto Missing_Table;
 | 
| +
 | 
| +        for ( nn = 0; nn < count; nn++ )
 | 
| +        {
 | 
| +          FT_UShort  ah;
 | 
| +
 | 
| +
 | 
| +          ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
 | 
| +                                                       1,
 | 
| +                                                       start + nn,
 | 
| +                                                       &dummy,
 | 
| +                                                       &ah );
 | 
| +
 | 
| +          FT_TRACE5(( "  idx %d: advance height %d font units\n",
 | 
| +                      start + nn, ah ));
 | 
| +          advances[nn] = ah;
 | 
| +        }
 | 
| +      }
 | 
| +      else
 | 
| +      {
 | 
| +        /* check whether we have data from the `hmtx' table at all */
 | 
| +        if ( !ttface->horizontal.number_Of_HMetrics )
 | 
| +          goto Missing_Table;
 | 
| +
 | 
| +        for ( nn = 0; nn < count; nn++ )
 | 
| +        {
 | 
| +          FT_UShort  aw;
 | 
| +
 | 
| +
 | 
| +          ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
 | 
| +                                                       0,
 | 
| +                                                       start + nn,
 | 
| +                                                       &dummy,
 | 
| +                                                       &aw );
 | 
| +
 | 
| +          FT_TRACE5(( "  idx %d: advance width %d font units\n",
 | 
| +                      start + nn, aw ));
 | 
| +          advances[nn] = aw;
 | 
| +        }
 | 
| +      }
 | 
| +
 | 
| +      return error;
 | 
| +    }
 | 
| +
 | 
| +  Missing_Table:
 | 
|      flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
 | 
|  
 | 
|      for ( nn = 0; nn < count; nn++ )
 | 
| @@ -352,7 +406,7 @@
 | 
|        font_info->italic_angle        = dict->italic_angle;
 | 
|        font_info->is_fixed_pitch      = dict->is_fixed_pitch;
 | 
|        font_info->underline_position  = (FT_Short)dict->underline_position;
 | 
| -      font_info->underline_thickness = (FT_Short)dict->underline_thickness;
 | 
| +      font_info->underline_thickness = (FT_UShort)dict->underline_thickness;
 | 
|  
 | 
|        cff->font_info = font_info;
 | 
|      }
 | 
| @@ -383,9 +437,27 @@
 | 
|    static const char*
 | 
|    cff_get_ps_name( CFF_Face  face )
 | 
|    {
 | 
| -    CFF_Font  cff = (CFF_Font)face->extra.data;
 | 
| +    CFF_Font      cff  = (CFF_Font)face->extra.data;
 | 
| +    SFNT_Service  sfnt = (SFNT_Service)face->sfnt;
 | 
|  
 | 
|  
 | 
| +    /* following the OpenType specification 1.7, we return the name stored */
 | 
| +    /* in the `name' table for a CFF wrapped into an SFNT container        */
 | 
| +
 | 
| +    if ( sfnt )
 | 
| +    {
 | 
| +      FT_Library             library     = FT_FACE_LIBRARY( face );
 | 
| +      FT_Module              sfnt_module = FT_Get_Module( library, "sfnt" );
 | 
| +      FT_Service_PsFontName  service     =
 | 
| +        (FT_Service_PsFontName)ft_module_get_service(
 | 
| +                                 sfnt_module,
 | 
| +                                 FT_SERVICE_ID_POSTSCRIPT_FONT_NAME );
 | 
| +
 | 
| +
 | 
| +      if ( service && service->get_ps_font_name )
 | 
| +        return service->get_ps_font_name( FT_FACE( face ) );
 | 
| +    }
 | 
| +
 | 
|      return (const char*)cff->font_name;
 | 
|    }
 | 
|  
 | 
| @@ -723,7 +795,7 @@
 | 
|  #ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
 | 
|    FT_DEFINE_SERVICEDESCREC7(
 | 
|      cff_services,
 | 
| -    FT_SERVICE_ID_XF86_NAME,            FT_XF86_FORMAT_CFF,
 | 
| +    FT_SERVICE_ID_FONT_FORMAT,          FT_FONT_FORMAT_CFF,
 | 
|      FT_SERVICE_ID_POSTSCRIPT_INFO,      &CFF_SERVICE_PS_INFO_GET,
 | 
|      FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
 | 
|      FT_SERVICE_ID_GLYPH_DICT,           &CFF_SERVICE_GLYPH_DICT_GET,
 | 
| @@ -734,7 +806,7 @@
 | 
|  #else
 | 
|    FT_DEFINE_SERVICEDESCREC6(
 | 
|      cff_services,
 | 
| -    FT_SERVICE_ID_XF86_NAME,            FT_XF86_FORMAT_CFF,
 | 
| +    FT_SERVICE_ID_FONT_FORMAT,          FT_FONT_FORMAT_CFF,
 | 
|      FT_SERVICE_ID_POSTSCRIPT_INFO,      &CFF_SERVICE_PS_INFO_GET,
 | 
|      FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &CFF_SERVICE_PS_NAME_GET,
 | 
|      FT_SERVICE_ID_TT_CMAP,              &CFF_SERVICE_GET_CMAP_INFO_GET,
 | 
| @@ -753,7 +825,7 @@
 | 
|      FT_Module_Interface  result;
 | 
|  
 | 
|  
 | 
| -    /* CFF_SERVICES_GET derefers `library' in PIC mode */
 | 
| +    /* CFF_SERVICES_GET dereferences `library' in PIC mode */
 | 
|  #ifdef FT_CONFIG_OPTION_PIC
 | 
|      if ( !driver )
 | 
|        return NULL;
 | 
| 
 |