mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-18 08:02:48 +00:00
6600885852
now conflicts with our own patch-zh-mutt, so have to move the patch into post-patch section
495 lines
13 KiB
Plaintext
495 lines
13 KiB
Plaintext
diff -ruN mutt-1.5.21.orig/init.h init.h
|
||
--- mutt-1.5.21.orig/init.h 2012-04-14 20:39:48.000000000 +0800
|
||
+++ init.h 2012-04-14 20:39:52.000000000 +0800
|
||
@@ -287,6 +287,11 @@
|
||
** .pp
|
||
** Also see $$fast_reply.
|
||
*/
|
||
+ { "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
|
||
@@ -2468,7 +2473,7 @@
|
||
** For the pager, this variable specifies the number of lines shown
|
||
** before search results. By default, search results will be top-aligned.
|
||
*/
|
||
- { "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
|
||
@@ -3251,7 +3256,7 @@
|
||
** When \fIset\fP, Mutt will jump to the next unread message, if any,
|
||
** when the current thread is \fIun\fPcollapsed.
|
||
*/
|
||
- { "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.21.orig/mbyte.c mbyte.c
|
||
--- mutt-1.5.21.orig/mbyte.c 2012-04-14 20:39:48.000000000 +0800
|
||
+++ mbyte.c 2012-04-14 20:39:52.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;
|
||
@@ -347,7 +360,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;
|
||
@@ -355,7 +368,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;
|
||
@@ -363,7 +376,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;
|
||
@@ -404,13 +417,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)
|
||
@@ -420,13 +451,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.21.orig/mutt.h mutt.h
|
||
--- mutt-1.5.21.orig/mutt.h 2012-04-14 20:39:48.000000000 +0800
|
||
+++ mutt.h 2012-04-14 20:39:52.000000000 +0800
|
||
@@ -324,6 +324,7 @@
|
||
OPTATTACHSPLIT,
|
||
OPTAUTOEDIT,
|
||
OPTAUTOTAG,
|
||
+ OPTBBSISLAME,
|
||
OPTBEEP,
|
||
OPTBEEPNEW,
|
||
OPTBOUNCEDELIVERED,
|
||
diff -ruN mutt-1.5.21.orig/myiconv.c myiconv.c
|
||
--- mutt-1.5.21.orig/myiconv.c 1970-01-01 08:00:00.000000000 +0800
|
||
+++ myiconv.c 2012-04-14 20:39:52.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.21.orig/pager.c pager.c
|
||
--- mutt-1.5.21.orig/pager.c 2012-04-14 20:39:48.000000000 +0800
|
||
+++ pager.c 2012-04-14 20:40:25.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"
|
||
@@ -1091,7 +1095,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;
|
||
int wrap_cols = mutt_term_width ((flags & M_PAGER_NOWRAP) ? 0 : Wrap);
|
||
@@ -1198,7 +1202,10 @@
|
||
* attempt to wrap at this character. */
|
||
wc = ' ';
|
||
}
|
||
+ old_t = t;
|
||
t = wcwidth (wc);
|
||
+ if(t > 1 || old_t > 1)
|
||
+ space = ch;
|
||
if (col + t > wrap_cols)
|
||
break;
|
||
col += t;
|
||
@@ -1420,6 +1427,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.21.orig/parse.c parse.c
|
||
--- mutt-1.5.21.orig/parse.c 2012-04-14 20:39:48.000000000 +0800
|
||
+++ parse.c 2012-04-14 20:39:52.000000000 +0800
|
||
@@ -381,7 +381,10 @@
|
||
s++;
|
||
SKIPWS (s);
|
||
if ((s = mutt_get_parameter ("filename", (parms = parse_parameters (s)))))
|
||
- mutt_str_replace (&ct->filename, s);
|
||
+ {
|
||
+ mutt_str_replace (&ct->filename, s);
|
||
+ rfc2047_decode (&ct->filename);
|
||
+ }
|
||
if ((s = mutt_get_parameter ("name", parms)))
|
||
ct->form_name = safe_strdup (s);
|
||
mutt_free_parameter (&parms);
|
||
diff -ruN mutt-1.5.21.orig/pgp.c pgp.c
|
||
--- mutt-1.5.21.orig/pgp.c 2012-04-14 20:39:48.000000000 +0800
|
||
+++ pgp.c 2012-04-14 20:39:52.000000000 +0800
|
||
@@ -1033,7 +1033,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, sizeof (sigfile));
|
||
if ((fp = safe_fopen (sigfile, "w")) == NULL)
|
||
diff -ruN mutt-1.5.21.orig/po/zh_TW.po po/zh_TW.po
|
||
--- mutt-1.5.21.orig/po/zh_TW.po 2012-04-14 20:39:48.000000000 +0800
|
||
+++ po/zh_TW.po 2012-04-14 20:39:52.000000000 +0800
|
||
@@ -1820,7 +1820,7 @@
|
||
"~w 檔案\t\t將訊息寫入檔案\n"
|
||
"~x\t\t停止修改並離開編輯器\n"
|
||
"~?\t\t這訊息\n"
|
||
-".\t\t如果是一行裏的唯一字符,則代表結束輸入\n"
|
||
+".\t\t如果是一行裡的唯一字符,則代表結束輸入\n"
|
||
|
||
#: edit.c:52
|
||
#, fuzzy
|
||
@@ -1852,7 +1852,7 @@
|
||
"~w 檔案\t\t將訊息寫入檔案\n"
|
||
"~x\t\t停止修改並離開編輯器\n"
|
||
"~?\t\t這訊息\n"
|
||
-".\t\t如果是一行裏的唯一字符,則代表結束輸入\n"
|
||
+".\t\t如果是一行裡的唯一字符,則代表結束輸入\n"
|
||
|
||
#: edit.c:187
|
||
#, c-format
|
||
@@ -1861,7 +1861,7 @@
|
||
|
||
#: edit.c:329
|
||
msgid "(End message with a . on a line by itself)\n"
|
||
-msgstr "(在一行裏輸入一個 . 符號來結束信件)\n"
|
||
+msgstr "(在一行裡輸入一個 . 符號來結束信件)\n"
|
||
|
||
#: edit.c:388
|
||
msgid "No mailbox.\n"
|
||
@@ -4666,7 +4666,7 @@
|
||
|
||
#: ../keymap_alldefs.h:43
|
||
msgid "rename/move an attached file"
|
||
-msgstr "更改檔名∕移動 已被附帶的檔案"
|
||
+msgstr "更改檔名/移動 已被附帶的檔案"
|
||
|
||
#: ../keymap_alldefs.h:44
|
||
msgid "send the message"
|
||
@@ -4674,7 +4674,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"
|
||
@@ -5289,11 +5289,11 @@
|
||
|
||
#: ../keymap_alldefs.h:196
|
||
msgid "Select the previous element of the chain"
|
||
-msgstr "選擇鏈結裏對上一個部份"
|
||
+msgstr "選擇鏈結裡對上一個部份"
|
||
|
||
#: ../keymap_alldefs.h:197
|
||
msgid "Select the next element of the chain"
|
||
-msgstr "選擇鏈結裏跟著的一個部份"
|
||
+msgstr "選擇鏈結裡跟著的一個部份"
|
||
|
||
#: ../keymap_alldefs.h:198
|
||
msgid "send the message through a mixmaster remailer chain"
|
||
diff -ruN mutt-1.5.21.orig/sendlib.c sendlib.c
|
||
--- mutt-1.5.21.orig/sendlib.c 2012-04-14 20:39:48.000000000 +0800
|
||
+++ sendlib.c 2012-04-14 20:39:52.000000000 +0800
|
||
@@ -2477,7 +2477,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);
|
||
}
|