Home | History | Annotate | Download | only in base
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  ftcid.c                                                                */
      4 /*                                                                         */
      5 /*    FreeType API for accessing CID font information.                     */
      6 /*                                                                         */
      7 /*  Copyright 2007-2018 by                                                 */
      8 /*  Derek Clegg and Michael Toftdal.                                       */
      9 /*                                                                         */
     10 /*  This file is part of the FreeType project, and may only be used,       */
     11 /*  modified, and distributed under the terms of the FreeType project      */
     12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
     13 /*  this file you indicate that you have read the license and              */
     14 /*  understand and accept it fully.                                        */
     15 /*                                                                         */
     16 /***************************************************************************/
     17 
     18 
     19 #include <ft2build.h>
     20 #include FT_CID_H
     21 #include FT_INTERNAL_OBJECTS_H
     22 #include FT_SERVICE_CID_H
     23 
     24 
     25   /* documentation is in ftcid.h */
     26 
     27   FT_EXPORT_DEF( FT_Error )
     28   FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
     29                                            const char*  *registry,
     30                                            const char*  *ordering,
     31                                            FT_Int       *supplement)
     32   {
     33     FT_Error     error;
     34     const char*  r = NULL;
     35     const char*  o = NULL;
     36     FT_Int       s = 0;
     37 
     38 
     39     error = FT_ERR( Invalid_Argument );
     40 
     41     if ( face )
     42     {
     43       FT_Service_CID  service;
     44 
     45 
     46       FT_FACE_FIND_SERVICE( face, service, CID );
     47 
     48       if ( service && service->get_ros )
     49         error = service->get_ros( face, &r, &o, &s );
     50     }
     51 
     52     if ( registry )
     53       *registry = r;
     54 
     55     if ( ordering )
     56       *ordering = o;
     57 
     58     if ( supplement )
     59       *supplement = s;
     60 
     61     return error;
     62   }
     63 
     64 
     65   FT_EXPORT_DEF( FT_Error )
     66   FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
     67                                       FT_Bool  *is_cid )
     68   {
     69     FT_Error  error = FT_ERR( Invalid_Argument );
     70     FT_Bool   ic = 0;
     71 
     72 
     73     if ( face )
     74     {
     75       FT_Service_CID  service;
     76 
     77 
     78       FT_FACE_FIND_SERVICE( face, service, CID );
     79 
     80       if ( service && service->get_is_cid )
     81         error = service->get_is_cid( face, &ic);
     82     }
     83 
     84     if ( is_cid )
     85       *is_cid = ic;
     86 
     87     return error;
     88   }
     89 
     90 
     91   FT_EXPORT_DEF( FT_Error )
     92   FT_Get_CID_From_Glyph_Index( FT_Face   face,
     93                                FT_UInt   glyph_index,
     94                                FT_UInt  *cid )
     95   {
     96     FT_Error  error = FT_ERR( Invalid_Argument );
     97     FT_UInt   c = 0;
     98 
     99 
    100     if ( face )
    101     {
    102       FT_Service_CID  service;
    103 
    104 
    105       FT_FACE_FIND_SERVICE( face, service, CID );
    106 
    107       if ( service && service->get_cid_from_glyph_index )
    108         error = service->get_cid_from_glyph_index( face, glyph_index, &c);
    109     }
    110 
    111     if ( cid )
    112       *cid = c;
    113 
    114     return error;
    115   }
    116 
    117 
    118 /* END */
    119