1 /* m17n-flt.h -- header file for the FLT API of the m17n library.
3 National Institute of Advanced Industrial Science and Technology (AIST)
4 Registration Number H15PRO112
6 This file is part of the m17n library.
8 The m17n library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public License
10 as published by the Free Software Foundation; either version 2.1 of
11 the License, or (at your option) any later version.
13 The m17n library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public
19 License along with the m17n library; if not, write to the Free
20 Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
27 #include <m17n-core.h>
32 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
34 extern void m17n_init_flt (void);
36 #define M17N_INIT() m17n_init_flt ()
38 extern void m17n_fini_flt (void);
40 #define M17N_FINI() m17n_fini_flt ()
44 /***en @defgroup m17nFLT FLT API */
45 /***ja @defgroup m17nFLT FLT API */
48 /*** @addtogroup m17nFLT */
53 @brief Type of information about a glyph.
55 The type #MFLTGlyph is the structure that contains information
58 typedef struct _MFLTGlyph MFLTGlyph;
62 /***en @brief Character code (Unicode) of the glyph. This is the sole
63 member to be set before calling the functions mflt_find () and
66 /***en Glyph-id of the font of the glyph. */
68 /***en Glyph indices indicating the start of the original glyphs. */
70 /***en Glyph indices indicating the end of the original glyphs. */
72 /***en Advance width for horizontal layout expressed in 26.6
73 fractional pixel format. */
75 /***en Advance height for vertical layout expressed in 26.6
76 fractional pixel format. */
78 /***en Ink metrics of the glyph expressed in 26.6 fractional pixel
80 int ascent, descent, lbearing, rbearing;
81 /***en Horizontal and vertical adjustments for the glyph positioning
82 expressed in 26.6 fractional pixel format. */
84 /***en Flag to tell if the member <code> is already encoded into a
85 glyph ID of a font. */
87 /***en Flag to tell if the metrics of the glyph (members <xadv> thru
88 <rbearing>) are already calculated. */
89 unsigned measured : 1;
90 /***en For m17n-lib's internal use only. */
91 unsigned internal : 30;
93 /* Arbitrary data can follow. */
99 @brief Type of information about a glyph position adjustment.
101 The type #MFLTGlyphAdjustment is the structure to store
102 information about a glyph metrics/position adjustment. It is
103 given to the callback function #drive_otf of #MFLTFont. */
105 typedef struct _MFLTGlyphAdjustment MFLTGlyphAdjustment;
107 struct _MFLTGlyphAdjustment
109 /***en Adjustments for advance width for horizontal layout and
110 advance height for vertical layout expressed in 26.6 fractional
113 /***en Horizontal and vertical adjustments for a glyph positioning
114 expressed in 26.6 fractional pixel format. */
116 /***en Number of glyphs to go back for drawing a glyph. */
118 /***en If nonzero, the member <xadv> and <yadv> are absolute, i.e.,
119 they should not be added to a glyph's origianl advance width and
121 unsigned advance_is_absolute : 1;
122 /***en Should be set to 1 iff at least one of the other members has
128 @brief Type of information about a glyph sequence.
130 The type #MFLTGlyphString is the structure that contains
131 information about a sequence of glyphs. */
133 typedef struct _MFLTGlyphString MFLTGlyphString;
135 struct _MFLTGlyphString
137 /***en The actual byte size of elements of the array pointed by the
138 member #glyphs. It must be equal to or greater than "sizeof
141 /***en Array of glyphs. */
143 /***en How many elements are allocated in #glyphs. */
145 /***en How many elements in #glyphs are in use. */
147 /***en Flag to tell if the glyphs should be drawn from right-to-left
153 @brief Type of specification of GSUB and GPOS OpenType tables.
155 The type #MFLTOtfSpec is the structure that contains information
156 about GSUB and GPOS features of a specific script and language
157 system to be applied to a glyph sequence. */
159 typedef struct _MFLTOtfSpec MFLTOtfSpec;
163 /***en Unique symbol representing the spec. This is the same as the
164 #OTF-SPEC of the FLT. */
167 /***en Tags for script and language system. */
168 unsigned int script, langsys;
170 /***en Array of GSUB (1st element) and GPOS (2nd element) features.
171 Each array is terminated by 0. If an element is 0xFFFFFFFF,
172 apply the previous features in that order, and apply all the
173 other features except those appearing in the following elements.
174 It may be NULL if there's no feature. */
175 unsigned int *features[2];
179 @brief Type of font to be used by the FLT driver.
181 The type #MFLTFont is the structure that contains information
182 about a font used by the FLT driver. */
184 typedef struct _MFLTFont MFLTFont;
188 /***en Family name of the font. It may be #Mnil if the family name
189 is not important in finding a Font Layout Table suitable for the
190 font (for instance, in the case that the font is an OpenType
194 /***en Horizontal and vertical font sizes in pixel per EM. */
197 /***en Callback function to get glyph IDs for glyphs between FROM
198 (inclusive) and TO (exclusive) of GSTRING. If <encoded> member
199 of a glyph is zero, the <code> member of the glyph is a character
200 code. The function must convert it to the glyph ID of FONT. */
201 int (*get_glyph_id) (MFLTFont *font, MFLTGlyphString *gstring,
204 /*** Callback function to get metrics of glyphs between FROM
205 (inclusive) and TO (exclusive) of GSTRING. If <measured> member
206 of a glyph is zero, the function must set members <xadv>, <yadv>,
207 <ascent>, <descent>, <lbearing>, and <rbearing> of the glyph. */
208 int (*get_metrics) (MFLTFont *font, MFLTGlyphString *gstring,
211 /***en Callback function to check if the font has OpenType GSUB/GPOS
212 features for a specific script/language. The function must
213 return 1 if the font satisfy SPEC, else return 0. It must be
214 NULL if the font doesn't have OpenType tables. */
215 int (*check_otf) (MFLTFont *font, MFLTOtfSpec *spec);
217 /*** Callback function to apply OpenType features in SPEC to glyphs
218 between FROM (inclusive) and TO (exclusive) of IN. The resulting
219 glyphs should be appended to the tail of OUT. If OUT doesn't
220 have a room to store all resulting glyphs, it must return -2.
221 It must be NULL if the font doesn't have OpenType tables. */
222 int (*drive_otf) (MFLTFont *font, MFLTOtfSpec *spec,
223 MFLTGlyphString *in, int from, int to,
224 MFLTGlyphString *out, MFLTGlyphAdjustment *adjustment);
226 /***en For m17n-lib's internal use only. It should be initialized
232 @brief Type of FLT (Font Layout Table).
234 The type #MFLT is for a FLT object. Its internal structure is
235 concealed from application program. */
237 typedef struct _MFLT MFLT;
239 extern MFLT *mflt_get (MSymbol name);
241 extern MFLT *mflt_find (int c, MFLTFont *font);
243 extern const char *mflt_name (MFLT *flt);
245 extern MCharTable *mflt_coverage (MFLT *flt);
247 extern int mflt_run (MFLTGlyphString *gstring, int from, int to,
248 MFLTFont *font, MFLT *flt);
255 #endif /* _M17N_FLT_H_ */