#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) */
#define CMPTAIL(y) strncmp(&in[l-strlen(y)],y,strlen(y))
}
}
-char* strstr_j(const char* s, const char* t)
-{
- int i, l1, l2;
-
- l1 = strlen(s);
- l2 = strlen(t);
- if (l1 >= l2) {
- for(i = 0; i <= l1 - l2; i++) {
- if(!strncmp(s + i, t, l2))
- return (char *)s + i;
- if (iskanji(*(s + i)))
- i++;
- }
- }
- return NULL;
-}
-
/*
* Convert SJIS string to EUC string
/*
- * str¤ò´Ä¶¤Ë¹ç¤Ã¤¿Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë¡£
+ * str¤ò´Ä¶¤Ë¹ç¤Ã¤¿Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤·¡¢ÊÑ´¹Á°¤Îʸ»ú¥³¡¼¥É¤òÊÖ¤¹¡£
* str¤ÎŤµ¤ËÀ©¸Â¤Ï¤Ê¤¤¡£
+ *
+ * 0: Unknown
+ * 1: ASCII (Never known to be ASCII in this function.)
+ * 2: EUC
+ * 3: SJIS
*/
-bool codeconv(char *str)
+byte codeconv(char *str)
{
+ byte code = 0;
int i;
- int kanji = 0, iseuc = 1;
- /* ´Á»ú¤¬Â¸ºß¤·¡¢¤½¤Î´Á»ú¥³¡¼¥É¤¬EUC¤«¤É¤¦¤«Ä´¤Ù¤ë¡£*/
for (i = 0; str[i]; i++)
{
- unsigned char c1 = str[i];
+ unsigned char c1;
+ unsigned char c2;
- if (c1 & 0x80) kanji = 1;
- if ( c1>=0x80 && (c1 < 0xa1 || c1 > 0xfe)) iseuc = 0;
+ /* 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;
+ }
+ }
}
-#ifdef EUC
- if (kanji && !iseuc) /* SJIS -> EUC */
+
+ switch (code)
{
+#ifdef EUC
+ case 3:
+ /* SJIS -> EUC */
sjis2euc(str);
-
- return TRUE;
- }
+ break;
#endif
#ifdef SJIS
- if (kanji && iseuc) /* EUC -> SJIS */
- {
+ case 2:
+ /* EUC -> SJIS */
euc2sjis(str);
- return TRUE;
- }
+ break;
#endif
+ }
- return FALSE;
+ /* Return kanji code */
+ return code;
}
/* ʸ»úÎós¤Îx¥Ð¥¤¥ÈÌܤ¬´Á»ú¤Î1¥Ð¥¤¥ÈÌܤ«¤É¤¦¤«È½Äꤹ¤ë */