1
0
mirror of https://git.FreeBSD.org/ports.git synced 2025-01-18 08:02:48 +00:00
freebsd-ports/chinese/mutt/files/patch-zh-mutt
Rong-En Fan 6600885852 - Fix build post mail/mutt-devel upgrade. The patch-nbsp from master port
now conflicts with our own patch-zh-mutt, so have to move the patch
  into post-patch section
2012-04-14 12:51:34 +00:00

495 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}