#! /usr/bin/perl # # 新しいパッケージをレポジトリに入れた時に # translation_listを自動作成するスクリプト # # original/ディレクトリ以下にファイルを揃えてから、 # translation_listがあるべきディレクトリで実行して下さい。 # パッケージ名はディレクトリから、バージョンはlsmファイルから # 所得します。 # 標準出力に結果を出力するので、適当にリダイレクトして下さい。 # # BUG: # ・シンボリックリンクには対応していません。 # ・manページの日付所得に失敗することがあります。 # use Text::ParseWords; use Cwd; sub detectdate { local ($time, $year, $month, $day); local ($pattern) = $_[0]; @monthstr = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec'); $year = "????"; $month = "??"; $day = "??"; @pat = split (/\s+/, $pattern); for($x = 0; $x <= $#pat; $x++){ $dd = $pat[$x]; if($dd =~ /\d+/) { if($dd <= 31){ $day = sprintf("%02d", $dd); } else { $year = sprintf("%04d", $dd); } } else { for($i = 0; $i <= $#monthstr; $i++){ if($dd =~ /$monthstr[$i].*/i){ $month = sprintf("%02d", $i + 1); last; } } } } return "$year/$month/$day"; } sub packagename { local @p = split('/', cwd()); local $pname = $p[$#p]; $pname =~ tr/_/ /; return $pname; } sub lsmversion { local $ret; opendir DH, 'original'; @files = grep /.*\.lsm/, readdir DH; closedir DH; open FF, "original/$files[0]"; while(){ if(/Version:\s+(.+)$/){ $ret = $1; last; } } close FF; return $ret; } sub parseman { local ($dir, $name) = @_; local($key, $datestr); open FF, "original/$dir/$name"; while(){ if(/^\.\\\"/) { next; } if(/^\.SO/i){ local($src, $dist); m@/(\w+)\.(\w+)@; $src = sprintf("%-2s %s", $2, $1); $name =~ /(\w+)\.(\w+)/; $dist = sprintf("%-2s %s", $2, $1); $alias{$dist} = $src; last; } if(/^\.TH/i){ @words = quotewords('\\s+', 0, $_); $manname = $words[1]; $manname =~ tr/[A-Z]/[a-z]/; $section = $words[2]; $datestr = &detectdate($words[3]); $key = sprintf("%-2s %s", $section, $manname); $otime{$key} = $datestr; last; } if(/^\.DD/i){ /^\.DD\s+(.+)/i; $datestr = &detectdate($1); next; } if(/^\.DT/i){ @words = split; $name = $words[1]; $name =~ tr/[A-Z]/[a-z]/; $sec = $words[2]; $key = sprintf("%-2s %s", $sec, $name); $otime{$key} = $datestr; last; } } close FF; } sub searchman { opendir DH, 'original'; @mandirs = grep /man.+/, readdir DH; closedir DH; foreach $d (@mandirs) { opendir DH, "original/$d"; @manfiles = grep /.+\..+/, readdir DH; closedir DH; foreach $f (@manfiles) { &parseman($d, $f); #print "$f\n"; } } } sub expandalias { foreach $k (keys %alias){ $otime{$k} = $otime{$alias{$k}}; } } sub printlist { local($name, $sec); foreach $k (sort keys %otime){ ($sec, $name) = split / +/, $k; if($alias{$k} ne ''){ local($osec, $oname) = split / +/, $alias{$k}; print join ':', '※', $package, $ver, $otime{$k}, $name, $sec, $oname, $osec, "\n"; } else { print join ':', '×', $package, $ver, $otime{$k}, $name, $sec, '', '', '', '', "\n"; } } } $package = &packagename(); $ver = &lsmversion(); &searchman(); &expandalias(); &printlist();