- Update for 1.5.18

- Put patch to files/ for easier management and update
This commit is contained in:
Rong-En Fan 2008-05-22 04:18:45 +00:00
parent 6f8a7b11e5
commit 4cce0b6d76
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=213511
3 changed files with 501 additions and 37 deletions

View File

@ -9,7 +9,7 @@
CATEGORIES= chinese
MASTERDIR= ${.CURDIR}/../../mail/mutt-devel
REVISEDATE= 20060703
REVISEDATE= 20080522
PORTREVISION= ${REVISEDATE}
# XXX: Currently PORTREVISION assignment is not perfect. It needs to
@ -18,14 +18,12 @@ PORTREVISION= ${REVISEDATE}
MAINTAINER= rafan@FreeBSD.org
COMMENT= The Mongrel of Mail User Agents with Chinese support
PATCH_SITES= ${MASTER_SITE_LOCAL:S/$/:tw/}
PATCH_SITE_SUBDIR= rafan/chinese/:tw
TW_PATCH_VERSION= 1.5.16-${REVISEDATE}
PATCHFILES= ${PKGNAMEPREFIX}mutt-${TW_PATCH_VERSION}.diff.gz:tw
LIB_DEPENDS+= hz.0:${PORTSDIR}/chinese/autoconvert
CFLAGS+= -D_DONT_USE_CTYPE_INLINE_
LDFLAGS+= -lhz
EXTRA_PATCHES+= ${.CURDIR}/files/patch-*
WITH_MUTT_LOCALES_FIX= yes
WITH_MUTT_NCURSES= yes
@ -37,7 +35,9 @@ WITHOUT_MUTT_COMPRESSED_FOLDERS=yes
.endif
MUTT_SLAVE_HTML_PAGES= 1
MD5_FILE= ${.CURDIR}/distinfo
PKGMESSAGE= ${.CURDIR}/pkg-message
post-patch::
@${REINPLACE_CMD} -e '/^mutt_SOURCES/s/\\$$/ myiconv.c \\/' ${WRKSRC}/Makefile.am
.include "${MASTERDIR}/Makefile"

View File

@ -1,30 +0,0 @@
MD5 (mutt/mutt-1.5.17.tar.gz) = 49387458be0cb52b85ae0d73af699aae
SHA256 (mutt/mutt-1.5.17.tar.gz) = 17865b1a10e23ccf8757c05657c7d7f7055457f0a04eeacd9ee560eeb6defa81
SIZE (mutt/mutt-1.5.17.tar.gz) = 3572651
MD5 (mutt/patch-1.5.17.rr.compressed.gz) = 4f8edaa937d308d80f0f585b1c7fe47c
SHA256 (mutt/patch-1.5.17.rr.compressed.gz) = ffef4854a558264b6873517f4b4be8e3390eeacec03f2f5aef0cf5c2d43953ad
SIZE (mutt/patch-1.5.17.rr.compressed.gz) = 10124
MD5 (mutt/patch-1.5.17.vvv.nntp.gz) = 42945bbe500e8e016d6760a05fd2e8ed
SHA256 (mutt/patch-1.5.17.vvv.nntp.gz) = 2bc47e018a2188d429ddf6189de83a7a4c30d55f1131dfb09d667237787a09e3
SIZE (mutt/patch-1.5.17.vvv.nntp.gz) = 55463
MD5 (mutt/patch-1.5.4.cd.ifdef.1) = a545036cdb55519154d0b35465f52daa
SHA256 (mutt/patch-1.5.4.cd.ifdef.1) = 7d11892bcc688bbc82b5996ca0fda2d4446d8e928bec50b2731f8a3a5d9be373
SIZE (mutt/patch-1.5.4.cd.ifdef.1) = 3545
MD5 (mutt/patch-1.5.17.vvv.initials.gz) = 08849d642e467bbd17eb7411ba63bf48
SHA256 (mutt/patch-1.5.17.vvv.initials.gz) = 6b1829032a8cfc527f7d1abc6f7a2af6c8fdb8cd080b03a96f94e72cc75ad29c
SIZE (mutt/patch-1.5.17.vvv.initials.gz) = 679
MD5 (mutt/patch-1.5.17.vvv.quote.gz) = d93d91a70d9c25ca917d56738dd57246
SHA256 (mutt/patch-1.5.17.vvv.quote.gz) = fc68dac081bea1b5a9d345c75e2861db2cdc00341fd17b6f0ccd454c02bc4767
SIZE (mutt/patch-1.5.17.vvv.quote.gz) = 2105
MD5 (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = 9e29a6778ab07a4de3442691e4573fea
SHA256 (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = ec9511b86a595f9b4f1f96b05d9e9e12e997bc62b0a0f2b5a36e2817dee61406
SIZE (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = 6405
MD5 (mutt/mutt-1.5.16.vc.greeting) = 4bd9beeb74d075e4418e86e8ed887aa0
SHA256 (mutt/mutt-1.5.16.vc.greeting) = cf05aeab5f1813864aa72b68f59a579c46dacf2fbd8e5fd064b920012320b986
SIZE (mutt/mutt-1.5.16.vc.greeting) = 4526
MD5 (mutt/patch-1.5.17.sidebar.20071102.txt) = 93890c4a5bc1628018a701946a0c3ff5
SHA256 (mutt/patch-1.5.17.sidebar.20071102.txt) = 1d8dda9fed1e1592ff9004e2c776c2f4a84e4e75ca872542e8e07113516fc27b
SIZE (mutt/patch-1.5.17.sidebar.20071102.txt) = 50439
MD5 (mutt/zh-mutt-1.5.16-20060703.diff.gz) = 2731d422bf48c129626c792068bb2149
SHA256 (mutt/zh-mutt-1.5.16-20060703.diff.gz) = 302b7759030fea7c091dbd0ab81d0bfa2ce5a3b51637e3f6609453f6b2e8756d
SIZE (mutt/zh-mutt-1.5.16-20060703.diff.gz) = 4804

View File

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