寺西です。 Tadamasa Teranishi wrote: > > それとは別に 2.1 版で namazu-2.0.12-fixinutf8.patch を大幅に簡素化 > して書き直したパッチをもう少し後に公開します。 このパッチを公開します。 > (Akira TAGOH さんには申し訳ないのですが、多少問題点があるため、 > 修正の必要がありました。また、いろいろ欲が出て手を加えたため、 > 随分と違ったものになりました。もちろん、元のプログラム、データが > 有効なものであるからこそ、いろいろ手を加えたくなったわけで、 > Akira TAGOH さんの努力を無駄にはしていないと思っています。) # というより、コアの部分はそのまま使わせていただいています。 変更内容: ・regexp パターンが中心だが、一部通常の文字列も取り扱う部分 があるため、文字列リソースとして扱うことにしました。 (実際の処理に違いはありません。) ・langspec.txt を resource.txt と名前を変更しました。 (以下、リソースファイルと呼ぶ) ・リソースファイルを filter/ から pl/resource/ に置くように変更 しました。 (念のため、将来、言語ごとのファイルが増えることを考慮して、 サブディレクトリを作成しました。) ・リソースファイルのフォーマットは継承しつつ、 空白行、行頭に '#' を記述するとコメント行としました。 ・リソースに無効な内容が含まれる場合には、ワーニングを表示するように しました。 ・util::read_langspec_char_from_file() は、 util::loadresourcefile() と util::loadstring() に分割しました。 ・util::loadresourcefile() は、mknmz の最初に呼び出され、 リソースファイルを読み込みます。 ファイルが読み込めない場合は、mknmz を終了します。 (英語モードでは一見リソースファイルが不要に思えますが、実際には 英語の処理にも文字列リソースを使うため) ・util::loadstring() は、文字列id をキーにリソースから文字列を 取り出します。 キーが見つからない場合は、システムエラー(プログラムミス)のため、 mknmz を終了します。 ・文字列id は一部変更しました。また、リソースの追加を行いました。 ・utf8 ファイル、切り替え機能は無効なため、削除しました。 これにより、I18N::Langinfo は使わなくなりましたので、インストール の必要はなくなりました。 -- ===================================================================== 寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx http://www.asahi-net.or.jp/~yw3t-trns/index.htm Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E
Index: namazu/configure.in
===================================================================
RCS file: /storage/cvsroot/namazu/configure.in,v
retrieving revision 1.157
diff -u -r1.157 configure.in
--- namazu/configure.in 1 Aug 2003 08:18:10 -0000 1.157
+++ namazu/configure.in 1 Feb 2004 07:30:58 -0000
@@ -408,6 +408,7 @@
pl/Makefile
pl/var.pl
pl/conf.pl
+ pl/resource/Makefile
po/Makefile.in
scripts/Makefile
scripts/bnamazu
Index: namazu/filter/hnf.pl
===================================================================
RCS file: /storage/cvsroot/namazu/filter/hnf.pl,v
retrieving revision 1.10
diff -u -r1.10 hnf.pl
--- namazu/filter/hnf.pl 29 Nov 2001 09:29:20 -0000 1.10
+++ namazu/filter/hnf.pl 1 Feb 2004 07:30:58 -0000
@@ -69,8 +69,8 @@
my $mark = "# ";
my $end = "--";
- $mark = "■" if util::islang("ja");
- $end = "▼" if util::islang("ja");
+ $mark = util::loadstring("hnf.pl_filter_mark") if util::islang("ja");
+ $end = util::loadstring("hnf.pl_filter_end") if util::islang("ja");
get_uri($cfile, $fields);
hnf_filter($contref, $weighted_str, $fields, $headings, $cfile,
Index: namazu/filter/mailnews.pl
===================================================================
RCS file: /storage/cvsroot/namazu/filter/mailnews.pl,v
retrieving revision 1.28
diff -u -r1.28 mailnews.pl
--- namazu/filter/mailnews.pl 7 Oct 2003 05:48:56 -0000 1.28
+++ namazu/filter/mailnews.pl 1 Feb 2004 07:30:58 -0000
@@ -180,9 +180,11 @@
my @tmp = split(/\n/, $$contref);
$$contref = "";
+ my $regexp = util::loadstring("mailnews.pl_mailnews_citation_filter_1");
+
# Greeting at the beginning (first one or two lines)
for (my $i = 0; $i < 2 && defined($tmp[$i]); $i++) {
- if ($tmp[$i] =~ /(^\s*((([\xa1-\xfe][\xa1-\xfe]){1,8}|([\x21-\x7e]{1,16}))\s*(。|.|\.|,|,|、|\@|@|の)\s*){0,2}\s*(([\xa1-\xfe][\xa1-\xfe]){1,8}|([\x21-\x7e]{1,16}))\s*(です|と申します|ともうします|といいます)(.{0,2})?\s*$)/) {
+ if ($tmp[$i] =~ /$regexp/) {
# for searching debug info by perl -n00e 'print if /^<<<</'
util::dprint("\n\n<<<<$tmp[$i]>>>>\n\n");
$omake .= $tmp[$i] . "\n";
@@ -206,13 +208,14 @@
# Isolate meaningless message such as "foo wrote:".
@tmp = split(/\n\n+/, $$contref);
$$contref = "";
+ $regexp = util::loadstring("mailnews.pl_mailnews_citation_filter_2");
my $i = 0;
for my $line (@tmp) {
# Complete excluding is impossible. I tnink it's good enough.
# Process only first five paragrahs.
# And don't handle the paragrah which has five or longer lines.
# Hmm, this regex looks very hairly.
- if ($i < 5 && ($line =~ tr/\n/\n/) <= 5 && $line =~ /(^\s*(Date:|Subject:|Message-ID:|From:|件名|差出人|日時))|(^.+(返事です|reply\s*です|曰く|いわく|書きました|言いました|話で|wrote|said|writes|says)(.{0,2})?\s*$)|(^.*In .*(article|message))|(<\S+\@([\w\-.]\.)+\w+>)/im) {
+ if ($i < 5 && ($line =~ tr/\n/\n/) <= 5 && $line =~ /$regexp/im) {
util::dprint("\n\n<<<<$line>>>>\n\n");
$omake .= $line . "\n";
$line = "";
Index: namazu/filter/man.pl
===================================================================
RCS file: /storage/cvsroot/namazu/filter/man.pl,v
retrieving revision 1.28
diff -u -r1.28 man.pl
--- namazu/filter/man.pl 23 Sep 2002 08:52:32 -0000 1.28
+++ namazu/filter/man.pl 1 Feb 2004 07:30:58 -0000
@@ -142,15 +142,15 @@
my $weight = $conf::Weight{'html'}->{'title'};
$$weighted_str .= "\x7f$weight\x7f$title\x7f/$weight\x7f\n";
- if ($$contref =~ /^(?:NAME|名前|名称)\s*\n(.*?)\n\n/ms) {
+ my $regexp = util::loadstring("man.pl_man_filter_name");
+ if ($$contref =~ /$regexp/ms) {
$name = "$1::\n";
$weight = $conf::Weight{'html'}->{'h1'};
$$weighted_str .= "\x7f$weight\x7f$1\x7f/$weight\x7f\n";
}
- if ($$contref =~
- s/\A(.+^(?:DESCRIPTION 解説|DESCRIPTIONS?|SHELL GRAMMAR|INTRODUCTION|【概要】|解説|説明|機能説明|基本機能説明)\s*\n)//ims)
- {
+ $regexp = util::loadstring("man.pl_man_filter_description");
+ if ($$contref =~ s/$regexp//ims) {
$$contref = $name . $$contref;
$$weighted_str .= "\x7f1\x7f$1\x7f/1\x7f\n";
}
Index: namazu/pl/Makefile.am
===================================================================
RCS file: /storage/cvsroot/namazu/pl/Makefile.am,v
retrieving revision 1.18
diff -u -r1.18 Makefile.am
--- namazu/pl/Makefile.am 11 Jan 2004 08:57:58 -0000 1.18
+++ namazu/pl/Makefile.am 1 Feb 2004 07:30:59 -0000
@@ -2,6 +2,10 @@
AUTOMAKE_OPTIONS = 1.4 no-dependencies
+SUBDIRS = resource
+
+DIST_SUBDIRS = resource
+
localedir = $(prefix)/$(DATADIRNAME)/locale
perllibdir = $(pkgdatadir)/pl
Index: namazu/pl/gfilter.pl
===================================================================
RCS file: /storage/cvsroot/namazu/pl/gfilter.pl,v
retrieving revision 1.3
diff -u -r1.3 gfilter.pl
--- namazu/pl/gfilter.pl 30 Jan 2004 14:22:16 -0000 1.3
+++ namazu/pl/gfilter.pl 1 Feb 2004 07:30:59 -0000
@@ -89,13 +89,14 @@
return undef unless defined($$text);
my @tmp = split(/\n/, $$text);
+ my $regexp = util::loadstring("gfilter.pl_line_adjust_filter");
for my $line (@tmp) {
$line .= "\n";
$line =~ s/^[ \>\|\#\:]+//;
$line =~ s/ +$//;
$line =~ s/\n// if (($line =~ /[\xa1-\xfe]\n*$/) &&
(length($line) >=40));
- $line =~ s/(。|、)$/$1\n/;
+ $line =~ s/$regexp/$1\n/;
$line =~ s/([a-z])-\n/$1/; # for hyphenation.
}
$$text = join('', @tmp);
Index: namazu/pl/util.pl
===================================================================
RCS file: /storage/cvsroot/namazu/pl/util.pl,v
retrieving revision 1.28
diff -u -r1.28 util.pl
--- namazu/pl/util.pl 11 Jan 2004 08:57:58 -0000 1.28
+++ namazu/pl/util.pl 1 Feb 2004 07:30:59 -0000
@@ -313,4 +313,44 @@
return $_[0] =~ /^[a-z]+:/;
}
+my $PKGDATADIR = $ENV{'pkgdatadir'} || "/usr/local/share/namazu";
+my $LIBDIR = $PKGDATADIR . "/pl"; # directory where library etc. are in.
+my $RESOURCEDIR = $LIBDIR . "/resource"; # directory where resource are in.
+
+my %resource;
+
+sub loadresourcefile () {
+ my $cont;
+ my $fh = util::efopen("$RESOURCEDIR/resource.txt");
+ $cont = util::readfile($fh);
+ $fh->close();
+
+ my @string = split(/\n/, $cont);
+
+ my $line = 1;
+ for my $string (@string) {
+ if ($string =~ /^#|^\s*$/) {
+ # comment
+ } elsif ($string =~ /^(.*)?: (.*)$/) {
+ $resource{$1} = $2;
+ } else {
+ chomp($string);
+ printf("Warning: Syntax error." .
+ " $RESOURCEDIR/resource.txt(%d): %s\n", $line, $string);
+ }
+ $line++;
+ }
+
+ return undef;
+}
+
+sub loadstring ($) {
+ my ($strid) = @_;
+ my $str = $resource{$strid};
+
+ cdie("Warning: undefined id: $strid\n") unless (defined $str);
+
+ return $str;
+}
+
1;
Index: namazu/pl/wakati.pl
===================================================================
RCS file: /storage/cvsroot/namazu/pl/wakati.pl,v
retrieving revision 1.12
diff -u -r1.12 wakati.pl
--- namazu/pl/wakati.pl 15 Jul 2003 04:48:15 -0000 1.12
+++ namazu/pl/wakati.pl 1 Feb 2004 07:30:59 -0000
@@ -54,7 +54,8 @@
# Collect only noun words when -m option is specified.
if ($var::Opt{'noun'}) {
$$content = "";
- $$content .= shift(@tmp) =~ /(.+ )名詞/ ? $1 : "" while @tmp;
+ my $regexp = util::loadstring("wakati.pl_wakatize_japanese");
+ $$content .= shift(@tmp) =~ /$regexp/ ? $1 : "" while @tmp;
} else {
$$content = join("\n", @tmp);
}
Index: namazu/scripts/mknmz.in
===================================================================
RCS file: /storage/cvsroot/namazu/scripts/mknmz.in,v
retrieving revision 1.129
diff -u -r1.129 mknmz.in
--- namazu/scripts/mknmz.in 30 Jan 2004 16:41:29 -0000 1.129
+++ namazu/scripts/mknmz.in 1 Feb 2004 07:31:05 -0000
@@ -82,6 +82,8 @@
# At first, loading pl/conf.pl to prevent overriding some variables.
preload_modules();
+ util::loadresourcefile();
+
# set LANG and bind textdomain
util::set_lang();
textdomain('namazu', $util::LANG_MSG);
@@ -726,7 +728,7 @@
if (util::islang_msg("ja")) {
if ($msg eq "unknown") {
- return "不明";
+ return util::loadstring("mknmz.in_getmsg_unknown");
}
}
return $msg;Attachment:
resource.tar.gz
Description: GNU Zip compressed data