diff -cNarBb MHonArc-2.2.0.orig/00README.jp MHonArc-2.2.0.new/00README.jp
*** MHonArc-2.2.0.orig/00README.jp Thu Jan 1 09:00:00 1970
--- MHonArc-2.2.0.new/00README.jp Fri Aug 21 10:23:06 1998
***************
*** 0 ****
--- 1,85 ----
+ MHonArc-2.2.0 日本語対応強化Patch
+
+ [What is this patch ?]
+
+ MHonArc-2.2.0は、メール本文については元のままでも日本語に対応しているう
+ え、RFC2047のヘッダ拡張にも対応しています。しかし、ヘッダにJIS文字列が
+ 入っている場合は、文字化けが発生することがあります。
+ このパッチは、
+ ・ヘッダの日本語部分が破壊されることなくhtml化されるようにする
+ ・multipartで添付されたファイルのmedia-type認識度を少し改善する
+ という目的で作成しました。
+
+ [Description]
+
+ 日本語(ISO-2022-JP)対応の作業は、m2h_text_plain'jp2022()を参考に、眞柄
+ が解析/改造を行ないました。iso2022jp.pl, Japanize.rcの一部では、市川至
+ さんの書かれたコードを参考にしました。
+ 改造に際しては、オリジナルのコード変更が最小限で済むように、対応可能な
+ 部分はリソースファイルに記述するように心がけましたが、最後まで手間取っ
+ たmailto, extract_email_address。extract_email_name については、泥縄
+ 的かつ不完全な対応になってしまいました。このため、当初は国際化対応の
+ 延長として日本語対応を充実させるつもりだったのですが、単なる日本語対応
+ になっています。
+ MHonArcの日本語化については、最初にnkfを通しておくという方法も知られて
+ いますが、本パッチはオリジナルの環境であるperlだけで動作します。
+
+ media-type認識度の向上は、連想配列m2h_external'CTExtに要素を追加する
+ 事によって行なっています。対応media-typeは殆ど増えていませんので、
+ 恩恵を受けられる人は殆どいないでしょう。:-p
+
+ [How to apply this patch.]
+
+ パッチを適用するには、MHonArc-2.2.0を展開し、
+ patch -p1 -d MHonArc-2.2.0 < MHonArc-2.2.0-Japanize-Namazu.patch-1.3a
+ を実行してください。
+ 日本語メッセージを処理する場合は、リソースファイル Japanize.rc の
+ 内容を、実際に使用するリソースファイルに追加して下さい。また、Namazuの
+ 検索対象にする場合は、Namazu.rcの内容を追加することをお勧めします。
+
+ 既にMHonArc 2.3.0alphaが出てきていますが、若干の手パッチによって適用
+ 可能です。MHonArc 2.3.0alphaではm2h_external'filter()にusenameextという
+ オプションが追加されたため、media-typeの認識度向上が容易になっています。
+ usenameextオプションについては、MHonArc 2.3.0alphaのCHANGESを参照して
+ ください。
+
+ [Distribution]
+
+ 再配布等に関しては、オリジナルに同梱のCOPYING(GNU General Public License)
+ に準ずるものとします。
+
+ [Contact]
+ 質問、バグ報告等は、眞柄まで御連絡下さい。
+
+ 眞柄 康弘 (Magara Yasuhiro) gama@paso.fujitsu.co.jp
+ 株式会社富士通オアシス開発 開発部第一開発課
+
+ [ChangeLog]
+
+ 1998.Aug.21 version 1.3a
+ [info]fj.sourcesで一般公開
+ [bug]Japanize.rcの MIMEArgs リソースにtypoがあったのを修正。
+ ('image/gif'が'mage/gif'になっていた)
+
+ 1998.Jul.29 version 1.3
+ [add]連想配列m2h_external'CTExtにOASYS,Visio,XML関係のMEDIA-typeを追加した。
+ [bug]ドキュメント(00README.jp)に書いてあるパッチのファイル名が
+ 古いままになっていたのを修正。
+
+ 1998.Apr.17 version 1.2
+ [bug]ヘッダのmailtoリンクが化けるバグを修正。
+ mhonarc'mailtoをiso_2022_jp'mailtoに置き換えた。
+ [bug]DateとThreadのIndexでヘッダの発信者名が化けるバグを修正。
+ mhonarc'extract_email_addressをiso_2022_jp'extract_email_address
+ のstubに変更。
+ mhonarc'extract_email_nameでmhonarc'extract_email_addressの
+ 結果を利用するように変更。
+
+ 1998.Apr.16 version 1.1
+ [info]MHonArc-2.2.0の日本語対応及びNamazu-1.1.2対応パッチとして更新
+ [bug]iso_2022_jp'str2sgmlで$offsetが初期化されないバグを修正。
+ [info]mhonarc'htmlize_iso2022jpをiso_2022_jp'str2sgmlに統合。
+ [info]mhinit.plへのパッチをリソースファイルへ移動。
+
+ 1997.Sep.26 version 1.0
+ [info]MHonArc-2.1の日本語対応及びSSE-1.1対応パッチとして作成
diff -cNarBb MHonArc-2.2.0.orig/Japanize.rc MHonArc-2.2.0.new/Japanize.rc
*** MHonArc-2.2.0.orig/Japanize.rc Thu Jan 1 09:00:00 1970
--- MHonArc-2.2.0.new/Japanize.rc Thu Aug 20 19:40:21 1998
***************
*** 0 ****
--- 1,42 ----
+
+
+
+
+ plain; iso_2022_jp::str2sgml; iso2022jp.pl
+ us-ascii; mhonarc::htmlize;
+ iso-8859-1; mhonarc::htmlize;
+ iso-8859-2; iso_8859::str2sgml; iso8859.pl
+ iso-8859-3; iso_8859::str2sgml; iso8859.pl
+ iso-8859-4; iso_8859::str2sgml; iso8859.pl
+ iso-8859-5; iso_8859::str2sgml; iso8859.pl
+ iso-8859-6; iso_8859::str2sgml; iso8859.pl
+ iso-8859-7; iso_8859::str2sgml; iso8859.pl
+ iso-8859-8; iso_8859::str2sgml; iso8859.pl
+ iso-8859-9; iso_8859::str2sgml; iso8859.pl
+ iso-8859-10; iso_8859::str2sgml; iso8859.pl
+ iso-2022-jp; iso_2022_jp::str2sgml; iso2022jp.pl
+ default; iso_2022_jp::str2sgml; iso2022jp.pl
+
+
+ text/plain; default=iso-2022-jp
+ image/gif; inline
+ image/jpeg; inline
+ image/x-xbitmap; inline
+ image/x-xbm; inlin
+
+
+
+
+
+
+
+ $SUBJECTNA$
+
+
+
+
diff -cNarBb MHonArc-2.2.0.orig/Namazu.rc MHonArc-2.2.0.new/Namazu.rc
*** MHonArc-2.2.0.orig/Namazu.rc Thu Jan 1 09:00:00 1970
--- MHonArc-2.2.0.new/Namazu.rc Thu Apr 16 11:43:23 1998
***************
*** 0 ****
--- 1,60 ----
+
+
+
+ index.html
+
+
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+ subject
+ from
+ date
+ -extra-
+
+
+
+
+
+ content-
+ errors-to
+ forward
+ lines
+ message-id
+ mime-
+ nntp-
+ originator
+ path
+ precedence
+ received
+ replied
+ return-path
+ status
+ via
+ x-
+ resent-
+ sender
+ reply-to
+ to
+
+
+
+
+
diff -cNarBb MHonArc-2.2.0.orig/install.cfg MHonArc-2.2.0.new/install.cfg
*** MHonArc-2.2.0.orig/install.cfg Wed Mar 4 09:12:31 1998
--- MHonArc-2.2.0.new/install.cfg Wed Apr 15 21:51:20 1998
***************
*** 52,57 ****
--- 52,58 ----
'qprint.pl',
'readmail.pl',
'rfc822.pl',
+ 'iso2022jp.pl',
);
$reldoc = 'doc'; # Location of source doc files relative to install.me
@docfiles = (
diff -cNarBb MHonArc-2.2.0.orig/lib/iso2022jp.pl MHonArc-2.2.0.new/lib/iso2022jp.pl
*** MHonArc-2.2.0.orig/lib/iso2022jp.pl Thu Jan 1 09:00:00 1970
--- MHonArc-2.2.0.new/lib/iso2022jp.pl Fri Apr 17 11:00:04 1998
***************
*** 0 ****
--- 1,211 ----
+ ##---------------------------------------------------------------------------##
+ ## File:
+ ## @(#) iso2022jp.pl 1.0 97/02/25 @(#)
+ ## Author:
+ ## Magara Yasuhiro gama@lm.fujitsu.co.jp
+
+ package iso_2022_jp;
+ require 'iso8859.pl';
+
+ ###############################################################################
+ ## Mapping arrays for characters to entity references
+ ###############################################################################
+
+ ##---------------------------------------------------------------------------
+ ## ISO-2022-JP
+ ##---------------------------------------------------------------------------
+
+ %ISO_2022_JP_To_Ent = ();
+
+ ###############################################################################
+ ## Routines
+ ###############################################################################
+
+ ##---------------------------------------------------------------------------##
+ ## str2str returns a string received and do nothing else.
+ ##
+ ## $return_data = iso_2022_jp'str2str($data, $charset);
+ ##
+ sub str2str {
+ return $_[0];
+ }
+ ##---------------------------------------------------------------------------##
+ ## str2sgml converts a string encoded by $charset to an sgml
+ ## string where special characters are converted to entity
+ ## references.
+ ##
+ ## $return_data = iso_2022_jp'str2sgml($data, $charset, $only8bit);
+ ##
+ ## If $only8bit is non-zero, than only 8-bit characters are
+ ## translated.
+ ##
+
+ sub str2sgml {
+ local($data, $charset, $only8bit) = ($_[0], $_[1], $_[2]);
+ local($ret) = '';
+ local($offset, $len);
+
+ # Get mapping (this method works for Perl 4 and 5)
+ $charset =~ tr/a-z/A-Z/;
+ $charset =~ tr/-/_/;
+ local(*map) = ("${charset}_To_Ent");
+
+ # Convert string
+ while ($data ne "") {
+ if ($data =~ /^\033\([BJ]/) { # Single Byte Segment
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /^\033\$[\@AB]|\033\$\([CD]/) { # Double Byte Segment
+ $data = $';
+ $ret .= $&;
+ while(1) {
+ if ($data =~ /^([!-~][!-~])+/) { # Double Char plain text
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /\033\.[A-F]/) { # G2 Designate Sequence
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /\033N[ -\x7f]/) { # Single Shift Sequence
+ $data = $';
+ $ret .= $&;
+ } else {
+ last;
+ }
+ }
+ } elsif ($data =~ /^[^\033]+/) { # ASCII plain text
+ $data = $';
+ $ascii_text = $&;
+
+ # Convert string
+ $len = length($ascii_text);
+ $offset = 0;
+ while ($offset < $len) {
+ $char = unpack("C", substr($ascii_text, $offset++, 1));
+ if ($only8bit && $char < 0xA0) {
+ $ret .= pack("C", $char);
+ } else {
+ $ret .= ($map{$char} || $iso_8859'US_ASCII_To_Ent{$char} || # '
+ pack("C", $char));
+ }
+ }
+ } elsif ($data =~ /\033\.[A-F]/) { # G2 Designate Sequence
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /\033N[ -\x7f]/) { # Single Shift Sequence
+ $data = $';
+ $ret .= $&;
+ } else {
+ $ret .= $data;
+ last;
+ }
+ }
+ $ret .= "\033\(J" if ($ret !~ /\033\(J$/);
+ $ret;
+ }
+
+ sub mailto {
+ local(*data) = @_;
+ local($ret) = '';
+
+ # Convert string
+ while ($data ne "") {
+ if ($data =~ /^\033\([BJ]/) { # Single Byte Segment
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /^\033\$[\@AB]|\033\$\([CD]/) { # Double Byte Segment
+ $data = $';
+ $ret .= $&;
+ while(1) {
+ if ($data =~ /^([!-~][!-~])+/) { # Double Char plain text
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /\033\.[A-F]/) { # G2 Designate Sequence
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /\033N[ -\x7f]/) { # Single Shift Sequence
+ $data = $';
+ $ret .= $&;
+ } else {
+ last;
+ }
+ }
+ } elsif ($data =~ /^[^\033]+/) { # ASCII plain text
+ $data = $';
+ $ascii_text = $&;
+ # Convert string
+ if ($MAILTOURL) {
+ $ascii_text =~ s|([\!\%\w\.\-+=/]+@[\w\.\-]+)|&mhonarc'mailUrl($1)|ge;
+ } else {
+ $ascii_text =~ s|([\!\%\w\.\-+=/]+@[\w\.\-]+)|$1|g;
+ }
+ $ret .= $ascii_text;
+ } elsif ($data =~ /\033\.[A-F]/) { # G2 Designate Sequence
+ $data = $';
+ $ret .= $&;
+ } elsif ($data =~ /\033N[ -\x7f]/) { # Single Shift Sequence
+ $data = $';
+ $ret .= $&;
+ } else {
+ $ret .= $data;
+ last;
+ }
+ }
+ $ret .= "\033\(J" if ($ret !~ /\033\(J$/);
+ $data = $ret;
+ }
+
+ sub extract_email_address {
+ local($data) = shift;
+ local($ret) = '';
+
+ # Convert string
+ while ($data ne "") {
+ if ($data =~ /^\033\([BJ]/) { # Single Byte Segment
+ $data = $';
+ # $ret .= $&;
+ } elsif ($data =~ /^\033\$[\@AB]|\033\$\([CD]/) { # Double Byte Segment
+ $data = $';
+ # $ret .= $&;
+ while(1) {
+ if ($data =~ /^([!-~][!-~])+/) { # Double Char plain text
+ $data = $';
+ # $ret .= $&;
+ } elsif ($data =~ /\033\.[A-F]/) { # G2 Designate Sequence
+ $data = $';
+ # $ret .= $&;
+ } elsif ($data =~ /\033N[ -\x7f]/) { # Single Shift Sequence
+ $data = $';
+ # $ret .= $&;
+ } else {
+ last;
+ }
+ }
+ } elsif ($data =~ /^[^\033]+/) { # ASCII plain text
+ $data = $';
+ $ascii_text = $&;
+
+ if ($ascii_text =~ /<(\S+)>/) {
+ $ret = $1;
+ } elsif ($ascii_text =~ s/\([^\)]+\)//) {
+ $ascii_text =~ /\s*(\S+)\s*/; $ret = $1;
+ } else {
+ $ascii_text =~ /\s*(\S+)\s*/; $ret = $1;
+ }
+ return $ret if ($ret);
+ } elsif ($data =~ /\033\.[A-F]/) { # G2 Designate Sequence
+ $data = $';
+ # $ret .= $&;
+ } elsif ($data =~ /\033N[ -\x7f]/) { # Single Shift Sequence
+ $data = $';
+ # $ret .= $&;
+ } else {
+ # $ret .= $data;
+ last;
+ }
+ }
+ # $ret .= "\033\(J" if ($ret !~ /\033\(J$/);
+ $ret;
+ }
+ ##---------------------------------------------------------------------------##
+
+ 1;
diff -cNarBb MHonArc-2.2.0.orig/lib/mhexternal.pl MHonArc-2.2.0.new/lib/mhexternal.pl
*** MHonArc-2.2.0.orig/lib/mhexternal.pl Wed Mar 4 09:12:53 1998
--- MHonArc-2.2.0.new/lib/mhexternal.pl Wed Jul 29 10:17:05 1998
***************
*** 67,76 ****
--- 67,82 ----
'application/sgml', 'sgml:SGML document',
'application/studiom', 'smp:Studio M file',
'application/timbuktu', 'tbt:timbuktu file',
+ 'application/vnd.fujitsu.oasys', 'oas:FUJITSU OASYS Document format',
+ 'application/vnd.fujitsu.oasys2', 'oa2:FUJITSU OASYS Document format 2',
+ 'application/vnd.fujitsu.oasys3', 'oa3:FUJITSU OASYS Document format 3',
+ 'application/vnd.fujitsu.oasysgp', 'fg5:FUJITSU OASYS GraphPro file',
+ 'application/vnd.fujitsu.oasysprs', 'bh2:FUJITSU OASYS Presentation file',
'application/vnd.hp-hpgl', 'hpg,hpgl:HPGL file',
'application/vnd.ms-excel', 'xls:MS-Excel spreadsheet',
'application/vnd.ms-powerpoint', 'ppt:MS-Powerpoint presentation',
'application/vnd.ms-project', 'mpp:MS-Project file',
+ 'application/vnd.visio', 'vsd:Visio file',
'application/vis5d', 'v5d:Vis5D dataset',
'application/winhlp', 'hlp:WinHelp document',
'application/wordperfect5.1', 'hlp:WordPerfect 5.1 document',
***************
*** 130,135 ****
--- 136,142 ----
'application/x-ustar', 'ustar:UStar file',
'application/x-wais-source', 'src:WAIS Source',
'application/x-zip-compressed', 'zip:Zip compressed data',
+ 'application/xml', 'xml:Extensible Markup Language',
'application/zip', 'zip:Zip archive',
'audio/basic', 'snd:Basic audio',
***************
*** 211,216 ****
--- 218,224 ----
'text/sgml', 'sgml:SGML document',
'text/tab-separated-values', 'tsv:Tab separated values',
'text/x-speech', 'talk:Speech document',
+ 'text/xml', 'xml:Extensible Markup Language',
'video/isivideo', 'fvi:isi video',
'video/mpeg', 'mpg,mpeg,mpe:MPEG movie',
diff -cNarBb MHonArc-2.2.0.orig/lib/mhinit.pl MHonArc-2.2.0.new/lib/mhinit.pl
*** MHonArc-2.2.0.orig/lib/mhinit.pl Wed Mar 4 09:12:53 1998
--- MHonArc-2.2.0.new/lib/mhinit.pl Thu Apr 16 11:37:04 1998
***************
*** 47,52 ****
--- 47,53 ----
"MDT", 6, # Mountain Daylight Time
"PST", 8, # Pacific Standard Time
"PDT", 7, # Pacific Daylight Time
+ "JST",-9, # JAPAN Standard Time
);
## Assoc array listing mail header fields to exclude in output.
diff -cNarBb MHonArc-2.2.0.orig/lib/mhutil.pl MHonArc-2.2.0.new/lib/mhutil.pl
*** MHonArc-2.2.0.orig/lib/mhutil.pl Wed Mar 4 09:12:54 1998
--- MHonArc-2.2.0.new/lib/mhutil.pl Fri Apr 17 10:59:01 1998
***************
*** 26,31 ****
--- 26,32 ----
##---------------------------------------------------------------------------##
package mhonarc;
+ require 'iso2022jp.pl';
##---------------------------------------------------------------------------
## Get an e-mail address from (HTML) $str.
***************
*** 34,46 ****
local($str) = shift;
local($ret);
! if ($str =~ /<(\S+)>/) {
! $ret = $1;
! } elsif ($str =~ s/\([^\)]+\)//) {
! $str =~ /\s*(\S+)\s*/; $ret = $1;
! } else {
! $str =~ /\s*(\S+)\s*/; $ret = $1;
! }
$ret;
}
--- 35,48 ----
local($str) = shift;
local($ret);
! $ret = &iso_2022_jp'extract_email_address($str);
! # if ($str =~ /<(\S+)>/) {
! # $ret = $1;
! # } elsif ($str =~ s/\([^\)]+\)//) {
! # $str =~ /\s*(\S+)\s*/; $ret = $1;
! # } else {
! # $str =~ /\s*(\S+)\s*/; $ret = $1;
! # }
$ret;
}
***************
*** 50,55 ****
--- 52,70 ----
sub extract_email_name {
local($str) = shift;
local($ret);
+ local($email);
+
+ $email = extract_email_address($str);
+ if ($email) {
+ $ret = $str;
+ $ret =~ s/<$email>//g;
+ $ret =~ s/$email//g;
+ if ($ret =~ /^[\s\"\(\)<>]*$/) {
+ $ret = $email;
+ $ret =~ s/@.*//;
+ }
+ }
+ return $ret;
if ($str =~ s/<(\S+)>//) { # Check for: name
$ret = $1;
***************
*** 355,361 ****
##
sub field_add_links {
local($label, *fld_text) = @_;
! &mailto(*fld_text)
if !$NOMAILTO &&
$label =~ /^(to|from|cc|sender|reply-to|resent-to|resent-cc)/i;
&newsurl(*fld_text)
--- 370,376 ----
##
sub field_add_links {
local($label, *fld_text) = @_;
! &iso_2022_jp'mailto(*fld_text)
if !$NOMAILTO &&
$label =~ /^(to|from|cc|sender|reply-to|resent-to|resent-cc)/i;
&newsurl(*fld_text)