• R/O
  • HTTP
  • SSH
  • HTTPS

jm: Commit

翻訳ドキュメント管理用


Commit MetaInfo

Revision174b6c0879879e7ba24db0ee1f2de7bcf616626c (tree)
Time2022-05-29 21:01:14
Authormatsuand <30614168+matsuand@user...>
Commitermatsuand

Log Message

translation_list バージョン2 導入開始。

Change Summary

Incremental Difference

--- /dev/null
+++ b/bin/JMcommon.pm
@@ -0,0 +1,53 @@
1+#!/usr/bin/perl
2+package JMcommon;
3+
4+require Exporter;
5+@ISA = qw(Exporter);
6+@EXPORT_OK = qw(getCommentInfo);
7+
8+#
9+# コメント行内のキーワードとその値を %thash に取り込む。
10+#
11+sub getCommentInfo($) {
12+ my %thash;
13+ my $tl = $_;
14+ my $ver = 1;
15+
16+ open TL, $tl || die "cannot open $tl";
17+ while (<TL>){
18+ chomp;
19+ my $line = $_;
20+
21+ # 行頭がコメント記号(#)で始まる場合
22+ if ($line =~ /^\#/) {
23+
24+ # キーワードコメント行(#. KEYWORD VALUE)の場合
25+ if ($line =~ /^\#\.[ \t]*([a-zA-Z_]+)[ \t]+(.*)$/) {
26+ $thash{$1} = $2;
27+ }
28+ }
29+ }
30+ close TL;
31+
32+ # コメント行内のキーワード指定に TL_VERSION がない場合、
33+ # TL_VERSION を 1 として %thash に登録する。
34+ if ($thash{'TL_VERSION'} eq '') {
35+ $thash{'TL_VERSION'} = 1;
36+ }
37+
38+ # translation_list バージョン1の各キーに合わせるために、
39+ # 必要なキーと値を生成する。
40+
41+ # パッケージ名: pkg <= PACKAGE_NAME
42+ $thash{'pkg'} = $thash{'PACKAGE_NAME'};
43+
44+ # パッケージバージョン: over,dver,rver <= PACKAGE_VER
45+ $thash{'over'} = $thash{'PACKAGE_VER'};
46+ $thash{'dver'} = $thash{'PACKAGE_VER'};
47+ $thash{'rver'} = $thash{'PACKAGE_VER'};
48+
49+ # パッケージリリース日付: odat <= PACKAGE_DATE
50+ $thash{'odat'} = $thash{'PACKAGE_DATE'};
51+
52+ %thash;
53+}
--- a/bin/JMtl.pm
+++ b/bin/JMtl.pm
@@ -46,6 +46,10 @@ sub line2hash($) {
4646 my %thash;
4747
4848 chomp $entry;
49+
50+ # コメント行であった場合は空ハッシュを返して終了
51+ if ($entry =~ /^\#/) { return %thash; }
52+
4953 my @member = split /:/, $entry;
5054
5155 my $mark = $member[0];
--- /dev/null
+++ b/bin/JMtl2.pm
@@ -0,0 +1,81 @@
1+#!/usr/bin/perl
2+package JMtl2;
3+
4+require Exporter;
5+@ISA = qw(Exporter);
6+@EXPORT_OK = qw(line2hash_ver2);
7+
8+#
9+# entry → hash.
10+#
11+sub line2hash_ver2($) {
12+ my ($entry) = @_;
13+ my %thash;
14+
15+ chomp $entry;
16+
17+ # コメント行であった場合は空ハッシュを返して終了
18+ if ($entry =~ /^\#/) { return %thash; }
19+
20+ my @member = split /\|/, $entry;
21+
22+ my $status_str = &trim($member[0]);
23+
24+ my ($stat);
25+ my $kind = 'roff';
26+
27+ SW1: {
28+ #if ($mark eq '×') {$stat = '1st_non'; last SW1;}
29+ #if ($mark eq '▲') {$stat = '1st_rsv'; last SW1;}
30+ #if ($mark eq '△') {$stat = '1st_dft'; last SW1;}
31+ #if ($mark eq '●') {$stat = '1st_prf'; last SW1;}
32+ #if ($mark eq '☆') {$stat = 'upd_non'; last SW1;}
33+ #if ($mark eq '■') {$stat = 'upd_rsv'; last SW1;}
34+ #if ($mark eq '□') {$stat = 'upd_dft'; last SW1;}
35+ #if ($mark eq '◆') {$stat = 'upd_prf'; last SW1;}
36+ #if ($mark eq '○') {$stat = 'up2date'; last SW1;}
37+ #if ($mark eq '◎') {$stat = 'up2datR'; last SW1;}
38+ #if ($mark eq 'C') {$stat = 'cnt_upd'; last SW1;}
39+ #if ($mark eq 'c') {$stat = 'cnt_old'; last SW1;}
40+ if ($status_str eq '未対応') {$stat = '1st_non'; last SW1;}
41+ if ($status_str eq '翻訳中') {$stat = '1st_rsv'; last SW1;}
42+ if ($status_str eq '翻訳完') {$stat = '1st_dft'; last SW1;}
43+ if ($status_str eq '校正中') {$stat = '1st_prf'; last SW1;}
44+ if ($status_str eq '校正完') {$stat = 'up2date'; last SW1;}
45+ if ($status_str eq '寄贈') {$stat = 'cnt_upd'; last SW1;}
46+
47+ $kind = 'link';
48+ #if ($mark eq '@') {$stat = 'up2date'; last SW1;}
49+ #if ($mark eq '※') {$stat = '1st_non'; last SW1;}
50+ if ($status_str eq 'リンク') {$stat = '1st_non'; last SW1;}
51+
52+ $kind = 'roff';
53+ }
54+
55+ $thash{'mark'} = "$status_str";
56+ $thash{'kind'} = $kind;
57+ $thash{'stat'} = $stat;
58+
59+ $thash{'fname'} = &trim($member[2]); # TLバージョン2 では拡張子込みのファイル名
60+ $thash{'sec'} = &trim($member[1]); # TLバージョン2 では "man" + <num>
61+
62+ $thash{'tdat'} = &trim($member[5]);
63+ $thash{'tname'} = &trim($member[6]);
64+ $thash{'tmail'} = &trim($member[7]);
65+ $thash{'lname'} = &trim($member[4]); # TLバージョン2 では拡張子込みのファイル名
66+ $thash{'lsec'} = &trim($member[3]); # TLバージョン2 では "man" + <num>
67+
68+ $thash{'comment'} = $member[8];
69+ for (my $i = 9; $i <= $#member; $i++){
70+ $thash{'comment'} .= ":$member[$i]";
71+ }
72+
73+ %thash;
74+}
75+
76+
77+sub trim {
78+ my $str = $_[0];
79+ $str =~ s/^[ \t]*(.*?)[ \t]*$/$1/;
80+ return $str;
81+}
--- a/bin/mkdist.perl
+++ b/bin/mkdist.perl
@@ -9,7 +9,9 @@ BEGIN{
99 $epath = `dirname $0`; chomp $epath;
1010 unshift (@INC, $epath);
1111 }
12+use JMcommon ('getCommentInfo');
1213 use JMtl ('line2hash', 'hash2line');
14+use JMtl2 ('line2hash_ver2');
1315 use strict 'vars';
1416
1517 my ($idx_header, $idx_footer);
@@ -40,12 +42,12 @@ if (-d "$DISTROOT/manual") {
4042 }
4143 system("mkdir -p $DISTROOT/manual");
4244
43-my (%roff_hash, %link_hash);
45+my (%roff_hash, %roff_status, %link_hash);
4446 #
4547 # $CVSROOT/manual/$pkg/translation_list の scan.
4648 #
4749 print "scanning translation_list's...\n";
48-open RL,"find $CVSROOT/manual -name translation_list|";
50+open RL,"find $CVSROOT/manual -name translation_list | sort |";
4951 while(<RL>){
5052 print;
5153 chomp;
@@ -60,33 +62,97 @@ while(<RL>){
6062 system "mkdir -p $DISTROOT/manual/$pkg/";
6163 system "cp $tl $DISTROOT/manual/$pkg";
6264
65+ my %ti_common = getCommentInfo($tl);
66+ my $tl_ver = $ti_common{'TL_VERSION'};
67+
6368 open TL, $tl || die "cannot open $tl";
6469 while (<TL>){
6570 chomp;
66- my %ti = line2hash($_);
71+ my %ti_ver;
72+ if ($tl_ver == 2) {
73+ %ti_ver = line2hash_ver2($_);
74+ } else {
75+ %ti_ver = line2hash($_);
76+ }
77+ # ハッシュが空の場合(=コメント行であった場合)は next
78+ if (!%ti_ver) { next; }
79+
80+ # ハッシュを統合する
81+ # ( ti_common: 共通ハッシュ, ti_ver: バージョン別ハッシュ )
82+ my %ti = (%ti_common, %ti_ver);
83+
6784 my $name = $ti{fname};
6885 my $sec = $ti{sec};
69- my $page = "$pkg,$name,$sec";
86+ my $page = "$tl_ver,$pkg,$name,$sec";
87+ $roff_status{"$page"} = $ti{stat};
7088
71- if ($ti{kind} eq "link" && $ti{stat} eq "up2date"){
72- my $dst = ".so man$ti{lsec}/$ti{lname}.$ti{lsec}";
73- $link_hash{"$page"} = $dst;
74- print "collect link: $page => $dst\n";
89+ if ($ti{kind} eq roff && $ti{stat} =~ /^cnt/) {
90+ my $src;
91+ if ($tl_ver == 2) {
92+ $src = "$pkg/contrib/$sec/$name";
93+ } else {
94+ $src = "$pkg/contrib/man$sec/$name.$sec";
95+ }
96+ if (-f "$CVSROOT/manual/$src") {
97+ $roff_hash{"$page"} = $src;
98+ print "collect roff: $page <= $src\n";
99+ }
75100 next;
76101 }
77102
78- if ($ti{kind} eq roff && $ti{stat} =~ /^up/) {
79- my $src = "$pkg/release/man$sec/$name.$sec";
80- $roff_hash{"$page"} = $src;
81- print "collect roff: $page <= $src\n";
103+ if ($ti{kind} eq roff && -d "$CVSROOT/manual/$pkg/release") {
104+ my $src;
105+ if ($tl_ver == 2) {
106+ $src = "$pkg/release/$sec/$name";
107+ } else {
108+ $src = "$pkg/release/man$sec/$name.$sec";
109+ }
110+ if (-f "$CVSROOT/manual/$src" && $ti{stat} ne "1st_non") {
111+ $roff_hash{"$page"} = $src;
112+ print "collect roff: $page <= $src\n";
113+ }
82114 next;
83115 }
116+ }
84117
85- if ($ti{kind} eq roff && $ti{stat} =~ /^cnt/) {
86- my $src = "$pkg/contrib/man$sec/$name.$sec";
87- $roff_hash{"$page"} = $src;
88- print "collect roff: $page <= $src\n";
89- next;
118+ # もう一度、先頭から走査して、リンクファイルについて
119+ # そのリンク先が翻訳済みとして記述されていたかどうかを
120+ # 確認し、リンクのための出力処理を行う。
121+ # (リンク行のステータスを利用しない=記述内容を信用しない)
122+ seek(TL, 0, 0);
123+ while (<TL>){
124+ chomp;
125+ my %ti_ver;
126+ if ($tl_ver == 2) {
127+ %ti_ver = line2hash_ver2($_);
128+ } else {
129+ %ti_ver = line2hash($_);
130+ }
131+ # ハッシュが空の場合(=コメント行であった場合)は next
132+ if (!%ti_ver) { next; }
133+
134+ # ハッシュを統合する
135+ # ( ti_common: 共通ハッシュ, ti_ver: バージョン別ハッシュ )
136+ my %ti = (%ti_common, %ti_ver);
137+
138+ my $name = $ti{fname};
139+ my $sec = $ti{sec};
140+ my $page = "$tl_ver,$pkg,$name,$sec";
141+ my $lname = $ti{lname};
142+ my $lsec = $ti{lsec};
143+ my $lpage = "$tl_ver,$pkg,$lname,$lsec";
144+ if ($lsec ne "" && $lname ne "") {
145+ my $dst_status = $roff_status{"$lpage"};
146+ if ($dst_status !~ /^1st/) {
147+ my $dst;
148+ if ($tl_ver == 2) {
149+ $dst = ".so man$lsec/$lname";
150+ } else {
151+ $dst = ".so man$lsec/$lname.$lsec";
152+ }
153+ $link_hash{"$page"} = $dst;
154+ print "collect link: $page => $dst\n";
155+ }
90156 }
91157 }
92158 close TL;
@@ -97,10 +163,17 @@ close RL;
97163 # copy 開始
98164 #
99165 foreach my $fkey (sort keys %roff_hash){
100- my ($pkg,$name,$sec)=split /,/, $fkey;
166+ my ($tl_ver,$pkg,$name,$sec)=split /,/, $fkey;
101167
102- my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
103- my $dstfile = "$dstdir/$name.$sec";
168+ my $dstdir;
169+ my $dstfile;
170+ if ($tl_ver == 2) {
171+ $dstdir = "$DISTROOT/manual/$pkg/$sec";
172+ $dstfile = "$dstdir/$name";
173+ } else {
174+ $dstdir = "$DISTROOT/manual/$pkg/man$sec";
175+ $dstfile = "$dstdir/$name.$sec";
176+ }
104177 my $srcfile = "$CVSROOT/manual/$roff_hash{$fkey}";
105178
106179 print "copy $srcfile => $dstfile\n";
@@ -112,10 +185,17 @@ foreach my $fkey (sort keys %roff_hash){
112185 # make symlinks
113186 #
114187 foreach my $fkey (sort keys %link_hash){
115- my ($pkg, $name, $sec) = split /,/, $fkey;
188+ my ($tl_ver,$pkg, $name, $sec) = split /,/, $fkey;
116189
117- my $dstdir = "$DISTROOT/manual/$pkg/man$sec";
118- my $dstfile = "$dstdir/$name.$sec";
190+ my $dstdir;
191+ my $dstfile;
192+ if ($tl_ver == 2) {
193+ $dstdir = "$DISTROOT/manual/$pkg/$sec";
194+ $dstfile = "$dstdir/$name";
195+ } else {
196+ $dstdir = "$DISTROOT/manual/$pkg/man$sec";
197+ $dstfile = "$dstdir/$name.$sec";
198+ }
119199
120200 print "cat \"$link_hash{$fkey}\" > $dstfile\n";
121201 system "mkdir -p $dstdir";
@@ -142,13 +222,28 @@ while(<RL>){
142222 unless(/.*pod\/([^\/]*)\/translation_list/){next;}
143223 my $pkg=$1;
144224
145- system "mkdir -p $DISTROOT/manual/$pkg/";
146- system "cp $tl $DISTROOT/manual/$pkg";
225+ system "mkdir -p $DISTROOT/pod/$pkg/";
226+ system "cp $tl $DISTROOT/pod/$pkg";
227+
228+ my %ti_common = getCommentInfo($tl);
229+ my $tl_ver = $ti_common{'TL_VERSION'};
147230
148231 open TL, $tl || die "cannot open $tl";
149232 while (<TL>){
150233 chomp;
151- my %ti = line2hash($_);
234+ my %ti_ver;
235+ if ($tl_ver == 2) {
236+ %ti_ver = line2hash_ver2($_);
237+ } else {
238+ %ti_ver = line2hash($_);
239+ }
240+ # ハッシュが空の場合(=コメント行であった場合)は next
241+ if (!%ti_ver) { next; }
242+
243+ # ハッシュを統合する
244+ # ( ti_common: 共通ハッシュ, ti_ver: バージョン別ハッシュ )
245+ my %ti = (%ti_common, %ti_ver);
246+
152247 my $name = $ti{fname};
153248 my $page = "$pkg,$name";
154249
@@ -177,4 +272,3 @@ foreach my $fkey (sort keys %pod_hash){
177272 system "mkdir -p $dstdir";
178273 system "$POD2MAN --utf8 $srcfile > $dstfile";
179274 }
180-
Show on old repository browser