投稿募集! スレッド一覧

スレッド作成 他のスレッドを探す

[PR] 内職アルバイト  大阪の求人・転職  物流費
teacup. ] [ 無料掲示板 ] [ プレミアム掲示板 ] [ teacup.コミュニティ ] [ ブログ ] [ チャット ]

新着順:2/97 記事一覧表示 | 《前のページ | 次のページ》

utf8 簡易パッチ

 投稿者:1/2  投稿日:2009年 8月15日(土)21時43分5秒
  通報
 
diff -ur src.org/crt.c src/crt.c
--- src.org/crt.c	2006-12-06 10:48:21.000000000 +0900
+++ src/crt.c	2006-12-06 15:36:01.000000000 +0900
@@ -259,7 +259,7 @@
 	int 		length;
 	int 		cn;

-	char		kc_char[]={'E','J','S'};
+	char		kc_char[]={'E','J','S','U'};
 	char		rm_char[]={'L','+','C'};


diff -ur src.org/ed.h src/ed.h
--- src.org/ed.h	2006-12-06 10:48:21.000000000 +0900
+++ src/ed.h	2006-12-06 15:36:01.000000000 +0900
@@ -165,6 +165,8 @@
 	char		systemline[MAXEDITLINE+1];
 	dspreg_t	*sl_drp;
 	char		doublekey[4+1];
+
+	bool		f_force_utf8;
 }	sysinfo_t;

 VAL	sysinfo_t	sysinfo;
@@ -315,7 +317,7 @@
 extern	int 	file_knjchk(FILE *fp);
 extern	int 	file_gets(char *s, size_t bytes, FILE *fp, int *n_cr, int *n_lf);
 extern	void	kanji_toeuc(char *s,size_t bytes, const char *t
-									, bool f_sjis, int *jm);
+									, int kcode, int *jm);

 #define	JM_ank	0
 #define	JM_kana	1
@@ -325,6 +327,7 @@
 #define	KC_euc	0
 #define	KC_jis	1
 #define	KC_sjis	2
+#define	KC_utf8	3

 #define	RM_lf	0
 #define	RM_crlf	1
diff -ur src.org/file.c src/file.c
--- src.org/file.c	2006-12-06 10:48:21.000000000 +0900
+++ src/file.c	2006-12-12 09:49:49.000000000 +0900
@@ -413,7 +413,7 @@
 	bool	f;

 	f=file_gets(buf, MAXEDITLINE, kip->fp, &kip->n_cr, &kip->n_lf);
-	kanji_toeuc(s, MAXEDITLINE, buf, kip->kc==KC_sjis, &kip->jm);
+	kanji_toeuc(s, MAXEDITLINE, buf, kip->kc, &kip->jm);
 //fprintf(stderr,"[%s]%d\n",s,f);
 	return f!=-1?kip:NULL;
 }
@@ -445,6 +445,8 @@
 		 	{
 		 	 lists_add(file_new_proc,"");
 		 	 edbuf[CurrentFileNo].ct = -1;
+			 if (sysinfo.f_force_utf8)
+		 		 edbuf[CurrentFileNo].kc = KC_utf8;

 		 	 sprintf(buf, "%s [ %s ]", NEWFILE_MSG, filename);
 		 	 system_msg(buf);
diff -ur src.org/iskanji.c src/iskanji.c
--- src.org/iskanji.c	2006-12-06 10:48:21.000000000 +0900
+++ src/iskanji.c	2006-12-06 15:36:01.000000000 +0900
@@ -9,6 +9,7 @@
     All rights reserved.
 --------------------------------------------------------------------*/
 #include "ed.h"
+#include <iconv.h>


 bool	iscnt(unsigned char c)
@@ -251,12 +252,27 @@
 	const	char	*p;
 	enum	{KM_ank, KM_kanji, KM_kana}	km;

+	static bool	iconv_initialized=FALSE;
+	static iconv_t	iconv_euc2utf8;
+	char	*ss;
+
+	if (!iconv_initialized)
+		{
+		iconv_euc2utf8=iconv_open("UTF-8","EUC-JP");
+		iconv_initialized=TRUE;
+		}
+
 	p=s;
 	switch(kc)
 		{
 	 case KC_euc:
 		 return t;

+	 case KC_utf8:
+		 ss=s;
+		 ss[iconv(iconv_euc2utf8,&t,&bytes,&s,&bytes)]='\0';
+		 break;
+
 	 case KC_sjis:
 		 for(;*t!='\0'&& bytes>0;)
 		 	{
@@ -346,6 +362,9 @@
 	f_sjis=FALSE;
 	f_euc=FALSE;

+	if (sysinfo.f_force_utf8)
+		return KC_utf8;
+
 	for(;;)
 		{
 		 c=fgetc(fp);
@@ -428,7 +447,7 @@
 }


-void	kanji_toeuc(char *s,size_t bytes,const char *t,bool f_sjis,int *jm)
+void	kanji_toeuc_org(char *s,size_t bytes,const char *t,bool f_sjis,int *jm)
 {
 	u_char 	c,sjc;
 	bool	sf;		// (SI/SO)shift flag
@@ -551,6 +570,27 @@
 	*s='\0';
 }

+void	kanji_toeuc(char *s,size_t bytes,const char *t,int kcode,int *jm)
+{
+	static bool	iconv_initialized=FALSE;
+	static iconv_t	iconv_utf82euc;
+	char	*ss;
+
+	if (!iconv_initialized)
+		{
+		iconv_utf82euc=iconv_open("EUC-JP","UTF-8");
+		iconv_initialized=TRUE;
+		}
+
+	if (kcode==KC_utf8)
+		{
+		ss=s;
+		ss[iconv(iconv_utf82euc,&t,&bytes,&s,&bytes)] ='\0';
+		} else
+		{
+		kanji_toeuc_org(s,bytes,t,kcode==KC_sjis,jm);
+		}
+}

 int 	kanji_poscanon(int offset, const char *buf)
 {
diff -ur src.org/ne.c src/ne.c
--- src.org/ne.c	2006-12-06 10:48:21.000000000 +0900
+++ src/ne.c	2006-12-06 15:36:01.000000000 +0900
@@ -157,7 +157,7 @@

 	for (optcount=1; optcount<argc; ++optcount) // ????
 		{
-		 c=getopt(argc, argv, "Vrjeod:D:");
+		 c=getopt(argc, argv, "Vrjeod:D:u");
 		 if (c==EOF)
 		 	break;

@@ -185,6 +185,9 @@
 		  	 sp=buf;
 		  	 p=strsep(&sp,"=");
 		  	 hash_set(sysinfo.vp_def, buf, p);
+		  case 'u':
+		  	 sysinfo.f_force_utf8=TRUE;
+		  	 break;
 		 	}
 		}

 
》記事一覧表示

新着順:2/97 《前のページ | 次のページ》
/97