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>
8 # $Id: mkmanweb.perl,v 1.5 2006/06/14 08:45:05 nakano Exp $
11 $epath = `dirname $0`; chomp $epath;
12 unshift (@INC, $epath);
14 use JMtl ('line2hash', 'hash2line');
17 my ($idx_header, $idx_footer);
20 # $MANROOT ¤Ï CVS ¥ê¥Ý¥¸¥È¥ê¤Î JM/manual,
21 # $WWWROOT ¤Ï web ¤Î html ¥³¥ó¥Æ¥ó¥Ä¤Î¥È¥Ã¥×,
22 # $MAN2HTML ¤Ï man2html ¥³¥Þ¥ó¥É¤òÁÛÄê.
24 if (@ARGV < 4) {die "$0 srcroot destroot man2html yaman2html\n"};
26 my $MANROOT = $ARGV[0];
27 unless (-d $MANROOT) {die "$MANROOT does not exist\n"};
29 my $WWWROOT = $ARGV[1];
31 my $MAN2HTML = $ARGV[2];
32 unless (-x $MAN2HTML) {die "$MAN2HTML does not executable\n"};
35 # man2html ¤À¤È¥Ð¥°¤Î½Ð¤ë¥Ú¡¼¥¸ÍѤÎÀ°·Á¥³¥Þ¥ó¥É
37 my $YAMAN2HTML = $ARGV[3];
38 unless (-x $YAMAN2HTML) {die "$YAMAN2HTML does not executable\n"};
41 # for debugging purpose:
43 #my $MANROOT = "/home/nakano/text/JM/imp/manual";
44 #my $WWWROOT = "/home/nakano/public_html/JMwww/html";
45 #my $MAN2HTML = "/home/nakano/bin/man2html";
46 #my $YAMAN2HTML = "/home/nakano/text/JM/head/admin/tools/yaman2html.perl";
49 # man2html ½ÐÎϤËÂФ·¤ÆÃÖ´¹¤¹¤ë³Æ¥ê¥ó¥¯ (·è¤áÂǤÁ(^^;)
51 my $MANWROOT='../../../manual';
52 my $MAIN='<A HREF="../../../index.html">JM Home Page</A>';
53 my $MAN2HTMLPAGE='<A HREF="../../man/man1/man2html.1.html">man2html</A>';
54 my $MLANG='<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">';
55 my $JMCSS='<LINK REL="stylesheet" TYPE="text/css" HREF="../../../jm.css">';
56 my $CONTCSS='<LINK REL="stylesheet" TYPE="text/css" HREF="../../../contrib.css">';
57 my $SELECT='0MultiFileIdx';
59 my (%roff_hash, %page_name, %link_hash, %cont_link);
61 # $MANROOT/$pkg/translation_list ¤Î scan.
63 print "scanning translation_list's...\n";
64 open RL,"find $MANROOT -name translation_list|";
69 unless(/.*manual\/([^\/]*)\/translation_list/){next;}
72 open TL, $tl || die "cannot open $tl";
75 my %ti = line2hash($_);
76 my $name = $ti{fname};
78 my $page = "$pkg,$name,$sec";
80 if ($ti{kind} eq "link" && $ti{stat} eq "up2date"){
81 my $dst = "../man$ti{lsec}/$ti{lname}.$ti{lsec}.html";
82 $link_hash{"$page"} = $dst;
83 push @{$page_name{"$name,$sec"}}, "$page";
84 print "collect link : $page => $dst\n";
88 if ($ti{kind} eq "roff" && $ti{stat} =~ /^up/) {
89 my $src = "$pkg/release/man$sec/$name.$sec";
90 $roff_hash{"$page"} = $src;
91 push @{$page_name{"$name,$sec"}}, "$page";
92 print "collect roff : $page <= $src\n";
96 if ($ti{kind} eq "roff" && $ti{stat} =~ /^cnt/) {
97 my $src = "$pkg/contrib/man$sec/$name.$sec";
98 $roff_hash{"$page"} = $src;
99 push @{$page_name{"$name,$sec"}}, "$page";
100 $cont_link{$page} = <<EOM;
102 ËÜ¥Ú¡¼¥¸¤Ï <A HREF="$ti{comment}">$ti{tname}</A>
103 ($ti{tmail}) ¤è¤ê´ó£¤¤¤¿¤À¤¤Þ¤·¤¿¡£
107 print "collect contrib roff: <= $src\n";
115 foreach my $key (sort keys %page_name){
116 my $num = $#{$page_name{$key}} + 1;
117 print "$key: $num\n";
124 # ½ÅÊ£¥Ú¡¼¥¸ÍѤΠindex.
126 print "creating index for pages with identical names...\n";
127 foreach my $fkey (sort keys %page_name){
128 if ($#{ $page_name{$fkey} } > 0){
129 my ($name,$sec) = split /,/, $fkey;
131 my $cand = $#{$page_name{$fkey}} + 1;
132 print "$name.$sec has $cand candidates...";
134 system("mkdir -p $WWWROOT/$SELECT/man$sec");
135 open WL, "| nkf -j > $WWWROOT/$SELECT/man$sec/$name.$sec.html";
137 my $header = $idx_header;
138 $header =~ s/_PAGENAME_/$name/ge;
141 foreach my $i (0 .. $#{ $page_name{$fkey}}){
142 my ($mpkg, $mname, $msec);
143 ($mpkg,$mname,$msec)=split /,/, $page_name{$fkey}[$i];
144 my $anchor = "$mname.$msec in $mpkg";
145 my $link = "../../$mpkg/man$msec/$mname.$msec.html";
146 print WL "<LI><A HREF=\"$link\">$anchor</A></LI>\n";
148 print WL $idx_footer;
150 print "index created.\n";
157 foreach my $fkey (sort keys %roff_hash){
158 my ($pkg, $name, $sec);
159 ($pkg,$name,$sec)=split /,/, $fkey;
161 my $hdir = "$WWWROOT/$pkg/man$sec";
162 my $hfile = "$hdir/$name.$sec.html";
164 system("mkdir -p $hdir");
166 print "converting $pkg/$name.$sec...";
167 my $roffpage = "$MANROOT/$roff_hash{$fkey}";
169 # man2html ¤Ï fetchmail.1 ¤Î .TS - .TE ¥Þ¥¯¥íÆâÉô¤ò
170 # Àµ¤·¤¯°·¤¨¤Ê¤¤¤Î¤Ç¡¢¤È¤ê¤¢¤¨¤º workaround.
172 if("$name.$sec" eq "fetchmail.1"){
173 system "$YAMAN2HTML $roffpage | nkf -j > $hfile";
177 # roff page ¤Ø¤Î link.
178 my $ROFF = "<A HREF=\"$MANWROOT/$roff_hash{$fkey}\">roff page</A>";
179 my $NAVI = "$MAIN\n$ROFF";
181 my $START = "$MLANG\n";
182 if ($roffpage =~ /\/contrib\//){
183 $START .= "$CONTCSS\n</HEAD>\n<BODY>\n$cont_link{$fkey}\n";
185 $START .= "$JMCSS\n</HEAD>\n<BODY>\n";
188 open M2H, "$MAN2HTML $roffpage |";
189 open WL,"| nkf -j > $hfile";
194 # s/(\&\#([0-9]+)\;)/pack("C",$1)/ge;
197 s/<\/HEAD><BODY>/$START/ge;
198 s/<A HREF=\"http:\/\/localhost\/cgi-bin\/man\/man2html\">Return to Main Contents<\/A>/$NAVI/ge;
199 s/<A HREF=\"http:\/\/localhost\/cgi-bin\/man\/man2html\">man2html<\/A>/$MAN2HTMLPAGE/ge;
201 # ÊÌ¥Ú¡¼¥¸¤Ø¤Î¥ê¥ó¥¯¥¢¥ó¥«¡¼¤Î½èÍý.
203 while (m/<A HREF=\"http:\/\/localhost\/cgi-bin\/man\/man2html\?([1-9])[a-zA-Z]?\+([^\"]+)/){
206 if ($#{$page_name{$lpage}} == -1){
207 s/<A HREF=\"http:[^>]+>([^<]+)<\/A>/$1/;
209 } elsif ($#{$page_name{$lpage}} == 0){
211 my ($lpkg,$lname,$lsec) = split /,/, ${$page_name{$lpage}}[0];
214 $repl = "../man$lsec/$lname.$lsec.html";
216 $repl = "../../$lpkg/man$lsec/$lname.$lsec.html";
218 s/http:\/\/[^\"]+/$repl/;
222 my ($lpkg,$lname,$lsec) = split /,/, ${$page_name{$lpage}}[0];
223 $repl = "../../$SELECT/man$lsec/$lname.$lsec.html";
225 foreach my $j (0 .. $#{$page_name{$lpage}}){
226 my ($lpkg,$lname,$lsec) = split /,/, ${$page_name{$lpage}}[$j];
228 $repl = "../man$lsec/$lname.$lsec.html";
231 s/http:\/\/[^\"]+/$repl/;
234 } #end of while(m/../).
245 foreach my $fkey (sort keys %link_hash){
246 my ($pkg, $name, $sec) = split /,/, $fkey;
248 my $hdir = "$WWWROOT/$pkg/man$sec";
249 my $hfile = "$hdir/$name.$sec.html";
250 my $dst = $link_hash{$fkey};
252 unless (-f "$hdir/$dst"){;
253 print "WARN: dest $hdir for symlink $pkg/$name.$sec lacks.\n";
257 system("cd $hdir; ln -s $dst $name.$sec.html");
259 print "$pkg/man$sec/$name.$sec.html: create symlink to $dst\n";
264 # ¥¤¥ó¥Ç¥Ã¥¯¥¹¥Ú¡¼¥¸¤Î¥Ø¥Ã¥À¡¦¥Õ¥Ã¥¿
267 $idx_header = <<'EOM';
268 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
269 "http://www.w3.org/TR/REC-html40/loose.dtd">
270 <HTML LANG="ja" DIR="LTR">
272 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-2022-JP">
273 <TITLE>_PAGENAME_</TITLE>
274 <META NAME="author" LANG="en" CONTENT="JM Project Members">
275 <META NAME="copyright" CONTENT="(C) 1999 JM Project.">
276 <META NAME="DESCRIPTION" CONTENT="JM: JM Project.">
277 <META NAME="keywords" CONTENT="JM, Linux, Japanese, Manual">
278 <LINK REV="made" HREF="mailto:JM@linux.or.jp">
279 <LINK REL="stylesheet" TYPE="text/css" HREF="../../../jm.css">
283 <P>Ʊ̾¤Î¥Ú¡¼¥¸¤¬Ê£¿ô¤¢¤ê¤Þ¤¹¡£°Ê²¼¤Î¸õÊ䤫¤éÁª¤ó¤Ç¤¯¤À¤µ¤¤</P>
287 $idx_footer = <<'EOM';
290 <IMG SRC="../../../images/grey.png" WIDTH="14" HEIGHT="14" ALT="*">
291 <A HREF="../../../index.html">JM Project ¤Î¥á¥¤¥ó¥Ú¡¼¥¸¤ØÌá¤ë</A>