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