+++ /dev/null
-/* File: japanese.c */
-
-
-#include "angband.h"
-
-#ifdef JP
-
-typedef struct convert_key convert_key;
-
-struct convert_key
-{
- cptr key1;
- cptr key2;
-};
-
-static const convert_key s2j_table[] = {
- {"mb","nb"}, {"mp","np"}, {"mv","nv"}, {"mm","nm"},
- {"x","ks"},
- /* sindar:¥·¥ó¥À¡¼¥ë parantir:¥Ñ¥é¥ó¥Æ¥£¥¢ feanor:¥Õ¥§¥¢¥Î¡¼¥ë */
- {"ar$","a-ru$"}, {"ir$","ia$"}, {"or$","o-ru$"},
- {"ra","¥é"}, {"ri","¥ê"}, {"ru","¥ë"}, {"re","¥ì"}, {"ro","¥í"},
- {"ir","ia"}, {"ur","ua"}, {"er","ea"}, {"ar","a¥ë"},
- {"sha","¥·¥ã"}, {"shi","¥·"}, {"shu","¥·¥å"}, {"she","¥·¥§"}, {"sho","¥·¥ç"},
- {"tha","¥µ"}, {"thi","¥·"}, {"thu","¥¹"}, {"the","¥»"}, {"tho","¥½"},
- {"cha","¥Ï"}, {"chi","¥Ò"}, {"chu","¥Õ"}, {"che","¥Ø"}, {"cho","¥Û"},
- {"dha","¥¶"}, {"dhi","¥¸"}, {"dhu","¥º"}, {"dhe","¥¼"}, {"dho","¥¾"},
- {"ba","¥Ð"}, {"bi","¥Ó"}, {"bu","¥Ö"}, {"be","¥Ù"}, {"bo","¥Ü"},
- {"ca","¥«"}, {"ci","¥"}, {"cu","¥¯"}, {"ce","¥±"}, {"co","¥³"},
- {"da","¥À"}, {"di","¥Ç¥£"}, {"du","¥É¥¥"}, {"de","¥Ç"}, {"do","¥É"},
- {"fa","¥Õ¥¡"}, {"fi","¥Õ¥£"}, {"fu","¥Õ"}, {"fe","¥Õ¥§"}, {"fo","¥Õ¥©"},
- {"ga","¥¬"}, {"gi","¥®"}, {"gu","¥°"}, {"ge","¥²"}, {"go","¥´"},
- {"ha","¥Ï"}, {"hi","¥Ò"}, {"hu","¥Õ"}, {"he","¥Ø"}, {"ho","¥Û"},
- {"ja","¥¸¥ã"}, {"ji","¥¸"}, {"ju","¥¸¥å"}, {"je","¥¸¥§"}, {"jo","¥¸¥ç"},
- {"ka","¥«"}, {"ki","¥"}, {"ku","¥¯"}, {"ke","¥±"}, {"ko","¥³"},
- {"la","¥é"}, {"li","¥ê"}, {"lu","¥ë"}, {"le","¥ì"}, {"lo","¥í"},
- {"ma","¥Þ"}, {"mi","¥ß"}, {"mu","¥à"}, {"me","¥á"}, {"mo","¥â"},
- {"na","¥Ê"}, {"ni","¥Ë"}, {"nu","¥Ì"}, {"ne","¥Í"}, {"no","¥Î"},
- {"pa","¥Ñ"}, {"pi","¥Ô"}, {"pu","¥×"}, {"pe","¥Ú"}, {"po","¥Ý"},
- {"qu","¥¯"},
- {"sa","¥µ"}, {"si","¥·"}, {"su","¥¹"}, {"se","¥»"}, {"so","¥½"},
- {"ta","¥¿"}, {"ti","¥Æ¥£"}, {"tu","¥È¥¥"}, {"te","¥Æ"}, {"to","¥È"},
- {"va","¥ô¥¡"}, {"vi","¥ô¥£"}, {"vu","¥ô"}, {"ve","¥ô¥§"}, {"vo","¥ô¥©"},
- {"wa","¥ï"}, {"wi","¥¦¥£"}, {"wu","¥¦"}, {"we","¥¦¥§"}, {"wo","¥¦¥©"},
- {"ya","¥ä"}, {"yu","¥æ"}, {"yo","¥è"},
- {"za","¥¶"}, {"zi","¥¸"}, {"zu","¥º"}, {"ze","¥¼"}, {"zo","¥¾"},
- {"dh","¥º"}, {"ch","¥Õ"}, {"th","¥¹"},
- {"b","¥Ö"}, {"c","¥¯"}, {"d","¥É"}, {"f","¥Õ"}, {"g","¥°"},
- {"h","¥Õ"}, {"j","¥¸¥å"}, {"k","¥¯"}, {"l","¥ë"}, {"m","¥à"},
- {"n","¥ó"}, {"p","¥×"}, {"q","¥¯"}, {"r","¥ë"}, {"s","¥¹"},
- {"t","¥È"}, {"v","¥ô"}, {"w","¥¦"}, {"y","¥¤"},
- {"a","¥¢"}, {"i","¥¤"}, {"u","¥¦"}, {"e","¥¨"}, {"o","¥ª"},
- {"-","¡¼"},
- {NULL,NULL}
-};
-
-/* ¥·¥ó¥À¥ê¥ó¤òÆüËܸì¤ÎÆɤߤËÊÑ´¹¤¹¤ë */
-void sindarin_to_kana(char *kana, const char *sindarin)
-{
- char buf[256];
- int idx;
-
- sprintf(kana, "%s$", sindarin);
- for (idx = 0; kana[idx]; idx++)
- if (isupper(kana[idx])) kana[idx] = tolower(kana[idx]);
-
- for (idx = 0; s2j_table[idx].key1 != NULL; idx++)
- {
- cptr pat1 = s2j_table[idx].key1;
- cptr pat2 = s2j_table[idx].key2;
- int len = strlen(pat1);
- char *src = kana;
- char *dest = buf;
-
- while (*src)
- {
- if (strncmp(src, pat1, len) == 0)
- {
- strcpy(dest, pat2);
- src += len;
- dest += strlen(pat2);
- }
- else
- {
- if (iskanji(*src))
- {
- *dest = *src;
- src++;
- dest++;
- }
- *dest = *src;
- src++;
- dest++;
- }
- }
-
- *dest = 0;
- strcpy(kana, buf);
- }
-
- idx = 0;
-
- while (kana[idx] != '$') idx++;
-
- kana[idx] = '\0';
-}
-
-
-/*ÆüËܸìÆ°»ì³èÍÑ (ÂǤġäÂǤäÆ,ÂǤÁ etc) */
-/* JVERB_AND: ²¥¤ë,½³¤ë > ²¥¤ê,½³¤ë */
-/* JVERB_TO: ²¥¤ë,½³¤ë > ²¥¤Ã¤Æ½³¤ë */
-/* JVERB_OR: ²¥¤ë,½³¤ë > ²¥¤Ã¤¿¤ê½³¤Ã¤¿¤ê */
-
-static const struct jverb_table_t {
- const char* from;
- const char* to[3];
-} jverb_table[] = {
- { "¤¹¤ë", {"¤·", "¤·¤Æ", "¤·¤¿"}},
- { "¤¤¤ë", {"¤¤¤Æ", "¤¤¤Æ", "¤¤¤¿"}},
-
- { "¤¨¤ë", {"¤¨", "¤¨¤Æ", "¤¨¤¿"}},
- { "¤±¤ë", {"¤±", "¤±¤Æ", "¤±¤¿"}},
- { "¤²¤ë", {"¤²", "¤¨¤Æ", "¤²¤¿"}},
- { "¤»¤ë", {"¤»", "¤»¤Æ", "¤»¤¿"}},
- { "¤¼¤ë", {"¤¼", "¤¼¤Æ", "¤¼¤¿"}},
- { "¤Æ¤ë", {"¤Æ", "¤Æ¤Ã¤Æ", "¤Æ¤Ã¤¿"}},
- { "¤Ç¤ë", {"¤Ç", "¤Ç¤Æ", "¤Ç¤¿"}},
- { "¤Í¤ë", {"¤Í", "¤Í¤Æ", "¤Í¤¿"}},
- { "¤Ø¤ë", {"¤Ø", "¤Ø¤Æ", "¤Ø¤¿"}},
- { "¤Ù¤ë", {"¤Ù", "¤Ù¤Æ", "¤Ù¤¿"}},
- { "¤á¤ë", {"¤á", "¤á¤Æ", "¤á¤¿"}},
- { "¤ì¤ë", {"¤ì", "¤ì¤Æ", "¤ì¤¿"}},
-
- { "¤¦", {"¤¤", "¤Ã¤Æ", "¤Ã¤¿"}},
- { "¤¯", {"¤", "¤¤¤Æ", "¤¤¤¿"}},
- { "¤°", {"¤®", "¤¤¤Ç", "¤¤¤À"}},
- { "¤¹", {"¤·", "¤·¤Æ", "¤·¤¿"}},
- { "¤º", {"¤¸", "¤¸¤Æ", "¤¸¤¿"}},
- { "¤Ä", {"¤Á", "¤Ã¤Æ", "¤Ã¤¿"}},
- { "¤Å", {"¤Â", "¤Ã¤Æ", "¤Ã¤¿"}},
- { "¤Ì", {"¤Ë", "¤Í¤Æ", "¤Í¤¿"}},
- { "¤Õ", {"¤Ò", "¤Ø¤Æ", "¤Ø¤¿"}},
- { "¤Ö", {"¤Ó", "¤ó¤Ç", "¤ó¤À"}},
- { "¤à", {"¤ß", "¤ó¤Ç", "¤ó¤À"}},
- { "¤ë", {"¤ê", "¤Ã¤Æ", "¤Ã¤¿"}},
- { NULL, {"¤½¤·¤Æ", "¤³¤È¤Ë¤è¤ê", "¤³¤È¤ä"}},
-};
-
-void jverb(const char *in , char *out , int flag)
-{
- const struct jverb_table_t * p;
- int in_len = strlen(in);
-
- strcpy(out, in);
-
- for (p = jverb_table; p->from; p++) {
- int from_len = strlen(p->from);
- if (strncmp(&in[in_len-from_len], p->from, from_len) == 0) {
- strcpy(&out[in_len - from_len], p->to[flag - 1]);
- break;
- }
- }
-
- if (p->from == NULL)
- strcpy(&out[in_len], p->to[flag - 1]);
-}
-
-
-/*
- * Convert SJIS string to EUC string
- */
-void sjis2euc(char *str)
-{
- int i;
- unsigned char c1, c2;
- unsigned char *tmp;
-
- int len = strlen(str);
-
- C_MAKE(tmp, len+1, byte);
-
- for (i = 0; i < len; i++)
- {
- c1 = str[i];
- if (c1 & 0x80)
- {
- i++;
- c2 = str[i];
- if (c2 >= 0x9f)
- {
- c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe0 : 0x60);
- c2 += 2;
- }
- else
- {
- c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe1 : 0x61);
- c2 += 0x60 + (c2 < 0x7f);
- }
- tmp[i - 1] = c1;
- tmp[i] = c2;
- }
- else
- tmp[i] = c1;
- }
- tmp[len] = 0;
- strcpy(str, (char *)tmp);
-
- C_KILL(tmp, len+1, byte);
-}
-
-
-/*
- * Convert EUC string to SJIS string
- */
-void euc2sjis(char *str)
-{
- int i;
- unsigned char c1, c2;
- unsigned char *tmp;
-
- int len = strlen(str);
-
- C_MAKE(tmp, len+1, byte);
-
- for (i = 0; i < len; i++)
- {
- c1 = str[i];
- if (c1 & 0x80)
- {
- i++;
- c2 = str[i];
- if (c1 % 2)
- {
- c1 = (c1 >> 1) + (c1 < 0xdf ? 0x31 : 0x71);
- c2 -= 0x60 + (c2 < 0xe0);
- }
- else
- {
- c1 = (c1 >> 1) + (c1 < 0xdf ? 0x30 : 0x70);
- c2 -= 2;
- }
-
- tmp[i - 1] = c1;
- tmp[i] = c2;
- }
- else
- tmp[i] = c1;
- }
- tmp[len] = 0;
- strcpy(str, (char *)tmp);
-
- C_KILL(tmp, len+1, byte);
-}
-
-
-/*
- * str¤ò´Ä¶¤Ë¹ç¤Ã¤¿Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤·¡¢ÊÑ´¹Á°¤Îʸ»ú¥³¡¼¥É¤òÊÖ¤¹¡£
- * str¤ÎŤµ¤ËÀ©¸Â¤Ï¤Ê¤¤¡£
- *
- * 0: Unknown
- * 1: ASCII (Never known to be ASCII in this function.)
- * 2: EUC
- * 3: SJIS
- */
-byte codeconv(char *str)
-{
- byte code = 0;
- int i;
-
- for (i = 0; str[i]; i++)
- {
- unsigned char c1;
- unsigned char c2;
-
- /* First byte */
- c1 = str[i];
-
- /* ASCII? */
- if (!(c1 & 0x80)) continue;
-
- /* Second byte */
- i++;
- c2 = str[i];
-
- if (((0xa1 <= c1 && c1 <= 0xdf) || (0xfd <= c1 && c1 <= 0xfe)) &&
- (0xa1 <= c2 && c2 <= 0xfe))
- {
- /* Only EUC is allowed */
- if (!code)
- {
- /* EUC */
- code = 2;
- }
-
- /* Broken string? */
- else if (code != 2)
- {
- /* No conversion */
- return 0;
- }
- }
-
- else if (((0x81 <= c1 && c1 <= 0x9f) &&
- ((0x40 <= c2 && c2 <= 0x7e) || (0x80 <= c2 && c2 <= 0xfc))) ||
- ((0xe0 <= c1 && c1 <= 0xfc) &&
- (0x40 <= c2 && c2 <= 0x7e)))
- {
- /* Only SJIS is allowed */
- if (!code)
- {
- /* SJIS */
- code = 3;
- }
-
- /* Broken string? */
- else if (code != 3)
- {
- /* No conversion */
- return 0;
- }
- }
- }
-
-
- switch (code)
- {
-#ifdef EUC
- case 3:
- /* SJIS -> EUC */
- sjis2euc(str);
- break;
-#endif
-
-#ifdef SJIS
- case 2:
- /* EUC -> SJIS */
- euc2sjis(str);
-
- break;
-#endif
- }
-
- /* Return kanji code */
- return code;
-}
-
-/* ʸ»úÎós¤Îx¥Ð¥¤¥ÈÌܤ¬´Á»ú¤Î1¥Ð¥¤¥ÈÌܤ«¤É¤¦¤«È½Äꤹ¤ë */
-bool iskanji2(cptr s, int x)
-{
- int i;
-
- for (i = 0; i < x; i++)
- {
- if (iskanji(s[i])) i++;
- }
- if ((x == i) && iskanji(s[x])) return TRUE;
-
- return FALSE;
-}
-
-/*!
- * @brief ʸ»úÎó¤Îʸ»ú¥³¡¼¥É¤¬ASCII¤«¤É¤¦¤«¤òȽÄꤹ¤ë
- * @param str ȽÄꤹ¤ëʸ»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿
- * @return ʸ»úÎó¤Îʸ»ú¥³¡¼¥É¤¬ASCII¤Ê¤éTRUE¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤ÐFALSE
- */
-static bool is_ascii_str(cptr str)
-{
- for (;*str; str++) {
- if (!(0x00 < *str && *str <= 0x7f))
- return FALSE;
- }
- return TRUE;
-}
-
-/*!
- * @brief ʸ»úÎó¤Îʸ»ú¥³¡¼¥É¤¬UTF-8¤«¤É¤¦¤«¤òȽÄꤹ¤ë
- * @param str ȽÄꤹ¤ëʸ»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿
- * @return ʸ»úÎó¤Îʸ»ú¥³¡¼¥É¤¬UTF-8¤Ê¤éTRUE¡¢¤½¤¦¤Ç¤Ê¤±¤ì¤ÐFALSE
- */
-static bool is_utf8_str(cptr str)
-{
- const unsigned char* p;
- for (p = (const unsigned char*)str; *p; p++) {
- int subseq_num = 0;
- if (0x00 < *p && *p <= 0x7f) continue;
-
- if ((*p & 0xe0) == 0xc0) subseq_num = 1;
- if ((*p & 0xf0) == 0xe0) subseq_num = 2;
- if ((*p & 0xf8) == 0xf0) subseq_num = 3;
-
- if (subseq_num == 0) return FALSE;
- while (subseq_num--) {
- p++;
- if (!*p || (*p & 0xc0) != 0x80) return FALSE;
- }
- }
- return TRUE;
-}
-
-#if defined(EUC)
-#include <iconv.h>
-#elif defined(SJIS) && defined(WINDOWS)
-#include <Windows.h>
-#endif
-/*!
- * @brief ʸ»ú¥³¡¼¥É¤¬UTF-8¤Îʸ»úÎó¤ò¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë
- * @param utf8_str ÊÑ´¹¤¹¤ëUTF-8¤Îʸ»úÎó¤Ø¤Î¥Ý¥¤¥ó¥¿
- * @param sys_str_buffer ÊÑ´¹¤·¤¿¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤Îʸ»úÎó¤ò³ÊǼ¤¹¤ë¥Ð¥Ã¥Õ¥¡¤Ø¤Î¥Ý¥¤¥ó¥¿
- * @param sys_str_buflen ÊÑ´¹¤·¤¿¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤Îʸ»úÎó¤ò³ÊǼ¤¹¤ë¥Ð¥Ã¥Õ¥¡¤ÎŤµ
- * @return ÊÑ´¹¤ËÀ®¸ù¤·¤¿¾ì¹çTRUE¡¢¼ºÇÔ¤·¤¿¾ì¹çFALSE¤òÊÖ¤¹
- */
-static bool utf8_to_sys(char* utf8_str, char* sys_str_buffer, size_t sys_str_buflen)
-{
-#if defined(EUC)
-
- iconv_t cd = iconv_open("EUC-JP", "UTF-8");
- size_t utf8_len = strlen(utf8_str) + 1; /* include termination character */
- char *from = utf8_str;
- int ret = iconv(cd, &from, &utf8_len, &sys_str_buffer, &sys_str_buflen);
- iconv_close(cd);
- return (ret >= 0);
-
-#elif defined(SJIS) && defined(WINDOWS)
-
- LPWSTR utf16buf;
- int input_len = strlen(utf8_str) + 1; /* include termination character */
-
- C_MAKE(utf16buf, input_len, WCHAR);
-
- /* UTF-8 -> UTF-16 */
- if (MultiByteToWideChar( CP_UTF8, 0, utf8_str, input_len, utf16buf, input_len) == 0) {
- C_KILL(utf16buf, input_len, WCHAR);
- return FALSE;
- }
-
- /* UTF-8 -> SJIS(CP932) */
- if (WideCharToMultiByte( CP_ACP, 0, utf16buf, -1, sys_str_buffer, sys_str_buflen, NULL, NULL ) == 0) {
- C_KILL(utf16buf, input_len, WCHAR);
- return FALSE;
- }
-
- C_KILL(utf16buf, input_len, WCHAR);
- return TRUE;
-
-#endif
-}
-
-/*!
- * @brief ¼õ¤±¼è¤Ã¤¿Ê¸»úÎó¤Îʸ»ú¥³¡¼¥É¤ò¿äÄꤷ¡¢¥·¥¹¥Æ¥à¤Îʸ»ú¥³¡¼¥É¤ØÊÑ´¹¤¹¤ë
- * @param strbuf ÊÑ´¹¤¹¤ëʸ»úÎó¤ò³ÊǼ¤·¤¿¥Ð¥Ã¥Õ¥¡¤Ø¤Î¥Ý¥¤¥ó¥¿¡£
- * ¥Ð¥Ã¥Õ¥¡¤ÏÊÑ´¹¤·¤¿Ê¸»úÎó¤Ç¾å½ñ¤¤µ¤ì¤ë¡£
- * UTF-8¤«¤éSJIS¤â¤·¤¯¤ÏEUC¤Ø¤ÎÊÑ´¹¤òÁÛÄꤷ¤Æ¤¤¤ë¤Î¤Ç¥Ð¥Ã¥Õ¥¡¤ÎŤµ¤¬Â¤ê¤Ê¤¯¤Ê¤ë¤³¤È¤Ï¤Ê¤¤¡£
- * @param buflen ¥Ð¥Ã¥Õ¥¡¤ÎŤµ¡£
- * @return ¤Ê¤·
- */
-void guess_convert_to_system_encoding(char* strbuf, int buflen)
-{
- if (is_ascii_str(strbuf)) return;
-
- if (is_utf8_str(strbuf)) {
- char* work;
- C_MAKE(work, buflen, char);
- my_strcpy(work, strbuf, buflen);
- if (!utf8_to_sys(work, strbuf, buflen)) {
- msg_print("·Ù¹ð:ʸ»ú¥³¡¼¥É¤ÎÊÑ´¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿");
- msg_print(NULL);
- }
- C_KILL(work, buflen, char);
- }
-}
-
-#endif /* JP */