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);
40 if (merror_code == MERROR_NONE) \
43 #else /* not _M17N_H_ */
44 #define M17N_INIT() m17n_init_flt ()
45 #endif /* not _M17N_H_ */
47 extern void m17n_fini_flt (void);
55 #else /* not _M17N_H_ */
56 #define M17N_FINI() m17n_fini_flt ()
57 #endif /* not _M17N_H_ */
61 /***en @defgroup m17nFLT FLT API */
62 /***ja @defgroup m17nFLT FLT API */
65 /*** @addtogroup m17nFLT */
70 @brief Type of information about a glyph.
72 The type #MFLTGlyph is the structure that contains information
75 typedef struct _MFLTGlyph MFLTGlyph;
79 /***en @brief Character code (Unicode) of the glyph. This is the sole
80 member to be set before calling the functions mflt_find () and
83 /***en Glyph-id of the font of the glyph. */
85 /***en Glyph indices indicating the start of the original glyphs. */
87 /***en Glyph indices indicating the end of the original glyphs. */
89 /***en Advance width for horizontal layout expressed in 26.6
90 fractional pixel format. */
92 /***en Advance height for vertical layout expressed in 26.6
93 fractional pixel format. */
95 /***en Ink metrics of the glyph expressed in 26.6 fractional pixel
97 int ascent, descent, lbearing, rbearing;
98 /***en Horizontal and vertical adjustments for the glyph positioning
99 expressed in 26.6 fractional pixel format. */
101 /***en Flag to tell if the member <code> is already encoded into a
102 glyph ID of a font. */
103 unsigned encoded : 1;
104 /***en Flag to tell if the metrics of the glyph (members <xadv> thru
105 <rbearing>) are already calculated. */
106 unsigned measured : 1;
107 /***en Flag to tell if the metrics of the glyph is adjusted,
108 i.e. <xadv> or <yadv> is different from the normal size, or
109 <xoff> or <yoff> is nonzero. */
110 unsigned adjusted : 1;
111 /***en For m17n-lib's internal use only. */
112 unsigned internal : 30;
114 /* Arbitrary data can follow. */
120 @brief Type of information about a glyph position adjustment.
122 The type #MFLTGlyphAdjustment is the structure to store
123 information about a glyph metrics/position adjustment. It is
124 given to the callback function #drive_otf of #MFLTFont. */
126 typedef struct _MFLTGlyphAdjustment MFLTGlyphAdjustment;
128 struct _MFLTGlyphAdjustment
130 /***en Adjustments for advance width for horizontal layout and
131 advance height for vertical layout expressed in 26.6 fractional
134 /***en Horizontal and vertical adjustments for a glyph positioning
135 expressed in 26.6 fractional pixel format. */
137 /***en Number of glyphs to go back for drawing a glyph. */
139 /***en If nonzero, the member <xadv> and <yadv> are absolute, i.e.,
140 they should not be added to a glyph's origianl advance width and
142 unsigned advance_is_absolute : 1;
143 /***en Should be set to 1 iff at least one of the other members has
149 @brief Type of information about a glyph sequence.
151 The type #MFLTGlyphString is the structure that contains
152 information about a sequence of glyphs. */
154 typedef struct _MFLTGlyphString MFLTGlyphString;
156 struct _MFLTGlyphString
158 /***en The actual byte size of elements of the array pointed by the
159 member #glyphs. It must be equal to or greater than "sizeof
162 /***en Array of glyphs. */
164 /***en How many elements are allocated in #glyphs. */
166 /***en How many elements in #glyphs are in use. */
168 /***en Flag to tell if the glyphs should be drawn from right-to-left
174 @brief Type of specification of GSUB and GPOS OpenType tables.
176 The type #MFLTOtfSpec is the structure that contains information
177 about GSUB and GPOS features of a specific script and language
178 system to be applied to a glyph sequence. */
180 typedef struct _MFLTOtfSpec MFLTOtfSpec;
184 /***en Unique symbol representing the spec. This is the same as the
185 #OTF-SPEC of the FLT. */
188 /***en Tags for script and language system. */
189 unsigned int script, langsys;
191 /***en Array of GSUB (1st element) and GPOS (2nd element) features.
192 Each array is terminated by 0. If an element is 0xFFFFFFFF,
193 apply the previous features in that order, and apply all the
194 other features except those appearing in the following elements.
195 It may be NULL if there's no feature. */
196 unsigned int *features[2];
200 @brief Type of font to be used by the FLT driver.
202 The type #MFLTFont is the structure that contains information
203 about a font used by the FLT driver. */
205 typedef struct _MFLTFont MFLTFont;
209 /***en Family name of the font. It may be #Mnil if the family name
210 is not important in finding a Font Layout Table suitable for the
211 font (for instance, in the case that the font is an OpenType
215 /***en Horizontal and vertical font sizes in pixel per EM. */
218 /***en Callback function to get glyph IDs for glyphs between FROM
219 (inclusive) and TO (exclusive) of GSTRING. If <encoded> member
220 of a glyph is zero, the <code> member of the glyph is a character
221 code. The function must convert it to the glyph ID of FONT. */
222 int (*get_glyph_id) (MFLTFont *font, MFLTGlyphString *gstring,
225 /*** Callback function to get metrics of glyphs between FROM
226 (inclusive) and TO (exclusive) of GSTRING. If <measured> member
227 of a glyph is zero, the function must set members <xadv>, <yadv>,
228 <ascent>, <descent>, <lbearing>, and <rbearing> of the glyph. */
229 int (*get_metrics) (MFLTFont *font, MFLTGlyphString *gstring,
232 /***en Callback function to check if the font has OpenType GSUB/GPOS
233 features for a specific script/language. The function must
234 return 1 if the font satisfy SPEC, else return 0. It must be
235 NULL if the font doesn't have OpenType tables. */
236 int (*check_otf) (MFLTFont *font, MFLTOtfSpec *spec);
238 /*** Callback function to apply OpenType features in SPEC to glyphs
239 between FROM (inclusive) and TO (exclusive) of IN. The resulting
240 glyphs should be appended to the tail of OUT. If OUT doesn't
241 have a room to store all resulting glyphs, it must return -2.
242 It must be NULL if the font doesn't have OpenType tables. */
243 int (*drive_otf) (MFLTFont *font, MFLTOtfSpec *spec,
244 MFLTGlyphString *in, int from, int to,
245 MFLTGlyphString *out, MFLTGlyphAdjustment *adjustment);
247 /***en For m17n-lib's internal use only. It should be initialized
253 @brief Type of FLT (Font Layout Table).
255 The type #MFLT is for a FLT object. Its internal structure is
256 concealed from application program. */
258 typedef struct _MFLT MFLT;
260 extern MFLT *mflt_get (MSymbol name);
262 extern MFLT *mflt_find (int c, MFLTFont *font);
264 extern const char *mflt_name (MFLT *flt);
266 extern MCharTable *mflt_coverage (MFLT *flt);
268 extern int mflt_run (MFLTGlyphString *gstring, int from, int to,
269 MFLTFont *font, MFLT *flt);
276 #endif /* _M17N_FLT_H_ */