+/*=*/
+
+/***en
+ @brief Lookup a fontset.
+
+ The mfontset_lookup () function lookups $FONTSET and returns a
+ plist that describes the contents of $FONTSET corresponding to the
+ specified script, language, and charset.
+
+ 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 $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.
+
+ @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.
+
+ @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.
+
+ @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.
+
+ @li If $CHARSET is a charset name symbol, the plist is a @c FONT-GROUP for
+ the charset.
+
+ @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,
+ MSymbol script, MSymbol language, MSymbol charset)
+{
+ MPlist *plist = mplist (), *pl, *p;
+
+ if (fontset->mdb)
+ load_fontset_contents (fontset);
+ if (script == Mt)
+ {
+ if (! fontset->per_script)
+ return plist;
+ p = plist;
+ MPLIST_DO (pl, fontset->per_script)
+ p = mplist_add (p, MPLIST_KEY (pl), NULL);
+ return plist;
+ }
+ if (script != Mnil)
+ {
+ pl = get_per_script (fontset, script);
+ if (MPLIST_TAIL_P (pl))
+ return plist;
+ if (language == Mt)
+ {
+ p = plist;
+ MPLIST_DO (pl, pl)
+ p = mplist_add (p, MPLIST_KEY (pl), NULL);
+ return plist;
+ }
+ if (language == Mnil)
+ language = Mt;
+ pl = mplist_get (pl, language);
+ }
+ else if (charset != Mnil)
+ {
+ if (! fontset->per_charset)
+ return plist;
+ if (charset == Mt)
+ {
+ p = plist;
+ MPLIST_DO (pl, fontset->per_charset)
+ p = mplist_add (p, MPLIST_KEY (pl), NULL);
+ return plist;
+ }
+ pl = mplist_get (fontset->per_charset, charset);
+ }
+ else
+ pl = fontset->fallback;
+ if (! pl)
+ return plist;
+ return mplist_copy (pl);
+}
+
+