X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Ffontset.c;h=ea836afadda06bfa96302dc935e84f675672f8ec;hb=b14da77ce7e4889dbae854a3efcf4e0727173925;hp=a9d8a851702801e2dedeed39eab36f7476dae10b;hpb=545cead3f0f4f51bda52b65c8c101907125af8ab;p=m17n%2Fm17n-lib.git diff --git a/src/fontset.c b/src/fontset.c index a9d8a85..ea836af 100644 --- a/src/fontset.c +++ b/src/fontset.c @@ -39,16 +39,15 @@ @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ïʸ»ú¤«¤é¥Õ¥©¥ó¥È¤Ø¤ÎÂбþÉÕ¤±¤ò¹Ô¤¦¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë. - @e ¥Õ¥©¥ó¥È¥»¥Ã¥È ¤Ï @c MFontset ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë¡£M-text ¤ò - ɽ¼¨¤¹¤ëºÝ¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ï M-text Ãæ¤Î¸Ä¡¹¤Îʸ»ú¤ËÂФ·¤Æ¤É¤Î¥Õ¥© - ¥ó¥È¤òÍѤ¤¤ë¤«¤Îµ¬Â§¤ò¡¢°Ê²¼¤Î¾ðÊó¤Ë½¾¤Ã¤ÆÍ¿¤¨¤ë¡£ + @e ¥Õ¥©¥ó¥È¥»¥Ã¥È ¤Ï @c MFontset ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ë¡£M-text + ¤Îɽ¼¨¤ÎºÝ¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ï°Ê²¼¤Î¾ðÊó¤òÍѤ¤¤Æ M-text + Ãæ¤Î¸Ä¡¹¤Îʸ»ú¤Ë¤É¤Î¥Õ¥©¥ó¥È¤òÍѤ¤¤ë¤«·è¤á¤ëµ¬Â§¤òÍ¿¤¨¤ë¡£ @li ʸ»ú¤Îʸ»ú¥×¥í¥Ñ¥Æ¥£ "¥¹¥¯¥ê¥×¥È" @li ʸ»ú¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ "¸À¸ì" @li ʸ»ú¤Î¥Æ¥­¥¹¥È¥×¥í¥Ñ¥Æ¥£ "ʸ»ú¥»¥Ã¥È" - ¤³¤ì¤é¤Î¾ðÊ󤬤ɤΤ褦¤ËÍѤ¤¤é¤ì¤ë¤«¤Ï mdraw_text () ¤ÎÀâÌÀ¤ò»²¾È - ¤Î¤³¤È¡£ + ¤³¤ì¤é¤Î¾ðÊ󤬤ɤΤ褦¤ËÍѤ¤¤é¤ì¤ë¤«¤Ï mdraw_text () ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£ */ @@ -500,125 +499,158 @@ mfont__free_realized_fontset (MRealizedFontset *realized) } +static MRealizedFont * +try_font_group (MRealizedFontset *realized, + MPlist *font_group, MGlyph *g, int *num, int size) +{ + MFrame *frame = realized->frame; + MRealizedFont *rfont; + MPlist *plist; + int i; + + if (MPLIST_PLIST_P (font_group)) + realize_font_group (frame, &realized->spec, font_group, size); + + MPLIST_DO (plist, font_group) + { + rfont = (MRealizedFont *) MPLIST_VAL (plist); + if (rfont->status < 0) + continue; + /* Check if this font can display all glyphs. */ + for (i = 0; i < *num; i++) + { + g[i].code = mfont__encode_char (rfont, + g[i].type == GLYPH_CHAR ? g[i].c + : ' '); + if (g[i].code == MCHAR_INVALID_CODE) + break; + } + if (i == *num) + { + if (rfont->status > 0 + || mfont__open (rfont) == 0) + /* We found a font that can display all glyphs. */ + return rfont; + } + } + + /* We couldn't find a font that can display all glyphs. Find one + that can display at least the first glyph. */ + MPLIST_DO (plist, font_group) + { + rfont = (MRealizedFont *) MPLIST_VAL (plist); + if (rfont->status < 0) + continue; + g->code = mfont__encode_char (rfont, + g->type == GLYPH_CHAR ? g->c : ' '); + if (g->code != MCHAR_INVALID_CODE) + { + if (rfont->status > 0 + || mfont__open (rfont) == 0) + { + /* Ok, let's use this font. Check how many more + characters it supports. */ + int i; + + for (i = 1; i < *num; i++) + { + g[i].code = mfont__encode_char (rfont, + g[i].type == GLYPH_CHAR + ? g[i].c : ' '); + if (g[i].code == MCHAR_INVALID_CODE) + break; + } + *num = i; + return rfont; + } + } + } + + return NULL; +} + MRealizedFont * mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num, MSymbol script, MSymbol language, MSymbol charset, int size) { - MFrame *frame = realized->frame; MCharset *preferred_charset = (charset == Mnil ? NULL : MCHARSET (charset)); MPlist *per_charset, *per_script, *per_lang; - MPlist *font_groups[256], *plist; - int n_font_group = 0; - MRealizedFont *rfont; - int i; + MPlist *plist; + MRealizedFont *rfont = NULL; if (realized->tick != realized->fontset->tick) update_fontset_elements (realized); if (preferred_charset - && (per_charset = mplist_get (realized->per_charset, charset)) != NULL) - font_groups[n_font_group++] = per_charset; + && (per_charset = mplist_get (realized->per_charset, charset)) != NULL + && (rfont = try_font_group (realized, per_charset, g, num, size))) + return rfont; + if (script != Mnil - && ((per_script = mplist_find_by_key (realized->per_script, script)) - != NULL)) + && (per_script = mplist_get (realized->per_script, script))) { /* We prefer font groups in this order: - (1) group matching LANGUAGE - (2) group for generic LANGUAGE - (3) group non-matching LANGUAGE */ + (1) group matching with LANGUAGE if LANGUAGE is not Mnil + (2) group for generic language + (3) group not matching with LANGUAGE */ if (language == Mnil) language = Mt; - per_lang = mplist_find_by_key (MPLIST_PLIST (per_script), language); - if (per_lang) + if ((per_lang = mplist_get (per_script, language)) + && (rfont = try_font_group (realized, per_lang, g, num, size))) + return rfont; + + if (language == Mt) { - font_groups[n_font_group++] = MPLIST_PLIST (per_lang); - if (language == Mt) - { - MPLIST_DO (per_lang, MPLIST_PLIST (per_script)) - if (MPLIST_KEY (per_lang) != language) - font_groups[n_font_group++] = MPLIST_PLIST (per_lang); - } + /* Try the above (3) */ + MPLIST_DO (plist, per_script) + if (MPLIST_KEY (plist) != language + && (rfont = try_font_group (realized, MPLIST_PLIST (plist), + g, num, size))) + return rfont; } - if (language != Mt) + else { - plist = mplist_get (MPLIST_PLIST (per_script), Mt); - if (plist) - font_groups[n_font_group++] = plist; + /* At first try the above (2) */ + if ((per_lang = mplist_get (per_script, Mt)) + && (rfont = try_font_group (realized, per_lang, g, num, size))) + return rfont; + + /* Then try the above (3) */ + MPLIST_DO (plist, per_script) + if (MPLIST_KEY (plist) != language + && MPLIST_KEY (plist) != Mt + && (rfont = try_font_group (realized, MPLIST_PLIST (plist), + g, num, size))) + return rfont; } - MPLIST_DO (per_lang, MPLIST_PLIST (per_script)) - if (MPLIST_KEY (per_lang) != language - && MPLIST_KEY (per_lang) != Mt) - font_groups[n_font_group++] = MPLIST_PLIST (per_lang); - } - font_groups[n_font_group++] = realized->fallback; - - if (n_font_group == 1) - { - /* As we only have a fallback font group, try all the other - fonts too. */ - MPLIST_DO (per_script, realized->per_script) - MPLIST_DO (per_lang, MPLIST_PLIST (per_script)) - font_groups[n_font_group++] = MPLIST_PLIST (per_lang); - MPLIST_DO (per_charset, realized->per_charset) - font_groups[n_font_group++] = MPLIST_PLIST (per_charset); } - for (i = 0; i < n_font_group; i++) - { - int j; - - if (MPLIST_PLIST_P (font_groups[i])) - realize_font_group (frame, &realized->spec, font_groups[i], size); - - MPLIST_DO (plist, font_groups[i]) - { - rfont = (MRealizedFont *) MPLIST_VAL (plist); - if (rfont->status < 0) - continue; - /* Check if this font can display all glyphs. */ - for (j = 0; j < *num; j++) - { - g[j].code = mfont__encode_char (rfont, g[j].c); - if (g[j].code == MCHAR_INVALID_CODE) - break; - } - if (j == *num) - { - if (rfont->status > 0 - || mfont__open (rfont) == 0) - /* We found a font that can display all glyphs. */ - break; - } - } - if (! MPLIST_TAIL_P (plist)) - break; - } + if (language != Mnil) + /* Find a font group for this language from all scripts. */ + MPLIST_DO (plist, realized->per_script) + if ((per_lang = mplist_get (MPLIST_PLIST (plist), language)) + && (rfont = try_font_group (realized, per_lang, g, num, size))) + return rfont; - if (i < n_font_group) + /* Try fallback fonts. */ + if ((rfont = try_font_group (realized, realized->fallback, g, num, size))) return rfont; - /* We couldn't find a font that can display all glyphs. Find one - that can display at least the first glyph. */ - for (i = 0; i < n_font_group; i++) + /* At last try all fonts. */ + MPLIST_DO (per_script, realized->per_script) { - MPLIST_DO (plist, font_groups[i]) - { - rfont = (MRealizedFont *) MPLIST_VAL (plist); - if (rfont->status < 0) - continue; - g->code = mfont__encode_char (rfont, g->c); - if (g->code != MCHAR_INVALID_CODE) - { - if (rfont->status > 0 - || mfont__open (rfont) == 0) - break; - } - } - if (! MPLIST_TAIL_P (plist)) - break; + MPLIST_DO (per_lang, MPLIST_PLIST (per_script)) + if ((rfont = try_font_group (realized, MPLIST_PLIST (per_lang), + g, num, size))) + return rfont; } - return (i < n_font_group ? rfont : NULL); + MPLIST_DO (per_charset, realized->per_charset) + if ((rfont = try_font_group (realized, MPLIST_PLIST (per_charset), + g, num, size))) + return rfont; + + return NULL; } /*** @} */ @@ -654,18 +686,16 @@ mfont__lookup_fontset (MRealizedFontset *realized, MGlyph *g, int *num, /***ja @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤òÊÖ¤¹. - ´Ø¿ô mfontset () ¤Ï̾Á° $NAME ¤ò»ý¤Ä¥Õ¥©¥ó¥È¥»¥Ã¥È¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î - ¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ $NAME ¤¬ @c NULL ¤Ê¤é¤Ð¡¢¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¥»¥Ã¥È - ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ + ´Ø¿ô mfontset () ¤Ï̾Á° $NAME ¤ò»ý¤Ä¥Õ¥©¥ó¥È¥»¥Ã¥È¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ + $NAME ¤¬ @c NULL ¤Ê¤é¤Ð¡¢¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ - $NAME ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Ä¥Õ¥©¥ó¥È¥»¥Ã¥È¤¬¤Ê¤±¤ì¤Ð¡¢¿·¤·¤¤¤â¤Î¤¬ºî¤é¤ì - ¤ë¡£¤½¤ÎºÝ¡¢m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë \<@c fontset, $NAME\> ¤È¤¤¤¦¥Ç¡¼¥¿ - ¤¬¤¢¤ì¤Ð¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ï¤½¤Î¥Ç¡¼¥¿¤Ë±è¤Ã¤Æ½é´ü²½¤µ¤ì¤ë¡£¤Ê¤±¤ì¤Ð¡¢ - ¶õ¤Î¤Þ¤Þ¤Ë¤µ¤ì¤ë¡£ + $NAME ¤È¤¤¤¦Ì¾Á°¤ò»ý¤Ä¥Õ¥©¥ó¥È¥»¥Ã¥È¤¬¤Ê¤±¤ì¤Ð¡¢¿·¤·¤¤¤â¤Î¤¬ºî¤é¤ì¤ë¡£¤½¤ÎºÝ¡¢ + m17n ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë \<@c fontset, $NAME\> + ¤È¤¤¤¦¥Ç¡¼¥¿¤¬¤¢¤ì¤Ð¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ï¤½¤Î¥Ç¡¼¥¿¤Ë±è¤Ã¤Æ½é´ü²½¤µ¤ì¤ë¡£ + ¤Ê¤±¤ì¤Ð¡¢¶õ¤Î¤Þ¤Þ¤Ë¤µ¤ì¤ë¡£ - ¥Þ¥¯¥í M17N_INIT () ¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥©¥ó¥È¥»¥Ã¥È¤òºî¤ë¡£¥¢¥×¥ê¥±¡¼ - ¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï mframe () ¤ò½é¤á¤Æ¸Æ¤Ö¤Þ¤Ç¤Ï¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È - ¥»¥Ã¥È¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ + ¥Þ¥¯¥í M17N_INIT () ¤Ï¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥©¥ó¥È¥»¥Ã¥È¤òºî¤ë¡£¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥°¥é¥à¤Ï + mframe () ¤ò½é¤á¤Æ¸Æ¤Ö¤Þ¤Ç¤Î´Ö¤Ï¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È¥»¥Ã¥È¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ @return ¤³¤Î´Ø¿ô¤Ï¸«¤Ä¤«¤Ã¤¿¡¢¤¢¤ë¤¤¤Ïºî¤Ã¤¿¥Õ¥©¥ó¥È¥»¥Ã¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£ @@ -693,6 +723,7 @@ mfontset (char *name) fontset->per_script = mplist (); fontset->per_charset = mplist (); fontset->fallback = mplist (); + fontset->font_spec_list = mplist (); } mplist_put (fontset_list, sym, fontset); } @@ -729,9 +760,9 @@ mfontset_name (MFontset *fontset) /***ja @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤Î¥³¥Ô¡¼¤òºî¤ë. - ´Ø¿ô mfontset_copy () ¤Ï¥Õ¥©¥ó¥È¥»¥Ã¥È $FONTSET ¤Î¥³¥Ô¡¼¤òºî¤Ã¤Æ¡¢ - ̾Á° $NAME ¤òÍ¿¤¨¡¢¤½¤Î¥³¥Ô¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£$NAME ¤Ï´û¸¤Î - ¥Õ¥©¥ó¥È¥»¥Ã¥È¤Î̾Á°¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤½¤Î¾ì¹ç¤Ë¤Ï¥³¥Ô¡¼¤òºî¤é¤º + ´Ø¿ô mfontset_copy () ¤Ï¥Õ¥©¥ó¥È¥»¥Ã¥È $FONTSET ¤Î¥³¥Ô¡¼¤òºî¤Ã¤Æ¡¢Ì¾Á° + $NAME ¤òÍ¿¤¨¡¢¤½¤Î¥³¥Ô¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤¹¡£$NAME + ¤Ï´û¸¤Î¥Õ¥©¥ó¥È¥»¥Ã¥È¤Î̾Á°¤Ç¤¢¤Ã¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤½¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤Ï¥³¥Ô¡¼¤òºî¤é¤º¤Ë NULL ¤òÊÖ¤¹¡£ */ MFontset * @@ -746,6 +777,9 @@ mfontset_copy (MFontset *fontset, char *name) M17N_OBJECT (copy, free_fontset, MERROR_FONTSET); copy->name = sym; + if (fontset->mdb) + load_fontset_contents (fontset); + if (fontset->per_script) { copy->per_script = mplist (); @@ -813,10 +847,10 @@ mfontset_copy (MFontset *fontset, char *name) only available font for the associated item; all the other fonts are removed from the group. - If $LAYOUTER_NAME is not @c Mnil, it must be a symbol - representing a @ref flt. In that case, if $FONT is selected for - drawing an M-text, that font layout table is used to generate a - glyph code sequence from a character sequence. + If $LAYOUTER_NAME is not @c Mnil, it must be a symbol representing + a @ref flt (font layout table). In that case, if $FONT is + selected for drawing an M-text, that font layout table is used to + generate a glyph code sequence from a character sequence. @return If the operation was successful, mfontset_modify_entry () returns 0. @@ -826,43 +860,38 @@ mfontset_copy (MFontset *fontset, char *name) /***ja @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤ÎÆâÍƤòÊѹ¹¤¹¤ë. - ´Ø¿ô mfontset_modify_entry () ¤Ï¡¢$LANGUAGE ¤È $SCRIPT ¤ÎÁȤ߹ç¤ï - ¤»¤Þ¤¿¤Ï $CHARSET ¤ËÂФ·¤Æ $FONT ¤Î¥³¥Ô¡¼¤ò»È¤¦¤è¤¦¤Ë¡¢¥Õ¥©¥ó¥È¥»¥Ã - ¥È $FONTSET ¤òÀßÄꤹ¤ë¡£ + ´Ø¿ô mfontset_modify_entry () ¤Ï¡¢$LANGUAGE ¤È $SCRIPT ¤ÎÁȤ߹ç¤ï¤»¡¢¤Þ¤¿¤Ï + $CHARSET ¤ËÂФ·¤Æ $FONT ¤Î¥³¥Ô¡¼¤ò»È¤¦¤è¤¦¤Ë¡¢¥Õ¥©¥ó¥È¥»¥Ã¥È $FONTSET ¤òÀßÄꤹ¤ë¡£ - ¥Õ¥©¥ó¥È¥»¥Ã¥È¤Î³Æ¥Õ¥©¥ó¥È¤Ï¡¢ÆÃÄê¤Î¥¹¥¯¥ê¥×¥È¤È¸À¸ì¤Î¥Ú¥¢¡¢ÆÃÄê¤Î - ʸ»ú¥»¥Ã¥È¡¢¥·¥ó¥Ü¥ë @c Mnil ¤Î¤¤¤º¤ì¤«¤È´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¡£Æ±¤¸ - ¤â¤Î¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥©¥ó¥È¤Ï¥°¥ë¡¼¥×¤ò¹½À®¤¹¤ë¡£ + ¥Õ¥©¥ó¥È¥»¥Ã¥ÈÃæ¤Î³Æ¥Õ¥©¥ó¥È¤Ï¡¢ÆÃÄê¤Î¥¹¥¯¥ê¥×¥È¤È¸À¸ì¤Î¥Ú¥¢¡¢ÆÃÄê¤Îʸ»ú¥»¥Ã¥È¡¢¥·¥ó¥Ü¥ë + @c Mnil ¤Î¤¤¤º¤ì¤«¤È´ØÏ¢ÉÕ¤±¤é¤ì¤Æ¤¤¤ë¡£Æ±¤¸¤â¤Î¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥Õ¥©¥ó¥È¤Ï¥°¥ë¡¼¥×¤ò¹½À®¤¹¤ë¡£ $SCRIPT ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢¥¹¥¯¥ê¥×¥È¤òÆÃÄꤹ¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ ¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢$LANGUAGE ¤Ï¸À¸ì¤òÆÃÄꤹ¤ë¥·¥ó¥Ü¥ë¤« @c Mnil ¤Ç¤¢¤ê¡¢$FONT ¤Ïthe $SCRIPT / $LANGUAGE ¥Ú¥¢¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£ - $CHARSET ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢Ê¸»ú¥»¥Ã¥È¥ª¥Ö¥¸¥§¥¯¥È¤òɽ¤¹¥·¥ó¥Ü¥ë - ¤Ç¤¢¤ë¡£¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï $FONT ¤Ï¤½¤Îʸ»ú¥»¥Ã¥È¤È´ØÏ¢ÉÕ¤±¤é¤ì - ¤ë¡£ + $CHARSET ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢Ê¸»ú¥»¥Ã¥È¥ª¥Ö¥¸¥§¥¯¥È¤òɽ¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ + ¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï $FONT ¤Ï¤½¤Îʸ»ú¥»¥Ã¥È¤È´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£ - $SCRIPT ¤È $CHARSET ¤ÎÁÐÊý¤¬ @c Mnil ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Ï $FONT ¤Î¥³¥Ô¡¼ - ¤¬£²¤Äºî¤é¤ì¡¢¤½¤ì¤¾¤ì $SCRIPT / $LANGUAGE ¥Ú¥¢¤Èʸ»ú¥»¥Ã¥È¤Ë´ØÏ¢ - ÉÕ¤±¤é¤ì¤ë¡£ + $SCRIPT ¤È $CHARSET ¤ÎÁÐÊý¤¬ @c Mnil ¤Ç¤Ê¤¤¾ì¹ç¤Ë¤Ï $FONT + ¤Î¥³¥Ô¡¼¤¬£²¤Äºî¤é¤ì¡¢¤½¤ì¤¾¤ì $SCRIPT / $LANGUAGE + ¥Ú¥¢¤Èʸ»ú¥»¥Ã¥È¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£ - $SCRIPT ¤È $CHARSET ¤ÎÁÐÊý¤¬ @c Mnil ¤Ê¤é¤Ð¡¢ $FONT ¤Ï @c Mnil ¤È - ´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£¤³¤Î¼ï¤Î¥Õ¥©¥ó¥È¤Ï @e fallback @e font ¤È¸Æ¤Ð¤ì¤ë¡£ + $SCRIPT ¤È $CHARSET ¤ÎÁÐÊý¤¬ @c Mnil ¤Ê¤é¤Ð¡¢ $FONT ¤Ï @c Mnil + ¤È´ØÏ¢ÉÕ¤±¤é¤ì¤ë¡£¤³¤Î¼ï¤Î¥Õ¥©¥ó¥È¤Ï @e fallback @e font ¤È¸Æ¤Ð¤ì¤ë¡£ - °ú¿ô $HOW ¤Ï $FONT ¤ÎÍ¥ÀèÅÙ¤ò»ØÄꤹ¤ë¡£$HOW ¤¬Àµ¤Ê¤é¤Ð¡¢$FONT ¤ÏƱ - ¤¸¤â¤Î¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥°¥ë¡¼¥×Ãæ¤ÇºÇ¹â¤ÎÍ¥ÀèÅÙ¤ò»ý¤Ä¡£$HOW ¤¬Éé¤Ê - ¤é¤Ð¡¢ºÇÄã¤ÎÍ¥ÀèÅÙ¤ò»ý¤Ä¡£$HOW ¤¬ 0 ¤Ê¤é¤Ð¡¢$FONT ¤Ï´ØÏ¢ÉÕ¤±¤é¤ì¤¿ - ¤â¤Î¤ËÂФ¹¤ëÍ£°ì¤ÎÍøÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤È¤Ê¤ê¡¢Â¾¤Î¥Õ¥©¥ó¥È¤Ï¥°¥ë¡¼¥× - ¤«¤é¼è¤ê½ü¤«¤ì¤ë¡£ + °ú¿ô $HOW ¤Ï $FONT ¤ÎÍ¥ÀèÅÙ¤ò»ØÄꤹ¤ë¡£$HOW ¤¬Àµ¤Ê¤é¤Ð¡¢$FONT + ¤ÏƱ¤¸¤â¤Î¤È´ØÏ¢ÉÕ¤±¤é¤ì¤¿¥°¥ë¡¼¥×Ãæ¤ÇºÇ¹â¤ÎÍ¥ÀèÅÙ¤ò»ý¤Ä¡£$HOW + ¤¬Éé¤Ê¤é¤Ð¡¢ºÇÄã¤ÎÍ¥ÀèÅÙ¤ò»ý¤Ä¡£$HOW ¤¬ 0 ¤Ê¤é¤Ð¡¢$FONT + ¤Ï´ØÏ¢ÉÕ¤±¤é¤ì¤¿¤â¤Î¤ËÂФ¹¤ëÍ£°ì¤ÎÍøÍѲÄǽ¤Ê¥Õ¥©¥ó¥È¤È¤Ê¤ê¡¢Â¾¤Î¥Õ¥©¥ó¥È¤Ï¥°¥ë¡¼¥×¤«¤é¼è¤ê½ü¤«¤ì¤ë¡£ - $LAYOUTER_NAME ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢@ref flt ¤ò¼¨¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ - ¥·¥ó¥Ü¥ë¤Ç¤¢¤ì¤Ð¡¢$FONT ¤òÍѤ¤¤ÆM-text ¤òɽ¼¨¤¹¤ëºÝ¤Ë¤Ï¡¢¤½¤Î FONT - LAYOUT TABLE ¤ò»È¤Ã¤Æʸ»úÎ󤫤饰¥ê¥Õ¥³¡¼¥ÉÎó¤òÀ¸À®¤¹¤ë¡£ + $LAYOUTER_NAME ¤Ï @c Mnil ¤Ç¤¢¤ë¤«¡¢@ref flt + ¡Ê¥Õ¥©¥ó¥È¥ì¥¤¥¢¥¦¥È¥Æ¡¼¥Ö¥ë¡Ë¤ò¼¨¤¹¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£¥·¥ó¥Ü¥ë¤Ç¤¢¤ì¤Ð¡¢$FONT ¤òÍѤ¤¤Æ + M-text ¤òɽ¼¨¤¹¤ëºÝ¤Ë¤Ï¡¢¤½¤Î¥Õ¥©¥ó¥È¥ì¥¤¥¢¥¦¥È¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤Æʸ»úÎ󤫤饰¥ê¥Õ¥³¡¼¥ÉÎó¤òÀ¸À®¤¹¤ë¡£ @return ½èÍý¤¬À®¸ù¤·¤¿¤È¤­¡¢mfontset_modify_entry () ¤Ï 0 ¤òÊÖ¤¹¡£ - ¼ºÇÔ¤·¤¿¤È¤­¤Ï -1 ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code ¤Ë¥¨¥é¡¼¥³¡¼¥É¤ò - ÀßÄꤹ¤ë¡£ */ + ¼ºÇÔ¤·¤¿¤È¤­¤Ï -1 ¤òÊÖ¤·¡¢³°ÉôÊÑ¿ô #merror_code ¤Ë¥¨¥é¡¼¥³¡¼¥É¤òÀßÄꤹ¤ë¡£ */ /*** @errors @@ -928,9 +957,9 @@ mfontset_modify_entry (MFontset *fontset, layouter_name = Mt; for (i--; i >= 0; i--) { - if (how == -1) + if (how == 1) mplist_push (plist[i], layouter_name, font); - else if (how == 1) + else if (how == -1) mplist_add (plist[i], layouter_name, font); else { @@ -955,37 +984,78 @@ mfontset_modify_entry (MFontset *fontset, If $SCRIPT is @c Mt, keys of the returned plist are script name symbols for which some fonts are specified and values are NULL. - If $SCIRPT is a script symbol, the returned plist is decided by - $LANGUAGE. + If $SCRIPT is a script name symbol, the returned plist is decided + by $LANGUAGE. + + @li If $LANGUAGE is @c Mt, keys of the plist are language name + symbols for which some fonts are specified and values are NULL. A + key may be @c Mt which means some fallback fonts are specified for + the script. - If $LANGUAGE is @c Mt, keys of the plist are language name symbols - for which some fonts are specified and values are NULL. A key may - be @c Mt which means some fallback fonts are specified for the - script. + @li If $LANGUAGE is a language name symbol, the plist is a @c + FONT-GROUP for the specified script and language. @c FONT-GROUP + is a plist whose keys are FLT (FontLayoutTable) name symbols (@c + Mt if no FLT is associated with the font) and values are pointers + to #MFont. - If $LANGUAGE is a language name symbol, the plist is a @c - FONT-GROUP for the specified script and langauge. - - If $LANGAUGE is @c Mt, the plist is fallback @c FONT-GROUP for the - script. + @li If $LANGUAGE is @c Mnil, the plist is fallback @c FONT-GROUP + for the script. If $SCRIPT is @c Mnil, the returned plist is decided as below. - If $CHARSET is @c Mt, keys of the returned plist are charset name + @li If $CHARSET is @c Mt, keys of the returned plist are charset name symbols for which some fonts are specified and values are NULL. - If $CHARSET is a charset symbol, the plist is a @c FONT-GROUP for + @li If $CHARSET is a charset name symbol, the plist is a @c FONT-GROUP for the charset. - If $CHARSET is @c Mnil, the plist is a fallback @c FONT-GROUP. - - @c FONT-GROUP is a plist whose keys are FLT name symbols (@c Mt if - no FLT is associated with the font) and values are pointers to - #MFont. + @li If $CHARSET is @c Mnil, the plist is a fallback @c FONT-GROUP. @return It returns a plist describing the contents of a fontset. The plist should be freed by m17n_object_unref (). */ +/***ja + @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤ò¸¡º÷¤¹¤ë. + + ´Ø¿ô mfontset_lookup () ¤Ï $FONTSET ¤ò¸¡º÷¤·¡¢$FONTSET + ¤ÎÆâÍƤΤ¦¤Á»ØÄꤷ¤¿¥¹¥¯¥ê¥×¥È¡¢¸À¸ì¡¢Ê¸»ú¥»¥Ã¥È¤ËÂбþ¤¹¤ëÉôʬ¤òɽ¤¹ + plist ¤òÊÖ¤¹¡£ + + $SCRIPT ¤¬ @c Mt ¤Ê¤é¤Ð¡¢ÊÖ¤¹ plist + ¤Î¥­¡¼¤Ï¥Õ¥©¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È̾¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢ÃÍ¤Ï + NULL ¤Ç¤¢¤ë¡£ + + $SCRIPT ¤¬¥¹¥¯¥ê¥×¥È̾¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ì¤Ð¡¢ÊÖ¤¹ + plist ¤Ï $LANGUAGE¤Ë¤è¤Ã¤ÆÄê¤Þ¤ë¡£ + + @li $LANGUAGE ¤¬ @c Mt ¤Ê¤é¤Ð¡¢plist + ¤Î¥­¡¼¤Ï¥Õ¥©¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¸À¸ì̾¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢ÃÍ¤Ï + NULL ¤Ç¤¢¤ë¡£¥­¡¼¤Ï @c Mt + ¤Ç¤¢¤ë¤³¤È¤â¤¢¤ê¡¢¤½¤Î¾ì¹ç¤½¤Î¥¹¥¯¥ê¥×¥È¤Ë¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯¥Õ¥©¥ó¥È¤¬¤¢¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£ + + @li $LANGUAGE ¤¬¸À¸ì̾¤Î¥·¥ó¥Ü¥ë¤Ê¤é¤Ð¡¢plist ¤Ï»ØÄê¤Î¥¹¥¯¥ê¥×¥È¤È¸À¸ì¤ËÂФ¹¤ë + @c FONT-GROUP ¤Ç¤¢¤ë¡£@c FONT-GROUP ¤È¤Ï¡¢¥­¡¼¤¬ FLT + (FontLayoutTable) ̾¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢Ãͤ¬ #MFont + ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¤è¤¦¤Ê plist ¤Ç¤¢¤ë¡£¤¿¤À¤·¥Õ¥©¥ó¥È¤Ë FLT + ¤¬ÂбþÉÕ¤±¤é¤ì¤Æ¤¤¤Ê¤¤»þ¤Ë¤Ï¡¢¥­¡¼¤Ï @c Mt ¤Ë¤Ê¤ë¡£ + + @li $LANGUAGE ¤¬ @c Mnil ¤Ê¤é¤Ð¡¢plist ¤Ï¤½¤Î¥¹¥¯¥ê¥×¥ÈÍѤΥե©¡¼¥ë¥Ð¥Ã¥¯ + @c FONT-GROUP ¤Ç¤¢¤ë¡£ + + $SCRIPT ¤¬ @c Mnil ¤Ê¤é¤Ð¡¢ÊÖ¤¹ plist ¤Ï°Ê²¼¤Î¤è¤¦¤ËÄê¤Þ¤ë¡£ + + @li $CHARSET ¤¬ @c Mt ¤Ê¤é¤Ð¡¢plist + ¤Î¥­¡¼¤Ï¥Õ¥©¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤ëʸ»ú¥»¥Ã¥È̾¤Î¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢ÃÍ¤Ï + NULL ¤Ç¤¢¤ë¡£ + + @li $CHARSET ¤¬Ê¸»ú¥»¥Ã¥È̾¤Î¥·¥ó¥Ü¥ë¤Ê¤é¤Ð¡¢plist ¤Ï¤½¤Îʸ»ú¥»¥Ã¥ÈÍѤΠ+ @c FONT-GROUP ¤Ç¤¢¤ë¡£ + + @li $CHARSET ¤¬ @c Mnil ¤Ê¤é¤Ð¡¢plist ¤Ï¥Õ¥©¡¼¥ë¥Ð¥Ã¥¯ @c FONT-GROUP ¤Ç¤¢¤ë¡£ + + @return + ¤³¤Î´Ø¿ô¤Ï¥Õ¥©¥ó¥È¥»¥Ã¥È¤ÎÆâÍƤòɽ¤¹ plist ¤òÊÖ¤¹¡£ + plist ¤Ï m17n_object_unref () ¤Ç²òÊü¤µ¤ì¤ë¤Ù¤­¤Ç¤¢¤ë¡£ */ MPlist * mfontset_lookup (MFontset *fontset, @@ -1061,9 +1131,8 @@ mfontset_lookup (MFontset *fontset, /***ja @brief ¥Õ¥©¥ó¥È¥»¥Ã¥È¤ò¥À¥ó¥×¤¹¤ë. - ´Ø¿ô mdebug_dump_face () ¤Ï¥Õ¥©¥ó¥È¥»¥Ã¥È $FONTSET ¤ò stderr ¤Ë¿Í - ´Ö¤Ë²ÄÆɤʷÁ¤Ç°õºþ¤¹¤ë¡£ $INDENT ¤Ï£²¹ÔÌܰʹߤΥ¤¥ó¥Ç¥ó¥È¤ò»ØÄꤹ - ¤ë¡£ + ´Ø¿ô mdebug_dump_face () ¤Ï¥Õ¥©¥ó¥È¥»¥Ã¥È $FONTSET ¤ò stderr + ¤Ë¿Í´Ö¤Ë²ÄÆɤʷÁ¤Ç°õºþ¤¹¤ë¡£ $INDENT ¤Ï£²¹ÔÌܰʹߤΥ¤¥ó¥Ç¥ó¥È¤ò»ØÄꤹ¤ë¡£ @return ¤³¤Î´Ø¿ô¤Ï $FONTSET ¤òÊÖ¤¹¡£ */