Mercurial > emacs
comparison src/font.h @ 91134:d8c3402ee3fa
(FONT_ENTITY_NOT_LOADABLE)
(FONT_ENTITY_SET_NOT_LOADABLE): New macros.
(LGSTRING_XXXX, LGLYPH_XXX): Adjusted for the change of lispy
gstring.
(struct font_driver): New member shape.
(font_registry_charsets): Extern. it.
(font_find_for_lface): Prototype adjusted.
(font_prepare_composition): Likewise.
(font_otf_capability, font_drive_otf): Delete their externs.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Sat, 01 Dec 2007 02:37:59 +0000 |
parents | ce50ee0149be |
children | 54b067217411 |
comparison
equal
deleted
inserted
replaced
91133:15f3ae6b2841 | 91134:d8c3402ee3fa |
---|---|
119 | 119 |
120 /* Frame on which the font is found. The value is nil if the font | 120 /* Frame on which the font is found. The value is nil if the font |
121 can be opend on any frame. */ | 121 can be opend on any frame. */ |
122 FONT_FRAME_INDEX = FONT_SPEC_MAX, | 122 FONT_FRAME_INDEX = FONT_SPEC_MAX, |
123 | 123 |
124 /* List of font-objects opened from the font-entity. */ | 124 /* List of font-objects opened from the font-entity. The value is |
125 nil if no font can be opened for this font-entity. */ | |
125 FONT_OBJLIST_INDEX, | 126 FONT_OBJLIST_INDEX, |
126 | 127 |
127 /* This value is the length of font-entity vector. */ | 128 /* This value is the length of font-entity vector. */ |
128 FONT_ENTITY_MAX | 129 FONT_ENTITY_MAX |
129 }; | 130 }; |
217 #define FONT_ENTITY_P(x) \ | 218 #define FONT_ENTITY_P(x) \ |
218 (VECTORP (x) && ASIZE (x) == FONT_ENTITY_MAX) | 219 (VECTORP (x) && ASIZE (x) == FONT_ENTITY_MAX) |
219 #define FONT_OBJECT_P(x) \ | 220 #define FONT_OBJECT_P(x) \ |
220 (XTYPE (x) == Lisp_Misc && XMISCTYPE (x) == Lisp_Misc_Save_Value) | 221 (XTYPE (x) == Lisp_Misc && XMISCTYPE (x) == Lisp_Misc_Save_Value) |
221 | 222 |
223 #define FONT_ENTITY_NOT_LOADABLE(entity) \ | |
224 EQ (AREF (entity, FONT_OBJLIST_INDEX), Qt) | |
225 | |
226 #define FONT_ENTITY_SET_NOT_LOADABLE(entity) \ | |
227 ASET (entity, FONT_OBJLIST_INDEX, Qt) | |
228 | |
222 | 229 |
223 /* Check macros for various font-related objects. */ | 230 /* Check macros for various font-related objects. */ |
224 | 231 |
225 #define CHECK_FONT(x) \ | 232 #define CHECK_FONT(x) \ |
226 do { if (! FONTP (x)) x = wrong_type_argument (Qfont, x); } while (0) | 233 do { if (! FONTP (x)) x = wrong_type_argument (Qfont, x); } while (0) |
245 struct face; | 252 struct face; |
246 struct composition; | 253 struct composition; |
247 | 254 |
248 /* Macros for lispy glyph-string. */ | 255 /* Macros for lispy glyph-string. */ |
249 #define LGSTRING_FONT(lgs) AREF (AREF ((lgs), 0), 0) | 256 #define LGSTRING_FONT(lgs) AREF (AREF ((lgs), 0), 0) |
250 #define LGSTRING_LBEARING(lgs) AREF (AREF ((lgs), 0), 1) | 257 #define LGSTRING_WIDTH(lgs) XINT (AREF (AREF ((lgs), 0), 1)) |
251 #define LGSTRING_RBEARING(lgs) AREF (AREF ((lgs), 0), 2) | 258 #define LGSTRING_LBEARING(lgs) XINT (AREF (AREF ((lgs), 0), 2)) |
252 #define LGSTRING_WIDTH(lgs) AREF (AREF ((lgs), 0), 3) | 259 #define LGSTRING_RBEARING(lgs) XINT (AREF (AREF ((lgs), 0), 3)) |
253 #define LGSTRING_ASCENT(lgs) AREF (AREF ((lgs), 0), 4) | 260 #define LGSTRING_ASCENT(lgs) XINT (AREF (AREF ((lgs), 0), 4)) |
254 #define LGSTRING_DESCENT(lgs) AREF (AREF ((lgs), 0), 5) | 261 #define LGSTRING_DESCENT(lgs) XINT (AREF (AREF ((lgs), 0), 5)) |
255 #define LGSTRING_SET_FONT(lgs, val) ASET (AREF ((lgs), 0), 0, (val)) | 262 #define LGSTRING_SET_FONT(lgs, val) \ |
256 #define LGSTRING_SET_LBEARING(lgs, val) ASET (AREF ((lgs), 0), 1, (val)) | 263 ASET (AREF ((lgs), 0), 0, (val)) |
257 #define LGSTRING_SET_RBEARING(lgs, val) ASET (AREF ((lgs), 0), 2, (val)) | 264 #define LGSTRING_SET_WIDTH(lgs, val) \ |
258 #define LGSTRING_SET_WIDTH(lgs, val) ASET (AREF ((lgs), 0), 3, (val)) | 265 ASET (AREF ((lgs), 0), 1, make_number (val)) |
259 #define LGSTRING_SET_ASCENT(lgs, val) ASET (AREF ((lgs), 0), 4, (val)) | 266 #define LGSTRING_SET_LBEARING(lgs, val) \ |
260 #define LGSTRING_SET_DESCENT(lgs, val) ASET (AREF ((lgs), 0), 5, (val)) | 267 ASET (AREF ((lgs), 0), 2, make_number (val)) |
268 #define LGSTRING_SET_RBEARING(lgs, val) \ | |
269 ASET (AREF ((lgs), 0), 3, make_number (val)) | |
270 #define LGSTRING_SET_ASCENT(lgs, val) \ | |
271 ASET (AREF ((lgs), 0), 4, make_number (val)) | |
272 #define LGSTRING_SET_DESCENT(lgs, val) \ | |
273 ASET (AREF ((lgs), 0), 5, make_number (val)) | |
261 | 274 |
262 #define LGSTRING_LENGTH(lgs) (ASIZE ((lgs)) - 1) | 275 #define LGSTRING_LENGTH(lgs) (ASIZE ((lgs)) - 1) |
263 #define LGSTRING_GLYPH(lgs, idx) AREF ((lgs), (idx) + 1) | 276 #define LGSTRING_GLYPH(lgs, idx) AREF ((lgs), (idx) + 1) |
264 | 277 #define LGSTRING_SET_GLYPH(lgs, idx, val) ASET ((lgs), (idx) + 1, (val)) |
265 #define LGLYPH_FROM(g) AREF ((g), 0) | 278 |
266 #define LGLYPH_TO(g) AREF ((g), 1) | 279 #define LGLYPH_FROM(g) XINT (AREF ((g), 0)) |
267 #define LGLYPH_CHAR(g) AREF ((g), 2) | 280 #define LGLYPH_TO(g) XINT (AREF ((g), 1)) |
268 #define LGLYPH_CODE(g) AREF ((g), 3) | 281 #define LGLYPH_CHAR(g) XINT (AREF ((g), 2)) |
269 #define LGLYPH_WIDTH(g) AREF ((g), 4) | 282 #define LGLYPH_CODE(g) XINT (AREF ((g), 3)) |
270 #define LGLYPH_ADJUSTMENT(g) AREF ((g), 5) | 283 #define LGLYPH_WIDTH(g) XINT (AREF ((g), 4)) |
271 #define LGLYPH_SET_FROM(g, val) ASET ((g), 0, (val)) | 284 #define LGLYPH_LBEARING(g) XINT (AREF ((g), 5)) |
272 #define LGLYPH_SET_TO(g, val) ASET ((g), 1, (val)) | 285 #define LGLYPH_RBEARING(g) XINT (AREF ((g), 6)) |
273 #define LGLYPH_SET_CHAR(g, val) ASET ((g), 2, (val)) | 286 #define LGLYPH_ASCENT(g) XINT (AREF ((g), 7)) |
274 #define LGLYPH_SET_CODE(g, val) ASET ((g), 3, (val)) | 287 #define LGLYPH_DESCENT(g) XINT (AREF ((g), 8)) |
275 #define LGLYPH_SET_WIDTH(g, val) ASET ((g), 4, (val)) | 288 #define LGLYPH_ADJUSTMENT(g) AREF ((g), 9) |
276 #define LGLYPH_SET_ADJUSTMENT(g, val) ASET ((g), 5, (val)) | 289 #define LGLYPH_SET_FROM(g, val) ASET ((g), 0, make_number (val)) |
290 #define LGLYPH_SET_TO(g, val) ASET ((g), 1, make_number (val)) | |
291 #define LGLYPH_SET_CHAR(g, val) ASET ((g), 2, make_number (val)) | |
292 #define LGLYPH_SET_CODE(g, val) ASET ((g), 3, make_number (val)) | |
293 #define LGLYPH_SET_WIDTH(g, val) ASET ((g), 4, make_number (val)) | |
294 #define LGLYPH_SET_LBEARING(g, val) ASET ((g), 5, make_number (val)) | |
295 #define LGLYPH_SET_RBEARING(g, val) ASET ((g), 6, make_number (val)) | |
296 #define LGLYPH_SET_ASCENT(g, val) ASET ((g), 7, make_number (val)) | |
297 #define LGLYPH_SET_DESCENT(g, val) ASET ((g), 8, make_number (val)) | |
298 #define LGLYPH_SET_ADJUSTMENT(g, val) ASET ((g), 9, (val)) | |
277 | 299 |
278 #define LGLYPH_XOFF(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \ | 300 #define LGLYPH_XOFF(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \ |
279 ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 0)) : 0) | 301 ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 0)) : 0) |
280 #define LGLYPH_YOFF(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \ | 302 #define LGLYPH_YOFF(g) (VECTORP (LGLYPH_ADJUSTMENT (g)) \ |
281 ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 1)) : 0) | 303 ? XINT (AREF (LGLYPH_ADJUSTMENT (g), 1)) : 0) |
417 | 439 |
418 /* Optional. | 440 /* Optional. |
419 End using the driver for frame F. Usually this function free | 441 End using the driver for frame F. Usually this function free |
420 some data stored for F. */ | 442 some data stored for F. */ |
421 int (*end_for_frame) P_ ((FRAME_PTR f)); | 443 int (*end_for_frame) P_ ((FRAME_PTR f)); |
444 | |
445 /* Optional. | |
446 Shape text in LGSTRING. */ | |
447 Lisp_Object (*shape) P_ ((Lisp_Object lgstring)); | |
422 }; | 448 }; |
423 | 449 |
424 | 450 |
425 /* Chain of font drivers. There's one global font driver list | 451 /* Chain of font drivers. There's one global font driver list |
426 (font_driver_list in font.c). In addition, each frame has it's own | 452 (font_driver_list in font.c). In addition, each frame has it's own |
452 }; | 478 }; |
453 | 479 |
454 extern int enable_font_backend; | 480 extern int enable_font_backend; |
455 | 481 |
456 EXFUN (Ffont_spec, MANY); | 482 EXFUN (Ffont_spec, MANY); |
483 EXFUN (Ffont_get, 2); | |
457 EXFUN (Flist_fonts, 4); | 484 EXFUN (Flist_fonts, 4); |
458 EXFUN (Fclear_font_cache, 0); | 485 EXFUN (Fclear_font_cache, 0); |
459 EXFUN (Ffont_xlfd_name, 1); | 486 EXFUN (Ffont_xlfd_name, 1); |
460 | 487 |
488 extern int font_registry_charsets P_ ((Lisp_Object, struct charset **, | |
489 struct charset **)); | |
461 extern Lisp_Object font_symbolic_weight P_ ((Lisp_Object font)); | 490 extern Lisp_Object font_symbolic_weight P_ ((Lisp_Object font)); |
462 extern Lisp_Object font_symbolic_slant P_ ((Lisp_Object font)); | 491 extern Lisp_Object font_symbolic_slant P_ ((Lisp_Object font)); |
463 extern Lisp_Object font_symbolic_width P_ ((Lisp_Object font)); | 492 extern Lisp_Object font_symbolic_width P_ ((Lisp_Object font)); |
464 | 493 |
465 extern int font_match_p P_ ((Lisp_Object spec, Lisp_Object entity)); | 494 extern int font_match_p P_ ((Lisp_Object spec, Lisp_Object entity)); |
474 extern int font_set_lface_from_name P_ ((FRAME_PTR f, | 503 extern int font_set_lface_from_name P_ ((FRAME_PTR f, |
475 Lisp_Object lface, | 504 Lisp_Object lface, |
476 Lisp_Object fontname, | 505 Lisp_Object fontname, |
477 int force_p, int may_fail_p)); | 506 int force_p, int may_fail_p)); |
478 extern Lisp_Object font_find_for_lface P_ ((FRAME_PTR f, Lisp_Object *lface, | 507 extern Lisp_Object font_find_for_lface P_ ((FRAME_PTR f, Lisp_Object *lface, |
479 Lisp_Object spec)); | 508 Lisp_Object spec, int c)); |
480 extern Lisp_Object font_open_for_lface P_ ((FRAME_PTR f, Lisp_Object entity, | 509 extern Lisp_Object font_open_for_lface P_ ((FRAME_PTR f, Lisp_Object entity, |
481 Lisp_Object *lface, | 510 Lisp_Object *lface, |
482 Lisp_Object spec)); | 511 Lisp_Object spec)); |
483 extern void font_load_for_face P_ ((FRAME_PTR f, struct face *face)); | 512 extern void font_load_for_face P_ ((FRAME_PTR f, struct face *face)); |
484 extern void font_prepare_for_face P_ ((FRAME_PTR f, struct face *face)); | 513 extern void font_prepare_for_face P_ ((FRAME_PTR f, struct face *face)); |
502 extern void free_font_driver_list P_ ((FRAME_PTR f)); | 531 extern void free_font_driver_list P_ ((FRAME_PTR f)); |
503 extern Lisp_Object font_update_drivers P_ ((FRAME_PTR f, Lisp_Object list)); | 532 extern Lisp_Object font_update_drivers P_ ((FRAME_PTR f, Lisp_Object list)); |
504 extern Lisp_Object font_at P_ ((int c, EMACS_INT pos, struct face *face, | 533 extern Lisp_Object font_at P_ ((int c, EMACS_INT pos, struct face *face, |
505 struct window *w, Lisp_Object object)); | 534 struct window *w, Lisp_Object object)); |
506 | 535 |
507 extern struct font *font_prepare_composition P_ ((struct composition *cmp)); | 536 extern struct font *font_prepare_composition P_ ((struct composition *cmp, |
537 FRAME_PTR f)); | |
508 | 538 |
509 extern Lisp_Object font_put_extra P_ ((Lisp_Object font, Lisp_Object prop, | 539 extern Lisp_Object font_put_extra P_ ((Lisp_Object font, Lisp_Object prop, |
510 Lisp_Object val)); | 540 Lisp_Object val)); |
511 | |
512 #ifdef HAVE_LIBOTF | |
513 /* This can be used as `otf_capability' method of a font-driver. */ | |
514 extern Lisp_Object font_otf_capability P_ ((struct font *font)); | |
515 /* This can be used as `otf_drive' method of a font-driver. */ | |
516 extern int font_drive_otf P_ ((struct font *font, Lisp_Object otf_features, | |
517 Lisp_Object gstring_in, int from, int to, | |
518 Lisp_Object gstring_out, int idx, | |
519 int alternate_subst)); | |
520 #endif /* HAVE_LIBOTF */ | |
521 | 541 |
522 extern int font_put_frame_data P_ ((FRAME_PTR f, | 542 extern int font_put_frame_data P_ ((FRAME_PTR f, |
523 struct font_driver *driver, | 543 struct font_driver *driver, |
524 void *data)); | 544 void *data)); |
525 extern void *font_get_frame_data P_ ((FRAME_PTR f, | 545 extern void *font_get_frame_data P_ ((FRAME_PTR f, |
526 struct font_driver *driver)); | 546 struct font_driver *driver)); |
527 | |
528 | 547 |
529 #ifdef HAVE_FREETYPE | 548 #ifdef HAVE_FREETYPE |
530 extern struct font_driver ftfont_driver; | 549 extern struct font_driver ftfont_driver; |
531 #endif /* HAVE_FREETYPE */ | 550 #endif /* HAVE_FREETYPE */ |
532 #ifdef HAVE_X_WINDOWS | 551 #ifdef HAVE_X_WINDOWS |