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 M-text ¤¬¡¢#Mface ¤ò¥¡¼¤È¤¹¤ë¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤òÊ£¿ô»ý¤Ã¤Æ¤ª¤ê¡¢
72 ¤«¤Ä¤½¤ì¤é¤ÎÃͤδ֤˾×Æͤ¬¤Ê¤¤¤Ê¤é¤Ð¡¢¥Õ¥§¡¼¥¹¾ðÊó¤ÏÁȤ߹ç¤ï¤µ¤ì¤Æ
75 ¤¢¤ë¥Æ¥¥¹¥È°À¤¬¤É¤Î¥Õ¥§¡¼¥¹¤Ë¤è¤Ã¤Æ¤â»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¡¢¥Ç
76 ¥Õ¥©¥ë¥È¥Õ¥§¡¼¥¹¤ÎÃͤ¬ÍѤ¤¤é¤ì¤ë¡£ */
80 #if !defined (FOR_DOXYGEN) || defined (DOXYGEN_INTERNAL_MODULE)
81 /*** @addtogroup m17nInternal
91 #include "m17n-misc.h"
98 #include "internal-gui.h"
103 static M17NObjectArray face_table;
105 static MSymbol Mlatin;
107 static MSymbol M_face_prop_index;
109 static MPlist *hline_prop_list;
110 static MPlist *box_prop_list;
112 /** Special hook function pointer that does nothing. */
113 static MFaceHookFunc noop_hook;
116 static MFaceHLineProp *
117 get_hline_create (MFaceHLineProp *prop)
120 MFaceHLineProp *hline;
122 if (prop->width == 0)
123 return MPLIST_VAL (hline_prop_list);
124 MPLIST_DO (plist, MPLIST_NEXT (hline_prop_list))
126 hline = MPLIST_VAL (plist);
127 if (prop->type == hline->type
128 && prop->width == hline->width
129 && prop->color == hline->color)
132 MSTRUCT_MALLOC (hline, MERROR_FACE);
134 mplist_push (plist, Mt, hline);
138 static MFaceBoxProp *
139 get_box_create (MFaceBoxProp *prop)
144 if (prop->width == 0)
145 return MPLIST_VAL (box_prop_list);
146 MPLIST_DO (plist, MPLIST_NEXT (box_prop_list))
148 box = MPLIST_VAL (plist);
149 if (prop->width == box->width
150 && prop->color_top == box->color_top
151 && prop->color_bottom == box->color_bottom
152 && prop->color_left == box->color_left
153 && prop->color_right == box->color_right
154 && prop->inner_hmargin == box->inner_hmargin
155 && prop->inner_vmargin == box->inner_vmargin
156 && prop->outer_hmargin == box->inner_hmargin
157 && prop->inner_vmargin == box->inner_vmargin)
160 MSTRUCT_MALLOC (box, MERROR_FACE);
162 mplist_push (plist, Mt, box);
166 /** From FRAME->realized_face_list, find a realized face based on
169 static MRealizedFace *
170 find_realized_face (MFrame *frame, MFace *face)
174 MPLIST_DO (plist, frame->realized_face_list)
176 MRealizedFace *rface = MPLIST_VAL (plist);
178 if (memcmp (rface->face.property, face->property, sizeof face->property)
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 face_table.count = 0;
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);
596 mdebug__report_object ("Face", &face_table);
599 /** Return a realized face for ASCII characters from NUM number of
600 base faces pointed by FACES on the frame FRAME. */
603 mface__realize (MFrame *frame, MFace **faces, int num,
604 MSymbol language, MSymbol charset, int size)
606 MRealizedFace *rface;
607 MRealizedFont *rfont;
608 MFace merged_face = *(frame->face);
614 if (num == 0 && language == Mnil && charset == Mnil && frame->rface)
617 for (i = 0; i < MFACE_PROPERTY_MAX; i++)
618 for (j = num - 1; j >= 0; j--)
619 if (faces[j]->property[i])
621 merged_face.property[i] = faces[j]->property[i];
625 if (! mplist_find_by_value (frame->face->frame_list, frame))
626 mplist_push (frame->face->frame_list, Mt, frame);
627 for (i = 0; i < num; i++)
628 if (! mplist_find_by_value (faces[i]->frame_list, frame))
629 mplist_push (faces[i]->frame_list, Mt, frame);
631 if (merged_face.property[MFACE_RATIO])
633 int font_size = (int) merged_face.property[MFACE_SIZE];
635 font_size *= (int) merged_face.property[MFACE_RATIO];
637 merged_face.property[MFACE_SIZE] = (void *) font_size;
638 merged_face.property[MFACE_RATIO] = 0;
641 rface = find_realized_face (frame, &merged_face);
645 MSTRUCT_CALLOC (rface, MERROR_FACE);
646 mplist_push (frame->realized_face_list, Mt, rface);
647 rface->frame = frame;
648 rface->face = merged_face;
649 props = rface->face.property;
650 rface->rfontset = mfont__realize_fontset (frame,
651 (MFontset *) props[MFACE_FONTSET],
653 g.type = GLYPH_SPACE;
656 rfont = mfont__lookup_fontset (rface->rfontset, &g, &num,
657 msymbol ("latin"), language, Mnil, size);
660 rface->rfont = rfont;
662 work_gstring.glyphs[0] = g;
663 work_gstring.glyphs[0].rface = rface;
664 work_gstring.glyphs[1].code = MCHAR_INVALID_CODE;
665 work_gstring.glyphs[1].rface = rface;
666 mfont__get_metric (&work_gstring, 0, 2);
667 rface->space_width = work_gstring.glyphs[0].width;
668 rface->ascent = work_gstring.glyphs[1].ascent;
669 rface->descent = work_gstring.glyphs[1].descent;
674 rface->space_width = frame->space_width;
677 rface->hline = (MFaceHLineProp *) props[MFACE_HLINE];
678 if (rface->hline && rface->hline->width == 0)
680 rface->box = (MFaceBoxProp *) props[MFACE_BOX];
681 if (rface->box && rface->box->width == 0)
683 rface->ascii_rface = rface;
684 (*frame->driver->realize_face) (rface);
686 func = (MFaceHookFunc) rface->face.property[MFACE_HOOK_FUNC];
687 if (func && func != noop_hook)
688 (func) (&(rface->face), rface->info, rface->face.property[MFACE_HOOK_ARG]);
690 rface->non_ascii_list = mplist ();
693 MRealizedFace *nofont;
695 MSTRUCT_CALLOC (nofont, MERROR_FACE);
697 nofont->non_ascii_list = NULL;
698 nofont->rfont = NULL;
699 mplist_add (rface->non_ascii_list, Mt, nofont);
707 mface__for_chars (MSymbol script, MSymbol language, MSymbol charset,
708 MGlyph *from_g, MGlyph *to_g, int size)
710 MRealizedFace *rface = from_g->rface->ascii_rface, *new;
711 MRealizedFont *rfont;
712 int num = to_g - from_g, i;
715 rfont = mfont__lookup_fontset (from_g->rface->rfontset, from_g, &num,
716 script, language, charset, size);
720 MPLIST_DO (plist, rface->non_ascii_list)
722 rface = MPLIST_VAL (plist);
729 if (rface->rfont == rfont)
732 MPLIST_DO (plist, rface->non_ascii_list)
733 if (((MRealizedFace *) MPLIST_VAL (plist))->rfont == rfont)
735 if (! MPLIST_TAIL_P (plist))
737 rface = MPLIST_VAL (plist);
741 MSTRUCT_MALLOC (new, MERROR_FACE);
742 mplist_push (rface->non_ascii_list, Mt, new);
745 rface->rfont = rfont;
746 rface->non_ascii_list = NULL;
747 work_gstring.glyphs[0].code = MCHAR_INVALID_CODE;
748 work_gstring.glyphs[0].rface = rface;
749 mfont__get_metric (&work_gstring, 0, 1);
750 rface->ascent = work_gstring.glyphs[0].ascent;
751 rface->descent = work_gstring.glyphs[0].descent;
754 for (i = 0; i < num; i++, from_g++)
755 from_g->rface = rface;
761 mface__free_realized (MRealizedFace *rface)
765 MPLIST_DO (plist, rface->non_ascii_list)
766 free (MPLIST_VAL (plist));
767 M17N_OBJECT_UNREF (rface->non_ascii_list);
772 mface__update_frame_face (MFrame *frame)
775 frame->rface = mface__realize (frame, NULL, 0, Mnil, Mnil, 0);
776 frame->space_width = frame->rface->space_width;
777 frame->ascent = frame->rface->ascent;
778 frame->descent = frame->rface->descent;
782 #endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
786 /*** @addtogroup m17nFace */
790 /***en @name Variables: Keys of face property */
791 /***ja @name ÊÑ¿ô: ¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼ */
796 @brief Key of a face property specifying foreground color.
798 The variable #Mforeground is used as a key of face property. The
799 property value must be a symbol whose name is a color name, or
802 #Mnil means that the face does not specify a foreground color.
803 Otherwise, the foreground of an M-text is drawn by the specified
807 @brief Á°·Ê¿§¤ò»ØÄꤹ¤ë¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
809 ÊÑ¿ô #Mforeground ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
810 ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¿§Ì¾¤ò̾Á°¤È¤·¤Æ»ý¤Ä¥·¥ó¥Ü¥ë¤« #Mnil ¤Ç¤¢¤ë¡£
812 #Mnil ¤Î¾ì¹ç¡¢Á°·Ê¿§¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð M-text ¤ÎÁ°·Ê¤Ï
813 »ØÄꤵ¤ì¤¿¿§¤Çɽ¼¨¤µ¤ì¤ë¡£ */
818 @brief Key of a face property specifying background color.
820 The variable #Mbackground is used as a key of face property. The
821 property value must be a symbol whose name is a color name, or
824 #Mnil means that the face does not specify a background color.
825 Otherwise, the background of an M-text is drawn by the specified
829 @brief ÇØ·Ê¿§¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
831 ÊÑ¿ô #Mbackground ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
832 ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢¿§Ì¾¤ò̾Á°¤È¤·¤Æ»ý¤Ä¥·¥ó¥Ü¥ë¤« #Mnil ¤Ç¤¢¤ë¡£
834 #Mnil ¤Î¾ì¹ç¡¢ÇØ·Ê¿§¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð M-text ¤ÎÇطʤÏ
835 »ØÄꤵ¤ì¤¿¿§¤Çɽ¼¨¤µ¤ì¤ë¡£ */
840 @brief Key of a face property specifying video mode.
842 The variable #Mvideomode is used as a key of face property. The
843 property value must be #Mnormal, #Mreverse, or #Mnil.
845 #Mnormal means that an M-text is drawn in normal video mode
846 (i.e. the foreground is drawn by foreground color, the background
847 is drawn by background color).
849 #Mreverse means that an M-text is drawn in reverse video mode
850 (i.e. the foreground is drawn by background color, the background
851 is drawn by foreground color).
853 #Mnil means that the face does not specify a video mode. */
856 @brief ¥Ó¥Ç¥ª¥â¡¼¥É¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
858 ÊÑ¿ô #Mvideomode ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£
859 ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤϡ¢#Mnormal, #Mreverse, #Mnil ¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
861 #Mnormal ¤Î¾ì¹ç¤Ï¡¢M-text ¤Ïɸ½à¤Î¥Ó¥Ç¥ª¥â¡¼¥É¡ÊÁ°·Ê¤òÁ°·Ê¿§¤Ç¡¢ÇØ
862 ·Ê¤òÇØ·Ê¿§¤Ç¡Ë¤Çɽ¼¨¤¹¤ë¡£
864 #Mreverse ¤Î¾ì¹ç¤Ï¥ê¥Ð¡¼¥¹¥Ó¥Ç¥ª¥â¡¼¥É¤Ç¡ÊÁ°·Ê¤òÇØ·Ê¿§¤Ç¡¢ÇطʤòÁ°
867 #Mnil ¤Î¾ì¹ç¤Ï¥Ó¥Ç¥ª¥â¡¼¥É¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
873 @brief Key of a face property specifying font size ratio.
875 The variable #Mratio is used as a key of face property. The value
876 RATIO must be an integer.
878 The value 0 means that the face does not specify a font size
879 ratio. Otherwise, an M-text is drawn by a font of size (FONTSIZE
880 * RATIO / 100) where FONTSIZE is a font size specified by the face
883 @brief ¥Õ¥©¥ó¥È¤Î¥µ¥¤¥º¤ÎÈæΨ¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
885 ÊÑ¿ô #Mratio ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃÍ RATIO
886 ¤ÏÀ°¿ôÃͤǤʤ¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
888 Ãͤ¬0¤Ê¤é¤Ð¡¢¥Õ¥©¥ó¥È¥µ¥¤¥º¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢M-text
889 ¤Ï(FONTSIZE * RATIO / 100) ¤È¤¤¤¦¥µ¥¤¥º¤Î¥Õ¥©¥ó¥È¤Çɽ¼¨¤µ¤ì¤ë¡£¤³
890 ¤³¤Ç FONTSIZE ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼ #Msize ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Ç¤¢
896 @brief Key of a face property specifying horizontal line.
898 The variable #Mhline is used as a key of face property. The value
899 must be a pointer to an object of type #MFaceHLineProp, or @c
902 The value @c NULL means that the face does not specify this
903 property. Otherwise, an M-text is drawn with a horizontal line by
904 a way specified by the object that the value points to. */
907 @brief ¿åÊ¿Àþ¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
909 ÊÑ¿ô #Mhline ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
910 #MFaceHLineProp ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê
913 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¤³¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÃÍ
914 ¤¬»Ø¤¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ØÄꤵ¤ì¤¿¤è¤¦¤Ë¿åÊ¿Àþ¤òÉղä·¤Æ M-text ¤òɽ¼¨
920 @brief Key of a face property specifying box.
922 The variable #Mbox is used as a key of face property. The value
923 must be a pointer to an object of type #MFaceBoxProp, or @c NULL.
925 The value @c NULL means that the face does not specify a box.
926 Otherwise, an M-text is drawn with a surrounding box by a way
927 specified by the object that the value points to. */
930 @brief °Ï¤ßÏȤò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
932 ÊÑ¿ô #Mbox ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
933 #MFaceBoxProp ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é
936 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¤³¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÃÍ
937 ¤¬»Ø¤¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ØÄꤵ¤ì¤¿¤è¤¦¤Ë°Ï¤ßÏȤòÉղä·¤Æ M-text ¤òɽ¼¨
943 @brief Key of a face property specifying fontset.
945 The variable #Mfontset is used as a key of face property. The
946 value must be a pointer to an object of type #Mfontset, or @c
949 The value @c NULL means that the face does not specify a fontset.
950 Otherwise, an M-text is drawn with a font selected from what
951 specified in the fontset. */
954 @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
956 ÊÑ¿ô #Mfontset ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
957 #Mfontset ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
959 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤ÐÃÍ
960 ¤¬»Ø¤¹¥ª¥Ö¥¸¥§¥¯¥È¤Ë»ØÄꤵ¤ì¤¿¥Õ¥©¥ó¥È¥»¥Ã¥È¤«¤éÁª¤ó¤À¥Õ¥©¥ó¥È¤Ç
961 M-text ¤òɽ¼¨¤¹¤ë¡£*/
966 @brief Key of a face property specifying hook.
968 The variable #Mhook_func is used as a key of face property. The
969 value must be a function of type #MFaceHookFunc, or @c NULL.
971 The value @c NULL means that the face does not specify a hook.
972 Otherwise, the specified function is called before the face is
975 @brief ¥Õ¥Ã¥¯¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
977 ÊÑ¿ô #Mhook_func ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
978 #MFaceHookFunc ·¿¤Î´Ø¿ô¤« @c NULL ¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£
980 Ãͤ¬ @c NULL ¤Ê¤é¤Ð¡¢¥Õ¥Ã¥¯¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¥Õ¥§¡¼¥¹¤ò
981 ¼Â¸½¤¹¤ëÁ°¤Ë»ØÄꤷ¤¿´Ø¿ô¤¬¸Æ¤Ð¤ì¤ë¡£ */
985 @brief Key of a face property specifying argument of hook.
987 The variable #Mhook_arg is used as a key of face property. The
988 value can be anything that is passed a hook function specified by
989 the face property #Mhook_func. */
991 @brief ¥Õ¥Ã¥¯¤Î°ú¿ô¤ò»ØÄꤹ¤ë¤¿¤á¤Î¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¡¼¤Î¥¡¼.
993 ÊÑ¿ô #Mhook_arg ¤Ï¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼¤È¤·¤ÆÍѤ¤¤é¤ì¤ë¡£ÃͤÏ
994 ²¿¤Ç¤â¤è¤¯¡¢¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£ #Mhook_func ¤Ç»ØÄꤵ¤ì¤ë´Ø¿ô¤ËÅϤµ
1001 /*** @ingroup m17nFace */
1002 /***en @name Variables: Possible values of #Mvideomode property of face */
1003 /***ja @name ÊÑ¿ô¡§ ¥Õ¥§¡¼¥¹¤Î #Mvideomode ¥×¥í¥Ñ¥Æ¥£¤Î²Äǽ¤ÊÃÍ */
1008 See the documentation of the variable #Mvideomode. */
1010 ÊÑ¿ô #Mvideomode ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£ */
1016 /*** @ingroup m17nFace */
1017 /***en @name Variables: Predefined faces */
1018 /***ja @name ÊÑ¿ô: ÄêµÁºÑ¤ß¥Õ¥§¡¼¥¹ */
1023 @brief Normal video face.
1025 The variable #mface_normal_video points to a face that has the
1026 #Mvideomode property with value #Mnormal. The other properties
1027 are not specified. An M-text drawn with this face appear normal
1028 colors (i.e. the foreground is drawn by foreground color, and
1029 background is drawn by background color). */
1031 @brief ɸ½à¥Ó¥Ç¥ª¥Õ¥§¡¼¥¹.
1033 ÊÑ¿ô #mface_normal_video ¤Ï #Mvideomode ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ #Mnormal
1034 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£
1035 ¤³¤Î¥Õ¥§¡¼¥¹¤Çɽ¼¨¤µ¤ì¤ëM-text ¤Ïɸ½à¤Î¿§ (¤¹¤Ê¤ï¤ÁÁ°·Ê¤ÏÁ°·Ê¿§¡¢
1036 ÇطʤÏÇØ·Ê¿§¡Ë¤ÇÉÁ¤«¤ì¤ë¡£ */
1038 MFace *mface_normal_video;
1041 @brief Reverse video face.
1043 The variable #mface_reverse_video points to a face that has the
1044 #Mvideomode property with value #Mreverse. The other properties
1045 are not specified. An M-text drawn with this face appear in
1046 reversed colors (i.e. the foreground is drawn by background
1047 color, and background is drawn by foreground color). */
1049 @brief ¥ê¥Ð¡¼¥¹¥Ó¥Ç¥ª¥Õ¥§¡¼¥¹.
1051 ÊÑ¿ô #mface_reverse_video ¤Ï #Mvideomode ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬
1052 #Mreverse ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄê
1053 ¤µ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤Çɽ¼¨¤µ¤ì¤ëM-text ¤ÏÁ°·Ê¿§¤ÈÇØ·Ê¿§¤¬Æþ¤ìÂØ
1054 ¤ï¤Ã¤Æ (¤¹¤Ê¤ï¤ÁÁ°·Ê¤ÏÇØ·Ê¿§¡¢ÇطʤÏÁ°·Ê¿§¡ËÉÁ¤«¤ì¤ë¡£ */
1056 MFace *mface_reverse_video;
1059 @brief Underline face.
1061 The variable #mface_underline points to a face that has the
1062 #Mhline property with value a pointer to an object of type
1063 #MFaceHLineProp. The members of the object are as follows:
1068 type MFACE_HLINE_UNDER
1073 The other properties are not specified. An M-text that has this
1074 face is drawn with an underline. */
1076 @brief ²¼Àþ¥Õ¥§¡¼¥¹.
1078 ÊÑ¿ô #mface_underline ¤Ï #Mhline ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ #MFaceHLineProp
1079 ·¿¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£¥ª¥Ö
1080 ¥¸¥§¥¯¥È¤Î¥á¥ó¥Ð¤Ï°Ê²¼¤ÎÄ̤ꡣ
1085 type MFACE_HLINE_UNDER
1090 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ï²¼ÀþÉÕ¤
1093 MFace *mface_underline;
1098 The variable #mface_medium points to a face that has the #Mweight
1099 property with value a symbol of name "medium". The other
1100 properties are not specified. An M-text that has this face is
1101 drawn with a font of medium weight. */
1103 @brief ¥ß¥Ç¥£¥¢¥à¥Õ¥§¡¼¥¹.
1105 ÊÑ¿ô #mface_medium ¤Ï #Mweight ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "medium" ¤È¤¤¤¦Ì¾
1106 Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í
1107 ¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ï¡¢¥ß¥Ç¥£¥¢¥à¥¦¥§
1108 ¥¤¥È¤Î¥Õ¥©¥ó¥È¤Çɽ¼¨¤µ¤ì¤ë¡£ */
1109 MFace *mface_medium;
1114 The variable #mface_bold points to a face that has the #Mweight
1115 property with value a symbol of name "bold". The other properties
1116 are not specified. An M-text that has this face is drawn with a
1117 font of bold weight. */
1120 @brief ¥Ü¡¼¥ë¥É¥Õ¥§¡¼¥¹.
1122 ÊÑ¿ô #mface_bold ¤Ï #Mweight ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "bold" ¤È¤¤¤¦Ì¾Á°¤ò
1123 ¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£
1124 ¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ï¡¢¥Ü¡¼¥ë¥É¤Î¥Õ¥©¥ó¥È¤Ç
1133 The variable #mface_italic points to a face that has the #Mstyle
1134 property with value a symbol of name "italic". The other
1135 properties are not specified. An M-text that has this face is
1136 drawn with a font of italic style. */
1139 @brief ¥¤¥¿¥ê¥Ã¥¯¥Õ¥§¡¼¥¹.
1141 ÊÑ¿ô #mface_italic ¤Ï #Mstyle ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "italic" ¤È¤¤¤¦Ì¾Á°
1142 ¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ
1143 ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ï¡¢¥¤¥¿¥ê¥Ã¥¯ÂΤÇɽ
1147 MFace *mface_italic;
1150 @brief Bold italic face.
1152 The variable #mface_bold_italic points to a face that has the
1153 #Mweight property with value a symbol of name "bold", and #Mstyle
1154 property with value a symbol of name "italic". The other
1155 properties are not specified. An M-text that has this face is
1156 drawn with a font of bold weight and italic style. */
1159 @brief ¥Ü¡¼¥ë¥É¥¤¥¿¥ê¥Ã¥¯¥Õ¥§¡¼¥¹.
1161 ÊÑ¿ô #mface_bold_italic ¤Ï¡¢#Mweight ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "bold" ¤È¤¤
1162 ¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢¤«¤Ä #Mstyle ¥×¥í¥Ñ¥Æ¥¤¤ÎÃͤ¬ "italic"
1163 ¤È¤¤¤¦Ì¾Á°¤ò¤â¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£
1164 ¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤Ï¡¢¥Ü¡¼¥ë
1165 ¥É¥¤¥¿¥ê¥Ã¥¯ÂΤÇɽ¼¨¤µ¤ì¤ë¡£
1168 MFace *mface_bold_italic;
1171 @brief Smallest face.
1173 The variable #mface_xx_small points to a face that has the #Mratio
1174 property with value 50. The other properties are not specified.
1175 An M-text that has this face is drawn with a font whose size is
1176 50% of a normal font. */
1179 @brief ºÇ¾®¤Î¥Õ¥§¡¼¥¹.
1181 ÊÑ¿ô #mface_xx_small ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 50 ¤Ç¤¢¤ë¥Õ¥§¡¼
1182 ¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹
1183 ¤ò»ý¤Ä M-text ¤Ïɸ½à¤Î 50% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1186 MFace *mface_xx_small;
1189 @brief Smaller face.
1191 The variable #mface_x_small points to a face that has the #Mratio
1192 property with value 66. The other properties are not specified.
1193 An M-text that has this face is drawn with a font whose size is
1194 66% of a normal font. */
1197 @brief ¤â¤Ã¤È¾®¤µ¤¤¥Õ¥§¡¼¥¹.
1199 ÊÑ¿ô #mface_x_small ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 66 ¤Ç¤¢¤ë¥Õ¥§¡¼
1200 ¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹
1201 ¤ò»ý¤Ä M-text ¤Ïɸ½à¤Î 66% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1204 MFace *mface_x_small;
1209 The variable #mface_x_small points to a face that has the #Mratio
1210 property with value 75. The other properties are not specified.
1211 An M-text that has this face is drawn with a font whose size is
1212 75% of a normal font. */
1215 @brief ¾®¤µ¤¤¥Õ¥§¡¼¥¹.
1217 ÊÑ¿ô #mface_small ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 75 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹¤ò
1218 »Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý
1219 ¤Ä M-text ¤Ïɸ½à¤Î 75% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1225 @brief Normalsize face.
1227 The variable #mface_normalsize points to a face that has the
1228 #Mratio property with value 100. The other properties are not
1229 specified. An M-text that has this face is drawn with a font
1230 whose size is the same as a normal font. */
1233 @brief ɸ½à¤ÎÂ礤µ¤Î¥Õ¥§¡¼¥¹.
1235 ÊÑ¿ô #mface_normalsize ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 100 ¤Ç¤¢¤ë¥Õ¥§¡¼
1236 ¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹
1237 ¤ò»ý¤Ä M-text ¤Ïɸ½à¤ÈƱ¤¸Â礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1240 MFace *mface_normalsize;
1245 The variable #mface_large points to a face that has the #Mratio
1246 property with value 120. The other properties are not specified.
1247 An M-text that has this face is drawn with a font whose size is
1248 120% of a normal font. */
1251 @brief Â礤¤¥Õ¥§¡¼¥¹.
1253 ÊÑ¿ô #mface_large ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 120 ¤Ç¤¢¤ë¥Õ¥§¡¼¥¹
1254 ¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò
1255 »ý¤Ä M-text ¤Ïɸ½à¤Î 120% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1263 The variable #mface_x_large points to a face that has the #Mratio
1264 property with value 150. The other properties are not specified.
1265 An M-text that has this face is drawn with a font whose size is
1266 150% of a normal font. */
1269 @brief ¤â¤Ã¤ÈÂ礤¤¥Õ¥§¡¼¥¹.
1271 ÊÑ¿ô #mface_x_large ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 150 ¤Ç¤¢¤ë¥Õ¥§¡¼
1272 ¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹
1273 ¤ò»ý¤Ä M-text ¤Ïɸ½à¤Î 150% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1276 MFace *mface_x_large;
1279 @brief Largest face.
1281 The variable #mface_xx_large points to a face that has the #Mratio
1282 property with value 200. The other properties are not specified.
1283 An M-text that has this face is drawn with a font whose size is
1284 200% of a normal font. */
1287 @brief ºÇÂç¤Î¥Õ¥§¡¼¥¹.
1289 ÊÑ¿ô #mface_xx_large ¤Ï¡¢#Mratio ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤ¬ 200 ¤Ç¤¢¤ë¥Õ¥§¡¼
1290 ¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹
1291 ¤ò»ý¤Ä M-text ¤Ïɸ½à¤Î 200% ¤ÎÂ礤µ¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤Æɽ¼¨¤µ¤ì¤ë¡£
1294 MFace *mface_xx_large;
1299 The variable #mface_black points to a face that has the
1300 #Mforeground property with value a symbol of name "black". The
1301 other properties are not specified. An M-text that has this face
1302 is drawn with black foreground. */
1307 ÊÑ¿ô #mface_black ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "black" ¤È
1308 ¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×
1309 ¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤ò¹õ¤È¤·
1317 The variable #mface_white points to a face that has the
1318 #Mforeground property with value a symbol of name "white". The
1319 other properties are not specified. An M-text that has this face
1320 is drawn with white foreground. */
1325 ÊÑ¿ô #mface_white ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "white" ¤È
1326 ¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×
1327 ¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤òÇò¤È¤·
1335 The variable #mface_red points to a face that has the
1336 #Mforeground property with value a symbol of name "red". The
1337 other properties are not specified. An M-text that has this face
1338 is drawn with red foreground. */
1343 ÊÑ¿ô #mface_red ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "red" ¤È¤¤¤¦
1344 ̾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ
1345 ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤òÀ֤Ȥ·¤Æɽ
1353 The variable #mface_green points to a face that has the
1354 #Mforeground property with value a symbol of name "green". The
1355 other properties are not specified. An M-text that has this face
1356 is drawn with green foreground. */
1361 ÊÑ¿ô #mface_green ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "green" ¤È
1362 ¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×
1363 ¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤òÎФȤ·
1371 The variable #mface_blue points to a face that has the
1372 #Mforeground property with value a symbol of name "blue". The
1373 other properties are not specified. An M-text that has this face
1374 is drawn with blue foreground. */
1379 ÊÑ¿ô #mface_blue ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "blue" ¤È¤¤
1380 ¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í
1381 ¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤òÀĤȤ·¤Æ
1389 The variable #mface_cyan points to a face that has the
1390 #Mforeground property with value a symbol of name "cyan". The
1391 other properties are not specified. An M-text that has this face
1392 is drawn with cyan foreground. */
1395 @brief ¥·¥¢¥ó¥Õ¥§¡¼¥¹.
1397 ÊÑ¿ô #mface_cyan ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "cyan" ¤È¤¤
1398 ¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î¥×¥í
1399 ¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤ò¥·¥¢¥ó¤È
1407 The variable #mface_yellow points to a face that has the
1408 #Mforeground property with value a symbol of name "yellow". The
1409 other properties are not specified. An M-text that has this face
1410 is drawn with yellow foreground. */
1415 ÊÑ¿ô #mface_yellow ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ "yellow"
1416 ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£Â¾¤Î
1417 ¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°·Ê¿§¤ò²«¿§
1418 ¤È¤·¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1420 MFace *mface_yellow;
1423 @brief Magenta face.
1425 The variable #mface_magenta points to a face that has the
1426 #Mforeground property with value a symbol of name "magenta". The
1427 other properties are not specified. An M-text that has this face
1428 is drawn with magenta foreground. */
1431 @brief ¥Þ¥¼¥ó¥¿¥Õ¥§¡¼¥¹.
1433 ÊÑ¿ô #mface_magenta ¤Ï¡¢#Mforeground ¥×¥í¥Ñ¥Æ¥£¤ÎÃͤȤ·¤Æ
1434 "magenta" ¤È¤¤¤¦Ì¾Á°¤Î¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤è¤¦¤Ê¥Õ¥§¡¼¥¹¤ò»Ø¤¹¥Ý¥¤¥ó¥¿¤Ç
1435 ¤¢¤ë¡£Â¾¤Î¥×¥í¥Ñ¥Æ¥£¤Ï»ØÄꤵ¤ì¤Ê¤¤¡£¤³¤Î¥Õ¥§¡¼¥¹¤ò»ý¤Ä M-text ¤ÏÁ°
1436 ·Ê¿§¤ò¥Þ¥¼¥ó¥¿¤È¤·¤Æɽ¼¨¤µ¤ì¤ë¡£ */
1438 MFace *mface_magenta;
1443 /***en @name Variables: The other symbols for face handling. */
1444 /***ja @name ÊÑ¿ô: ¥Õ¥§¡¼¥¹¤ò¼è¤ê°·¤¦¤¿¤á¤Î¤½¤Î¾¤Î¥·¥ó¥Ü¥ë */
1449 @brief Key of a text property specifying a face.
1451 The variable #Mface is a symbol of name <tt>"face"</tt>. A text
1452 property whose key is
1453 this symbol must have a pointer to an object
1455 . This is a managing key. */
1458 @brief ¥Õ¥§¡¼¥¹¤ò»ØÄꤹ¤ë¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Î¥¡¼.
1460 ÊÑ¿ô #Mface ¤Ï <tt>"face"</tt> ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£¤³
1461 ¤Î¥·¥ó¥Ü¥ë¤ò¥¡¼¤È¤¹¤ë¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤Ï¡¢#MFace ·¿¤Î¥ª¥Ö¥¸¥§¥¯
1462 ¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò»ý¤¿¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£¤³¤ì¤Ï´ÉÍý¥¡¼¤Ç¤¢¤ë¡£ */
1470 @brief Create a new face.
1472 The mface () function creates a new face object that specifies no
1476 This function returns a pointer to the created face. */
1479 @brief ¿·¤·¤¤¥Õ¥§¡¼¥¹¤ò¤Ä¤¯¤ë.
1481 ´Ø¿ô mface () ¤Ï¥×¥í¥Ñ¥Æ¥£¤ò°ìÀÚ»ý¤¿¤Ê¤¤¿·¤·¤¤¥Õ¥§¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È
1485 ¤³¤Î´Ø¿ô¤Ïºî¤Ã¤¿¥Õ¥§¡¼¥¹¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ */
1492 M17N_OBJECT (face, free_face, MERROR_FACE);
1493 face->frame_list = mplist ();
1494 M17N_OBJECT_REGISTER (face_table, face);
1501 @brief Make a copy of a face.
1503 The mface_copy () function makes a copy of $FACE and returns a
1504 pointer to the created copy. */
1507 @brief ¥Õ¥§¡¼¥¹¤Î¥³¥Ô¡¼¤òºî¤ë.
1509 ´Ø¿ô mface_copy () ¤Ï¥Õ¥§¡¼¥¹ $FACE ¤Î¥³¥Ô¡¼¤òºî¤ê¡¢¤½¤Î¥³¥Ô¡¼¤Ø¤Î
1513 mface_copy (MFace *face)
1517 MSTRUCT_CALLOC (copy, MERROR_FACE);
1519 copy->control.ref_count = 1;
1520 M17N_OBJECT_REGISTER (face_table, copy);
1521 copy->frame_list = mplist ();
1522 if (copy->property[MFACE_FONTSET])
1523 M17N_OBJECT_REF (copy->property[MFACE_FONTSET]);
1531 The mface_merge () functions merges the properties of face $SRC
1535 This function returns $DST. */
1538 @brief ¥Õ¥§¡¼¥¹¤òÅý¹ç¤¹¤ë.
1540 ´Ø¿ô mface_merge () ¤Ï¡¢¥Õ¥§¡¼¥¹ $SRC ¤Î¥×¥í¥Ñ¥Æ¥£¤ò¥Õ¥§¡¼¥¹ $DST
1544 ¤³¤Î´Ø¿ô¤Ï $DST ¤òÊÖ¤¹¡£ */
1547 mface_merge (MFace *dst, MFace *src)
1552 for (i = 0; i < MFACE_PROPERTY_MAX; i++)
1553 if (src->property[i])
1555 if (i == MFACE_FONTSET)
1557 M17N_OBJECT_UNREF (dst->property[i]);
1558 M17N_OBJECT_REF (src->property[i]);
1560 dst->property[i] = src->property[i];
1563 MPLIST_DO (plist, dst->frame_list)
1565 MFrame *frame = MPLIST_VAL (plist);
1568 if (dst == frame->face)
1569 mface__update_frame_face (frame);
1578 @brief Make a face from a font.
1580 The mface_from_font () function return a newly created face while
1581 reflecting the properties of $FONT in its properties. */
1584 @brief ¥Õ¥©¥ó¥È¤«¤é¥Õ¥§¡¼¥¹¤òºî¤ë.
1586 ´Ø¿ô mface_from_font () ¤Ï¥Õ¥©¥ó¥È $FONT ¤Î¥×¥í¥Ñ¥Æ¥£¤ò¥×¥í¥Ñ¥Æ¥£
1587 ¤È¤·¤Æ»ý¤Ä¿·¤·¤¤¥Õ¥§¡¼¥¹¤òºî¤ê¡¢¤½¤ì¤òÊÖ¤¹¡£ */
1590 mface_from_font (MFont *font)
1592 MFace *face = mface ();
1594 face->property[MFACE_FOUNDRY] = mfont_get_prop (font, Mfoundry);
1595 face->property[MFACE_FAMILY] = mfont_get_prop (font, Mfamily);
1596 face->property[MFACE_WEIGHT] = mfont_get_prop (font, Mweight);
1597 face->property[MFACE_STYLE] = mfont_get_prop (font, Mstyle);
1598 face->property[MFACE_STRETCH] = mfont_get_prop (font, Mstretch);
1599 face->property[MFACE_ADSTYLE] = mfont_get_prop (font, Madstyle);
1600 face->property[MFACE_SIZE] = mfont_get_prop (font, Msize);
1607 @brief Get the value of a face property.
1609 The mface_get_prop () function returns the value of the face
1610 property whose key is $KEY in face $FACE. $KEY must be one of the
1613 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1614 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1615 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
1618 The actual type of the returned value depends of $KEY. See
1619 documentation of the above keys. If an error is detected, it
1620 returns @c NULL and assigns an error code to the external variable
1624 @brief ¥Õ¥§¡¼¥¹¤Î¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÆÀ¤ë.
1626 ´Ø¿ô mface_get_prop () ¤Ï¡¢¥Õ¥§¡¼¥¹ $FACE ¤¬»ý¤Ä¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£
1627 ¤ÎÆâ¡¢¥¡¼¤¬ $KEY ¤Ç¤¢¤ë¤â¤Î¤ÎÃͤòÊÖ¤¹¡£$KEY ¤Ï²¼µ¤Î¤¤¤º¤ì¤«¤Ç¤Ê
1630 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1631 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1632 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
1635 Ìá¤êÃͤη¿¤Ï $KEY ¤Ë°Í¸¤¹¤ë¡£¾åµ¤Î¥¡¼¤ÎÀâÌÀ¤ò»²¾È¤¹¤ë¤³
1636 ¤È¡£¥¨¥é¡¼¤¬¸¡½Ð¤µ¤ì¤¿¾ì¹ç¤Ï @c NULL ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code
1637 ¤Ë¥¨¥é¡¼¥³¡¼¥É¤òÀßÄꤹ¤ë¡£ */
1647 mface_get_prop (MFace *face, MSymbol key)
1649 int index = (int) msymbol_get (key, M_face_prop_index) - 1;
1652 MERROR (MERROR_FACE, NULL);
1653 return face->property[index];
1659 @brief Set a value of a face property.
1661 The mface_put_prop () function assigns $VAL to the property whose
1662 key is $KEY in face $FACE. $KEY must be one the followings:
1664 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1665 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1666 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg
1668 Among them, font related properties (#Mfoundry through #Msize) are
1669 used as the default values when a font in the fontset of $FACE
1670 does not specify those values.
1672 The actual type of the returned value depends of $KEY. See
1673 documentation of the above keys.
1676 If the operation was successful, mface_put_prop () returns 0.
1677 Otherwise it returns -1 and assigns an error code to the external
1678 variable #merror_code. */
1681 @brief ¥Õ¥§¡¼¥¹¥×¥í¥Ñ¥Æ¥£¤ÎÃͤòÀßÄꤹ¤ë.
1683 ´Ø¿ô mface_put_prop () ¤Ï¡¢¥Õ¥§¡¼¥¹ $FACE Æâ¤Ç¥¡¼¤¬ $KEY ¤Ç¤¢¤ë¥×
1684 ¥í¥Ñ¥Æ¥£¤ÎÃͤò $VAL ¤ËÀßÄꤹ¤ë¡£$KEY ¤Ï°Ê²¼¤Î¤¤¤º¤ì¤«¤Ç¤Ê¤¯¤Æ¤Ï¤Ê
1687 #Mforeground, #Mbackground, #Mvideomode, #Mhline, #Mbox,
1688 #Mfoundry, #Mfamily, #Mweight, #Mstyle, #Mstretch, #Madstyle,
1689 #Msize, #Mfontset, #Mratio, #Mhook_func, #Mhook_arg.
1691 ¤³¤ì¤é¤Î¤¦¤Á¤Î¡¢¥Õ¥©¥ó¥È´ØÏ¢¤Î¥×¥í¥Ñ¥Æ¥£ (#Mfamily ¤«¤é #Msize
1692 ¤Þ¤Ç) ¤Ï¡¢¥Õ¥§¡¼¥¹¤Î¥Õ¥©¥ó¥È¥»¥Ã¥ÈÃæ¤Î¥Õ¥©¥ó¥È¤Ë´Ø¤¹¤ë¥Ç¥Õ¥©¥ë¥ÈÃÍ
1693 ¤È¤Ê¤ê¡¢¸Ä¡¹¤Î¥Õ¥©¥ó¥È¤¬Ãͤò»ØÄꤷ¤Ê¤«¤Ã¤¿¾ì¹ç¤ËÍѤ¤¤é¤ì¤ë¡£
1695 Ìá¤êÃͤη¿¤Ï $KEY ¤Ë°Í¸¤¹¤ë¡£¾åµ¤Î¥¡¼¤ÎÀâÌÀ¤ò»²¾È¤¹¤ë¤³¤È¡£
1698 ½èÍý¤¬À®¸ù¤·¤¿¾ì¹ç¡¢mface_put_prop () ¤Ï 0 ¤òÊÖ¤¹¡£¼ºÇÔ¤·¤¿¾ì¹ç¤Ï
1699 -1 ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code ¤Ë¥¨¥é¡¼¥³¡¼¥É¤òÀßÄꤹ¤ë¡£ */
1709 mface_put_prop (MFace *face, MSymbol key, void *val)
1711 int index = (int) msymbol_get (key, M_face_prop_index) - 1;
1715 MERROR (MERROR_FACE, -1);
1716 if (key == Mfontset)
1718 if (face->property[index])
1719 M17N_OBJECT_UNREF (face->property[index]);
1720 M17N_OBJECT_REF (val);
1722 else if (key == Mhline)
1723 val = get_hline_create (val);
1724 else if (key == Mbox)
1725 val = get_box_create (val);
1727 if (face->property[index] == val)
1729 face->property[index] = val;
1731 MPLIST_DO (plist, face->frame_list)
1733 MFrame *frame = MPLIST_VAL (plist);
1736 if (face == frame->face)
1737 mface__update_frame_face (frame);
1746 @brief Update a face.
1748 The mface_update () function update face $FACE on frame $FRAME by
1749 calling a hook function of $FACE (if any). */
1752 @brief ¥Õ¥§¡¼¥¹¤ò¹¹¿·¤¹¤ë.
1754 ´Ø¿ô mface_update () ¤Ï¥Õ¥ì¡¼¥à $FRAME ¤Î¥Õ¥§¡¼¥¹ $FACE ¤ò $FACE
1755 ¤Î¥Õ¥Ã¥¯´Ø¿ô¤ò¡Ê¤¢¤ì¤Ð¡Ë¸Æ¤ó¤Ç¹¹¿·¤¹¤ë¡£ */
1758 mface_update (MFrame *frame, MFace *face)
1760 MFaceHookFunc func = (MFaceHookFunc) face->property[MFACE_HOOK_FUNC];
1762 MRealizedFace *rface;
1764 if (func && func != noop_hook)
1766 MPLIST_DO (rface_list, frame->realized_face_list)
1768 rface = MPLIST_VAL (rface_list);
1769 if ((MFaceHookFunc) rface->face.property[MFACE_HOOK_FUNC] == func)
1770 (func) (&(rface->face), rface->face.property[MFACE_HOOK_ARG],
1780 /*** @addtogroup m17nDebug */
1787 The mdebug_dump_face () function prints face $FACE in a human readable
1788 way to the stderr. $INDENT specifies how many columns to indent
1789 the lines but the first one.
1792 This function returns $FACE. */
1795 @brief ¥Õ¥§¡¼¥¹¤ò¥À¥ó¥×¤¹¤ë.
1797 ´Ø¿ô mdebug_dump_face () ¤Ï¥Õ¥§¡¼¥¹ $FACE ¤ò stderr ¤Ë¿Í´Ö¤Ë²ÄÆɤÊ
1798 ·Á¤Ç°õºþ¤¹¤ë¡£ $INDENT ¤Ï£²¹ÔÌܰʹߤΥ¤¥ó¥Ç¥ó¥È¤ò»ØÄꤹ¤ë¡£
1801 ¤³¤Î´Ø¿ô¤Ï $FACE ¤òÊÖ¤¹¡£ */
1804 mdebug_dump_face (MFace *face, int indent)
1806 char *prefix = (char *) alloca (indent + 1);
1809 memset (prefix, 32, indent);
1811 mfont__set_spec_from_face (&spec, face);
1812 fprintf (stderr, "(face font:\"");
1813 mdebug_dump_font (&spec);
1814 fprintf (stderr, "\"\n %s fore:%s back:%s", prefix,
1815 msymbol_name ((MSymbol) face->property[MFACE_FOREGROUND]),
1816 msymbol_name ((MSymbol) face->property[MFACE_BACKGROUND]));
1817 if (face->property[MFACE_FONTSET])
1818 fprintf (stderr, " non-default-fontset");
1819 fprintf (stderr, " hline:%s", face->property[MFACE_HLINE] ? "yes" : "no");
1820 fprintf (stderr, " box:%s)", face->property[MFACE_BOX] ? "yes" : "no");