3 # build html hierarchy using man2html
5 # first version Thu Aug 19 00:53:30 JST 1999
6 # by Tenkou N. Hattori <tnh@aurora.dti.ne.jp>
9 $epath = `dirname $0`; chomp $epath;
10 unshift (@INC, $epath);
12 use JMtl ('line2hash', 'hash2line');
15 my ($idx_header, $idx_footer);
18 # $MANROOT は CVS リポジトリの JM/manual,
19 # $WWWROOT は web の html コンテンツのトップ,
20 # $MAN2HTML は man2html コマンドを想定.
22 if (@ARGV < 3) {die "$0 srcroot destroot man2html\n"};
24 my $MANROOT = $ARGV[0];
25 unless (-d $MANROOT) {die "$MANROOT does not exist\n"};
27 my $WWWROOT = $ARGV[1];
29 my $MAN2HTML = $ARGV[2];
30 unless (-x $MAN2HTML) {die "$MAN2HTML does not executable\n"};
33 # for debugging purpose:
35 #my $MANROOT = "/home/nakano/text/JM/imp/manual";
36 #my $WWWROOT = "/home/nakano/public_html/JMwww/html";
37 #my $MAN2HTML = "/home/nakano/bin/man2html";
40 # man2html 出力に対して置換する各リンク (決め打ち(^^;)
42 my $MANWROOT='../../../manual';
43 my $MAIN='<A HREF="../../../index.html">JM Home Page</A>';
44 my $MAN2HTMLPAGE='<A HREF="../../man/man1/man2html.1.html">man2html</A>';
45 my $MLANG='<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">';
46 my $JMCSS='<LINK REL="stylesheet" TYPE="text/css" HREF="../../../jm.css">';
47 my $CONTCSS='<LINK REL="stylesheet" TYPE="text/css" HREF="../../../contrib.css">';
48 my $SELECT='0MultiFileIdx';
50 my (%roff_hash, %page_name, %link_hash, %cont_link);
52 # $MANROOT/$pkg/translation_list の scan.
54 print "scanning translation_list's...\n";
55 open RL,"find $MANROOT -name translation_list|";
60 unless(m|.*manual/([^/]*)/translation_list|){next;}
63 open TL, $tl || die "cannot open $tl";
66 my %ti = line2hash($_);
67 my $name = $ti{fname};
69 my $page = "$pkg,$name,$sec";
71 if ($ti{kind} eq "link" && $ti{stat} eq "up2date"){
72 my $dst = "../man$ti{lsec}/$ti{lname}.$ti{lsec}.html";
73 $link_hash{"$page"} = $dst;
74 push @{$page_name{"$name,$sec"}}, "$page";
75 print "collect link : $page => $dst\n";
79 if ($ti{kind} eq "roff" && $ti{stat} =~ /^up/) {
80 my $src = "$pkg/release/man$sec/$name.$sec";
81 $roff_hash{"$page"} = $src;
82 push @{$page_name{"$name,$sec"}}, "$page";
83 print "collect roff : $page <= $src\n";
87 if ($ti{kind} eq "roff" && $ti{stat} =~ /^cnt/) {
88 my $src = "$pkg/contrib/man$sec/$name.$sec";
89 $roff_hash{"$page"} = $src;
90 push @{$page_name{"$name,$sec"}}, "$page";
91 $cont_link{$page} = <<EOM;
93 本ページは <A HREF="$ti{comment}">$ti{tname}</A>
94 ($ti{tmail}) より寄贈いただきました。
98 print "collect contrib roff: <= $src\n";
106 foreach my $key (sort keys %page_name){
107 my $num = $#{$page_name{$key}} + 1;
108 print "$key: $num\n";
117 print "creating index for pages with identical names...\n";
118 foreach my $fkey (sort keys %page_name){
119 if ($#{ $page_name{$fkey} } > 0){
120 my ($name,$sec) = split /,/, $fkey;
122 my $cand = $#{$page_name{$fkey}} + 1;
123 print "$name.$sec has $cand candidates...";
125 system("mkdir -p $WWWROOT/$SELECT/man$sec");
126 open WL, "| nkf -w > $WWWROOT/$SELECT/man$sec/$name.$sec.html";
128 my $header = $idx_header;
129 $header =~ s/_PAGENAME_/$name/ge;
132 foreach my $i (0 .. $#{ $page_name{$fkey}}){
133 my ($mpkg, $mname, $msec);
134 ($mpkg,$mname,$msec)=split /,/, $page_name{$fkey}[$i];
135 my $anchor = "$mname.$msec in $mpkg";
136 my $link = "../../$mpkg/man$msec/$mname.$msec.html";
137 print WL "<LI><A HREF=\"$link\">$anchor</A></LI>\n";
139 print WL $idx_footer;
141 print "index created.\n";
148 foreach my $fkey (sort keys %roff_hash){
149 my ($pkg, $name, $sec);
150 ($pkg,$name,$sec)=split /,/, $fkey;
152 my $hdir = "$WWWROOT/$pkg/man$sec";
153 my $hfile = "$hdir/$name.$sec.html";
155 system("mkdir -p $hdir");
157 print "converting $pkg/$name.$sec...";
158 my $roffpage = "$MANROOT/$roff_hash{$fkey}";
161 my $ROFF = "<A HREF=\"$MANWROOT/$roff_hash{$fkey}\">roff page</A>";
162 my $NAVI = "$MAIN\n$ROFF";
164 my $START = "$MLANG\n";
165 if ($roffpage =~ m|/contrib/|){
166 $START .= "$CONTCSS\n</HEAD>\n<BODY>\n$cont_link{$fkey}\n";
168 $START .= "$JMCSS\n</HEAD>\n<BODY>\n";
171 open M2H, "$MAN2HTML $roffpage |";
172 open WL,"| nkf -w > $hfile";
177 # s/(\&\#([0-9]+)\;)/pack("C",$1)/ge;
180 s|</HEAD><BODY>|$START|ge;
181 s|<A HREF=\"(http://localhost)?/cgi-bin/man/man2html\">Return to Main Contents</A>|$NAVI|ge;
182 s|<A HREF=\"(http://localhost)?/cgi-bin/man/man2html\">man2html</A>|$MAN2HTMLPAGE|ge;
186 while (m|<A HREF=\"(http://localhost)?/cgi-bin/man/man2html\?([1-9])[a-zA-Z]?\+([^\"]+)|){
188 s|http://localhost/cgi-bin/|/cgi-bin/|;
190 if ($#{$page_name{$lpage}} == -1){
191 s|<A HREF=\"/cgi-bin/man/man2html[^>]+>([^<]+)</A>|$1|;
193 } elsif ($#{$page_name{$lpage}} == 0){
195 my ($lpkg,$lname,$lsec) = split /,/, ${$page_name{$lpage}}[0];
198 $repl = "../man$lsec/$lname.$lsec.html";
200 $repl = "../../$lpkg/man$lsec/$lname.$lsec.html";
202 s|/cgi-bin/[^\"]+|$repl|;
206 my ($lpkg,$lname,$lsec) = split /,/, ${$page_name{$lpage}}[0];
207 $repl = "../../$SELECT/man$lsec/$lname.$lsec.html";
209 foreach my $j (0 .. $#{$page_name{$lpage}}){
210 my ($lpkg,$lname,$lsec) = split /,/, ${$page_name{$lpage}}[$j];
212 $repl = "../man$lsec/$lname.$lsec.html";
215 s|/cgi-bin/[^\"]+|$repl|;
217 } #end of while(m/../).
228 foreach my $fkey (sort keys %link_hash){
229 my ($pkg, $name, $sec) = split /,/, $fkey;
231 my $hdir = "$WWWROOT/$pkg/man$sec";
232 my $hfile = "$hdir/$name.$sec.html";
233 my $dst = $link_hash{$fkey};
235 unless (-f "$hdir/$dst"){;
236 print "WARN: dest $hdir for symlink $pkg/$name.$sec lacks.\n";
240 system("cd $hdir; ln -s $dst $name.$sec.html");
242 print "$pkg/man$sec/$name.$sec.html: create symlink to $dst\n";
250 $idx_header = <<'EOM';
251 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
252 "http://www.w3.org/TR/REC-html40/loose.dtd">
253 <HTML LANG="ja" DIR="LTR">
255 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
256 <TITLE>_PAGENAME_</TITLE>
257 <META NAME="author" LANG="en" CONTENT="JM Project Members">
258 <META NAME="copyright" CONTENT="(C) 1999 JM Project.">
259 <META NAME="DESCRIPTION" CONTENT="JM: JM Project.">
260 <META NAME="keywords" CONTENT="JM, Linux, Japanese, Manual">
261 <LINK REV="made" HREF="mailto:linuxjm-discuss@lists.sourceforge.jp">
262 <LINK REL="stylesheet" TYPE="text/css" HREF="../../../jm.css">
266 <P>同名のページが複数あります。以下の候補から選んでください</P>
270 $idx_footer = <<'EOM';
273 <IMG SRC="../../../images/grey.png" WIDTH="14" HEIGHT="14" ALT="*">
274 <A HREF="../../../index.html">JM Project のメインページへ戻る</A>