html2man.pl
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:3k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. #! /usr/bin/perl
  2. # $Id: html2man.pl.in,v 1.6 2000/06/22 17:40:21 mrsam Exp $
  3. #
  4. # Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  5. # distribution information.
  6. ############################################################################
  7. #
  8. # Preprocess HTML file: put all directives on a separate line.  Remove
  9. # blank lines.
  10. #
  11. #
  12. ############################################################################
  13. $pid=open(FD, "-|");
  14. die "Can't fork.n" unless defined $pid;
  15. if ($pid == 0)
  16. {
  17. while (<>)
  18. {
  19. if ( $_ =~ s/^ *<[lL][iI]>// )
  20. {
  21. $line=$_;
  22. $line=<> if $line eq "n";
  23. chop $line;
  24. $line =~ s/ - /n/;
  25. ($line0,$line1)=split(/n/,$line);
  26. $line0 =~ s/"/\"/g;
  27. $line0 =~ s/\/\\/g;
  28. print ".TP 14n.B "$line0n$line1n";
  29. next;
  30. }
  31. while ( /<[^>]*n$/ )
  32. {
  33. chop;
  34. $foo=$_;
  35. last unless defined ($_=<>);
  36. $_="$foo$_";
  37. }
  38. print;
  39. }
  40. exit 0;
  41. }
  42. $pid2=open(FD2, "-|");
  43. die "Can't fork.n" unless defined $pid2;
  44. sub dosubst {
  45. s/<[^>]*>//g;
  46. s/&nbsp;/ /g;
  47. s/&lt;/</g;
  48. s/&gt;/>/g;
  49. s/&amp;/&/g;
  50. }
  51. $INH1=0;
  52. $INBODY=0;
  53. $inpre=0;
  54. if ($pid2 == 0)
  55. {
  56. while (<FD>)
  57. {
  58. s/\/\\/g;
  59. s/<[iI]>/\fI/g;
  60. s/</[iI]>/\fP/g;
  61. s/<BR>/n.br/g;
  62. s/<br>/n.br/g;
  63. s/<[pP]>/n.PPn/g;
  64. s/^n././;
  65. s/^ *// unless $inpre;
  66. if (s/^<[hH]1>/.SH NAMEn/)
  67. {
  68. $INH1=1;
  69. }
  70. s/-/\-/ if $INH1;
  71. $INH1=0 if ( /</[hH]1>/ );
  72. if (s/^<[hH]2>//)
  73. {
  74. $_=<FD> if $_ eq "n";
  75. &dosubst;
  76. $_ =~ s/^/.SH "/;
  77. print $_;
  78. next;
  79. }
  80. if (s/^<[hH][3456789]>//)
  81. {
  82. $_=<FD> if $_ eq "n";
  83. &dosubst;
  84. $_ =~ s/^/.SS "/;
  85. print $_;
  86. next;
  87. }
  88. if (/^ *<(TITLE|title)>/)
  89. {
  90. while ( ! /</(title|TITLE)>/)
  91. {
  92. chop;
  93. $_ = $_ . <FD>;
  94. }
  95. }
  96. if (/^ *<(TITLE|title)>(.*)</(title|TITLE)>/)
  97. {
  98. ($cmd, $desc)=split(/ - /,$2);
  99. $cmd =~ s/ *$//;
  100. $desc =~ s/^ *//;
  101. open (DATE, 'date "+%B %e, %Y" | ')
  102. || die "Can't run date.n";
  103. $date=<DATE>;
  104. close(DATE);
  105. chomp $date;
  106. $TITLE=".TH "$cmd" [SECTION] "$date" "Double Precision, Inc." ""n";
  107. next;
  108. }
  109. if (/^<!-- *SECTION/)
  110. {
  111. chop;
  112. s/.*SECTION *//;
  113. s/ .*//;
  114. $SECTION=$_;
  115. next;
  116. }
  117. if (/^<!-- $Id/)
  118. {
  119. s/.*$Id/$Id/;
  120. s/ *-->.*//;
  121. $RCS=".\" $_";
  122. print $RCS if $INBODY;
  123. next;
  124. }
  125. if (/</(HEAD|head)>/)
  126. {
  127. $TITLE =~ s/[SECTION]/$SECTION/;
  128. print $TITLE;
  129. print $RCS;
  130. print ".\" Copyright 1998-1999 Double Precision, Inc.  See COPYING forn";
  131. print ".\" distribution information.n";
  132. $INBODY=1;
  133. }
  134. s/^./\&./ unless /^.(SH|PP|br|TP|B|I) / || /^.(SH|PP|br|TP|B|I|)n/;
  135. $inpre=1 if s/^<(PRE|pre)>/.nfnn/;
  136. $inpre=0 if s/</(PRE|pre)>/n.fin.PP/;
  137. &dosubst;
  138. print "$_";
  139. }
  140. exit 0;
  141. }
  142. $first=1;
  143. $innf=0;
  144. while (<FD2>)
  145. {
  146. $first=0 if /^.TH/;
  147. next if $first;
  148. next if (! $innf) && /^n$/;
  149. $innf=1 if /^.nf/;
  150. $innf=0 if /^.fi/;
  151. s/^ ? ? ?// if $innf;
  152. print;
  153. }
  154. exit 0;