1 /* 2 * Copyright (C) 1998-2004 David Turner and Werner Lemberg 3 * Copyright (C) 2006 Behdad Esfahbod 4 * 5 * This is part of HarfBuzz, an OpenType Layout engine library. 6 * 7 * Permission is hereby granted, without written agreement and without 8 * license or royalty fees, to use, copy, modify, and distribute this 9 * software and its documentation for any purpose, provided that the 10 * above copyright notice and the following two paragraphs appear in 11 * all copies of this software. 12 * 13 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 14 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 15 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 16 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 17 * DAMAGE. 18 * 19 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 20 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 21 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 22 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 23 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 24 */ 25 26 #ifndef HARFBUZZ_GPOS_H 27 #define HARFBUZZ_GPOS_H 28 29 #include "harfbuzz-gdef.h" 30 #include "harfbuzz-buffer.h" 31 32 HB_BEGIN_HEADER 33 34 35 /* Lookup types for glyph positioning */ 36 37 #define HB_GPOS_LOOKUP_SINGLE 1 38 #define HB_GPOS_LOOKUP_PAIR 2 39 #define HB_GPOS_LOOKUP_CURSIVE 3 40 #define HB_GPOS_LOOKUP_MARKBASE 4 41 #define HB_GPOS_LOOKUP_MARKLIG 5 42 #define HB_GPOS_LOOKUP_MARKMARK 6 43 #define HB_GPOS_LOOKUP_CONTEXT 7 44 #define HB_GPOS_LOOKUP_CHAIN 8 45 #define HB_GPOS_LOOKUP_EXTENSION 9 46 47 #ifdef HB_SUPPORT_MULTIPLE_MASTER 48 /* A pointer to a function which accesses the PostScript interpreter. 49 Multiple Master fonts need this interface to convert a metric ID 50 (as stored in an OpenType font version 1.2 or higher) `metric_id' 51 into a metric value (returned in `metric_value'). 52 53 `data' points to the user-defined structure specified during a 54 call to HB_GPOS_Register_MM_Function(). 55 56 `metric_value' must be returned as a scaled value (but shouldn't 57 be rounded). */ 58 59 typedef HB_Error (*HB_MMFunction)(HB_Font font, 60 HB_UShort metric_id, 61 HB_Fixed* metric_value, 62 void* data ); 63 #endif 64 65 66 struct HB_GPOSHeader_ 67 { 68 HB_16Dot16 Version; 69 70 HB_ScriptList ScriptList; 71 HB_FeatureList FeatureList; 72 HB_LookupList LookupList; 73 74 HB_GDEFHeader* gdef; 75 76 #ifdef HB_SUPPORT_MULTIPLE_MASTER 77 /* this is OpenType 1.2 -- Multiple Master fonts need this 78 callback function to get various metric values from the 79 PostScript interpreter. */ 80 81 HB_MMFunction mmfunc; 82 void* data; 83 #endif 84 }; 85 86 typedef struct HB_GPOSHeader_ HB_GPOSHeader; 87 typedef HB_GPOSHeader* HB_GPOS; 88 89 90 HB_Error HB_Load_GPOS_Table( HB_Stream stream, 91 HB_GPOSHeader** gpos, 92 HB_GDEFHeader* gdef, 93 HB_Stream gdefStream ); 94 95 96 HB_Error HB_Done_GPOS_Table( HB_GPOSHeader* gpos ); 97 98 99 HB_Error HB_GPOS_Select_Script( HB_GPOSHeader* gpos, 100 HB_UInt script_tag, 101 HB_UShort* script_index ); 102 103 HB_Error HB_GPOS_Select_Language( HB_GPOSHeader* gpos, 104 HB_UInt language_tag, 105 HB_UShort script_index, 106 HB_UShort* language_index, 107 HB_UShort* req_feature_index ); 108 109 HB_Error HB_GPOS_Select_Feature( HB_GPOSHeader* gpos, 110 HB_UInt feature_tag, 111 HB_UShort script_index, 112 HB_UShort language_index, 113 HB_UShort* feature_index ); 114 115 116 HB_Error HB_GPOS_Query_Scripts( HB_GPOSHeader* gpos, 117 HB_UInt** script_tag_list ); 118 119 HB_Error HB_GPOS_Query_Languages( HB_GPOSHeader* gpos, 120 HB_UShort script_index, 121 HB_UInt** language_tag_list ); 122 123 HB_Error HB_GPOS_Query_Features( HB_GPOSHeader* gpos, 124 HB_UShort script_index, 125 HB_UShort language_index, 126 HB_UInt** feature_tag_list ); 127 128 129 HB_Error HB_GPOS_Add_Feature( HB_GPOSHeader* gpos, 130 HB_UShort feature_index, 131 HB_UInt property ); 132 133 HB_Error HB_GPOS_Clear_Features( HB_GPOSHeader* gpos ); 134 135 136 #ifdef HB_SUPPORT_MULTIPLE_MASTER 137 HB_Error HB_GPOS_Register_MM_Function( HB_GPOSHeader* gpos, 138 HB_MMFunction mmfunc, 139 void* data ); 140 #endif 141 142 /* If `dvi' is TRUE, glyph contour points for anchor points and device 143 tables are ignored -- you will get device independent values. */ 144 145 146 HB_Error HB_GPOS_Apply_String( HB_Font font, 147 HB_GPOSHeader* gpos, 148 HB_UShort load_flags, 149 HB_Buffer buffer, 150 HB_Bool dvi, 151 HB_Bool r2l ); 152 153 HB_END_HEADER 154 155 #endif /* HARFBUZZ_GPOS_H */ 156