X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fjapanese.c;h=4e0c0b1a2ddcdcedf45d899e8b73b6c92e5d30ec;hb=b3317ce27a28a6d78ffccf52460ab56d95c83e09;hp=b746e11080ebf8eb6cd1bce0a6c30b3a77d72e8a;hpb=882170201699e6f4b6df149d31e1becd3cbf0415;p=hengband%2Fhengband.git
diff --git a/src/japanese.c b/src/japanese.c
index b746e1108..4e0c0b1a2 100644
--- a/src/japanese.c
+++ b/src/japanese.c
@@ -1,5 +1,8 @@
-/* File: japanese.c */
-
+/*!
+ * @file japanese.c
+ * @brief æ¥æ¬èªå¦çé¢æ°
+ * @date 2014/07/07
+ */
#include "angband.h"
@@ -9,64 +12,70 @@ typedef struct convert_key convert_key;
struct convert_key
{
- cptr key1;
- cptr key2;
+ concptr key1;
+ concptr key2;
};
static const convert_key s2j_table[] = {
{"mb","nb"}, {"mp","np"}, {"mv","nv"}, {"mm","nm"},
{"x","ks"},
- /* sindar:¥·¥ó¥À¡¼¥ë parantir:¥Ñ¥é¥ó¥Æ¥£¥¢ feanor:¥Õ¥§¥¢¥Î¡¼¥ë */
+ /* 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","¥ª"},
- {"-","¡¼"},
+ {"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)
+/*!
+ * @brief ã·ã³ããªã³ãæ¥æ¬èªã®èªã¿ã«å¤æãã
+ * @param kana å¤æå¾ã®æ¥æ¬èªæååãã¤ã³ã¿
+ * @param sindarin å¤æåã®ã·ã³ããªã³æååãã¤ã³ã¿
+ * @return ãªã
+ * @details
+ */
+void sindarin_to_kana(char *kana, concptr 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]);
+ if (isupper(kana[idx])) kana[idx] = (char)tolower(kana[idx]);
for (idx = 0; s2j_table[idx].key1 != NULL; idx++)
{
- cptr pat1 = s2j_table[idx].key1;
- cptr pat2 = s2j_table[idx].key2;
+ concptr pat1 = s2j_table[idx].key1;
+ concptr pat2 = s2j_table[idx].key2;
int len = strlen(pat1);
char *src = kana;
char *dest = buf;
@@ -105,128 +114,77 @@ void sindarin_to_kana(char *kana, const char *sindarin)
}
-/*ÆüËܸìÆ°»ì³èÍÑ (ÂǤġäÂǤäÆ,ÂǤÁ etc) */
-
-#define CMPTAIL(y) strncmp(&in[l-(int)strlen(y)],y,strlen(y))
-
-/* ²¥¤ë,½³¤ë¡ä²¥¤ê,½³¤ë */
-void jverb1( const char *in , char *out){
-int l=strlen(in);
-strcpy(out,in);
-
-if( CMPTAIL("¤¹¤ë")==0) sprintf(&out[l-4],"¤·");else
-if( CMPTAIL("¤¤¤ë")==0) sprintf(&out[l-4],"¤¤¤Æ");else
-
-if( CMPTAIL("¤¨¤ë")==0) sprintf(&out[l-4],"¤¨");else
-if( CMPTAIL("¤±¤ë")==0) sprintf(&out[l-4],"¤±");else
-if( CMPTAIL("¤²¤ë")==0) sprintf(&out[l-4],"¤²");else
-if( CMPTAIL("¤»¤ë")==0) sprintf(&out[l-4],"¤»");else
-if( CMPTAIL("¤¼¤ë")==0) sprintf(&out[l-4],"¤¼");else
-if( CMPTAIL("¤Æ¤ë")==0) sprintf(&out[l-4],"¤Æ");else
-if( CMPTAIL("¤Ç¤ë")==0) sprintf(&out[l-4],"¤Ç");else
-if( CMPTAIL("¤Í¤ë")==0) sprintf(&out[l-4],"¤Í");else
-if( CMPTAIL("¤Ø¤ë")==0) sprintf(&out[l-4],"¤Ø");else
-if( CMPTAIL("¤Ù¤ë")==0) sprintf(&out[l-4],"¤Ù");else
-if( CMPTAIL("¤á¤ë")==0) sprintf(&out[l-4],"¤á");else
-if( CMPTAIL("¤ì¤ë")==0) sprintf(&out[l-4],"¤ì");else
-
-if( CMPTAIL("¤¦")==0) sprintf(&out[l-2],"¤¤");else
-if( CMPTAIL("¤¯")==0) sprintf(&out[l-2],"¤");else
-if( CMPTAIL("¤°")==0) sprintf(&out[l-2],"¤®");else
-if( CMPTAIL("¤¹")==0) sprintf(&out[l-2],"¤·");else
-if( CMPTAIL("¤º")==0) sprintf(&out[l-2],"¤¸");else
-if( CMPTAIL("¤Ä")==0) sprintf(&out[l-2],"¤Á");else
-if( CMPTAIL("¤Å")==0) sprintf(&out[l-2],"¤Â");else
-if( CMPTAIL("¤Ì")==0) sprintf(&out[l-2],"¤Ë");else
-if( CMPTAIL("¤Õ")==0) sprintf(&out[l-2],"¤Ò");else
-if( CMPTAIL("¤Ö")==0) sprintf(&out[l-2],"¤Ó");else
-if( CMPTAIL("¤à")==0) sprintf(&out[l-2],"¤ß");else
-if( CMPTAIL("¤ë")==0) sprintf(&out[l-2],"¤ê");else
-
- sprintf(&out[l],"¤½¤·¤Æ");}
-
-/* ²¥¤ë,½³¤ë> ²¥¤Ã¤Æ½³¤ë */
-void jverb2( const char *in , char *out){
-int l=strlen(in);
-strcpy(out,in);
-
-if( CMPTAIL("¤¹¤ë")==0) sprintf(&out[l-4],"¤·¤Æ");else
-if( CMPTAIL("¤¤¤ë")==0) sprintf(&out[l-4],"¤¤¤Æ");else
-
-if( CMPTAIL("¤¨¤ë")==0) sprintf(&out[l-4],"¤¨¤Æ");else
-if( CMPTAIL("¤±¤ë")==0) sprintf(&out[l-4],"¤±¤Æ");else
-if( CMPTAIL("¤²¤ë")==0) sprintf(&out[l-4],"¤²¤Æ");else
-if( CMPTAIL("¤»¤ë")==0) sprintf(&out[l-4],"¤»¤Æ");else
-if( CMPTAIL("¤¼¤ë")==0) sprintf(&out[l-4],"¤¼¤Æ");else
-if( CMPTAIL("¤Æ¤ë")==0) sprintf(&out[l-4],"¤Æ¤Ã¤Æ");else
-if( CMPTAIL("¤Ç¤ë")==0) sprintf(&out[l-4],"¤Ç¤Æ");else
-if( CMPTAIL("¤Í¤ë")==0) sprintf(&out[l-4],"¤Í¤Æ");else
-if( CMPTAIL("¤Ø¤ë")==0) sprintf(&out[l-4],"¤Ø¤Æ");else
-if( CMPTAIL("¤Ù¤ë")==0) sprintf(&out[l-4],"¤Ù¤Æ");else
-if( CMPTAIL("¤á¤ë")==0) sprintf(&out[l-4],"¤á¤Æ");else
-if( CMPTAIL("¤ì¤ë")==0) sprintf(&out[l-4],"¤ì¤Æ");else
-
-if( CMPTAIL("¤¦")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
-if( CMPTAIL("¤¯")==0) sprintf(&out[l-2],"¤¤¤Æ");else
-if( CMPTAIL("¤°")==0) sprintf(&out[l-2],"¤¤¤Ç");else
-if( CMPTAIL("¤¹")==0) sprintf(&out[l-2],"¤·¤Æ");else
-if( CMPTAIL("¤º")==0) sprintf(&out[l-2],"¤¸¤Æ");else
-if( CMPTAIL("¤Ä")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
-if( CMPTAIL("¤Å")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
-if( CMPTAIL("¤Ì")==0) sprintf(&out[l-2],"¤Í¤Æ");else
-if( CMPTAIL("¤Õ")==0) sprintf(&out[l-2],"¤Ø¤Æ");else
-if( CMPTAIL("¤Ö")==0) sprintf(&out[l-2],"¤ó¤Ç");else
-if( CMPTAIL("¤à")==0) sprintf(&out[l-2],"¤ó¤Ç");else
-if( CMPTAIL("¤ë")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
- sprintf(&out[l],"¤³¤È¤Ë¤è¤ê");}
-
-/* ²¥¤ë,½³¤ë > ²¥¤Ã¤¿¤ê½³¤Ã¤¿¤ê */
-void jverb3( const char *in , char *out){
-int l=strlen(in);
-strcpy(out,in);
-
-if( CMPTAIL("¤¹¤ë")==0) sprintf(&out[l-4],"¤·¤¿");else
-if( CMPTAIL("¤¤¤ë")==0) sprintf(&out[l-4],"¤¤¤¿");else
-
-if( CMPTAIL("¤¨¤ë")==0) sprintf(&out[l-4],"¤¨¤¿");else
-if( CMPTAIL("¤±¤ë")==0) sprintf(&out[l-4],"¤±¤¿");else
-if( CMPTAIL("¤²¤ë")==0) sprintf(&out[l-4],"¤²¤¿");else
-if( CMPTAIL("¤»¤ë")==0) sprintf(&out[l-4],"¤»¤¿");else
-if( CMPTAIL("¤¼¤ë")==0) sprintf(&out[l-4],"¤¼¤¿");else
-if( CMPTAIL("¤Æ¤ë")==0) sprintf(&out[l-4],"¤Æ¤Ã¤¿");else
-if( CMPTAIL("¤Ç¤ë")==0) sprintf(&out[l-4],"¤Ç¤¿");else
-if( CMPTAIL("¤Í¤ë")==0) sprintf(&out[l-4],"¤Í¤¿");else
-if( CMPTAIL("¤Ø¤ë")==0) sprintf(&out[l-4],"¤Ø¤¿");else
-if( CMPTAIL("¤Ù¤ë")==0) sprintf(&out[l-4],"¤Ù¤¿");else
-if( CMPTAIL("¤á¤ë")==0) sprintf(&out[l-4],"¤á¤¿");else
-if( CMPTAIL("¤ì¤ë")==0) sprintf(&out[l-4],"¤ì¤¿");else
-
-if( CMPTAIL("¤¦")==0) sprintf(&out[l-2],"¤Ã¤¿");else
-if( CMPTAIL("¤¯")==0) sprintf(&out[l-2],"¤¤¤¿");else
-if( CMPTAIL("¤°")==0) sprintf(&out[l-2],"¤¤¤À");else
-if( CMPTAIL("¤¹")==0) sprintf(&out[l-2],"¤·¤¿");else
-if( CMPTAIL("¤º")==0) sprintf(&out[l-2],"¤¸¤¿");else
-if( CMPTAIL("¤Ä")==0) sprintf(&out[l-2],"¤Ã¤¿");else
-if( CMPTAIL("¤Å")==0) sprintf(&out[l-2],"¤Ã¤¿");else
-if( CMPTAIL("¤Ì")==0) sprintf(&out[l-2],"¤Í¤¿");else
-if( CMPTAIL("¤Õ")==0) sprintf(&out[l-2],"¤Ø¤¿");else
-if( CMPTAIL("¤Ö")==0) sprintf(&out[l-2],"¤ó¤À");else
-if( CMPTAIL("¤à")==0) sprintf(&out[l-2],"¤ó¤À");else
-if( CMPTAIL("¤ë")==0) sprintf(&out[l-2],"¤Ã¤¿");else
- sprintf(&out[l],"¤³¤È¤ä");}
-
-
-void jverb( const char *in , char *out , int flag){
- switch (flag){
- case JVERB_AND:jverb1(in , out);break;
- case JVERB_TO :jverb2(in , out);break;
- case JVERB_OR :jverb3(in , out);break;
- }
-}
+/*! æ¥æ¬èªåè©æ´»ç¨ (æã¤ï¼æã£ã¦,æã¡ etc)
+ * JVERB_AND: æ®´ã,è¹´ã > æ®´ã,è¹´ã
+ * JVERB_TO: æ®´ã,è¹´ã > æ®´ã£ã¦è¹´ã
+ * JVERB_OR: æ®´ã,è¹´ã > æ®´ã£ããè¹´ã£ãã */
+static const struct jverb_table_t {
+ const char* from;
+ const char* to[3];
+} jverb_table[] = {
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ãã", {"ãã¦", "ãã¦", "ãã"}},
+
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ã¦ã", {"ã¦", "ã¦ã£ã¦", "ã¦ã£ã"}},
+ { "ã§ã", {"ã§", "ã§ã¦", "ã§ã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ã¸ã", {"ã¸", "ã¸ã¦", "ã¸ã"}},
+ { "ã¹ã", {"ã¹", "ã¹ã¦", "ã¹ã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+ { "ãã", {"ã", "ãã¦", "ãã"}},
+
+ { "ã", {"ã", "ã£ã¦", "ã£ã"}},
+ { "ã", {"ã", "ãã¦", "ãã"}},
+ { "ã", {"ã", "ãã§", "ãã "}},
+ { "ã", {"ã", "ãã¦", "ãã"}},
+ { "ã", {"ã", "ãã¦", "ãã"}},
+ { "ã¤", {"ã¡", "ã£ã¦", "ã£ã"}},
+ { "ã¥", {"ã¢", "ã£ã¦", "ã£ã"}},
+ { "ã¬", {"ã«", "ãã¦", "ãã"}},
+ { "ãµ", {"ã²", "ã¸ã¦", "ã¸ã"}},
+ { "ã¶", {"ã³", "ãã§", "ãã "}},
+ { "ã", {"ã¿", "ãã§", "ãã "}},
+ { "ã", {"ã", "ã£ã¦", "ã£ã"}},
+ { NULL, {"ããã¦", "ãã¨ã«ãã", "ãã¨ã"}},
+};
+
+/*!
+ * @brief jverb_table_tã«å¾ã£ã¦åè©ãæ´»ç¨ãã
+ * @param in å¤æå
æååãã¤ã³ã¿
+ * @param out å¤æå
æååãã¤ã³ã¿
+ * @param flag å¤æ種é¡ãæå®(JVERB_AND/JVERB_TO/JVERB_OR)
+ * @return ãªã
+ * @details
+ */
+void jverb(concptr in, char *out, int flag)
+{
+ const struct jverb_table_t * p;
+ int in_len = strlen(in);
+ strcpy(out, in);
-/*
- * Convert SJIS string to EUC string
+ 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]);
+}
+
+/*!
+ * @brief æåã³ã¼ããSJISããEUCã«å¤æãã / Convert SJIS string to EUC string
+ * @param str å¤æããæååã®ãã¤ã³ã¿
+ * @return ãªã
+ * @details
*/
void sjis2euc(char *str)
{
@@ -268,8 +226,11 @@ void sjis2euc(char *str)
}
-/*
- * Convert EUC string to SJIS string
+/*!
+ * @brief æåã³ã¼ããEUCããSJISã«å¤æãã / Convert EUC string to SJIS string
+ * @param str å¤æããæååã®ãã¤ã³ã¿
+ * @return ãªã
+ * @details
*/
void euc2sjis(char *str)
{
@@ -312,14 +273,14 @@ void euc2sjis(char *str)
}
-/*
- * str¤ò´Ä¶¤Ë¹ç¤Ã¤¿Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤·¡¢ÊÑ´¹Á°¤Îʸ»ú¥³¡¼¥É¤òÊÖ¤¹¡£
- * str¤ÎŤµ¤ËÀ©¸Â¤Ï¤Ê¤¤¡£
- *
- * 0: Unknown
- * 1: ASCII (Never known to be ASCII in this function.)
- * 2: EUC
- * 3: SJIS
+/*!
+ * @brief strãç°å¢ã«åã£ãæåã³ã¼ãã«å¤æããå¤æåã®æåã³ã¼ããè¿ããstrã®é·ãã«å¶éã¯ãªãã
+ * @param str å¤æããæååã®ãã¤ã³ã¿
+ * @return
+ * 0: Unknown
+ * 1: ASCII (Never known to be ASCII in this function.)
+ * 2: EUC
+ * 3: SJIS
*/
byte codeconv(char *str)
{
@@ -403,8 +364,13 @@ byte codeconv(char *str)
return code;
}
-/* ʸ»úÎós¤Îx¥Ð¥¤¥ÈÌܤ¬´Á»ú¤Î1¥Ð¥¤¥ÈÌܤ«¤É¤¦¤«È½Äꤹ¤ë */
-bool iskanji2(cptr s, int x)
+/*!
+ * @brief æååsã®xãã¤ãç®ãæ¼¢åã®1ãã¤ãç®ãã©ããå¤å®ãã
+ * @param s å¤å®ããæååã®ãã¤ã³ã¿
+ * @param x å¤å®ããä½ç½®(ãã¤ã)
+ * @return æ¼¢åã®1ãã¤ãç®ãªãã°TRUE
+ */
+bool iskanji2(concptr s, int x)
{
int i;
@@ -417,5 +383,156 @@ bool iskanji2(cptr s, int x)
return FALSE;
}
-#endif /* JP */
+/*!
+ * @brief æååã®æåã³ã¼ããASCIIãã©ãããå¤å®ãã
+ * @param str å¤å®ããæååã¸ã®ãã¤ã³ã¿
+ * @return æååã®æåã³ã¼ããASCIIãªãTRUEãããã§ãªããã°FALSE
+ */
+static bool is_ascii_str(concptr 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(concptr 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
+
+static const struct ms_to_jis_unicode_conv_t {
+ char from[3];
+ char to[3];
+} ms_to_jis_unicode_conv[] = {
+ {{0xef, 0xbd, 0x9e}, {0xe3, 0x80, 0x9c}}, /* FULLWIDTH TILDE -> WAVE DASH */
+ {{0xef, 0xbc, 0x8d}, {0xe2, 0x88, 0x92}}, /* FULLWIDTH HYPHEN-MINUS -> MINUS SIGN */
+};
+
+/*!
+ * @brief EUCãã·ã¹ãã ã³ã¼ãã§ããç°å¢ä¸åãã«UTF-8ããå¤æå¦çãè¡ããµãã«ã¼ãã³
+ * @param str å¤æããæååã®ãã¤ã³ã¿
+ * @return ãªã
+ */
+static void ms_to_jis_unicode(char* str)
+{
+ unsigned char* p;
+ for (p = (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) {
+ int i;
+ for (i = 0; i < sizeof(ms_to_jis_unicode_conv) / sizeof(ms_to_jis_unicode_conv[0]); ++ i) {
+ const struct ms_to_jis_unicode_conv_t *c = &ms_to_jis_unicode_conv[i];
+ if (memcmp(p, c->from, 3) == 0) {
+ memcpy(p, c->to, 3);
+ }
+ }
+ subseq_num = 2;
+ }
+ if ((*p & 0xf8) == 0xf0) subseq_num = 3;
+
+ p += subseq_num;
+ }
+}
+
+#elif defined(SJIS) && defined(WINDOWS)
+#include
+#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;
+
+ ms_to_jis_unicode(utf8_str);
+ 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 */