gfx/harfbuzz/src/hb-ot-layout.h

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 /*
     2  * Copyright © 2007,2008,2009  Red Hat, Inc.
     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  * Red Hat Author(s): Behdad Esfahbod
    25  */
    27 #ifndef HB_OT_H_IN
    28 #error "Include <hb-ot.h> instead."
    29 #endif
    31 #ifndef HB_OT_LAYOUT_H
    32 #define HB_OT_LAYOUT_H
    34 #include "hb.h"
    36 #include "hb-ot-tag.h"
    38 HB_BEGIN_DECLS
    41 #define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
    42 #define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
    43 #define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
    44 #define HB_OT_TAG_JSTF HB_TAG('J','S','T','F')
    47 /*
    48  * GDEF
    49  */
    51 hb_bool_t
    52 hb_ot_layout_has_glyph_classes (hb_face_t *face);
    54 typedef enum {
    55   HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED	= 0,
    56   HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH	= 1,
    57   HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE	= 2,
    58   HB_OT_LAYOUT_GLYPH_CLASS_MARK		= 3,
    59   HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT	= 4
    60 } hb_ot_layout_glyph_class_t;
    62 hb_ot_layout_glyph_class_t
    63 hb_ot_layout_get_glyph_class (hb_face_t      *face,
    64 			      hb_codepoint_t  glyph);
    66 void
    67 hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
    68 				  hb_ot_layout_glyph_class_t  klass,
    69 				  hb_set_t                   *glyphs /* OUT */);
    72 /* Not that useful.  Provides list of attach points for a glyph that a
    73  * client may want to cache */
    74 unsigned int
    75 hb_ot_layout_get_attach_points (hb_face_t      *face,
    76 				hb_codepoint_t  glyph,
    77 				unsigned int    start_offset,
    78 				unsigned int   *point_count /* IN/OUT */,
    79 				unsigned int   *point_array /* OUT */);
    81 /* Ligature caret positions */
    82 unsigned int
    83 hb_ot_layout_get_ligature_carets (hb_font_t      *font,
    84 				  hb_direction_t  direction,
    85 				  hb_codepoint_t  glyph,
    86 				  unsigned int    start_offset,
    87 				  unsigned int   *caret_count /* IN/OUT */,
    88 				  hb_position_t  *caret_array /* OUT */);
    91 /*
    92  * GSUB/GPOS feature query and enumeration interface
    93  */
    95 #define HB_OT_LAYOUT_NO_SCRIPT_INDEX		((unsigned int) 0xFFFF)
    96 #define HB_OT_LAYOUT_NO_FEATURE_INDEX		((unsigned int) 0xFFFF)
    97 #define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX	((unsigned int) 0xFFFF)
    99 unsigned int
   100 hb_ot_layout_table_get_script_tags (hb_face_t    *face,
   101 				    hb_tag_t      table_tag,
   102 				    unsigned int  start_offset,
   103 				    unsigned int *script_count /* IN/OUT */,
   104 				    hb_tag_t     *script_tags /* OUT */);
   106 hb_bool_t
   107 hb_ot_layout_table_find_script (hb_face_t    *face,
   108 				hb_tag_t      table_tag,
   109 				hb_tag_t      script_tag,
   110 				unsigned int *script_index);
   112 /* Like find_script, but takes zero-terminated array of scripts to test */
   113 hb_bool_t
   114 hb_ot_layout_table_choose_script (hb_face_t      *face,
   115 				  hb_tag_t        table_tag,
   116 				  const hb_tag_t *script_tags,
   117 				  unsigned int   *script_index,
   118 				  hb_tag_t       *chosen_script);
   120 unsigned int
   121 hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
   122 				     hb_tag_t      table_tag,
   123 				     unsigned int  start_offset,
   124 				     unsigned int *feature_count /* IN/OUT */,
   125 				     hb_tag_t     *feature_tags /* OUT */);
   127 unsigned int
   128 hb_ot_layout_script_get_language_tags (hb_face_t    *face,
   129 				       hb_tag_t      table_tag,
   130 				       unsigned int  script_index,
   131 				       unsigned int  start_offset,
   132 				       unsigned int *language_count /* IN/OUT */,
   133 				       hb_tag_t     *language_tags /* OUT */);
   135 hb_bool_t
   136 hb_ot_layout_script_find_language (hb_face_t    *face,
   137 				   hb_tag_t      table_tag,
   138 				   unsigned int  script_index,
   139 				   hb_tag_t      language_tag,
   140 				   unsigned int *language_index);
   142 hb_bool_t
   143 hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
   144 						  hb_tag_t      table_tag,
   145 						  unsigned int  script_index,
   146 						  unsigned int  language_index,
   147 						  unsigned int *feature_index);
   149 unsigned int
   150 hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
   151 					   hb_tag_t      table_tag,
   152 					   unsigned int  script_index,
   153 					   unsigned int  language_index,
   154 					   unsigned int  start_offset,
   155 					   unsigned int *feature_count /* IN/OUT */,
   156 					   unsigned int *feature_indexes /* OUT */);
   158 unsigned int
   159 hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
   160 					hb_tag_t      table_tag,
   161 					unsigned int  script_index,
   162 					unsigned int  language_index,
   163 					unsigned int  start_offset,
   164 					unsigned int *feature_count /* IN/OUT */,
   165 					hb_tag_t     *feature_tags /* OUT */);
   167 hb_bool_t
   168 hb_ot_layout_language_find_feature (hb_face_t    *face,
   169 				    hb_tag_t      table_tag,
   170 				    unsigned int  script_index,
   171 				    unsigned int  language_index,
   172 				    hb_tag_t      feature_tag,
   173 				    unsigned int *feature_index);
   175 unsigned int
   176 hb_ot_layout_feature_get_lookups (hb_face_t    *face,
   177 				  hb_tag_t      table_tag,
   178 				  unsigned int  feature_index,
   179 				  unsigned int  start_offset,
   180 				  unsigned int *lookup_count /* IN/OUT */,
   181 				  unsigned int *lookup_indexes /* OUT */);
   183 unsigned int
   184 hb_ot_layout_table_get_lookup_count (hb_face_t    *face,
   185 				     hb_tag_t      table_tag);
   188 void
   189 hb_ot_layout_collect_lookups (hb_face_t      *face,
   190 			      hb_tag_t        table_tag,
   191 			      const hb_tag_t *scripts,
   192 			      const hb_tag_t *languages,
   193 			      const hb_tag_t *features,
   194 			      hb_set_t       *lookup_indexes /* OUT */);
   196 void
   197 hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
   198 				    hb_tag_t      table_tag,
   199 				    unsigned int  lookup_index,
   200 				    hb_set_t     *glyphs_before, /* OUT. May be NULL */
   201 				    hb_set_t     *glyphs_input,  /* OUT. May be NULL */
   202 				    hb_set_t     *glyphs_after,  /* OUT. May be NULL */
   203 				    hb_set_t     *glyphs_output  /* OUT. May be NULL */);
   205 #ifdef HB_NOT_IMPLEMENTED
   206 typedef struct
   207 {
   208   const hb_codepoint_t *before,
   209   unsigned int          before_length,
   210   const hb_codepoint_t *input,
   211   unsigned int          input_length,
   212   const hb_codepoint_t *after,
   213   unsigned int          after_length,
   214 } hb_ot_layout_glyph_sequence_t;
   216 typedef hb_bool_t
   217 (*hb_ot_layout_glyph_sequence_func_t) (hb_font_t    *font,
   218 				       hb_tag_t      table_tag,
   219 				       unsigned int  lookup_index,
   220 				       const hb_ot_layout_glyph_sequence_t *sequence,
   221 				       void         *user_data);
   223 void
   224 Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t    *face,
   225 					 hb_tag_t      table_tag,
   226 					 unsigned int  lookup_index,
   227 					 hb_ot_layout_glyph_sequence_func_t callback,
   228 					 void         *user_data);
   229 #endif
   232 /*
   233  * GSUB
   234  */
   236 hb_bool_t
   237 hb_ot_layout_has_substitution (hb_face_t *face);
   239 hb_bool_t
   240 hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
   241 				      unsigned int          lookup_index,
   242 				      const hb_codepoint_t *glyphs,
   243 				      unsigned int          glyphs_length,
   244 				      hb_bool_t             zero_context);
   246 void
   247 hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
   248 				        unsigned int  lookup_index,
   249 				        hb_set_t     *glyphs
   250 					/*TODO , hb_bool_t  inclusive */);
   252 #ifdef HB_NOT_IMPLEMENTED
   253 /* Note: You better have GDEF when using this API, or marks won't do much. */
   254 hb_bool_t
   255 Xhb_ot_layout_lookup_substitute (hb_font_t            *font,
   256 				unsigned int          lookup_index,
   257 				const hb_ot_layout_glyph_sequence_t *sequence,
   258 				unsigned int          out_size,
   259 				hb_codepoint_t       *glyphs_out,   /* OUT */
   260 				unsigned int         *clusters_out, /* OUT */
   261 				unsigned int         *out_length    /* OUT */);
   262 #endif
   265 /*
   266  * GPOS
   267  */
   269 hb_bool_t
   270 hb_ot_layout_has_positioning (hb_face_t *face);
   272 #ifdef HB_NOT_IMPLEMENTED
   273 /* Note: You better have GDEF when using this API, or marks won't do much. */
   274 hb_bool_t
   275 Xhb_ot_layout_lookup_position (hb_font_t            *font,
   276 			      unsigned int          lookup_index,
   277 			      const hb_ot_layout_glyph_sequence_t *sequence,
   278 			      hb_glyph_position_t  *positions /* IN / OUT */);
   279 #endif
   281 /* Optical 'size' feature info.  Returns true if found.
   282  * http://www.microsoft.com/typography/otspec/features_pt.htm#size */
   283 hb_bool_t
   284 hb_ot_layout_get_size_params (hb_face_t    *face,
   285 			      unsigned int *design_size,       /* OUT.  May be NULL */
   286 			      unsigned int *subfamily_id,      /* OUT.  May be NULL */
   287 			      unsigned int *subfamily_name_id, /* OUT.  May be NULL */
   288 			      unsigned int *range_start,       /* OUT.  May be NULL */
   289 			      unsigned int *range_end          /* OUT.  May be NULL */);
   292 HB_END_DECLS
   294 #endif /* HB_OT_LAYOUT_H */

mercurial