1 /* font.h -- header file for the font module.
2 Copyright (C) 2003, 2004
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., 59 Temple Place, Suite 330, Boston, MA
26 /** Type of font stored in MFont->property[MFONT_TYPE]. */
30 /** Fonts supproted by a window system natively. On X Window
31 System, it is an X font. */
34 /** Fonts supported by FreeType library. */
44 /* The order of MFONT_FOUNDRY to MFONT_ADSTYLE must be the same as
45 enum MFaceProperty. */
60 /** Information about a font. This structure is used in three ways:
61 FONT-OBJ, FONT-OPENED, and FONT-SPEC.
63 FONT-OBJ: To store information of an existing font. Instances
64 appear only in <font_list> of MDisplay.
66 FONT-OPENED: To store information of an opened font. Instances
67 appear only in <opend_list> of MDisplay.
69 FONT-SPEC: To store specifications of a font. Instances appear
70 only in <spec_list> of MFontset. */
74 /** Numeric value of each font property. Also used as an index to
75 the table @c mfont__property_table to get the actual name of the
78 For FONT-OBJ, FONT-OPENED: The value is greater than zero.
80 For FONT-SPEC: The value is equal to or greater than zero. Zero
81 means that the correponding property is not specified (i.e. wild
84 <property>[MFONT_SIZE] is the size of the font in 1/10 pixels.
86 For FONT-OBJ: If the value is 0, the font is scalable or
89 For FONT-OPENED: The actual size of opened font.
91 <prperty>[MFONT_RESY] is the designed resolution of the font in
92 DPI, or zero. Zero means that the font is scalable.
94 For the time being, we mention only Y-resolution (resy) and
95 assume that resx is always equal to resy. */
96 unsigned short property[MFONT_PROPERTY_MAX];
104 } MFontPropertyTable;
106 extern MFontPropertyTable mfont__property_table[MFONT_REGISTRY + 1];
108 /** Return the symbol of the Nth font property of FONT. */
109 #define FONT_PROPERTY(font, n) \
110 mfont__property_table[(n)].names[(font)->property[(n)]]
112 typedef struct MFontEncoding MFontEncoding;
116 /* Frame on which the font is realized. */
119 /* Font spec used to find the font. */
122 /* Font spec requested by a face. */
125 /* The found font. */
128 /* How well <font> matches with <request>. */
133 /* Font Layout Table for the font. */
136 /* 0: not yet tried to open
138 1: succeessfully opened. */
141 /* Extra information set by <driver>->select or <driver>->open. If
142 non-NULL, it must be a pointer to a managed object. */
145 short ascent, descent;
147 MFontEncoding *encoding;
150 /** Structure to hold a list of fonts of each registry. */
162 /** Return a font best matching with SPEC. */
163 MRealizedFont *(*select) (MFrame *frame, MFont *spec, MFont *request,
166 /** Open a font specified by RFONT. */
167 int (*open) (MRealizedFont *rfont);
169 /** Close a font specified by RFONT. */
170 void (*close) (MRealizedFont *rfont);
172 void (*find_metric) (MRealizedFont *rfont, MGlyph *g);
174 /** Encode C into the glyph code the font. CODE is a code point of
175 C in rfont->encoder->encoding_charset. If the font has no glyph
176 for C, return MCHAR_INVALID_CODE. */
177 unsigned (*encode_char) (MRealizedFont *rfont, int c, unsigned code);
179 /** Draw glyphs from FROM to TO (exclusive) on window WIN of FRAME
180 at coordinate (X, Y) relative to WIN. */
181 void (*render) (MDrawWindow win, int x, int y,
182 MGlyphString *gstring, MGlyph *from, MGlyph *to,
183 int reverse, MDrawRegion region);
186 /** Initialize the members of FONT. */
188 #define MFONT_INIT(font) memset ((font), 0, sizeof (MFont))
191 extern MFontDriver *mfont__driver_list[MFONT_TYPE_MAX];
193 extern MSymbol Mlayouter;
195 extern int mfont__flt_init ();
197 extern void mfont__flt_fini ();
200 extern int mfont__ft_init ();
202 extern void mfont__ft_fini ();
204 extern int mfont__ft_drive_otf (MGlyphString *gstring, int from, int to,
205 MSymbol script, MSymbol langsys,
206 MSymbol gsub_features, MSymbol gpos_features);
207 extern int mfont__ft_decode_otf (MGlyph *g);
209 #endif /* HAVE_FREETYPE */
211 extern void mfont__free_realized (MRealizedFont *rfont);
213 extern int mfont__match_p (MFont *font, MFont *spec, int prop);
215 extern int mfont__score (MFont *font, MFont *spec, MFont *request,
218 extern void mfont__set_spec_from_face (MFont *spec, MFace *face);
220 extern MSymbol mfont__set_spec_from_plist (MFont *spec, MPlist *plist);
222 extern void mfont__resize (MFont *spec, MFont *request);
224 extern int mfont__encodable_p (MRealizedFont *rfont, MSymbol layouter_name,
227 extern unsigned mfont__encode_char (MRealizedFont *rfont, int c);
229 extern MRealizedFont *mfont__select (MFrame *frame, MFont *spec,
230 MFont *request, int limitted_size);
232 extern int mfont__open (MRealizedFont *rfont);
234 extern void mfont__close (MRealizedFont *rfont);
236 extern void mfont__get_metric (MRealizedFont *rfont, MGlyph *g);
238 extern void mfont__set_property (MFont *font, enum MFontProperty key,
241 extern int mfont__split_name (char *name, int *property_idx,
242 unsigned short *point, unsigned short *resy);
244 extern void mfont__set_spec (MFont *font,
245 MSymbol attrs[MFONT_PROPERTY_MAX],
246 unsigned short size, unsigned short resy);
248 extern unsigned mfont__flt_encode_char (MSymbol layouter_name, int c);
250 extern int mfont__flt_run (MGlyphString *gstring, int from, int to,
251 MSymbol layouter_name, MRealizedFace *ascii_rface);
253 #endif /* _M17N_FONT_H_ */