1 /* 2 * Copyright © 2012 Google, 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 * Google Author(s): Behdad Esfahbod 25 */ 26 27 #if !defined(HB_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR) 28 #error "Include <hb.h> instead." 29 #endif 30 31 #ifndef HB_SHAPE_PLAN_H 32 #define HB_SHAPE_PLAN_H 33 34 #include "hb-common.h" 35 #include "hb-font.h" 36 37 HB_BEGIN_DECLS 38 39 /** 40 * hb_shape_plan_t: 41 * 42 * Data type for holding a shaping plan. 43 * 44 * Shape plans contain information about how HarfBuzz will shape a 45 * particular text segment, based on the segment's properties and the 46 * capabilities in the font face in use. 47 * 48 * Shape plans can be queried about how shaping will perform, given a set 49 * of specific input parameters (script, language, direction, features, 50 * etc.). 51 * 52 **/ 53 typedef struct hb_shape_plan_t hb_shape_plan_t; 54 55 HB_EXTERN hb_shape_plan_t * 56 hb_shape_plan_create (hb_face_t *face, 57 const hb_segment_properties_t *props, 58 const hb_feature_t *user_features, 59 unsigned int num_user_features, 60 const char * const *shaper_list); 61 62 HB_EXTERN hb_shape_plan_t * 63 hb_shape_plan_create_cached (hb_face_t *face, 64 const hb_segment_properties_t *props, 65 const hb_feature_t *user_features, 66 unsigned int num_user_features, 67 const char * const *shaper_list); 68 69 HB_EXTERN hb_shape_plan_t * 70 hb_shape_plan_create2 (hb_face_t *face, 71 const hb_segment_properties_t *props, 72 const hb_feature_t *user_features, 73 unsigned int num_user_features, 74 const int *coords, 75 unsigned int num_coords, 76 const char * const *shaper_list); 77 78 HB_EXTERN hb_shape_plan_t * 79 hb_shape_plan_create_cached2 (hb_face_t *face, 80 const hb_segment_properties_t *props, 81 const hb_feature_t *user_features, 82 unsigned int num_user_features, 83 const int *coords, 84 unsigned int num_coords, 85 const char * const *shaper_list); 86 87 88 HB_EXTERN hb_shape_plan_t * 89 hb_shape_plan_get_empty (void); 90 91 HB_EXTERN hb_shape_plan_t * 92 hb_shape_plan_reference (hb_shape_plan_t *shape_plan); 93 94 HB_EXTERN void 95 hb_shape_plan_destroy (hb_shape_plan_t *shape_plan); 96 97 HB_EXTERN hb_bool_t 98 hb_shape_plan_set_user_data (hb_shape_plan_t *shape_plan, 99 hb_user_data_key_t *key, 100 void * data, 101 hb_destroy_func_t destroy, 102 hb_bool_t replace); 103 104 HB_EXTERN void * 105 hb_shape_plan_get_user_data (hb_shape_plan_t *shape_plan, 106 hb_user_data_key_t *key); 107 108 109 HB_EXTERN hb_bool_t 110 hb_shape_plan_execute (hb_shape_plan_t *shape_plan, 111 hb_font_t *font, 112 hb_buffer_t *buffer, 113 const hb_feature_t *features, 114 unsigned int num_features); 115 116 HB_EXTERN const char * 117 hb_shape_plan_get_shaper (hb_shape_plan_t *shape_plan); 118 119 120 HB_END_DECLS 121 122 #endif /* HB_SHAPE_PLAN_H */ 123