1 /*
   2  * Copyright © 2018  Ebrahim Byagowi.
   3  *
   4  *  This is part of HarfBuzz, a text shaping library.
   5  *
   6  * Permission is hereby granted, without written agreement and without
   7  * license or royalty fees, to use, copy, modify, and distribute this
   8  * software and its documentation for any purpose, provided that the
   9  * above copyright notice and the following two paragraphs appear in
  10  * all copies of this software.
  11  *
  12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  16  * DAMAGE.
  17  *
  18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  23  */
  24 
  25 #ifndef HB_OT_H_IN
  26 #error "Include <hb-ot.h> instead."
  27 #endif
  28 
  29 #ifndef HB_OT_NAME_H
  30 #define HB_OT_NAME_H
  31 
  32 #include "hb.h"
  33 
  34 HB_BEGIN_DECLS
  35 
  36 
  37 /**
  38  * hb_ot_name_id_t:
  39  * @HB_OT_NAME_ID_INVALID: Value to represent a nonexistent name ID.
  40  *
  41  * An integral type representing an OpenType 'name' table name identifier.
  42  * There are predefined name IDs, as well as name IDs return from other
  43  * API.  These can be used to fetch name strings from a font face.
  44  *
  45  * Since: 2.0.0
  46  **/
  47 enum
  48 {
  49   HB_OT_NAME_ID_COPYRIGHT               = 0,
  50   HB_OT_NAME_ID_FONT_FAMILY             = 1,
  51   HB_OT_NAME_ID_FONT_SUBFAMILY          = 2,
  52   HB_OT_NAME_ID_UNIQUE_ID               = 3,
  53   HB_OT_NAME_ID_FULL_NAME               = 4,
  54   HB_OT_NAME_ID_VERSION_STRING          = 5,
  55   HB_OT_NAME_ID_POSTSCRIPT_NAME         = 6,
  56   HB_OT_NAME_ID_TRADEMARK               = 7,
  57   HB_OT_NAME_ID_MANUFACTURER            = 8,
  58   HB_OT_NAME_ID_DESIGNER                = 9,
  59   HB_OT_NAME_ID_DESCRIPTION             = 10,
  60   HB_OT_NAME_ID_VENDOR_URL              = 11,
  61   HB_OT_NAME_ID_DESIGNER_URL            = 12,
  62   HB_OT_NAME_ID_LICENSE                 = 13,
  63   HB_OT_NAME_ID_LICENSE_URL             = 14,
  64 /*HB_OT_NAME_ID_RESERVED                = 15,*/
  65   HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY      = 16,
  66   HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY   = 17,
  67   HB_OT_NAME_ID_MAC_FULL_NAME           = 18,
  68   HB_OT_NAME_ID_SAMPLE_TEXT             = 19,
  69   HB_OT_NAME_ID_CID_FINDFONT_NAME       = 20,
  70   HB_OT_NAME_ID_WWS_FAMILY              = 21,
  71   HB_OT_NAME_ID_WWS_SUBFAMILY           = 22,
  72   HB_OT_NAME_ID_LIGHT_BACKGROUND        = 23,
  73   HB_OT_NAME_ID_DARK_BACKGROUND         = 24,
  74   HB_OT_NAME_ID_VARIATIONS_PS_PREFIX    = 25,
  75 
  76   HB_OT_NAME_ID_INVALID                 = 0xFFFF
  77 };
  78 
  79 typedef unsigned int hb_ot_name_id_t;
  80 
  81 
  82 /**
  83  * hb_ot_name_entry_t:
  84  * @name_id: name ID
  85  * @language: language
  86  *
  87  * Structure representing a name ID in a particular language.
  88  *
  89  * Since: 2.1.0
  90  **/
  91 typedef struct hb_ot_name_entry_t
  92 {
  93   hb_ot_name_id_t name_id;
  94   /*< private >*/
  95   hb_var_int_t    var;
  96   /*< public >*/
  97   hb_language_t   language;
  98 } hb_ot_name_entry_t;
  99 
 100 HB_EXTERN const hb_ot_name_entry_t *
 101 hb_ot_name_list_names (hb_face_t    *face,
 102                        unsigned int *num_entries /* OUT */);
 103 
 104 
 105 HB_EXTERN unsigned int
 106 hb_ot_name_get_utf8 (hb_face_t       *face,
 107                      hb_ot_name_id_t  name_id,
 108                      hb_language_t    language,
 109                      unsigned int    *text_size /* IN/OUT */,
 110                      char            *text      /* OUT */);
 111 
 112 HB_EXTERN unsigned int
 113 hb_ot_name_get_utf16 (hb_face_t       *face,
 114                       hb_ot_name_id_t  name_id,
 115                       hb_language_t    language,
 116                       unsigned int    *text_size /* IN/OUT */,
 117                       uint16_t        *text      /* OUT */);
 118 
 119 HB_EXTERN unsigned int
 120 hb_ot_name_get_utf32 (hb_face_t       *face,
 121                       hb_ot_name_id_t  name_id,
 122                       hb_language_t    language,
 123                       unsigned int    *text_size /* IN/OUT */,
 124                       uint32_t        *text      /* OUT */);
 125 
 126 
 127 HB_END_DECLS
 128 
 129 #endif /* HB_OT_NAME_H */