aboutsummaryrefslogtreecommitdiff
path: root/chinese/mutt/files/patch-zh-mutt
diff options
context:
space:
mode:
authorRong-En Fan <rafan@FreeBSD.org>2008-05-22 04:18:45 +0000
committerRong-En Fan <rafan@FreeBSD.org>2008-05-22 04:18:45 +0000
commit4cce0b6d76fe18aed19082e576e37a52d700f49a (patch)
treee15d19d04e911c4033c745fe69c5b694984137a0 /chinese/mutt/files/patch-zh-mutt
parent6f8a7b11e56ee07dac1027e6e8890cae5a29c6d4 (diff)
Notes
Diffstat (limited to 'chinese/mutt/files/patch-zh-mutt')
-rw-r--r--chinese/mutt/files/patch-zh-mutt494
1 files changed, 494 insertions, 0 deletions
diff --git a/chinese/mutt/files/patch-zh-mutt b/chinese/mutt/files/patch-zh-mutt
new file mode 100644
index 000000000000..1ff11d78a478
--- /dev/null
+++ b/chinese/mutt/files/patch-zh-mutt
@@ -0,0 +1,494 @@
+diff -ruN mutt-1.5.18.orig/init.h init.h
+--- mutt-1.5.18.orig/init.h 2008-05-22 09:18:39.000000000 +0800
++++ init.h 2008-05-22 09:18:46.000000000 +0800
+@@ -270,6 +270,11 @@
+ ** unset, you must first use the tag-prefix function (default: ";") to
+ ** make the next function apply to all tagged messages.
+ */
++ { "bbsislame", DT_BOOL, R_NONE, OPTBBSISLAME, 0 },
++ /*
++ ** .pp
++ ** When this variable is set, mutt will beep when an error occurs.
++ */
+ { "beep", DT_BOOL, R_NONE, OPTBEEP, 1 },
+ /*
+ ** .pp
+@@ -2521,7 +2526,7 @@
+ ** mutt scores are always greater than or equal to zero, the default setting
+ ** of this variable will never mark a message read.
+ */
+- { "send_charset", DT_STR, R_NONE, UL &SendCharset, UL "us-ascii:iso-8859-1:utf-8" },
++ { "send_charset", DT_STR, R_NONE, UL &SendCharset, UL "big5:gb2312:us-ascii:iso-8859-1:utf-8" },
+ /*
+ ** .pp
+ ** A colon-delimited list of character sets for outgoing messages. Mutt will use the
+@@ -2964,7 +2969,7 @@
+ ** machine without having to enter a password.
+ */
+ #endif
+- { "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 0 },
++ { "use_8bitmime", DT_BOOL, R_NONE, OPTUSE8BITMIME, 1 },
+ /*
+ ** .pp
+ ** \fBWarning:\fP do not set this variable unless you are using a version
+diff -ruN mutt-1.5.18.orig/mbyte.c mbyte.c
+--- mutt-1.5.18.orig/mbyte.c 2008-05-22 09:18:39.000000000 +0800
++++ mbyte.c 2008-05-22 09:18:46.000000000 +0800
+@@ -24,6 +24,9 @@
+ # include "config.h"
+ #endif
+
++/*
++ * Trad. Chinese (Big5) support by yjchou@linux.cis.nctu.edu.tw
++ */
+ #include "mutt.h"
+ #include "mbyte.h"
+ #include "charset.h"
+@@ -39,6 +42,7 @@
+ int Charset_is_utf8 = 0;
+ #ifndef HAVE_WC_FUNCS
+ static int charset_is_ja = 0;
++static int charset_is_big5 = 0;
+ static iconv_t charset_to_utf8 = (iconv_t)(-1);
+ static iconv_t charset_from_utf8 = (iconv_t)(-1);
+ #endif
+@@ -52,6 +56,7 @@
+ Charset_is_utf8 = 0;
+ #ifndef HAVE_WC_FUNCS
+ charset_is_ja = 0;
++ charset_is_big5 = 0;
+ if (charset_to_utf8 != (iconv_t)(-1))
+ {
+ iconv_close (charset_to_utf8);
+@@ -82,6 +87,14 @@
+ charset_from_utf8 = mutt_iconv_open (charset, "utf-8", 0);
+ }
+ #endif
++#ifndef HAVE_WC_FUNCS
++ else if (!strcmp(buffer, "big5"))
++ {
++ charset_is_big5 = 1;
++ charset_to_utf8 = iconv_open ("UTF-8", charset);
++ charset_from_utf8 = iconv_open (charset, "UTF-8");
++ }
++#endif
+
+ #if defined(HAVE_BIND_TEXTDOMAIN_CODESET) && defined(ENABLE_NLS)
+ bind_textdomain_codeset(PACKAGE, buffer);
+@@ -256,7 +269,7 @@
+
+ int iswprint (wint_t wc)
+ {
+- if (Charset_is_utf8 || charset_is_ja)
++ if (Charset_is_utf8 || charset_is_ja || charset_is_big5)
+ return ((0x20 <= wc && wc < 0x7f) || 0xa0 <= wc);
+ else
+ return (0 <= wc && wc < 256) ? IsPrint (wc) : 0;
+@@ -264,7 +277,7 @@
+
+ int iswspace (wint_t wc)
+ {
+- if (Charset_is_utf8 || charset_is_ja)
++ if (Charset_is_utf8 || charset_is_ja || charset_is_big5)
+ return (9 <= wc && wc <= 13) || wc == 32;
+ else
+ return (0 <= wc && wc < 256) ? isspace (wc) : 0;
+@@ -315,7 +328,7 @@
+
+ wint_t towupper (wint_t wc)
+ {
+- if (Charset_is_utf8 || charset_is_ja)
++ if (Charset_is_utf8 || charset_is_ja || charset_is_big5)
+ return towupper_ucs (wc);
+ else
+ return (0 <= wc && wc < 256) ? toupper (wc) : wc;
+@@ -323,7 +336,7 @@
+
+ wint_t towlower (wint_t wc)
+ {
+- if (Charset_is_utf8 || charset_is_ja)
++ if (Charset_is_utf8 || charset_is_ja || charset_is_big5)
+ return towlower_ucs (wc);
+ else
+ return (0 <= wc && wc < 256) ? tolower (wc) : wc;
+@@ -331,7 +344,7 @@
+
+ int iswalnum (wint_t wc)
+ {
+- if (Charset_is_utf8 || charset_is_ja)
++ if (Charset_is_utf8 || charset_is_ja || charset_is_big5)
+ return iswalnum_ucs (wc);
+ else
+ return (0 <= wc && wc < 256) ? isalnum (wc) : 0;
+@@ -356,13 +369,31 @@
+ return -1;
+ }
+
++int wcwidth_big5(wchar_t ucs)
++{
++ return wcwidth_ja (ucs);
++}
++
+ int wcwidth_ucs(wchar_t ucs);
+
+ int wcwidth (wchar_t wc)
+ {
+ if (!Charset_is_utf8)
+ {
+- if (!charset_is_ja)
++ if (charset_is_ja)
++ {
++ /* Japanese */
++ int k = wcwidth_ja (wc);
++ if (k != -1)
++ return k;
++ }
++ else if (charset_is_big5)
++ {
++ int k = wcwidth_big5 (wc);
++ if (k != -1)
++ return k;
++ }
++ else
+ {
+ /* 8-bit case */
+ if (!wc)
+@@ -372,13 +403,6 @@
+ else
+ return -1;
+ }
+- else
+- {
+- /* Japanese */
+- int k = wcwidth_ja (wc);
+- if (k != -1)
+- return k;
+- }
+ }
+ return wcwidth_ucs (wc);
+ }
+diff -ruN mutt-1.5.18.orig/mutt.h mutt.h
+--- mutt-1.5.18.orig/mutt.h 2008-05-22 09:18:39.000000000 +0800
++++ mutt.h 2008-05-22 09:18:46.000000000 +0800
+@@ -335,6 +335,7 @@
+ OPTATTACHSPLIT,
+ OPTAUTOEDIT,
+ OPTAUTOTAG,
++ OPTBBSISLAME,
+ OPTBEEP,
+ OPTBEEPNEW,
+ OPTBOUNCEDELIVERED,
+diff -ruN mutt-1.5.18.orig/myiconv.c myiconv.c
+--- mutt-1.5.18.orig/myiconv.c 1970-01-01 08:00:00.000000000 +0800
++++ myiconv.c 2008-05-22 09:18:46.000000000 +0800
+@@ -0,0 +1,167 @@
++/*
++ * Contributed by Kuang-che Wu <kcwu@kcwu.dyndns.org>
++ */
++#if HAVE_CONFIG_H
++# include "config.h"
++#endif
++
++#include <stdio.h>
++#include <stdlib.h>
++#include "mutt.h"
++#include "charset.h"
++#include <hz.h>
++#include <dlfcn.h>
++
++
++
++#ifdef HAVE_ICONV
++
++typedef struct myiconv {
++ iconv_t cd;
++ int incode,outcode;
++ int myjob;
++} myiconv_t;
++
++static int is_init;
++static void *dlh;
++static iconv_t (*old_iconv_open)(const char *tocode, const char *fromcode);
++static size_t (*old_iconv)(iconv_t cd, ICONV_CONST char **inbuf,
++ size_t *inbytesleft, char **outbuf, size_t *outbytesleft);
++static int (*old_iconv_close) (iconv_t cd);
++static int inst;
++
++static void init(void)
++{
++ hz_setup();
++ dlh=dlopen("libiconv.so",RTLD_LAZY);
++ if(dlh) {
++ old_iconv_open=dlsym(dlh,"iconv_open");
++ old_iconv=dlsym(dlh,"iconv");
++ old_iconv_close=dlsym(dlh,"iconv_close");
++ }
++ is_init=1;
++}
++
++static size_t myconv(ICONV_CONST char **inbuf,
++ size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
++{
++ /* reference to autogb.c */
++ int count;
++ char buff[MAX_BUFFER*3];
++ char *pbuf,*ps;
++ size_t rt=0;
++
++ pbuf=&buff[2];
++
++ count=*inbytesleft;
++ if(count>MAX_BUFFER) count=MAX_BUFFER;
++ memcpy(pbuf,*inbuf,count);
++ *inbuf+=count;
++ *inbytesleft-=count;
++ while(count>0) {
++ rt+=count;
++ ps=hz_convert(pbuf,&count,0);
++ memcpy(*outbuf,ps,count);
++ *outbuf+=count; *outbytesleft+=count;
++ pbuf=&buff[2];
++
++ count=*inbytesleft;
++ if(count>MAX_BUFFER) count=MAX_BUFFER;
++ memcpy(pbuf,*inbuf,count);
++ *inbuf+=count;
++ *inbytesleft-=count;
++ }
++ return rt;
++}
++
++int conv_str(const char* str_code)
++{
++ int i;
++ char *str;
++ struct mapping {
++ char *code;
++ int value;
++ } map[]={
++ {"gb2312",GB_CODE},
++ {"euccn",GB_CODE},
++ {"big5",BIG5_CODE},
++ {0,OTHER_CODE}, /* should we handle below cases? */
++ {"hz",HZ_CODE},
++ {"uni",UNI_CODE},
++ {"utf7",UTF7_CODE},
++ {"utf8",UTF8_CODE},
++ };
++ str=strdup(str_code);
++ if(strchr(str,'/'))
++ *strchr(str,'/')=0;
++ for(i=0;map[i].code;i++)
++ if(mutt_chscmp(str,map[i].code))
++ break;
++ free(str);
++ return map[i].value;
++}
++
++iconv_t iconv_open (const char *tocode, const char *fromcode)
++{
++ myiconv_t *mycd=(myiconv_t*)-1;
++ iconv_t cd;
++ char *_tocode, *_fromcode;
++
++ _tocode = tocode;
++ _fromcode = fromcode;
++
++ if (!mutt_strcmp(tocode,"big5")) _tocode = "big5-hkscs";
++ if (!mutt_strcmp(fromcode,"big5")) _fromcode = "big5-hkscs";
++
++ if(!is_init) init();
++ if(!old_iconv_open)
++ return (iconv_t)(-1);
++
++ if((cd=old_iconv_open(_tocode,_fromcode))!=(iconv_t)-1) {
++ mycd=(myiconv_t*)calloc(1,sizeof(myiconv_t));
++ mycd->cd=cd;
++ mycd->incode=conv_str(fromcode);
++ mycd->outcode=conv_str(tocode);
++ /* inst==0 is because:
++ libhz only has one stack, and
++ it will destroy all instance's data when setup stack.
++
++ If want to fix, libhz's init func should know which inst.
++ */
++ if(inst==0 && mycd->incode!=mycd->outcode &&
++ hz_search(mycd->incode,mycd->outcode,8)) {
++ inst++;
++ mycd->myjob=1;
++ }
++ }
++ return (iconv_t)mycd;
++}
++
++size_t iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft,
++ char **outbuf, size_t *outbytesleft)
++{
++ myiconv_t *mycd=(myiconv_t*)cd;
++ size_t rt=(size_t)0;
++ if(mycd->myjob) {
++ if(!inbuf || !*inbuf || !outbuf || !*outbuf)
++ hz_search(mycd->incode,mycd->outcode,8);
++ else
++ rt=myconv(inbuf,inbytesleft,outbuf,outbytesleft);
++ } else if(old_iconv)
++ rt=old_iconv(mycd->cd,inbuf,inbytesleft,outbuf,outbytesleft);
++ return rt;
++}
++
++int iconv_close (iconv_t cd)
++{
++ myiconv_t *mycd=(myiconv_t*)cd;
++ if(!old_iconv_close)
++ return 0;
++ old_iconv_close(mycd->cd);
++ if(mycd->myjob)
++ inst--;
++ free(mycd);
++ return 0;
++}
++
++#endif
+diff -ruN mutt-1.5.18.orig/pager.c pager.c
+--- mutt-1.5.18.orig/pager.c 2008-05-22 09:18:39.000000000 +0800
++++ pager.c 2008-05-22 09:18:46.000000000 +0800
+@@ -20,6 +20,10 @@
+ # include "config.h"
+ #endif
+
++/*
++ * Trad. Chinese support by Michael Hsin <mhsin@mhsin.org>
++ */
++
+ #include "mutt.h"
+ #include "mutt_curses.h"
+ #include "mutt_regex.h"
+@@ -1062,7 +1066,7 @@
+ {
+ int space = -1; /* index of the last space or TAB */
+ int col = option (OPTMARKERS) ? (*lineInfo)[n].continuation : 0;
+- int ch, vch, k, last_special = -1, special = 0, t;
++ int ch, vch, k, last_special = -1, special = 0, t = 0, old_t = 0;
+ wchar_t wc;
+ mbstate_t mbstate;
+
+@@ -1154,7 +1158,10 @@
+ {
+ if (wc == ' ')
+ space = ch;
++ old_t = t;
+ t = wcwidth (wc);
++ if(t > 1 || old_t > 1)
++ space = ch;
+ if (col + t > wrap_cols)
+ break;
+ col += t;
+@@ -1371,6 +1378,7 @@
+ {
+ buf_ptr = buf + ch;
+ /* skip trailing blanks */
++ ch --;
+ while (ch && (buf[ch] == ' ' || buf[ch] == '\t' || buf[ch] == '\r'))
+ ch--;
+ /* a very long word with leading spaces causes infinite wrapping */
+diff -ruN mutt-1.5.18.orig/parse.c parse.c
+--- mutt-1.5.18.orig/parse.c 2008-05-22 09:18:39.000000000 +0800
++++ parse.c 2008-05-22 09:18:46.000000000 +0800
+@@ -426,7 +426,10 @@
+ s++;
+ SKIPWS (s);
+ if ((s = mutt_get_parameter ("filename", (parms = parse_parameters (s)))) != 0)
+- mutt_str_replace (&ct->filename, s);
++ {
++ mutt_str_replace (&ct->filename, s);
++ rfc2047_decode (&ct->filename);
++ }
+ if ((s = mutt_get_parameter ("name", parms)) != 0)
+ ct->form_name = safe_strdup (s);
+ mutt_free_parameter (&parms);
+diff -ruN mutt-1.5.18.orig/pgp.c pgp.c
+--- mutt-1.5.18.orig/pgp.c 2008-05-22 09:18:39.000000000 +0800
++++ pgp.c 2008-05-22 09:18:46.000000000 +0800
+@@ -1001,7 +1001,7 @@
+ int empty = 1;
+ pid_t thepid;
+
+- convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */
++ if (!option(OPTBBSISLAME)) convert_to_7bit (a); /* Signed data _must_ be in 7-bit format. */
+
+ mutt_mktemp (sigfile);
+ if ((fp = safe_fopen (sigfile, "w")) == NULL)
+diff -ruN mutt-1.5.18.orig/po/zh_TW.po po/zh_TW.po
+--- mutt-1.5.18.orig/po/zh_TW.po 2008-05-22 09:18:39.000000000 +0800
++++ po/zh_TW.po 2008-05-22 09:19:25.000000000 +0800
+@@ -1768,7 +1768,7 @@
+ "~w 檔案\t\t將訊息寫入檔案\n"
+ "~x\t\t停止修改並離開編輯器\n"
+ "~?\t\t這訊息\n"
+-".\t\t如果是一行裏的唯一字符,則代表結束輸入\n"
++".\t\t如果是一行裡的唯一字符,則代表結束輸入\n"
+
+ #: edit.c:52
+ #, fuzzy
+@@ -1800,7 +1800,7 @@
+ "~w 檔案\t\t將訊息寫入檔案\n"
+ "~x\t\t停止修改並離開編輯器\n"
+ "~?\t\t這訊息\n"
+-".\t\t如果是一行裏的唯一字符,則代表結束輸入\n"
++".\t\t如果是一行裡的唯一字符,則代表結束輸入\n"
+
+ #: edit.c:188
+ #, c-format
+@@ -1809,7 +1809,7 @@
+
+ #: edit.c:330
+ msgid "(End message with a . on a line by itself)\n"
+-msgstr "(在一行裏輸入一個 . 符號來結束信件)\n"
++msgstr "(在一行裡輸入一個 . 符號來結束信件)\n"
+
+ #: edit.c:389
+ msgid "No mailbox.\n"
+@@ -4509,7 +4509,7 @@
+
+ #: ../keymap_alldefs.h:43
+ msgid "rename/move an attached file"
+-msgstr "更改檔名∕移動 已被附帶的檔案"
++msgstr "更改檔名/移動 已被附帶的檔案"
+
+ #: ../keymap_alldefs.h:44
+ msgid "send the message"
+@@ -4517,7 +4517,7 @@
+
+ #: ../keymap_alldefs.h:45
+ msgid "toggle disposition between inline/attachment"
+-msgstr "切換 合拼∕附件式 觀看模式"
++msgstr "切換 合拼/附件式 觀看模式"
+
+ #: ../keymap_alldefs.h:46
+ msgid "toggle whether to delete file after sending it"
+@@ -5127,11 +5127,11 @@
+
+ #: ../keymap_alldefs.h:195
+ msgid "Select the previous element of the chain"
+-msgstr "選擇鏈結裏對上一個部份"
++msgstr "選擇鏈結裡對上一個部份"
+
+ #: ../keymap_alldefs.h:196
+ msgid "Select the next element of the chain"
+-msgstr "選擇鏈結裏跟著的一個部份"
++msgstr "選擇鏈結裡跟著的一個部份"
+
+ #: ../keymap_alldefs.h:197
+ msgid "send the message through a mixmaster remailer chain"
+diff -ruN mutt-1.5.18.orig/sendlib.c sendlib.c
+--- mutt-1.5.18.orig/sendlib.c 2008-05-22 09:18:39.000000000 +0800
++++ sendlib.c 2008-05-22 09:18:46.000000000 +0800
+@@ -2344,7 +2344,7 @@
+ rfc2047_encode_adrlist (env->reply_to, "Reply-To");
+ rfc2047_encode_string (&env->x_label);
+
+- if (env->subject)
++ if (env->subject && !option(OPTBBSISLAME))
+ {
+ rfc2047_encode_string (&env->subject);
+ }