1 /* face.c -- face 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
25 @brief A face is an object to control appearance of M-text.
27 A @e face is an object of the type #MFace and controls how to
28 draw M-texts. A face has a fixed number of @e face @e properties.
29 Like other types of properties, a face property consists of a key
30 and a value. A key is one of the following symbols:
32 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
33 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
34 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
36 "The face property that belongs to face F and whose key is @c xxx"
37 may be shortened to "the xxx property of F".
39 The M-text drawing functions first search an M-text for the text
40 property whose key is the symbol #Mface, then draw the M-text
41 using the value of that text property. This value must be a
42 pointer to a face object.
44 If there are multiple text properties whose key is @c Mface, and
45 they are not conflicting one another, properties of those faces
48 If no faces specify a certain property, the value of the default
53 @brief ¥Õ¥§¡¼¥¹¤È¤Ï¡¢M-text ¤Î¸«±É¤¨¤òÀ©¸æ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë.
55 @e ¥Õ¥§¡¼¥¹ ¤Ï #MFace ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ê¡¢M-text
56 ¤Îɽ¼¨ÊýË¡¤òÀ©¸æ¤¹¤ë¡£¥Õ¥§¡¼¥¹¤Ï¸ÇÄê¸Ä¤Î @e ¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£ ¤ò»ý¤Ä¡£
57 ¾¤Î¥×¥í¥Ñ¥Æ¥£Æ±ÍÍ¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Ï¥¡¼¤ÈÃͤ«¤é¤Ê¤ê¡¢¥¡¼¤Ï°Ê²¼¤Î¥·¥ó¥Ü¥ë¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
59 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
60 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
61 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
63 ¡Ö¥Õ¥§¡¼¥¹ F ¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¤¦¤Á¥¡¼¤¬ @c Mxxx
64 ¤Ç¤¢¤ë¤â¤Î¡×¤Î¤³¤È¤ò´Êñ¤Ë¡ÖF ¤Î xxx ¥×¥í¥Ñ¥Æ¥£¡×¤È¸Æ¤Ö¤³¤È¤¬¤¢¤ë¡£
66 M-text ¤Îɽ¼¨´Ø¿ô¤Ï¡¢¤Þ¤ººÇ½é¤Ë¤½¤Î M-text ¤«¤é¥¡¼¤¬¥·¥ó¥Ü¥ë
67 #Mface ¤Ç¤¢¤ë¤è¤¦¤Ê¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òõ¤·¡¢¼¡¤Ë¤½¤ÎÃͤ˽¾¤Ã¤Æ
68 M-text ¤òɽ¼¨¤¹¤ë¡£¤³¤ÎÃͤϥե§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
71 ¤ò¥¡¼¤È¤¹¤ë¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÊ£¿ô»ý¤Ã¤Æ¤ª¤ê¡¢¤«¤Ä¤½¤ì¤é¤ÎÃͤ¬¾×Æͤ·¤Ê¤¤¤Ê¤é¤Ð¡¢¥Õ¥§¡¼¥¹¾ðÊó¤ÏÁȤ߹ç¤ï¤µ¤ì¤ÆÍѤ¤¤é¤ì¤ë¡£
73 ¤¢¤ë¥Æ¥¥¹¥È°À¤¬¤É¤Î¥Õ¥§¡¼¥¹¤Ë¤è¤Ã¤Æ¤â»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¥Ç¥Õ¥©¥ë¥È¥Õ¥§¡¼¥¹¤ÎÃͤ¬ÍѤ¤¤é¤ì¤ë¡£ */
77 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
78 /*** @addtogroup m17nInternal
88 #include "m17n-misc.h"
95 #include "internal-gui.h"
100 static M17NObjectArray face_table;
104 static MSymbol M_face_prop_index;
106 static MPlist *hline_prop_list;
107 static MPlist *box_prop_list;
109 /** Special hook function pointer that does nothing. */
110 static MFaceHookFunc noop_hook;
113 static MFaceHLineProp *
114 get_hline_create (MFaceHLineProp *prop)
117 MFaceHLineProp *hline;
119 if (prop->width == 0)
120 return MPLIST_VAL (hline_prop_list);
121 MPLIST_DO (plist, MPLIST_NEXT (hline_prop_list))
123 hline = MPLIST_VAL (plist);
124 if (prop->type == hline->type
125 && prop->width == hline->width
126 && prop->color == hline->color)
129 MSTRUCT_MALLOC (hline, MERROR_FACE);
131 mplist_push (plist, Mt, hline);
135 static MFaceBoxProp *
136 get_box_create (MFaceBoxProp *prop)
141 if (prop->width == 0)
142 return MPLIST_VAL (box_prop_list);
143 MPLIST_DO (plist, MPLIST_NEXT (box_prop_list))
145 box = MPLIST_VAL (plist);
146 if (prop->width == box->width
147 && prop->color_top == box->color_top
148 && prop->color_bottom == box->color_bottom
149 && prop->color_left == box->color_left
150 && prop->color_right == box->color_right
151 && prop->inner_hmargin == box->inner_hmargin
152 && prop->inner_vmargin == box->inner_vmargin
153 && prop->outer_hmargin == box->inner_hmargin
154 && prop->inner_vmargin == box->inner_vmargin)
157 MSTRUCT_MALLOC (box, MERROR_FACE);
159 mplist_push (plist, Mt, box);
163 /** From FRAME->realized_face_list, find a realized face based on
166 static MRealizedFace *
167 find_realized_face (MFrame *frame, MFace *face, MFont *font)
171 MPLIST_DO (plist, frame->realized_face_list)
173 MRealizedFace *rface = MPLIST_VAL (plist);
175 if (memcmp (rface->face.property, face->property,
176 sizeof face->property) == 0
178 ? (font && ! memcmp (rface->font, font, sizeof (MFont)))
186 free_face (void *object)
188 MFace *face = (MFace *) object;
190 if (face->property[MFACE_FONTSET])
191 M17N_OBJECT_UNREF (face->property[MFACE_FONTSET]);
192 M17N_OBJECT_UNREF (face->frame_list);
193 M17N_OBJECT_UNREGISTER (face_table, face);
199 serialize_hline (MPlist *plist, MFaceHLineProp *hline)
201 if (hline->width > 0)
203 MPlist *pl = mplist ();
205 mplist_add (pl, Minteger, (void *) hline->type);
206 mplist_add (pl, Minteger, (void *) hline->width);
207 mplist_add (pl, Msymbol, hline->color);
208 plist = mplist_add (plist, Mplist, pl);
209 M17N_OBJECT_UNREF (pl);
215 serialize_box (MPlist *plist, MFaceBoxProp *box)
219 MPlist *pl = mplist ();
221 mplist_add (pl, Minteger, (void *) box->width);
222 mplist_add (pl, Minteger, (void *) box->inner_hmargin);
223 mplist_add (pl, Minteger, (void *) box->inner_vmargin);
224 mplist_add (pl, Minteger, (void *) box->outer_hmargin);
225 mplist_add (pl, Minteger, (void *) box->outer_vmargin);
226 mplist_add (pl, Msymbol, box->color_top);
227 mplist_add (pl, Msymbol, box->color_bottom);
228 mplist_add (pl, Msymbol, box->color_left);
229 mplist_add (pl, Msymbol, box->color_right);
230 plist = mplist_add (plist, Mplist, pl);
231 M17N_OBJECT_UNREF (pl);
237 serialize_face (void *val)
240 MPlist *plist = mplist (), *pl = plist;
245 MPlist *(*func) (MPlist *plist, void *val);
246 } serializer[MFACE_PROPERTY_MAX]
247 = { { &Mfoundry, &Msymbol },
248 { &Mfamily, &Msymbol },
249 { &Mweight, &Msymbol },
250 { &Mstyle, &Msymbol },
251 { &Mstretch, &Msymbol },
252 { &Madstyle, &Msymbol },
253 { &Msize, &Minteger },
255 { &Mforeground, &Msymbol },
256 { &Mbackground, &Msymbol },
259 { &Mvideomode, &Msymbol },
260 { NULL, NULL}, /* MFACE_HOOK_FUNC */
261 { NULL, NULL}, /* MFACE_HOOK_ARG */
262 { &Mratio, &Minteger } };
264 for (i = 0; i < MFACE_PROPERTY_MAX; i++)
265 if (face->property[i] && serializer[i].key)
267 pl = mplist_add (pl, Msymbol, *serializer[i].key);
268 if (serializer[i].type)
269 pl = mplist_add (pl, *serializer[i].type, face->property[i]);
270 else if (i == MFACE_FONTSET)
271 pl = mplist_add (pl, Msymbol, mfontset_name ((MFontset *)
273 else if (i == MFACE_HLINE)
274 pl = serialize_hline (pl, (MFaceHLineProp *) face->property[i]);
275 else if (i == MFACE_BOX)
276 pl = serialize_box (pl, (MFaceBoxProp *) face->property[i]);
283 deserialize_hline (MPlist *plist)
285 MFaceHLineProp hline, *hline_ret;
287 if (! MPLIST_INTEGER_P (plist))
288 MERROR (MERROR_FACE, NULL);
289 hline.type = MPLIST_INTEGER_P (plist);
290 plist = MPLIST_NEXT (plist);
291 if (! MPLIST_INTEGER_P (plist))
292 MERROR (MERROR_FACE, NULL);
293 hline.width = MPLIST_INTEGER_P (plist);
294 plist = MPLIST_NEXT (plist);
295 if (! MPLIST_SYMBOL_P (plist))
296 MERROR (MERROR_FACE, NULL);
297 hline.color = MPLIST_SYMBOL (plist);
298 MSTRUCT_MALLOC (hline_ret, MERROR_FACE);
304 deserialize_box (MPlist *plist)
306 MFaceBoxProp box, *box_ret;
308 if (! MPLIST_INTEGER_P (plist))
309 MERROR (MERROR_FACE, NULL);
310 box.width = MPLIST_INTEGER (plist);
311 plist = MPLIST_NEXT (plist);
312 if (! MPLIST_INTEGER_P (plist))
313 MERROR (MERROR_FACE, NULL);
314 box.inner_hmargin = MPLIST_INTEGER (plist);
315 plist = MPLIST_NEXT (plist);
316 if (! MPLIST_INTEGER_P (plist))
317 MERROR (MERROR_FACE, NULL);
318 box.inner_vmargin = MPLIST_INTEGER (plist);
319 plist = MPLIST_NEXT (plist);
320 if (! MPLIST_INTEGER_P (plist))
321 MERROR (MERROR_FACE, NULL);
322 box.outer_hmargin = MPLIST_INTEGER (plist);
323 plist = MPLIST_NEXT (plist);
324 if (! MPLIST_INTEGER_P (plist))
325 MERROR (MERROR_FACE, NULL);
326 box.outer_vmargin = MPLIST_INTEGER (plist);
327 plist = MPLIST_NEXT (plist);
328 if (! MPLIST_SYMBOL_P (plist))
329 MERROR (MERROR_FACE, NULL);
330 box.color_top = MPLIST_SYMBOL (plist);
331 plist = MPLIST_NEXT (plist);
332 if (! MPLIST_SYMBOL_P (plist))
333 MERROR (MERROR_FACE, NULL);
334 box.color_bottom = MPLIST_SYMBOL (plist);
335 plist = MPLIST_NEXT (plist);
336 if (! MPLIST_SYMBOL_P (plist))
337 MERROR (MERROR_FACE, NULL);
338 box.color_left = MPLIST_SYMBOL (plist);
339 plist = MPLIST_NEXT (plist);
340 if (! MPLIST_SYMBOL_P (plist))
341 MERROR (MERROR_FACE, NULL);
342 box.color_right = MPLIST_SYMBOL (plist);
343 MSTRUCT_MALLOC (box_ret, MERROR_FACE);
349 deserialize_face (MPlist *plist)
351 MFace *face = mface ();
353 MPLIST_DO (plist, plist)
359 if (! MPLIST_SYMBOL_P (plist))
361 key = MPLIST_SYMBOL (plist);
362 index = (int) msymbol_get (key, M_face_prop_index) - 1;
363 plist = MPLIST_NEXT (plist);
364 if (MPLIST_TAIL_P (plist))
366 if (index < 0 || index >= MFACE_PROPERTY_MAX)
368 if (key == Mfoundry || key == Mfamily || key == Mweight || key == Mstyle
369 || key == Mstretch || key == Madstyle
370 || key == Mforeground || key == Mbackground || key == Mvideomode)
372 if (! MPLIST_SYMBOL_P (plist))
374 val = MPLIST_VAL (plist);
376 else if (key == Msize || key == Mratio)
378 if (! MPLIST_INTEGER_P (plist))
380 val = MPLIST_VAL (plist);
382 else if (key == Mfontset)
384 if (! MPLIST_SYMBOL_P (plist))
386 val = mfontset (MSYMBOL_NAME (MPLIST_SYMBOL (plist)));
388 else if (key == Mhline)
390 if (! MPLIST_PLIST_P (plist))
392 val = deserialize_hline (MPLIST_PLIST (plist));
394 else if (key == Mbox)
396 if (! MPLIST_PLIST_P (plist))
398 val = deserialize_box (MPLIST_PLIST (plist));
400 face->property[index] = val;
405 static MGlyphString work_gstring;
411 MFace *mface__default;
417 MFaceHLineProp *hline;
420 M17N_OBJECT_ADD_ARRAY (face_table, "Face");
421 Mface = msymbol_as_managing_key ("face");
422 msymbol_put (Mface, Mtext_prop_serializer, (void *) serialize_face);
423 msymbol_put (Mface, Mtext_prop_deserializer, (void *) deserialize_face);
425 Mforeground = msymbol ("foreground");
426 Mbackground = msymbol ("background");
427 Mvideomode = msymbol ("videomode");
428 Mnormal = msymbol ("normal");
429 Mreverse = msymbol ("reverse");
430 Mratio = msymbol ("ratio");
431 Mhline = msymbol ("hline");
432 Mbox = msymbol ("box");
433 Mhook_func = msymbol ("hook-func");
434 Mhook_arg = msymbol ("hook-arg");
436 Mlatin = msymbol ("latin");
437 M_face_prop_index = msymbol (" face-prop-index");
441 /* Pointer to the key symbol of the face property. */
443 /* Index (enum face_property) of the face property. */
445 } mface_prop_data[MFACE_PROPERTY_MAX] =
446 { { &Mfoundry, MFACE_FOUNDRY },
447 { &Mfamily, MFACE_FAMILY },
448 { &Mweight, MFACE_WEIGHT },
449 { &Mstyle, MFACE_STYLE },
450 { &Mstretch, MFACE_STRETCH },
451 { &Madstyle, MFACE_ADSTYLE },
452 { &Msize, MFACE_SIZE },
453 { &Mfontset, MFACE_FONTSET },
454 { &Mforeground, MFACE_FOREGROUND },
455 { &Mbackground, MFACE_BACKGROUND },
456 { &Mhline, MFACE_HLINE },
457 { &Mbox, MFACE_BOX },
458 { &Mvideomode, MFACE_VIDEOMODE },
459 { &Mhook_func, MFACE_HOOK_FUNC },
460 { &Mhook_arg, MFACE_HOOK_ARG },
461 { &Mratio, MFACE_RATIO },
464 for (i = 0; i < MFACE_PROPERTY_MAX; i++)
465 /* We add one to distinguish it from no-property. */
466 msymbol_put (*mface_prop_data[i].key, M_face_prop_index,
467 (void *) (mface_prop_data[i].index + 1));
470 hline_prop_list = mplist ();
471 MSTRUCT_CALLOC (hline, MERROR_FACE);
472 mplist_push (hline_prop_list, Mt, hline);
473 box_prop_list = mplist ();
474 MSTRUCT_CALLOC (box, MERROR_FACE);
475 mplist_push (box_prop_list, Mt, box);
477 mface__default = mface ();
478 mface__default->property[MFACE_FOUNDRY] = msymbol ("misc");
479 mface__default->property[MFACE_FAMILY] = msymbol ("fixed");
480 mface__default->property[MFACE_WEIGHT] = msymbol ("medium");
481 mface__default->property[MFACE_STYLE] = msymbol ("r");
482 mface__default->property[MFACE_STRETCH] = msymbol ("normal");
483 mface__default->property[MFACE_ADSTYLE] = msymbol ("");
484 mface__default->property[MFACE_SIZE] = (void *) 120;
485 mface__default->property[MFACE_FONTSET] = mfontset (NULL);
486 mface__default->property[MFACE_FOREGROUND] = msymbol ("black");
487 mface__default->property[MFACE_BACKGROUND] = msymbol ("white");
488 mface__default->property[MFACE_HLINE] = hline;
489 mface__default->property[MFACE_BOX] = box;
490 mface__default->property[MFACE_VIDEOMODE] = Mnormal;
491 mface__default->property[MFACE_HOOK_FUNC] = (void *) noop_hook;
493 mface_normal_video = mface ();
494 mface_normal_video->property[MFACE_VIDEOMODE] = (void *) Mnormal;
496 mface_reverse_video = mface ();
497 mface_reverse_video->property[MFACE_VIDEOMODE] = (void *) Mreverse;
500 MFaceHLineProp hline_prop;
502 hline_prop.type = MFACE_HLINE_UNDER;
503 hline_prop.width = 1;
504 hline_prop.color = Mnil;
505 mface_underline = mface ();
506 mface_put_prop (mface_underline, Mhline, &hline_prop);
509 mface_medium = mface ();
510 mface_medium->property[MFACE_WEIGHT] = (void *) msymbol ("medium");
511 mface_bold = mface ();
512 mface_bold->property[MFACE_WEIGHT] = (void *) msymbol ("bold");
513 mface_italic = mface ();
514 mface_italic->property[MFACE_STYLE] = (void *) msymbol ("i");
515 mface_bold_italic = mface_copy (mface_bold);
516 mface_bold_italic->property[MFACE_STYLE]
517 = mface_italic->property[MFACE_STYLE];
519 mface_xx_small = mface ();
520 mface_xx_small->property[MFACE_RATIO] = (void *) 50;
521 mface_x_small = mface ();
522 mface_x_small->property[MFACE_RATIO] = (void *) 67;
523 mface_small = mface ();
524 mface_small->property[MFACE_RATIO] = (void *) 75;
525 mface_normalsize = mface ();
526 mface_normalsize->property[MFACE_RATIO] = (void *) 100;
527 mface_large = mface ();
528 mface_large->property[MFACE_RATIO] = (void *) 120;
529 mface_x_large = mface ();
530 mface_x_large->property[MFACE_RATIO] = (void *) 150;
531 mface_xx_large = mface ();
532 mface_xx_large->property[MFACE_RATIO] = (void *) 200;
534 mface_black = mface ();
535 mface_black->property[MFACE_FOREGROUND] = (void *) msymbol ("black");
536 mface_white = mface ();
537 mface_white->property[MFACE_FOREGROUND] = (void *) msymbol ("white");
538 mface_red = mface ();
539 mface_red->property[MFACE_FOREGROUND] = (void *) msymbol ("red");
540 mface_green = mface ();
541 mface_green->property[MFACE_FOREGROUND] = (void *) msymbol ("green");
542 mface_blue = mface ();
543 mface_blue->property[MFACE_FOREGROUND] = (void *) msymbol ("blue");
544 mface_cyan = mface ();
545 mface_cyan->property[MFACE_FOREGROUND] = (void *) msymbol ("cyan");
546 mface_yellow = mface ();
547 mface_yellow->property[MFACE_FOREGROUND] = (void *) msymbol ("yellow");
548 mface_magenta = mface ();
549 mface_magenta->property[MFACE_FOREGROUND] = (void *) msymbol ("magenta");
551 work_gstring.glyphs = malloc (sizeof (MGlyph) * 2);
552 work_gstring.size = 2;
553 work_gstring.used = 0;
554 work_gstring.inc = 1;
563 M17N_OBJECT_UNREF (mface__default);
564 M17N_OBJECT_UNREF (mface_normal_video);
565 M17N_OBJECT_UNREF (mface_reverse_video);
566 M17N_OBJECT_UNREF (mface_underline);
567 M17N_OBJECT_UNREF (mface_medium);
568 M17N_OBJECT_UNREF (mface_bold);
569 M17N_OBJECT_UNREF (mface_italic);
570 M17N_OBJECT_UNREF (mface_bold_italic);
571 M17N_OBJECT_UNREF (mface_xx_small);
572 M17N_OBJECT_UNREF (mface_x_small);
573 M17N_OBJECT_UNREF (mface_small);
574 M17N_OBJECT_UNREF (mface_normalsize);
575 M17N_OBJECT_UNREF (mface_large);
576 M17N_OBJECT_UNREF (mface_x_large);
577 M17N_OBJECT_UNREF (mface_xx_large);
578 M17N_OBJECT_UNREF (mface_black);
579 M17N_OBJECT_UNREF (mface_white);
580 M17N_OBJECT_UNREF (mface_red);
581 M17N_OBJECT_UNREF (mface_green);
582 M17N_OBJECT_UNREF (mface_blue);
583 M17N_OBJECT_UNREF (mface_cyan);
584 M17N_OBJECT_UNREF (mface_yellow);
585 M17N_OBJECT_UNREF (mface_magenta);
587 MPLIST_DO (plist, hline_prop_list)
588 free (MPLIST_VAL (plist));
589 M17N_OBJECT_UNREF (hline_prop_list);
590 MPLIST_DO (plist, box_prop_list)
591 free (MPLIST_VAL (plist));
592 M17N_OBJECT_UNREF (box_prop_list);
594 free (work_gstring.glyphs);
597 /** Return a face realized from NUM number of base faces pointed by
598 FACES on the frame FRAME. If SIZE is nonzero, it specifies the
599 maximum font size. */
602 mface__realize (MFrame *frame, MFace **faces, int num, int size, MFont *font)
604 MRealizedFace *rface;
605 MRealizedFont *rfont;
606 MFace merged_face = *(frame->face);
612 if (num == 0 && frame->rface && ! font)
615 for (i = 0; i < MFACE_PROPERTY_MAX; i++)
616 for (j = num - 1; j >= 0; j--)
617 if (faces[j]->property[i])
619 merged_face.property[i] = faces[j]->property[i];
624 for (i = 0; i <= MFACE_ADSTYLE; i++)
625 if (font->property[i])
626 merged_face.property[i] = FONT_PROPERTY (font, i);
631 double pt = - font->size;
634 adjusted.size = pt * frame->dpi / 72.27 + 0.5;
637 merged_face.property[MFACE_SIZE] = (void *) font->size;
641 if (! mplist_find_by_value (frame->face->frame_list, frame))
642 mplist_push (frame->face->frame_list, Mt, frame);
643 for (i = 0; i < num; i++)
644 if (! mplist_find_by_value (faces[i]->frame_list, frame))
645 mplist_push (faces[i]->frame_list, Mt, frame);
647 if ((int) merged_face.property[MFACE_SIZE] < 0
648 || (merged_face.property[MFACE_RATIO]
649 && (int) merged_face.property[MFACE_RATIO] != 100))
651 double font_size = (int) merged_face.property[MFACE_SIZE];
655 font_size = - font_size * frame->dpi / 72.27;
656 if (merged_face.property[MFACE_RATIO]
657 && (int) merged_face.property[MFACE_RATIO] != 100)
659 font_size *= (int) merged_face.property[MFACE_RATIO];
661 merged_face.property[MFACE_RATIO] = 0;
663 ifont_size = font_size + 0.5;
664 merged_face.property[MFACE_SIZE] = (void *) ifont_size;
667 merged_face.property[MFACE_FOUNDRY] = Mnil;
668 rface = find_realized_face (frame, &merged_face, font);
672 MSTRUCT_CALLOC (rface, MERROR_FACE);
673 mplist_push (frame->realized_face_list, Mt, rface);
674 rface->frame = frame;
675 rface->face = merged_face;
678 rface->font = mfont ();
679 *rface->font = *font;
681 props = merged_face.property;
682 rface->rfontset = mfont__realize_fontset (frame,
683 (MFontset *) props[MFACE_FONTSET],
691 mfont__set_spec_from_face (&spec, &merged_face);
692 mfont_put_prop (&spec, Mregistry, Miso8859_1);
693 spec.source = MFONT_SOURCE_X;
694 font = mfont__select (frame, &spec, 0);
697 mfont_put_prop (&spec, Mregistry, Municode_bmp);
698 spec.source = MFONT_SOURCE_FT;
699 font = mfont__select (frame, &spec, 0);
702 rfont = mfont__open (frame, font, &spec);
705 rfont = mfont__lookup_fontset (rface->rfontset, NULL, &num,
706 Mlatin, Mnil, Mnil, size, 0);
709 rface->rfont = rfont;
710 rface->layouter = rfont->layouter;
711 work_gstring.glyphs[0].rface = rface;
712 work_gstring.glyphs[0].code = MCHAR_INVALID_CODE;
713 mfont__get_metric (&work_gstring, 0, 1);
714 rface->ascent = work_gstring.glyphs[0].ascent;
715 rface->descent = work_gstring.glyphs[0].descent;
716 work_gstring.glyphs[0].code
717 = mfont__encode_char (frame, (MFont *) rfont, NULL, ' ');
718 if (work_gstring.glyphs[0].code != MCHAR_INVALID_CODE)
720 mfont__get_metric (&work_gstring, 0, 1);
721 rface->space_width = work_gstring.glyphs[0].width;
724 rface->space_width = rfont->spec.size / 10;
729 rface->space_width = frame->space_width;
732 rface->hline = (MFaceHLineProp *) props[MFACE_HLINE];
733 if (rface->hline && rface->hline->width == 0)
735 rface->box = (MFaceBoxProp *) props[MFACE_BOX];
736 if (rface->box && rface->box->width == 0)
738 rface->ascii_rface = rface;
739 (*frame->driver->realize_face) (rface);
741 func = (MFaceHookFunc) rface->face.property[MFACE_HOOK_FUNC];
742 if (func && func != noop_hook)
743 (func) (&(rface->face), rface->info, rface->face.property[MFACE_HOOK_ARG]);
745 rface->non_ascii_list = mplist ();
748 MRealizedFace *nofont;
750 MSTRUCT_CALLOC (nofont, MERROR_FACE);
752 nofont->non_ascii_list = NULL;
753 nofont->rfont = NULL;
754 mplist_add (rface->non_ascii_list, Mt, nofont);
762 mface__for_chars (MSymbol script, MSymbol language, MSymbol charset,
763 MGlyph *from_g, MGlyph *to_g, int size)
765 MRealizedFont *rfont;
767 int num = to_g - from_g;
770 rfont = from_g->rface->rfont;
771 if (script == Mlatin)
773 for (i = 0; i < num; i++)
775 unsigned code = mfont__encode_char (rfont->frame, (MFont *) rfont,
777 if (code == MCHAR_INVALID_CODE)
779 from_g[i].code = code;
785 rfont = mfont__lookup_fontset (from_g->rface->rfontset, from_g, &num,
786 script, language, charset, size, 0);
788 layouter = rfont->layouter;
791 from_g->code = MCHAR_INVALID_CODE;
798 while (from_g < to_g)
801 MRealizedFace *rface = from_g++->rface;
803 while (from_g < to_g && rface == from_g->rface) from_g++;
804 if (rface->rfont != rfont
805 || rface->layouter != layouter)
807 MPlist *plist = mplist_find_by_value (rface->non_ascii_list, rfont);
808 MRealizedFace *new = NULL;
812 new = MPLIST_VAL (plist);
813 if (new->layouter == layouter)
815 plist = mplist_find_by_value (MPLIST_NEXT (plist), rfont);
819 MSTRUCT_MALLOC (new, MERROR_FACE);
820 mplist_push (rface->non_ascii_list, Mt, new);
823 new->layouter = layouter;
824 new->non_ascii_list = NULL;
827 new->ascent = rfont->ascent;
828 new->descent = rfont->descent;
840 mface__free_realized (MRealizedFace *rface)
844 MPLIST_DO (plist, rface->non_ascii_list)
845 free (MPLIST_VAL (plist));
846 M17N_OBJECT_UNREF (rface->non_ascii_list);
853 mface__update_frame_face (MFrame *frame)
856 frame->rface = mface__realize (frame, NULL, 0, 0, NULL);
857 frame->space_width = frame->rface->space_width;
858 frame->ascent = frame->rface->ascent;
859 frame->descent = frame->rface->descent;
863 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
867 /*** @addtogroup m17nFace */
871 /***en @name Variables: Keys of face property */
872 /***ja @name ÊÑ¿ô: ¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼ */
877 @brief Key of a face property specifying foreground color.
879 The variable #Mforeground is used as a key of face property. The
880 property value must be a symbol whose name is a color name, or
883 #Mnil means that the face does not specify a foreground color.
884 Otherwise, the foreground of an M-text is drawn by the specified
887 @brief Á°·Ê¿§¤ò»ØÄꤹ¤ë¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
889 ÊÑ¿ô #Mforeground ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
890 ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¿§Ì¾¤ò̾Á°¤È¤·¤Æ»ý¤Ä¥·¥ó¥Ü¥ë¤« #Mnil ¤Ç¤¢¤ë¡£
892 #Mnil ¤Î¾ì¹ç¡¢Á°·Ê¿§¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð M-text
893 ¤ÎÁ°·Ê¤Ï»ØÄꤵ¤ì¤¿¿§¤Çɽ¼¨¤µ¤ì¤ë¡£ */
898 @brief Key of a face property specifying background color.
900 The variable #Mbackground is used as a key of face property. The
901 property value must be a symbol whose name is a color name, or
904 #Mnil means that the face does not specify a background color.
905 Otherwise, the background of an M-text is drawn by the specified
908 @brief ÇØ·Ê¿§¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
910 ÊÑ¿ô #Mbackground ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
911 ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¿§Ì¾¤ò̾Á°¤È¤·¤Æ»ý¤Ä¥·¥ó¥Ü¥ë¤« #Mnil ¤Ç¤¢¤ë¡£
913 #Mnil ¤Î¾ì¹ç¡¢ÇØ·Ê¿§¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð M-text
914 ¤ÎÇطʤϻØÄꤵ¤ì¤¿¿§¤Çɽ¼¨¤µ¤ì¤ë¡£ */
919 @brief Key of a face property specifying video mode.
921 The variable #Mvideomode is used as a key of face property. The
922 property value must be #Mnormal, #Mreverse, or #Mnil.
924 #Mnormal means that an M-text is drawn in normal video mode
925 (i.e. the foreground is drawn by foreground color, the background
926 is drawn by background color).
928 #Mreverse means that an M-text is drawn in reverse video mode
929 (i.e. the foreground is drawn by background color, the background
930 is drawn by foreground color).
932 #Mnil means that the face does not specify a video mode. */
934 @brief ¥Ó¥Ç¥ª¥â¡¼¥É¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
936 ÊÑ¿ô #Mvideomode ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢
937 #Mnormal, #Mreverse, #Mnil ¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
939 #Mnormal ¤Î¾ì¹ç¤Ï¡¢M-text
940 ¤òɸ½à¤Î¥Ó¥Ç¥ª¥â¡¼¥É¡ÊÁ°·Ê¤òÁ°·Ê¿§¤Ç¡¢ÇطʤòÇØ·Ê¿§¤Ç¡Ë¤Çɽ¼¨¤¹¤ë¡£
942 #Mreverse ¤Î¾ì¹ç¤Ï¥ê¥Ð¡¼¥¹¥Ó¥Ç¥ª¥â¡¼¥É¤Ç¡ÊÁ°·Ê¤òÇØ·Ê¿§¤Ç¡¢ÇطʤòÁ°·Ê¿§¤Ç¡Ëɽ¼¨¤¹¤ë¡£
944 #Mnil ¤Î¾ì¹ç¤Ï¥Ó¥Ç¥ª¥â¡¼¥É¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
950 @brief Key of a face property specifying font size ratio.
952 The variable #Mratio is used as a key of face property. The value
953 RATIO must be an integer.
955 The value 0 means that the face does not specify a font size
956 ratio. Otherwise, an M-text is drawn by a font of size (FONTSIZE
957 * RATIO / 100) where FONTSIZE is a font size specified by the face
960 @brief ¥Õ¥©¥ó¥È¤Î¥µ¥¤¥º¤ÎÈæΨ¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
962 ÊÑ¿ô #Mratio ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃÍ RATIO
963 ¤ÏÀ°¿ôÃͤǤʤ¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
965 Ãͤ¬0¤Ê¤é¤Ð¡¢¥Õ¥©¥ó¥È¥µ¥¤¥º¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢M-text
966 ¤Ï(FONTSIZE * RATIO / 100) ¤È¤¤¤¦¥µ¥¤¥º¤Î¥Õ¥©¥ó¥È¤Çɽ¼¨¤µ¤ì¤ë¡£
967 FONTSIZE ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼#Msize ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Ç¤¢¤ë¡£ */
972 @brief Key of a face property specifying horizontal line.
974 The variable #Mhline is used as a key of face property. The value
975 must be a pointer to an object of type #MFaceHLineProp, or @c
978 The value @c NULL means that the face does not specify this
979 property. Otherwise, an M-text is drawn with a horizontal line by
980 a way specified by the object that the value points to. */
982 @brief ¿åÊ¿Àþ¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
984 ÊÑ¿ô #Mhline ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
985 #MFaceHLineProp ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
987 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¤³¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
988 ¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÃͤ¬»Ø¤¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ØÄꤵ¤ì¤¿¤è¤¦¤Ë¿åÊ¿Àþ¤òÉղä·¤Æ M-text
994 @brief Key of a face property specifying box.
996 The variable #Mbox is used as a key of face property. The value
997 must be a pointer to an object of type #MFaceBoxProp, or @c NULL.
999 The value @c NULL means that the face does not specify a box.
1000 Otherwise, an M-text is drawn with a surrounding box by a way
1001 specified by the object that the value points to. */
1003 @brief °Ï¤ßÏȤò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
1005 ÊÑ¿ô #Mbox ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
1006 #MFaceBoxProp ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
1008 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¤³¤Î¥Õ¥§¡¼¥¹¤Ï°Ï¤ßÏȤò»ØÄꤷ¤Æ¤¤¤Ê¤¤¡£
1009 ¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÃͤ¬»Ø¤¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ØÄꤵ¤ì¤¿¤è¤¦¤Ë°Ï¤ßÏȤòÉղä·¤Æ
1010 M-text ¤òɽ¼¨¤¹¤ë¡£*/
1015 @brief Key of a face property specifying fontset.
1017 The variable #Mfontset is used as a key of face property. The
1018 value must be a pointer to an object of type #Mfontset, or @c
1021 The value @c NULL means that the face does not specify a fontset.
1022 Otherwise, an M-text is drawn with a font selected from what
1023 specified in the fontset. */
1025 @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
1027 ÊÑ¿ô #Mfontset ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
1028 #Mfontset ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
1030 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ï»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£
1031 ¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÃͤ¬»Ø¤¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ØÄꤵ¤ì¤¿¥Õ¥©¥ó¥È¥»¥Ã¥È¤«¤éÁª¤ó¤À¥Õ¥©¥ó¥È¤Ç
1032 M-text ¤òɽ¼¨¤¹¤ë¡£*/
1037 @brief Key of a face property specifying hook.
1039 The variable #Mhook_func is used as a key of face property. The
1040 value must be a function of type #MFaceHookFunc, or @c NULL.
1042 The value @c NULL means that the face does not specify a hook.
1043 Otherwise, the specified function is called before the face is
1046 @brief ¥Õ¥Ã¥¯¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
1048 ÊÑ¿ô #Mhook_func ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
1049 #MFaceHookFunc ·¿¤Î´Ø¿ô¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
1051 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¥Õ¥Ã¥¯¤Ï»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¡£
1052 ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¥Õ¥§¡¼¥¹¤ò¼Â¸½¤¹¤ëÁ°¤Ë»ØÄꤵ¤ì¤¿´Ø¿ô¤¬¸Æ¤Ð¤ì¤ë¡£ */
1056 @brief Key of a face property specifying argument of hook.
1058 The variable #Mhook_arg is used as a key of face property. The
1059 value can be anything that is passed a hook function specified by
1060 the face property #Mhook_func. */
1062 @brief ¥Õ¥Ã¥¯¤Î°ú¿ô¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
1064 ÊÑ¿ô #Mhook_arg ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
1065 Ãͤϲ¿¤Ç¤â¤è¤¯¡¢¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£ #Mhook_func ¤Ç»ØÄꤵ¤ì¤ë´Ø¿ô¤ËÅϤµ¤ì¤ë¡£ */
1071 /*** @ingroup m17nFace */
1072 /***en @name Variables: Possible values of #Mvideomode property of face */
1073 /***ja @name ÊÑ¿ô¡§ ¥Õ¥§¡¼¥¹¤Î #Mvideomode ¥×¥í¥Ñ¥Æ¥£¤Î²Äǽ¤ÊÃÍ */
1078 See the documentation of the variable #Mvideomode. */
1080 ÊÑ¿ô #Mvideomode ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£ */
1086 /*** @ingroup m17nFace */
1087 /***en @name Variables: Predefined faces */
1088 /***ja @name ÊÑ¿ô: ÄêµÁºÑ¤ß¥Õ¥§¡¼¥¹ */
1093 @brief Normal video face.
1095 The variable #mface_normal_video points to a face that has the
1096 #Mvideomode property with value #Mnormal. The other properties
1097 are not specified. An M-text drawn with this face appear normal
1098 colors (i.e. the foreground is drawn by foreground color, and
1099 background is drawn by background color). */
1101 @brief ɸ½à¥Ó¥Ç¥ª¥Õ¥§¡¼¥¹.
1103 ÊÑ¿ô #mface_normal_video ¤Ï #Mvideomode ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ #Mnormal
1104 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1105 ¤³¤Î¥Õ¥§¡¼¥¹¤Çɽ¼¨¤µ¤ì¤ëM-text
1106 ¤Ïɸ½à¤Î¿§ (¤¹¤Ê¤ï¤ÁÁ°·Ê¤ÏÁ°·Ê¿§¡¢ÇطʤÏÇØ·Ê¿§¡Ë¤ÇÉÁ¤«¤ì¤ë¡£ */
1108 MFace *mface_normal_video;
1111 @brief Reverse video face.
1113 The variable #mface_reverse_video points to a face that has the
1114 #Mvideomode property with value #Mreverse. The other properties
1115 are not specified. An M-text drawn with this face appear in
1116 reversed colors (i.e. the foreground is drawn by background
1117 color, and background is drawn by foreground color). */
1119 @brief ¥ê¥Ð¡¼¥¹¥Ó¥Ç¥ª¥Õ¥§¡¼¥¹.
1121 ÊÑ¿ô #mface_reverse_video ¤Ï #Mvideomode ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬
1122 #Mreverse ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1123 ¤³¤Î¥Õ¥§¡¼¥¹¤Çɽ¼¨¤µ¤ì¤ëM-text
1124 ¤ÏÁ°·Ê¿§¤ÈÇØ·Ê¿§¤¬Æþ¤ìÂؤï¤Ã¤Æ (¤¹¤Ê¤ï¤ÁÁ°·Ê¤ÏÇØ·Ê¿§¡¢ÇطʤÏÁ°·Ê¿§¡ËÉÁ¤«¤ì¤ë¡£ */
1126 MFace *mface_reverse_video;
1129 @brief Underline face.
1131 The variable #mface_underline points to a face that has the
1132 #Mhline property with value a pointer to an object of type
1133 #MFaceHLineProp. The members of the object are as follows:
1138 type MFACE_HLINE_UNDER
1143 The other properties are not specified. An M-text that has this
1144 face is drawn with an underline. */
1146 @brief ²¼Àþ¥Õ¥§¡¼¥¹.
1148 ÊÑ¿ô #mface_underline ¤Ï #Mhline ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ #MFaceHLineProp
1149 ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£¥ª¥Ö¥¸¥§¥¯¥È¤Î¥á¥ó¥Ð¤Ï°Ê²¼¤ÎÄ̤ꡣ
1154 type MFACE_HLINE_UNDER
1159 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ï²¼ÀþÉÕ¤¤Çɽ¼¨¤µ¤ì¤ë¡£*/
1161 MFace *mface_underline;
1166 The variable #mface_medium points to a face that has the #Mweight
1167 property with value a symbol of name "medium". The other
1168 properties are not specified. An M-text that has this face is
1169 drawn with a font of medium weight. */
1171 @brief ¥ß¥Ç¥£¥¢¥à¥Õ¥§¡¼¥¹.
1173 ÊÑ¿ô #mface_medium ¤Ï #Mweight ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "medium"
1174 ¤È¤¤¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1175 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1176 ¤Ï¡¢¥ß¥Ç¥£¥¢¥à¥¦¥§¥¤¥È¤Î¥Õ¥©¥ó¥È¤Çɽ¼¨¤µ¤ì¤ë¡£ */
1177 MFace *mface_medium;
1182 The variable #mface_bold points to a face that has the #Mweight
1183 property with value a symbol of name "bold". The other properties
1184 are not specified. An M-text that has this face is drawn with a
1185 font of bold weight. */
1187 @brief ¥Ü¡¼¥ë¥É¥Õ¥§¡¼¥¹.
1189 ÊÑ¿ô #mface_bold ¤Ï #Mweight ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "bold"
1190 ¤È¤¤¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1191 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1192 ¤Ï¡¢¥Ü¡¼¥ë¥É¥Õ¥©¥ó¥È¤Çɽ¼¨¤µ¤ì¤ë¡£ */
1199 The variable #mface_italic points to a face that has the #Mstyle
1200 property with value a symbol of name "italic". The other
1201 properties are not specified. An M-text that has this face is
1202 drawn with a font of italic style. */
1204 @brief ¥¤¥¿¥ê¥Ã¥¯¥Õ¥§¡¼¥¹.
1206 ÊÑ¿ô #mface_italic ¤Ï #Mstyle ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "italic"
1207 ¤È¤¤¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1208 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1209 ¤Ï¡¢¥¤¥¿¥ê¥Ã¥¯ÂΤÇɽ¼¨¤µ¤ì¤ë¡£ */
1211 MFace *mface_italic;
1214 @brief Bold italic face.
1216 The variable #mface_bold_italic points to a face that has the
1217 #Mweight property with value a symbol of name "bold", and #Mstyle
1218 property with value a symbol of name "italic". The other
1219 properties are not specified. An M-text that has this face is
1220 drawn with a font of bold weight and italic style. */
1222 @brief ¥Ü¡¼¥ë¥É¥¤¥¿¥ê¥Ã¥¯¥Õ¥§¡¼¥¹.
1224 ÊÑ¿ô #mface_bold_italic ¤Ï¡¢#Mweight ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "bold"
1225 ¤È¤¤¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢¤«¤Ä #Mstyle ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "italic"
1226 ¤È¤¤¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1227 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1228 ¤Ï¡¢¥Ü¡¼¥ë¥É¥¤¥¿¥ê¥Ã¥¯ÂΤÇɽ¼¨¤µ¤ì¤ë¡£ */
1230 MFace *mface_bold_italic;
1233 @brief Smallest face.
1235 The variable #mface_xx_small points to a face that has the #Mratio
1236 property with value 50. The other properties are not specified.
1237 An M-text that has this face is drawn with a font whose size is
1238 50% of a normal font. */
1240 @brief ºÇ¾®¤Î¥Õ¥§¡¼¥¹.
1242 ÊÑ¿ô #mface_xx_small ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 50
1243 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1244 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤Î 50% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1247 MFace *mface_xx_small;
1250 @brief Smaller face.
1252 The variable #mface_x_small points to a face that has the #Mratio
1253 property with value 66. The other properties are not specified.
1254 An M-text that has this face is drawn with a font whose size is
1255 66% of a normal font. */
1257 @brief ¤è¤ê¾®¤µ¤¤¥Õ¥§¡¼¥¹.
1259 ÊÑ¿ô #mface_x_small ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 66
1260 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1261 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤Î 66% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1264 MFace *mface_x_small;
1269 The variable #mface_x_small points to a face that has the #Mratio
1270 property with value 75. The other properties are not specified.
1271 An M-text that has this face is drawn with a font whose size is
1272 75% of a normal font. */
1274 @brief ¾®¤µ¤¤¥Õ¥§¡¼¥¹.
1276 ÊÑ¿ô #mface_small ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 75
1277 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1278 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤Î 75% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1284 @brief Normalsize face.
1286 The variable #mface_normalsize points to a face that has the
1287 #Mratio property with value 100. The other properties are not
1288 specified. An M-text that has this face is drawn with a font
1289 whose size is the same as a normal font. */
1291 @brief ɸ½à¤ÎÂ礤µ¤Î¥Õ¥§¡¼¥¹.
1293 ÊÑ¿ô #mface_normalsize ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 100
1294 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1295 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤ÈƱ¤¸Â礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1298 MFace *mface_normalsize;
1303 The variable #mface_large points to a face that has the #Mratio
1304 property with value 120. The other properties are not specified.
1305 An M-text that has this face is drawn with a font whose size is
1306 120% of a normal font. */
1308 @brief Â礤¤¥Õ¥§¡¼¥¹.
1310 ÊÑ¿ô #mface_large ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 120
1311 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1312 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤Î 120% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1320 The variable #mface_x_large points to a face that has the #Mratio
1321 property with value 150. The other properties are not specified.
1322 An M-text that has this face is drawn with a font whose size is
1323 150% of a normal font. */
1325 @brief ¤â¤Ã¤ÈÂ礤¤¥Õ¥§¡¼¥¹.
1327 ÊÑ¿ô #mface_x_large ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 150
1328 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1329 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤Î 150% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1332 MFace *mface_x_large;
1335 @brief Largest face.
1337 The variable #mface_xx_large points to a face that has the #Mratio
1338 property with value 200. The other properties are not specified.
1339 An M-text that has this face is drawn with a font whose size is
1340 200% of a normal font. */
1342 @brief ºÇÂç¤Î¥Õ¥§¡¼¥¹.
1344 ÊÑ¿ô #mface_xx_large ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 200
1345 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1346 ¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ïɸ½à¥Õ¥©¥ó¥È¤Î 200% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1349 MFace *mface_xx_large;
1354 The variable #mface_black points to a face that has the
1355 #Mforeground property with value a symbol of name "black". The
1356 other properties are not specified. An M-text that has this face
1357 is drawn with black foreground. */
1361 ÊÑ¿ô #mface_black ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "black"
1362 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1363 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1364 ¤ÏÁ°·Ê¿§¤È¤·¤Æ¹õ¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1371 The variable #mface_white points to a face that has the
1372 #Mforeground property with value a symbol of name "white". The
1373 other properties are not specified. An M-text that has this face
1374 is drawn with white foreground. */
1378 ÊÑ¿ô #mface_white ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "white"
1379 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1380 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1381 ¤ÏÁ°·Ê¿§¤È¤·¤ÆÇò¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1388 The variable #mface_red points to a face that has the
1389 #Mforeground property with value a symbol of name "red". The
1390 other properties are not specified. An M-text that has this face
1391 is drawn with red foreground. */
1395 ÊÑ¿ô #mface_red ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "red"
1396 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1397 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1398 ¤ÏÁ°·Ê¿§¤È¤·¤ÆÀÖ¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1405 The variable #mface_green points to a face that has the
1406 #Mforeground property with value a symbol of name "green". The
1407 other properties are not specified. An M-text that has this face
1408 is drawn with green foreground. */
1412 ÊÑ¿ô #mface_green ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "green"
1413 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1414 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1415 ¤ÏÁ°·Ê¿§¤È¤·¤ÆÎФòÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1422 The variable #mface_blue points to a face that has the
1423 #Mforeground property with value a symbol of name "blue". The
1424 other properties are not specified. An M-text that has this face
1425 is drawn with blue foreground. */
1429 ÊÑ¿ô #mface_blue ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "blue"
1430 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1431 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1432 ¤ÏÁ°·Ê¿§¤È¤·¤ÆÀĤòÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1439 The variable #mface_cyan points to a face that has the
1440 #Mforeground property with value a symbol of name "cyan". The
1441 other properties are not specified. An M-text that has this face
1442 is drawn with cyan foreground. */
1444 @brief ¥·¥¢¥ó¥Õ¥§¡¼¥¹.
1446 ÊÑ¿ô #mface_cyan ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "cyan"
1447 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1448 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1449 ¤ÏÁ°·Ê¿§¤È¤·¤Æ¥·¥¢¥ó¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1456 The variable #mface_yellow points to a face that has the
1457 #Mforeground property with value a symbol of name "yellow". The
1458 other properties are not specified. An M-text that has this face
1459 is drawn with yellow foreground. */
1464 ÊÑ¿ô #mface_yellow ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "yellow"
1465 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1466 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1467 ¤ÏÁ°·Ê¿§¤È¤·¤Æ²«¿§¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1469 MFace *mface_yellow;
1472 @brief Magenta face.
1474 The variable #mface_magenta points to a face that has the
1475 #Mforeground property with value a symbol of name "magenta". The
1476 other properties are not specified. An M-text that has this face
1477 is drawn with magenta foreground. */
1480 @brief ¥Þ¥¼¥ó¥¿¥Õ¥§¡¼¥¹.
1482 ÊÑ¿ô #mface_magenta ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ
1483 "magenta" ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1484 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text
1485 ¤ÏÁ°·Ê¿§¤È¤·¤Æ¥Þ¥¼¥ó¥¿¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1487 MFace *mface_magenta;
1492 /***en @name Variables: The other symbols for face handling. */
1493 /***ja @name ÊÑ¿ô: ¥Õ¥§¡¼¥¹¤ò¼è¤ê°·¤¦¤¿¤á¤Î¤½¤Î¾¤Î¥·¥ó¥Ü¥ë */
1498 @brief Key of a text property specifying a face.
1500 The variable #Mface is a symbol of name <tt>"face"</tt>. A text
1501 property whose key is this symbol must have a pointer to an object
1502 of type #MFace. This is a managing key. */
1505 @brief ¥Õ¥§¡¼¥¹¤ò»ØÄꤹ¤ë¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼.
1507 ÊÑ¿ô #Mface ¤Ï <tt>"face"</tt>
1508 ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£¤³¤Î¥·¥ó¥Ü¥ë¤ò¥¡¼¤È¤¹¤ë¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¡¢
1509 #MFace ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
1510 ¤³¤ì¤Ï´ÉÍý¥¡¼¤Ç¤¢¤ë¡£ */
1518 @brief Create a new face.
1520 The mface () function creates a new face object that specifies no
1524 This function returns a pointer to the created face. */
1527 @brief ¿·¤·¤¤¥Õ¥§¡¼¥¹¤ò¤Ä¤¯¤ë.
1530 ¤Ï¥×¥í¥Ñ¥Æ¥£¤ò°ìÀÚ»ý¤¿¤Ê¤¤¿·¤·¤¤¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ë¡£
1533 ¤³¤Î´Ø¿ô¤Ïºî¤Ã¤¿¥Õ¥§¡¼¥¹¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ */
1540 M17N_OBJECT (face, free_face, MERROR_FACE);
1541 face->frame_list = mplist ();
1542 M17N_OBJECT_REGISTER (face_table, face);
1549 @brief Make a copy of a face.
1551 The mface_copy () function makes a copy of $FACE and returns a
1552 pointer to the created copy. */
1555 @brief ¥Õ¥§¡¼¥¹¤Î¥³¥Ô¡¼¤òºî¤ë.
1557 ´Ø¿ô mface_copy () ¤Ï¥Õ¥§¡¼¥¹ $FACE
1558 ¤Î¥³¥Ô¡¼¤òºî¤ê¡¢¤½¤Î¥³¥Ô¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ */
1561 mface_copy (MFace *face)
1565 MSTRUCT_CALLOC (copy, MERROR_FACE);
1567 copy->control.ref_count = 1;
1568 M17N_OBJECT_REGISTER (face_table, copy);
1569 copy->frame_list = mplist ();
1570 if (copy->property[MFACE_FONTSET])
1571 M17N_OBJECT_REF (copy->property[MFACE_FONTSET]);
1577 @brief Compare faces.
1579 The mface_equal () function compares faces $FACE1 and $FACE2.
1581 @return If two faces have the same property values, return 1.
1582 Otherwise return 0. */
1585 mface_equal (MFace *face1, MFace *face2)
1587 MFaceHLineProp *hline1, *hline2;
1588 MFaceBoxProp *box1, *box2;
1593 if (memcmp (face1->property, face2->property, sizeof face1->property) == 0)
1595 for (i = MFACE_FOUNDRY; i <= MFACE_BACKGROUND; i++)
1596 if (face1->property[i] != face2->property[i])
1598 for (i = MFACE_VIDEOMODE; i <= MFACE_RATIO; i++)
1599 if (face1->property[i] != face2->property[i])
1601 hline1 = (MFaceHLineProp *) face1->property[MFACE_HLINE];
1602 hline2 = (MFaceHLineProp *) face2->property[MFACE_HLINE];
1603 if (hline1 != hline2)
1605 if (! hline1 || ! hline2)
1607 if (memcmp (hline1, hline2, sizeof (MFaceHLineProp)) != 0)
1610 box1 = (MFaceBoxProp *) face1->property[MFACE_BOX];
1611 box2 = (MFaceBoxProp *) face2->property[MFACE_BOX];
1614 if (! box1 || ! box2)
1616 if (memcmp (box1, box2, sizeof (MFaceBoxProp)) != 0)
1627 The mface_merge () functions merges the properties of face $SRC
1631 This function returns $DST. */
1634 @brief ¥Õ¥§¡¼¥¹¤òÅý¹ç¤¹¤ë.
1636 ´Ø¿ô mface_merge () ¤Ï¡¢¥Õ¥§¡¼¥¹ $SRC ¤Î¥×¥í¥Ñ¥Æ¥£¤ò¥Õ¥§¡¼¥¹ $DST
1640 ¤³¤Î´Ø¿ô¤Ï $DST ¤òÊÖ¤¹¡£ */
1643 mface_merge (MFace *dst, MFace *src)
1648 for (i = 0; i < MFACE_PROPERTY_MAX; i++)
1649 if (src->property[i])
1651 if (i == MFACE_FONTSET)
1653 M17N_OBJECT_UNREF (dst->property[i]);
1654 M17N_OBJECT_REF (src->property[i]);
1656 dst->property[i] = src->property[i];
1659 MPLIST_DO (plist, dst->frame_list)
1661 MFrame *frame = MPLIST_VAL (plist);
1664 if (dst == frame->face)
1665 mface__update_frame_face (frame);
1674 @brief Make a face from a font.
1676 The mface_from_font () function return a newly created face while
1677 reflecting the properties of $FONT in its properties. */
1680 @brief ¥Õ¥©¥ó¥È¤«¤é¥Õ¥§¡¼¥¹¤òºî¤ë.
1682 ´Ø¿ô mface_from_font () ¤Ï¥Õ¥©¥ó¥È $FONT
1683 ¤Î¥×¥í¥Ñ¥Æ¥£¤ò¥×¥í¥Ñ¥Æ¥£¤È¤·¤Æ»ý¤Ä¿·¤·¤¤¥Õ¥§¡¼¥¹¤òºî¤ê¡¢¤½¤ì¤òÊÖ¤¹¡£ */
1686 mface_from_font (MFont *font)
1688 MFace *face = mface ();
1690 face->property[MFACE_FOUNDRY] = mfont_get_prop (font, Mfoundry);
1691 face->property[MFACE_FAMILY] = mfont_get_prop (font, Mfamily);
1692 face->property[MFACE_WEIGHT] = mfont_get_prop (font, Mweight);
1693 face->property[MFACE_STYLE] = mfont_get_prop (font, Mstyle);
1694 face->property[MFACE_STRETCH] = mfont_get_prop (font, Mstretch);
1695 face->property[MFACE_ADSTYLE] = mfont_get_prop (font, Madstyle);
1696 face->property[MFACE_SIZE] = mfont_get_prop (font, Msize);
1703 @brief Get the value of a face property.
1705 The mface_get_prop () function returns the value of the face
1706 property whose key is $KEY in face $FACE. $KEY must be one of the
1709 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1710 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1711 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
1714 The actual type of the returned value depends of $KEY. See
1715 documentation of the above keys. If an error is detected, it
1716 returns @c NULL and assigns an error code to the external variable
1720 @brief ¥Õ¥§¡¼¥¹¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÆÀ¤ë.
1722 ´Ø¿ô mface_get_prop () ¤Ï¡¢¥Õ¥§¡¼¥¹ $FACE
1723 ¤¬»ý¤Ä¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤ÎÆâ¡¢¥¡¼¤¬ $KEY ¤Ç¤¢¤ë¤â¤Î¤ÎÃͤòÊÖ¤¹¡£
1724 $KEY ¤Ï²¼µ¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
1726 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1727 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1728 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
1731 Ìá¤êÃͤη¿¤Ï $KEY ¤Ë°Í¸¤¹¤ë¡£¾åµ¤Î¥¡¼¤ÎÀâÌÀ¤ò»²¾È¤¹¤ë¤³¤È¡£
1732 ¥¨¥é¡¼¤¬¸¡½Ð¤µ¤ì¤¿¾ì¹ç¤Ï @c NULL ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code
1733 ¤Ë¥¨¥é¡¼¥³¡¼¥É¤òÀßÄꤹ¤ë¡£ */
1743 mface_get_prop (MFace *face, MSymbol key)
1745 int index = (int) msymbol_get (key, M_face_prop_index) - 1;
1748 MERROR (MERROR_FACE, NULL);
1749 return face->property[index];
1755 @brief Set a value of a face property.
1757 The mface_put_prop () function assigns $VAL to the property whose
1758 key is $KEY in face $FACE. $KEY must be one the followings:
1760 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1761 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1762 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
1764 Among them, font related properties (#Mfoundry through #Msize) are
1765 used as the default values when a font in the fontset of $FACE
1766 does not specify those values.
1768 The actual type of the returned value depends of $KEY. See
1769 documentation of the above keys.
1772 If the operation was successful, mface_put_prop () returns 0.
1773 Otherwise it returns -1 and assigns an error code to the external
1774 variable #merror_code. */
1777 @brief ¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÀßÄꤹ¤ë.
1779 ´Ø¿ô mface_put_prop () ¤Ï¡¢¥Õ¥§¡¼¥¹ $FACE Æâ¤Ç¥¡¼¤¬ $KEY
1780 ¤Ç¤¢¤ë¥×¥í¥Ñ¥Æ¥£¤ÎÃͤò $VAL ¤ËÀßÄꤹ¤ë¡£$KEY
1781 ¤Ï°Ê²¼¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
1783 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1784 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1785 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg.
1787 ¤³¤ì¤é¤Î¤¦¤Á¤Î¡¢¥Õ¥©¥ó¥È´ØÏ¢¤Î¥×¥í¥Ñ¥Æ¥£ (#Mfamily ¤«¤é #Msize
1788 ¤Þ¤Ç) ¤Ï¡¢¥Õ¥§¡¼¥¹¤Î¥Õ¥©¥ó¥È¥»¥Ã¥ÈÃæ¤Î¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¥Ç¥Õ¥©¥ë¥ÈÃͤȤʤꡢ¸Ä¡¹¤Î¥Õ¥©¥ó¥È¤¬Ãͤò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤ËÍѤ¤¤é¤ì¤ë¡£
1790 Ìá¤êÃͤη¿¤Ï $KEY ¤Ë°Í¸¤¹¤ë¡£¾åµ¤Î¥¡¼¤ÎÀâÌÀ¤ò»²¾È¤¹¤ë¤³¤È¡£
1793 ½èÍý¤¬À®¸ù¤·¤¿¾ì¹ç¡¢mface_put_prop () ¤Ï 0 ¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ï
1794 -1 ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code ¤Ë¥¨¥é¡¼¥³¡¼¥É¤òÀßÄꤹ¤ë¡£ */
1804 mface_put_prop (MFace *face, MSymbol key, void *val)
1806 int index = (int) msymbol_get (key, M_face_prop_index) - 1;
1810 MERROR (MERROR_FACE, -1);
1811 if (key == Mfontset)
1813 if (face->property[index])
1814 M17N_OBJECT_UNREF (face->property[index]);
1815 M17N_OBJECT_REF (val);
1817 else if (key == Mhline)
1818 val = get_hline_create (val);
1819 else if (key == Mbox)
1820 val = get_box_create (val);
1822 if (face->property[index] == val)
1824 face->property[index] = val;
1826 MPLIST_DO (plist, face->frame_list)
1828 MFrame *frame = MPLIST_VAL (plist);
1831 if (face == frame->face)
1832 mface__update_frame_face (frame);
1841 @brief Update a face.
1843 The mface_update () function update face $FACE on frame $FRAME by
1844 calling a hook function of $FACE (if any). */
1847 @brief ¥Õ¥§¡¼¥¹¤ò¹¹¿·¤¹¤ë.
1849 ´Ø¿ô mface_update () ¤Ï¥Õ¥ì¡¼¥à $FRAME ¤Î¥Õ¥§¡¼¥¹ $FACE ¤ò $FACE
1850 ¤Î¥Õ¥Ã¥¯´Ø¿ô¤ò¡Ê¤¢¤ì¤Ð¡Ë¸Æ¤ó¤Ç¹¹¿·¤¹¤ë¡£ */
1853 mface_update (MFrame *frame, MFace *face)
1855 MFaceHookFunc func = (MFaceHookFunc) face->property[MFACE_HOOK_FUNC];
1857 MRealizedFace *rface;
1859 if (func && func != noop_hook)
1861 MPLIST_DO (rface_list, frame->realized_face_list)
1863 rface = MPLIST_VAL (rface_list);
1864 if ((MFaceHookFunc) rface->face.property[MFACE_HOOK_FUNC] == func)
1865 (func) (&(rface->face), rface->face.property[MFACE_HOOK_ARG],
1875 /*** @addtogroup m17nDebug */
1882 The mdebug_dump_face () function prints face $FACE in a human readable
1883 way to the stderr. $INDENT specifies how many columns to indent
1884 the lines but the first one.
1887 This function returns $FACE. */
1890 @brief ¥Õ¥§¡¼¥¹¤ò¥À¥ó¥×¤¹¤ë.
1892 ´Ø¿ô mdebug_dump_face () ¤Ï¥Õ¥§¡¼¥¹ $FACE ¤ò stderr
1893 ¤Ë¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç°õºþ¤¹¤ë¡£ $INDENT ¤Ï£²¹ÔÌܰʹߤΥ¤¥ó¥Ç¥ó¥È¤ò»ØÄꤹ¤ë¡£
1896 ¤³¤Î´Ø¿ô¤Ï $FACE ¤òÊÖ¤¹¡£ */
1899 mdebug_dump_face (MFace *face, int indent)
1901 char *prefix = (char *) alloca (indent + 1);
1904 memset (prefix, 32, indent);
1906 mfont__set_spec_from_face (&spec, face);
1907 fprintf (stderr, "(face font:\"");
1908 mdebug_dump_font (&spec);
1909 fprintf (stderr, "\"\n %s fore:%s back:%s", prefix,
1910 msymbol_name ((MSymbol) face->property[MFACE_FOREGROUND]),
1911 msymbol_name ((MSymbol) face->property[MFACE_BACKGROUND]));
1912 if (face->property[MFACE_FONTSET])
1913 fprintf (stderr, " non-default-fontset");
1914 fprintf (stderr, " hline:%s", face->property[MFACE_HLINE] ? "yes" : "no");
1915 fprintf (stderr, " box:%s)", face->property[MFACE_BOX] ? "yes" : "no");