Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  cidriver.c                                                             */
  4. /*                                                                         */
  5. /*    CID driver interface (body).                                         */
  6. /*                                                                         */
  7. /*  Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by                   */
  8. /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
  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 "cidriver.h"
  21. #include "cidgload.h"
  22. #include FT_INTERNAL_DEBUG_H
  23.  
  24. #include "ciderrs.h"
  25.  
  26. #include FT_SERVICE_POSTSCRIPT_NAME_H
  27. #include FT_SERVICE_XFREE86_NAME_H
  28. #include FT_SERVICE_POSTSCRIPT_INFO_H
  29. #include FT_SERVICE_CID_H
  30.  
  31.  
  32.   /*************************************************************************/
  33.   /*                                                                       */
  34.   /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
  35.   /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
  36.   /* messages during execution.                                            */
  37.   /*                                                                       */
  38. #undef  FT_COMPONENT
  39. #define FT_COMPONENT  trace_ciddriver
  40.  
  41.  
  42.   /*
  43.    *  POSTSCRIPT NAME SERVICE
  44.    *
  45.    */
  46.  
  47.   static const char*
  48.   cid_get_postscript_name( CID_Face  face )
  49.   {
  50.     const char*  result = face->cid.cid_font_name;
  51.  
  52.  
  53.     if ( result && result[0] == '/' )
  54.       result++;
  55.  
  56.     return result;
  57.   }
  58.  
  59.  
  60.   static const FT_Service_PsFontNameRec  cid_service_ps_name =
  61.   {
  62.     (FT_PsName_GetFunc) cid_get_postscript_name
  63.   };
  64.  
  65.  
  66.   /*
  67.    *  POSTSCRIPT INFO SERVICE
  68.    *
  69.    */
  70.  
  71.   static FT_Error
  72.   cid_ps_get_font_info( FT_Face          face,
  73.                         PS_FontInfoRec*  afont_info )
  74.   {
  75.     *afont_info = ((CID_Face)face)->cid.font_info;
  76.  
  77.     return FT_Err_Ok;
  78.   }
  79.  
  80.   static FT_Error
  81.   cid_ps_get_font_extra( FT_Face          face,
  82.                         PS_FontExtraRec*  afont_extra )
  83.   {
  84.     *afont_extra = ((CID_Face)face)->font_extra;
  85.  
  86.     return FT_Err_Ok;
  87.   }
  88.  
  89.   static const FT_Service_PsInfoRec  cid_service_ps_info =
  90.   {
  91.     (PS_GetFontInfoFunc)   cid_ps_get_font_info,
  92.     (PS_GetFontExtraFunc)  cid_ps_get_font_extra,
  93.     (PS_HasGlyphNamesFunc) NULL,        /* unsupported with CID fonts */
  94.     (PS_GetFontPrivateFunc)NULL,        /* unsupported                */
  95.     (PS_GetFontValueFunc)  NULL         /* not implemented            */
  96.   };
  97.  
  98.  
  99.   /*
  100.    *  CID INFO SERVICE
  101.    *
  102.    */
  103.   static FT_Error
  104.   cid_get_ros( CID_Face      face,
  105.                const char*  *registry,
  106.                const char*  *ordering,
  107.                FT_Int       *supplement )
  108.   {
  109.     CID_FaceInfo  cid = &face->cid;
  110.  
  111.  
  112.     if ( registry )
  113.       *registry = cid->registry;
  114.  
  115.     if ( ordering )
  116.       *ordering = cid->ordering;
  117.  
  118.     if ( supplement )
  119.       *supplement = cid->supplement;
  120.  
  121.     return FT_Err_Ok;
  122.   }
  123.  
  124.  
  125.   static FT_Error
  126.   cid_get_is_cid( CID_Face  face,
  127.                   FT_Bool  *is_cid )
  128.   {
  129.     FT_Error  error = FT_Err_Ok;
  130.     FT_UNUSED( face );
  131.  
  132.  
  133.     if ( is_cid )
  134.       *is_cid = 1; /* cid driver is only used for CID keyed fonts */
  135.  
  136.     return error;
  137.   }
  138.  
  139.  
  140.   static FT_Error
  141.   cid_get_cid_from_glyph_index( CID_Face  face,
  142.                                 FT_UInt   glyph_index,
  143.                                 FT_UInt  *cid )
  144.   {
  145.     FT_Error  error = FT_Err_Ok;
  146.     FT_UNUSED( face );
  147.  
  148.  
  149.     if ( cid )
  150.       *cid = glyph_index; /* identity mapping */
  151.  
  152.     return error;
  153.   }
  154.  
  155.  
  156.   static const FT_Service_CIDRec  cid_service_cid_info =
  157.   {
  158.      (FT_CID_GetRegistryOrderingSupplementFunc)cid_get_ros,
  159.      (FT_CID_GetIsInternallyCIDKeyedFunc)      cid_get_is_cid,
  160.      (FT_CID_GetCIDFromGlyphIndexFunc)         cid_get_cid_from_glyph_index
  161.   };
  162.  
  163.  
  164.   /*
  165.    *  SERVICE LIST
  166.    *
  167.    */
  168.  
  169.   static const FT_ServiceDescRec  cid_services[] =
  170.   {
  171.     { FT_SERVICE_ID_XF86_NAME,            FT_XF86_FORMAT_CID },
  172.     { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name },
  173.     { FT_SERVICE_ID_POSTSCRIPT_INFO,      &cid_service_ps_info },
  174.     { FT_SERVICE_ID_CID,                  &cid_service_cid_info },
  175.     { NULL, NULL }
  176.   };
  177.  
  178.  
  179.   FT_CALLBACK_DEF( FT_Module_Interface )
  180.   cid_get_interface( FT_Module    module,
  181.                      const char*  cid_interface )
  182.   {
  183.     FT_UNUSED( module );
  184.  
  185.     return ft_service_list_lookup( cid_services, cid_interface );
  186.   }
  187.  
  188.  
  189.  
  190.   FT_CALLBACK_TABLE_DEF
  191.   const FT_Driver_ClassRec  t1cid_driver_class =
  192.   {
  193.     /* first of all, the FT_Module_Class fields */
  194.     {
  195.       FT_MODULE_FONT_DRIVER       |
  196.       FT_MODULE_DRIVER_SCALABLE   |
  197.       FT_MODULE_DRIVER_HAS_HINTER,
  198.  
  199.       sizeof ( FT_DriverRec ),
  200.       "t1cid",   /* module name           */
  201.       0x10000L,  /* version 1.0 of driver */
  202.       0x20000L,  /* requires FreeType 2.0 */
  203.  
  204.       0,
  205.  
  206.       cid_driver_init,
  207.       cid_driver_done,
  208.       cid_get_interface
  209.     },
  210.  
  211.     /* then the other font drivers fields */
  212.     sizeof ( CID_FaceRec ),
  213.     sizeof ( CID_SizeRec ),
  214.     sizeof ( CID_GlyphSlotRec ),
  215.  
  216.     cid_face_init,
  217.     cid_face_done,
  218.  
  219.     cid_size_init,
  220.     cid_size_done,
  221.     cid_slot_init,
  222.     cid_slot_done,
  223.  
  224.     cid_slot_load_glyph,
  225.  
  226.     0,                      /* FT_Face_GetKerningFunc  */
  227.     0,                      /* FT_Face_AttachFunc      */
  228.  
  229.     0,                      /* FT_Face_GetAdvancesFunc */
  230.  
  231.     cid_size_request,
  232.     0                       /* FT_Size_SelectFunc      */
  233.   };
  234.  
  235.  
  236. /* END */
  237.