+
+MSymbol
+mscript__otf_tag (MSymbol script)
+{
+ MPlist *plist = mscript__info (script);
+
+ if (plist /* script name */
+ && (plist = MPLIST_NEXT (plist)) /* language list */
+ && ! MPLIST_TAIL_P (plist)
+ && (plist = MPLIST_NEXT (plist)) /* char list */
+ && ! MPLIST_TAIL_P (plist)
+ && (plist = MPLIST_NEXT (plist)) /* otf tag */
+ && MPLIST_SYMBOL_P (plist))
+ return MPLIST_SYMBOL (plist);
+ return NULL;
+}
+
+MSymbol
+mscript__from_otf_tag (MSymbol otf_tag)
+{
+ MPlist *plist;
+ /* As it is expected that this function is called in a sequence with
+ the same argument, we use a cache. */
+ static MSymbol last_otf_tag, script;
+
+ if (! script_list)
+ {
+ last_otf_tag = script = Mnil;
+ if (init_script_list () < 0)
+ return Mnil;
+ }
+ if (otf_tag == last_otf_tag)
+ return script;
+ last_otf_tag = otf_tag;
+ script = Mnil;
+ MPLIST_DO (plist, script_list)
+ {
+ MPlist *pl = MPLIST_PLIST (plist), *p;
+
+ if (pl /* script name */
+ && (p = MPLIST_NEXT (pl)) /* language tag */
+ && ! MPLIST_TAIL_P (p)
+ && (p = MPLIST_NEXT (p)) /* char list */
+ && ! MPLIST_TAIL_P (p)
+ && (p = MPLIST_NEXT (p)) /* otf tag */
+ && ! MPLIST_TAIL_P (p))
+ {
+ if (MPLIST_SYMBOL_P (p))
+ {
+ if (otf_tag == MPLIST_SYMBOL (p))
+ return MPLIST_SYMBOL (pl);
+ }
+ else if (MPLIST_PLIST (p))
+ {
+ MPlist *p0;
+
+ MPLIST_DO (p0, MPLIST_PLIST (p))
+ if (MPLIST_SYMBOL_P (p0) && otf_tag == MPLIST_SYMBOL (p0))
+ return MPLIST_SYMBOL (pl);
+ }
+ }
+ }
+ return script;
+}
+
+#endif /* !FOR_DOXYGEN || DOXYGEN_INTERNAL_MODULE */
+\f
+
+/* External API */
+
+MSymbol Miso639_1, Miso639_2;
+
+/*=*/
+
+/***en
+ @brief List 3-letter language codes.
+
+ The mlanguage_list () funciton returns a well-formed plist whose
+ keys are #Msymbol and values are symbols whose names are ISO639-2
+ 3-letter language codes.
+
+ @return
+ This function returns a plist. The caller should free it by
+ m17n_object_unref ().
+
+ @seealso
+ mscript_list (). */
+
+/***ja
+ @brief 3ʸ»ú¸À¸ì¥³¡¼¥É¤ò¥ê¥¹¥È¤¹¤ë.
+
+ ´Ø¿ô mlanguage_list () ¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼
+ ¤Ï #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃÍ¤Ï ISO639-2 ¤ËÄê¤á¤é¤ì¤¿3ʸ»ú¸À¸ì¥³¡¼
+ ¥É¤ò̾Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£
+
+ @return
+ ¤³¤Î´Ø¿ô¤¬ÊÖ¤¹ plist ¤Ï¡¢¸Æ¤Ó½Ð¤·Â¦¤¬ m17n_object_unref () ¤ò»È¤Ã
+ ¤Æ²òÊü¤¹¤ëɬÍפ¬¤¢¤ë¡£
+
+ @seealso
+ mscript_list (). */
+
+MPlist *
+mlanguage_list (void)
+{
+ MPlist *plist, *pl, *p, *p0;
+
+ if (! language_list
+ && init_language_list () < 0)
+ return NULL;
+ plist = pl = mplist ();
+ MPLIST_DO (p, language_list)
+ {
+ p0 = MPLIST_PLIST (p);
+ pl = mplist_add (pl, Msymbol, MPLIST_VAL (p0));
+ }
+ return plist;
+}
+
+/*=*/
+
+/***en
+ @brief Get a language code.
+
+ The mlanguage_code () function returns a symbol whose name is the
+ ISO639 language code of $LANGUAGE. $LANGUAGE is a symbol whose
+ name is an ISO639-2 3-letter language code, an ISO639-1 2-letter
+ language codes, or an English word.
+
+ $LEN specifies the type of the returned language code. If it is
+ 3, an ISO639-2 3-letter language code is returned. If it is 2, an
+ ISO639-1 2-letter language code is returned when defined;
+ otherwise #Mnil is returned. If it is 0, a 2-letter code is
+ returned when defined; otherwise a 3-letter code is returned.
+
+ @return
+ If the information is available, this function returns a non-#Mnil
+ symbol. Otherwise, it returns #Mnil.
+
+ @seealso
+ mlanguage_name_list (), mlanguage_text (). */
+
+/***ja
+ @brief ¸À¸ì¥³¡¼¥É¤òÆÀ¤ë.
+
+ ´Ø¿ô mlanguage_code () ¤Ï¡¢$LANGUAGE ¤ËÂбþ¤·¤¿ ISO-639 ¸À¸ì¥³¡¼¥É
+ ¤¬Ì¾Á°¤Ç¤¢¤ë¤è¤¦¤Ê¥·¥ó¥Ü¥ë¤òÊÖ¤¹¡£$LANGUAGE ¤Ï¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢¤½¤Î
+ ̾Á°¤Ï¡¢ISO639-2 3ʸ»ú¸À¸ì¥³¡¼¥É¡¢ISO639-1 2ʸ»ú¸À¸ì¥³¡¼¥É¡¢±Ñ¸ì̾¡¢
+ ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
+
+ $LEN ¤ÏÊÖ¤µ¤ì¤ë¸À¸ì¥³¡¼¥É¤Î¼ïÎà¤ò·èÄꤹ¤ë¡£$LEN ¤¬3¤Î¾ì¹ç¤Ï
+ ISO639-2 3ʸ»ú¸À¸ì¥³¡¼¥É¤¬ÊÖ¤µ¤ì¤ë¡£2¤Î¾ì¹ç¤Ï¡¢¤â¤·ÄêµÁ¤µ¤ì¤Æ¤¤¤ì
+ ¤Ð ISO639-1 2ʸ»ú¸À¸ì¥³¡¼¥É¤¬¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð #Mnil ¤¬ÊÖ¤µ¤ì¤ë¡£0
+ ¤Î¾ì¹ç¤Ï¡¢¤â¤·ÄêµÁ¤µ¤ì¤Æ¤¤¤ì¤Ð2ʸ»ú¥³¡¼¥É¤¬¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤Ð3ʸ»ú¥³¡¼
+ ¥É¤¬ÊÖ¤µ¤ì¤ë¡£
+
+ @return
+ ¤â¤·¾ðÊó¤¬ÆÀ¤é¤ì¤ì¤Ð¡¢¤³¤Î´Ø¿ô¤Ï #Mnil °Ê³°¤Î¥·¥ó¥Ü¥ë¤òÊÖ¤¹¡£¤½¤¦
+ ¤Ç¤Ê¤±¤ì¤Ð #Mnil ¤òÊÖ¤¹¡£
+
+ @seealso
+ mlanguage_name (), mlanguage_text (). */
+
+MSymbol
+mlanguage_code (MSymbol language, int len)
+{
+ MPlist *plist = mlanguage__info (language);
+ MSymbol code;
+
+ if (! plist)
+ return Mnil;
+ if (! MPLIST_SYMBOL_P (plist))
+ return Mnil;
+ code = MPLIST_SYMBOL (plist);
+ if (len == 3)
+ return code;
+ plist = MPLIST_NEXT (plist);
+ return ((MPLIST_SYMBOL_P (plist) && MPLIST_SYMBOL (plist) != Mnil)
+ ? MPLIST_SYMBOL (plist)
+ : len == 0 ? code : Mnil);
+}
+
+/*=*/
+
+/***en
+ @brief Return the language names written in the specified language.
+
+ The mlanguage_name_list () function returns a plist of LANGUAGE's
+ names written in TARGET language. SCRIPT and TERRITORY, if not #Mnil,
+ specifies which script and territory to concern at first.
+
+ LANGUAGE and TARGET must be a symbol whose name is an ISO639-2
+ 3-letter language code or an ISO639-1 2-letter language codes.
+ TARGET may be #Mnil, in which case, the language of the current
+ locale is used. If locale is not set or is C, English is used.
+
+ SCRIPT and TERRITORY must be a symbol whose name is a script and
+ territory name of a locale (e.g. "TW", "SG") respectively.
+
+ @return
+ If the translation is available, this function returns a non-empty
+ plist. The first element has key #MText and the value is an
+ M-text of a translated language name. If the succeeding elements
+ also have key #MText, their values are M-texts of alternate
+ translations.
+
+ If no translation is available, @c NULL is returned.
+
+ The returned plist should not be modified nor freed.
+
+ @seealso
+ mlanguage_code (), mlanguage_text (). */
+
+MPlist *
+mlanguage_name_list (MSymbol language, MSymbol target,
+ MSymbol script, MSymbol territory)
+{
+ MPlist *plist, *pl;
+ MSymbol language2, target2;
+
+ plist = mlanguage__info (language);
+ if (! plist)
+ return NULL;
+ language = MPLIST_SYMBOL (plist);
+ language2 = MPLIST_SYMBOL (MPLIST_NEXT (plist));
+ if (target != Mnil)
+ {
+ plist = mlanguage__info (target);
+ if (! plist)
+ return NULL;
+ target = MPLIST_SYMBOL (plist);
+ target2 = MPLIST_SYMBOL (MPLIST_NEXT (plist));
+ }
+ else
+ {
+ MLocale *locale = mlocale_set (LC_MESSAGES, NULL);
+
+ if (! locale)
+ {
+ target = msymbol ("eng");
+ target2 = msymbol ("en");
+ script = territory = Mnil;
+ }
+ else
+ {
+ target = mlocale_get_prop (locale, Mlanguage);
+ plist = mlanguage__info (target);
+ if (! plist)
+ return NULL;
+ target = MPLIST_SYMBOL (plist);
+ target2 = MPLIST_SYMBOL (MPLIST_NEXT (plist));
+ script = mlocale_get_prop (locale, Mscript);
+ territory = mlocale_get_prop (locale, Mterritory);
+ }
+ }
+
+ /* Now both LANGUAGE and TARGET are 3-letter codes. */
+ if (! langname_list)
+ langname_list = mplist ();
+ plist = mplist__assq (langname_list, target);
+ if (plist)
+ plist = MPLIST_PLIST (plist);
+ else
+ plist = load_lang_name (target, target2);
+
+ /* PLIST = (TARGET (SCRIPT (TERRITORY ...) (LANG-CODE NAME ...) ...) ...) */
+ plist = MPLIST_NEXT (plist);
+ if (MPLIST_TAIL_P (plist))
+ return NULL;
+
+ MPLIST_DO (pl, plist)
+ {
+ MPlist *p = MPLIST_PLIST (pl), *p0;
+
+ if (MPLIST_SYMBOL (p) == script
+ && (territory == Mnil
+ || mplist_find_by_value (MPLIST_PLIST (MPLIST_NEXT (p)),
+ territory))
+ && (p = MPLIST_NEXT (MPLIST_NEXT (p)))
+ && ((p0 = mplist__assq (p, language))
+ || (p0 = mplist__assq (p, language2))))
+ {
+ plist = p0;
+ break;
+ }
+ }
+ if (MPLIST_TAIL_P (pl))
+ {
+ MPLIST_DO (pl, plist)
+ {
+ MPlist *p = MPLIST_NEXT (MPLIST_PLIST (pl)), *p0;
+
+ if ((territory == Mnil
+ || mplist_find_by_value (MPLIST_VAL (p), territory))
+ && (p = MPLIST_NEXT (MPLIST_NEXT (p)))
+ && ((p0 = mplist__assq (p, language))
+ || (p0 = mplist__assq (p, language2))))
+ {
+ plist = p0;
+ break;
+ }
+ }
+ if (MPLIST_TAIL_P (pl))
+ {
+ MPLIST_DO (pl, plist)
+ {
+ MPlist *p = MPLIST_NEXT (MPLIST_NEXT (MPLIST_PLIST (pl))), *p0;
+
+ if ((p0 = mplist__assq (p, language))
+ || (p0 = mplist__assq (p, language2)))
+ {
+ plist = p0;
+ break;
+ }
+ }
+ if (MPLIST_TAIL_P (pl))
+ return NULL;
+ }
+ }
+
+ plist = MPLIST_NEXT (MPLIST_PLIST (plist));
+ if (territory != Mnil)
+ {
+ MPLIST_DO (pl, MPLIST_NEXT (plist))
+ if (MPLIST_SYMBOL_P (pl) && MPLIST_SYMBOL (pl) == territory)
+ break;
+ if (! MPLIST_TAIL_P (pl)
+ && (pl = MPLIST_NEXT (pl))
+ && MPLIST_MTEXT_P (pl))
+ return pl;
+ }
+ MPLIST_DO (plist, plist)
+ if (MPLIST_MTEXT_P (plist))
+ break;
+ return (MPLIST_MTEXT_P (plist) ? plist : NULL);
+}
+
+/*=*/
+
+/***en
+ @brief Return the language name written in that language.
+
+ The mlanguage_text () function returns, in the form of M-text, the
+ language name of $LANGUAGE written in $LANGUAGE. If the
+ representative characters of the language are known, the
+ characters of the returned M-text has a text property whose key is
+ #Mtext and whose value is an M-text that contains the
+ representative characters.
+
+ @return
+ If the information is available, this function returns an M-text
+ that should not be modified nor freed. Otherwise, it returns @c
+ NULL.
+
+ @seealso
+ mlanguage_code (), mlanguage_name (). */
+
+/***ja
+ @brief Í¿¤¨¤é¤ì¤¿¸À¸ì¼«¿È¤Ç½ñ¤«¤ì¤¿¸À¸ì̾¤òÊÖ¤¹.
+
+ ´Ø¿ô mlanguage_text () ¤Ï¡¢¸À¸ì $LANGUAGE ¤Ç½ñ¤«¤ì¤¿ $LANGUAGE ¤Î
+ ̾Á°¤ò M-text ¤Î·Á¼°¤ÇÊÖ¤¹¡£¤½¤Î¸À¸ì¤ÎÂåɽŪ¤Êʸ»ú¤¬¤ï¤«¤Ã¤Æ¤¤¤ë¾ì
+ ¹ç¤Ï¡¢ÊÖ¤µ¤ì¤ë M-text ¤Î³Æʸ»ú¤Ë¡¢¥¡¼¤¬ #Mtext ¤ÇÃͤ¬¤½¤ÎÂåɽŪ¤Ê
+ ʸ»ú¤ò´Þ¤à M-text ¤Ç¤¢¤ë¤è¤¦¤Ê¥Æ¥¥¹¥È¥×¥í¥Ñ¥Æ¥£¤¬Éղ䵤ì¤ë¡£
+
+ @return
+ µá¤á¤ë¾ðÊó¤¬ÆÀ¤é¤ì¤¿¾ì¹ç¡¢¤³¤Î´Ø¿ô¤¬ÊÖ¤¹ M-text ¤òÊѹ¹¤·¤¿¤ê²òÊü¤·
+ ¤¿¤ê¤·¤Æ¤Ï¤¤¤±¤Ê¤¤¡£¾ðÊó¤¬ÆÀ¤é¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï @c NULL ¤¬ÊÖ¤µ¤ì¤ë¡£
+
+ @seealso
+ mlanguage_code (), mlanguage_name (). */
+
+MText *
+mlanguage_text (MSymbol language)
+{
+ MPlist *plist = mlanguage__info (language);
+ MText *mt;
+
+ if (! plist)
+ return NULL;
+ plist = MPLIST_NEXT (plist);
+ if (MPLIST_TAIL_P (plist))
+ return NULL;
+ plist = MPLIST_NEXT (plist);
+ if (MPLIST_TAIL_P (plist))
+ return NULL;
+ plist = MPLIST_NEXT (plist);
+ if (! MPLIST_MTEXT_P (plist))
+ return NULL;
+ mt = MPLIST_MTEXT (plist);
+ if (mtext_nchars (mt) == 0)
+ return NULL;
+ plist = MPLIST_NEXT (plist);
+ if (MPLIST_MTEXT_P (plist)
+ && ! mtext_get_prop (mt, 0, Mtext))
+ mtext_put_prop (mt, 0, mtext_nchars (mt), Mtext, MPLIST_MTEXT (plist));
+ return mt;
+}
+
+/***en
+ @brief List script names.
+
+ The mscript_list () funciton returns a well-formed plist whose
+ keys are #Msymbol and values are symbols whose names are script
+ names.
+
+ @return
+ This function returns a plist. The caller should free it by
+ m17n_object_unref ().
+
+ @seealso
+ mscript_language_list (), mlanguage_list (). */
+
+/***ja
+ @brief ¥¹¥¯¥ê¥×¥È̾¤ò¥ê¥¹¥È¤¹¤ë.
+
+ ´Ø¿ô mscript_list () ¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼
+ ¤Ï #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃͤϥ¹¥¯¥ê¥×¥È̾¤ò̾Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢
+ ¤ë¡£
+
+ @return
+ ¤³¤Î´Ø¿ô¤¬ÊÖ¤¹ plist ¤Ï¡¢¸Æ¤Ó½Ð¤·Â¦¤¬ m17n_object_unref () ¤ò»È¤Ã
+ ¤Æ²òÊü¤¹¤ëɬÍפ¬¤¢¤ë¡£
+
+ @seealso
+ mscript_language_list (), mlanguage_list (). */
+
+MPlist *
+mscript_list (void)
+{
+ MPlist *plist, *pl, *p, *p0;
+
+ if (! script_list
+ && init_script_list () < 0)
+ return NULL;
+ plist = pl = mplist ();
+ MPLIST_DO (p, script_list)
+ {
+ p0 = MPLIST_PLIST (p);
+ pl = mplist_add (pl, Msymbol, MPLIST_VAL (p0));
+ }
+ return plist;
+}
+
+/*=*/
+
+/***en
+ @brief List languages that use a specified script.
+
+ The mscript_language_list () function lists languages that use
+ $SCRIPT. $SCRIPT is a symbol whose name is the lower-cased
+ version of a script name that appears in the Unicode Character
+ Database.
+
+ @return
+
+ This function returns a well-formed plist whose keys are #Msymbol
+ and values are symbols whose names are ISO639-1 2-letter codes (or
+ ISO639-2 3-letter codes, if the former is not available). The
+ caller should not modify nor free it. If the m17n library does
+ not know about $SCRIPT, it returns @ c NULL.
+
+ @seealso
+ mscript_list (), mlanguage_list (). */
+
+/***ja
+ @brief Í¿¤¨¤é¤ì¤¿¥¹¥¯¥ê¥×¥È¤òÍѤ¤¤ë¸À¸ì¤ò¥ê¥¹¥È¤¹¤ë.
+
+ ´Ø¿ô mscript_language_list () ¤Ï¡¢$SCRIPT ¤òÍѤ¤¤ë¸À¸ì¤ò¥ê¥¹¥È¤¹¤ë¡£
+ $SCRIPT ¤Ï¥·¥ó¥Ü¥ë¤Ç¡¢¤½¤Î̾Á°¤Ï Unicode Character Database ¤Ë¼¨¤µ
+ ¤ì¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥È̾¤ò¤¹¤Ù¤Æ¾®Ê¸»ú¤Ë¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£
+
+ @return
+ ¤³¤Î´Ø¿ô¤Ï¡¢À°·Á¼° (well-formed) plist ¤òÊÖ¤¹¡£³Æ¥¡¼¤Ï
+ #Msymbol ¤Ç¤¢¤ê¡¢¸Ä¡¹¤ÎÃÍ¤Ï ISO639-1 ¤ËÄê¤á¤é¤ì¤¿2ʸ»ú¸À¸ì¥³¡¼¥É
+ (ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï ISO639-2 ¤ËÄê¤á¤é¤ì¤¿3ʸ»ú¸À¸ì¥³¡¼¥É) ¤ò̾
+ Á°¤È¤¹¤ë¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£ÊÖ¤µ¤ì¤ë plist ¤ÏÊѹ¹¤·¤¿¤ê²òÊü¤·¤¿¤ê¤·¤Æ
+ ¤Ï¤Ê¤é¤Ê¤¤¡£$SCRIPT ¤¬Ì¤ÃΤξì¹ç¤Ï @c NULL ¤¬ÊÖ¤µ¤ì¤ë¡£
+
+ @seealso
+ mscript_list (), mlanguage_list (). */
+
+
+MPlist *
+mscript_language_list (MSymbol script)
+{
+ MPlist *plist = mscript__info (script);
+
+ if (plist /* script name */
+ && (plist = MPLIST_NEXT (plist)) /* language list */
+ && MPLIST_PLIST_P (plist))
+ return MPLIST_PLIST (plist);
+ return NULL;
+}
+
+/*** @} */
+/*=*/
+/***en
+ @name Obsolete functions
+*/
+/***ja
+ @name Obsolete ¤Ê´Ø¿ô
+*/
+/*** @{ */
+
+/***en
+ @brief Get an English language name.
+
+ This function is obsolete. Use mlanguage_name_list () instead.
+
+ The mlanguage_name () function returns a symbol whose name is an
+ English name of $LANGUAGE. $LANGUAGE is a symbol whose name is an
+ ISO639-2 3-letter language code, an ISO639-1 2-letter language
+ codes, or an English word.
+
+ @return
+ If the information is available, this function returns a non-#Mnil
+ symbol. Otherwise, it returns #Mnil.
+
+ @seealso
+ mlanguage_code (), mlanguage_text (). */
+
+/***ja
+ @brief ¸À¸ì¤Î±Ñ¸ì̾¤òÆÀ¤ë.
+
+ ´Ø¿ô mlanguage_name () ¤Ï¡¢$LANGUAGE ¤Î±Ñ¸ì̾¤ò̾Á°¤È¤¹¤ë¤è¤¦¤Ê¥·
+ ¥ó¥Ü¥ë¤òÊÖ¤¹¡£$LANGUAGE ¤Ï¥·¥ó¥Ü¥ë¤Ç¤¢¤ê¡¢¤½¤Î̾Á°¤Ï¡¢ISO639-2 3ʸ
+ »ú¸À¸ì¥³¡¼¥É¡¢ISO639-1 2ʸ»ú¸À¸ì¥³¡¼¥É¡¢±Ñ¸ì̾¡¢¤Î¤¤¤º¤ì¤«¤Ç¤¢¤ë¡£
+
+ @return
+ µá¤á¤Æ¤¤¤ë¾ðÊó¤¬ÆÀ¤é¤ì¤ë¤Ê¤é¡¢¤³¤Î´Ø¿ô¤Ï #Mnil °Ê³°¤Î¥·¥ó¥Ü¥ë¤òÊÖ
+ ¤¹¡£¤½¤¦¤Ç¤Ê¤±¤ì¤Ð #Mnil ¤òÊÖ¤¹¡£
+
+ @seealso
+ mlanguage_code (), mlanguage_text (). */
+
+MSymbol
+mlanguage_name (MSymbol language)
+{
+ MPlist *plist = mlanguage__info (language);
+ MText *mt;
+ char *str;
+
+ if (! plist) /* 3-letter code */
+ return Mnil;
+ plist = MPLIST_NEXT (plist); /* 2-letter code */
+ if (MPLIST_TAIL_P (plist))
+ return Mnil;
+ plist = MPLIST_NEXT (plist); /* english name */
+ if (! MPLIST_MTEXT_P (plist))
+ return Mnil;
+ mt = MPLIST_MTEXT (plist);
+ str = alloca (mtext_nbytes (mt));
+ memcpy (str, MTEXT_DATA (mt), mtext_nbytes (mt));
+ str[0] = tolower (str[0]);
+ return msymbol__with_len (str, mtext_nbytes (mt));
+}
+
+/*=*/
+
+/*
+ Local Variables:
+ coding: euc-japan
+ End:
+*/