(root)/
freetype-2.13.2/
src/
base/
ftcid.c
       1  /****************************************************************************
       2   *
       3   * ftcid.c
       4   *
       5   *   FreeType API for accessing CID font information.
       6   *
       7   * Copyright (C) 2007-2023 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 <freetype/ftcid.h>
      20  #include <freetype/internal/ftobjs.h>
      21  #include <freetype/internal/services/svcid.h>
      22  
      23  
      24    /* documentation is in ftcid.h */
      25  
      26    FT_EXPORT_DEF( FT_Error )
      27    FT_Get_CID_Registry_Ordering_Supplement( FT_Face       face,
      28                                             const char*  *registry,
      29                                             const char*  *ordering,
      30                                             FT_Int       *supplement)
      31    {
      32      FT_Error     error;
      33      const char*  r = NULL;
      34      const char*  o = NULL;
      35      FT_Int       s = 0;
      36  
      37  
      38      error = FT_ERR( Invalid_Argument );
      39  
      40      if ( face )
      41      {
      42        FT_Service_CID  service;
      43  
      44  
      45        FT_FACE_FIND_SERVICE( face, service, CID );
      46  
      47        if ( service && service->get_ros )
      48          error = service->get_ros( face, &r, &o, &s );
      49      }
      50  
      51      if ( registry )
      52        *registry = r;
      53  
      54      if ( ordering )
      55        *ordering = o;
      56  
      57      if ( supplement )
      58        *supplement = s;
      59  
      60      return error;
      61    }
      62  
      63  
      64    FT_EXPORT_DEF( FT_Error )
      65    FT_Get_CID_Is_Internally_CID_Keyed( FT_Face   face,
      66                                        FT_Bool  *is_cid )
      67    {
      68      FT_Error  error = FT_ERR( Invalid_Argument );
      69      FT_Bool   ic = 0;
      70  
      71  
      72      if ( face )
      73      {
      74        FT_Service_CID  service;
      75  
      76  
      77        FT_FACE_FIND_SERVICE( face, service, CID );
      78  
      79        if ( service && service->get_is_cid )
      80          error = service->get_is_cid( face, &ic);
      81      }
      82  
      83      if ( is_cid )
      84        *is_cid = ic;
      85  
      86      return error;
      87    }
      88  
      89  
      90    FT_EXPORT_DEF( FT_Error )
      91    FT_Get_CID_From_Glyph_Index( FT_Face   face,
      92                                 FT_UInt   glyph_index,
      93                                 FT_UInt  *cid )
      94    {
      95      FT_Error  error = FT_ERR( Invalid_Argument );
      96      FT_UInt   c = 0;
      97  
      98  
      99      if ( face )
     100      {
     101        FT_Service_CID  service;
     102  
     103  
     104        FT_FACE_FIND_SERVICE( face, service, CID );
     105  
     106        if ( service && service->get_cid_from_glyph_index )
     107          error = service->get_cid_from_glyph_index( face, glyph_index, &c);
     108      }
     109  
     110      if ( cid )
     111        *cid = c;
     112  
     113      return error;
     114    }
     115  
     116  
     117  /* END */