home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl501m.zip / pod / pod2man.SH < prev    next >
Text File  |  1995-07-03  |  15KB  |  653 lines

  1. case $CONFIG in
  2. '')
  3.     if test -f config.sh; then TOP=.;
  4.     elif test -f ../config.sh; then TOP=..;
  5.     elif test -f ../../config.sh; then TOP=../..;
  6.     elif test -f ../../../config.sh; then TOP=../../..;
  7.     elif test -f ../../../../config.sh; then TOP=../../../..;
  8.     else
  9.         echo "Can't find config.sh."; exit 1
  10.     fi
  11.     . $TOP/config.sh
  12.     ;;
  13. esac
  14. case "$0" in
  15. */*) cd `expr X$0 : 'X\(.*\)/'` ;;
  16. esac
  17. echo "Extracting pod/pod2man (with variable substitutions)"
  18. rm -f pod2man
  19. $spitshell >pod2man <<!GROK!THIS!
  20. #!$binexp/perl
  21. eval 'exec perl -S \$0 \${1+"\$@"}'
  22.     if \$running_under_some_shell;
  23. !GROK!THIS!
  24.  
  25. $spitshell >>pod2man <<'!NO!SUBS!'
  26.  
  27. $/ = "";
  28. $cutting = 1;
  29.  
  30. $CFont = 'CW';
  31. if ($ARGV[0] =~ s/-fc(.*)//) {
  32.     shift;
  33.     $CFont = $1 || shift;
  34. }
  35.  
  36. if (length($CFont) == 2) {
  37.     $CFont_embed = "\\f($CFont";
  38. elsif (length($CFont) == 1) {
  39.     $CFont_embed = "\\f$CFont";
  40. else {
  41.     die "Roff font should be 1 or 2 chars, not `$CFont_embed'";
  42.  
  43. $name = @ARGV ? $ARGV[0] : "something";
  44. $name =~ s/\..*//;
  45.  
  46. print <<"END";
  47. .rn '' }`
  48. ''' \$RCSfile\$\$Revision\$\$Date\$
  49. ''' 
  50. ''' \$Log\$
  51. ''' 
  52. .de Sh
  53. .br
  54. .if t .Sp
  55. .ne 5
  56. .PP
  57. \\fB\\\\\$1\\fR
  58. .PP
  59. ..
  60. .de Sp
  61. .if t .sp .5v
  62. .if n .sp
  63. ..
  64. .de Ip
  65. .br
  66. .ie \\\\n(.\$>=3 .ne \\\\\$3
  67. .el .ne 3
  68. .IP "\\\\\$1" \\\\\$2
  69. ..
  70. .de Vb
  71. .ft $CFont
  72. .nf
  73. .ne \\\\\$1
  74. ..
  75. .de Ve
  76. .ft R
  77.  
  78. .fi
  79. ..
  80. '''
  81. '''
  82. '''     Set up \\*(-- to give an unbreakable dash;
  83. '''     string Tr holds user defined translation string.
  84. '''     Bell System Logo is used as a dummy character.
  85. '''
  86. .tr \\(*W-|\\(bv\\*(Tr
  87. .ie n \\{\\
  88. .ds -- \\(*W-
  89. .if (\\n(.H=4u)&(1m=24u) .ds -- \\(*W\\h'-12u'\\(*W\\h'-12u'-\\" diablo 10 pitch
  90. .if (\\n(.H=4u)&(1m=20u) .ds -- \\(*W\\h'-12u'\\(*W\\h'-8u'-\\" diablo 12 pitch
  91. .ds L" ""
  92. .ds R" ""
  93. .ds L' '
  94. .ds R' '
  95. 'br\\}
  96. .el\\{\\
  97. .ds -- \\(em\\|
  98. .tr \\*(Tr
  99. .ds L" ``
  100. .ds R" ''
  101. .ds L' `
  102. .ds R' '
  103. .if t .ds PI \\(*p
  104. .if n .ds PI PI
  105. 'br\\}
  106. .TH \U$name\E 1 "\\*(RP"
  107. .UC
  108. END
  109.  
  110. print <<'END';
  111. .if n .hy 0 
  112. .if n .na
  113. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  114. .de CQ          \" put $1 in typewriter font
  115. END
  116. print ".ft $CFont\n";
  117. print <<'END';
  118. 'if n "\c
  119. 'if t \\&\\$1\c
  120. 'if n \\&\\$1\c
  121. 'if n \&"
  122. \\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
  123. '.ft R
  124. ..
  125. .\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
  126. .    \" AM - accent mark definitions
  127. .bd S B 3
  128. .    \" fudge factors for nroff and troff
  129. .if n \{\
  130. .    ds #H 0
  131. .    ds #V .8m
  132. .    ds #F .3m
  133. .    ds #[ \f1
  134. .    ds #] \fP
  135. .\}
  136. .if t \{\
  137. .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  138. .    ds #V .6m
  139. .    ds #F 0
  140. .    ds #[ \&
  141. .    ds #] \&
  142. .\}
  143. .    \" simple accents for nroff and troff
  144. .if n \{\
  145. .    ds ' \&
  146. .    ds ` \&
  147. .    ds ^ \&
  148. .    ds , \&
  149. .    ds ~ ~
  150. .    ds ? ?
  151. .    ds ! !
  152. .    ds / 
  153. .    ds q 
  154. .\}
  155. .if t \{\
  156. .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  157. .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  158. .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  159. .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  160. .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  161. .    ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
  162. .    ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
  163. .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  164. .    ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
  165. .\}
  166. .    \" troff and (daisy-wheel) nroff accents
  167. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  168. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  169. .ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
  170. .ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
  171. .ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
  172. .ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
  173. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  174. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  175. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  176. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  177. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  178. .ds ae a\h'-(\w'a'u*4/10)'e
  179. .ds Ae A\h'-(\w'A'u*4/10)'E
  180. .ds oe o\h'-(\w'o'u*4/10)'e
  181. .ds Oe O\h'-(\w'O'u*4/10)'E
  182. .    \" corrections for vroff
  183. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  184. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  185. .    \" for low resolution devices (crt and lpr)
  186. .if \n(.H>23 .if \n(.V>19 \
  187. \{\
  188. .    ds : e
  189. .    ds 8 ss
  190. .    ds v \h'-1'\o'\(aa\(ga'
  191. .    ds _ \h'-1'^
  192. .    ds . \h'-1'.
  193. .    ds 3 3
  194. .    ds o a
  195. .    ds d- d\h'-1'\(ga
  196. .    ds D- D\h'-1'\(hy
  197. .    ds th \o'bp'
  198. .    ds Th \o'LP'
  199. .    ds ae ae
  200. .    ds Ae AE
  201. .    ds oe oe
  202. .    ds Oe OE
  203. .\}
  204. .rm #[ #] #H #V #F C
  205. END
  206.  
  207. $indent = 0;
  208.  
  209. while (<>) {
  210.     if ($cutting) {
  211.     next unless /^=/;
  212.     $cutting = 0;
  213.     }
  214.     chomp;
  215.  
  216.     # Translate verbatim paragraph
  217.  
  218.     if (/^\s/) {
  219.     @lines = split(/\n/);
  220.     for (@lines) {
  221.         1 while s
  222.         {^( [^\t]* ) \t ( \t* ) }
  223.         { $1 . ' ' x (8 - (length($1)%8) + 8 * (length($2))) }ex;
  224.         s/\\/\\e/g;
  225.         s/\A/\\&/s;
  226.     }
  227.     $lines = @lines;
  228.     makespace() unless $verbatim++;
  229.     print ".Vb $lines\n";
  230.     print join("\n", @lines), "\n";
  231.     print ".Ve\n";
  232.     $needspace = 0;
  233.     next;
  234.     }
  235.  
  236.     $verbatim = 0;
  237.  
  238.     # check for things that'll hosed our noremap scheme; affects $_
  239.     init_noremap();
  240.  
  241.     if (!/^=item/) {
  242.  
  243.     # trofficate backslashes; must do it before what happens below
  244.     s/\\/noremap('\\e')/ge;
  245.  
  246.     # first hide the escapes in case we need to 
  247.     # intuit something and get it wrong due to fmting
  248.  
  249.     s/([A-Z]<[^<>]*>)/noremap($1)/ge;
  250.  
  251.     # func() is a reference to a perl function
  252.     s{
  253.         \b
  254.         (
  255.         [:\w]+ \(\)
  256.         )
  257.     } {I<$1>}gx;
  258.  
  259.     # func(n) is a reference to a man page
  260.     s{
  261.         (\w+)
  262.         (
  263.         \(
  264.             [^\s,\051]+
  265.         \)
  266.         )
  267.     } {I<$1>\\|$2}gx;
  268.  
  269.     # convert simple variable references
  270.     s/(\s+)([\$\@%][\w:]+)/${1}C<$2>/g;
  271.  
  272.     if (m{ (
  273.             [\-\w]+
  274.             \(
  275.             [^\051]*?
  276.             [\@\$,]
  277.             [^\051]*?
  278.             \)
  279.         )
  280.         }x && $` !~ /([LCI]<[^<>]*|-)$/ && !/^=\w/) 
  281.     {
  282.         warn "``$1'' should be a [LCI]<$1> ref";
  283.     } 
  284.  
  285.     while (/(-[a-zA-Z])\b/g && $` !~ /[\w\-]$/) {
  286.         warn "``$1'' should be [CB]<$1> ref";
  287.     } 
  288.  
  289.     # put it back so we get the <> processed again;
  290.     clear_noremap(0); # 0 means leave the E's
  291.  
  292.     } else {
  293.     # trofficate backslashes
  294.     s/\\/noremap('\\e')/ge;
  295.  
  296.     } 
  297.  
  298.     # need to hide E<> first; they're processed in clear_noremap
  299.     s/(E<[^<>]+>)/noremap($1)/ge;
  300.  
  301.  
  302.     $maxnest = 10;
  303.     while ($maxnest-- && /[A-Z]</) {
  304.  
  305.     # can't do C font here
  306.     s/([BI])<([^<>]*)>/font($1) . $2 . font('R')/eg;
  307.  
  308.     # files and filelike refs in italics
  309.     s/F<([^<>]*)>/I<$1>/g;
  310.  
  311.     # no break -- usually we want C<> for this
  312.     s/S<([^<>]*)>/nobreak($1)/eg;
  313.  
  314.     # LREF: a manpage(3f) 
  315.     s:L<([a-zA-Z][^\s\/]+)(\([^\)]+\))?>:the I<$1>$2 manpage:g;
  316.  
  317.     # LREF: an =item on another manpage
  318.     s{
  319.         L<
  320.         ([^/]+)
  321.         /
  322.         (
  323.             [:\w]+
  324.             (\(\))?
  325.         )
  326.         >
  327.     } {the C<$2> entry in the I<$1> manpage}gx;
  328.  
  329.     # LREF: an =item on this manpage
  330.     s{
  331.        ((?:
  332.         L<
  333.         /
  334.         (
  335.             [:\w]+
  336.             (\(\))?
  337.         )
  338.         >
  339.         (,?\s+(and\s+)?)?
  340.       )+)
  341.     } { internal_lrefs($1) }gex;
  342.  
  343.     # LREF: a =head2 (head1?), maybe on a manpage, maybe right here
  344.     # the "func" can disambiguate
  345.     s{
  346.         L<
  347.         (?:
  348.             ([a-zA-Z]\S+?) / 
  349.         )?
  350.         "?(.*?)"?
  351.         >
  352.     }{
  353.         do {
  354.         $1     # if no $1, assume it means on this page.
  355.             ?  "the section on I<$2> in the I<$1> manpage"
  356.             :  "the section on I<$2>"
  357.         } 
  358.     }gex;
  359.  
  360.     s/Z<>/\\&/g;
  361.  
  362.     # comes last because not subject to reprocessing
  363.     s/C<([^<>]*)>/noremap("${CFont_embed}${1}\\fR")/eg;
  364.     }
  365.  
  366.     if (s/^=//) {
  367.     $needspace = 0;        # Assume this.
  368.  
  369.     s/\n/ /g;
  370.  
  371.     ($Cmd, $_) = split(' ', $_, 2);
  372.  
  373.     if (defined $_) {
  374.         &escapes;
  375.         s/"/""/g;
  376.     }
  377.  
  378.     clear_noremap(1);
  379.  
  380.     if ($Cmd eq 'cut') {
  381.         $cutting = 1;
  382.     }
  383.     elsif ($Cmd eq 'head1') {
  384.         print qq{.SH "$_"\n}
  385.     }
  386.     elsif ($Cmd eq 'head2') {
  387.         print qq{.Sh "$_"\n}
  388.     }
  389.     elsif ($Cmd eq 'over') {
  390.         push(@indent,$indent);
  391.         $indent = $_ + 0;
  392.     }
  393.     elsif ($Cmd eq 'back') {
  394.         $indent = pop(@indent);
  395.         warn "Unmatched =back\n" unless defined $indent;
  396.         $needspace = 1;
  397.     }
  398.     elsif ($Cmd eq 'item') {
  399.         s/^\*( |$)/\\(bu$1/g;
  400.         print STDOUT qq{.Ip "$_" $indent\n};
  401.     }
  402.     else {
  403.         warn "Unrecognized directive: $Cmd\n";
  404.     }
  405.     }
  406.     else {
  407.     if ($needspace) {
  408.         &makespace;
  409.     }
  410.     &escapes;
  411.     clear_noremap(1);
  412.     print $_, "\n";
  413.     $needspace = 1;
  414.     }
  415. }
  416.  
  417. print <<"END";
  418.  
  419. .rn }` ''
  420. END
  421.  
  422. #########################################################################
  423.  
  424. sub nobreak {
  425.     my $string = shift;
  426.     $string =~ s/ /\\ /g;
  427.     $string;
  428. }
  429.  
  430. sub escapes {
  431.  
  432.     # translate the minus in foo-bar into foo\-bar for roff
  433.     s/([^0-9a-z-])-([^-])/$1\\-$2/g;
  434.  
  435.     # make -- into the string version \*(-- (defined above)
  436.     s/\b--\b/\\*(--/g;
  437.     s/"--([^"])/"\\*(--$1/g;  # should be a better way
  438.     s/([^"])--"/$1\\*(--"/g;
  439.  
  440.     # fix up quotes; this is somewhat tricky
  441.     if (!/""/) {
  442.     s/(^|\s)(['"])/noremap("$1\\*(L$2")/ge;
  443.     s/(['"])($|[\-\s,;\\!?.])/noremap("\\*(R$1$2")/ge;
  444.     }
  445.  
  446.     #s/(?!")(?:.)--(?!")(?:.)/\\*(--/g;
  447.     #s/(?:(?!")(?:.)--(?:"))|(?:(?:")--(?!")(?:.))/\\*(--/g;
  448.     
  449.  
  450.     # make sure that func() keeps a bit a space tween the parens
  451.     ### s/\b\(\)/\\|()/g;
  452.     ### s/\b\(\)/(\\|)/g;
  453.  
  454.     # make C++ into \*C+, which is a squinched version (defined above)
  455.     s/\bC\+\+/\\*(C+/g;
  456.  
  457.     # make double underbars have a little tiny space between them
  458.     s/__/_\\|_/g;
  459.  
  460.     # PI goes to \*(-- (defined above)
  461.     s/\bPI\b/noremap('\\*(PI')/ge;
  462.  
  463.     # make all caps a teeny bit smaller, but don't muck with embedded code literals
  464.     my $hidCFont = font('C');
  465.     if ($Cmd !~ /^head1/) { # SH already makes smaller
  466.     # /g isn't enough; 1 while or we'll be off
  467.  
  468. #    1 while s{
  469. #        (?!$hidCFont)(..|^.|^)
  470. #        \b
  471. #        (
  472. #        [A-Z][\/A-Z+:\-\d_$.]+
  473. #        )
  474. #        (s?)         
  475. #        \b
  476. #    } {$1\\s-1$2\\s0}gmox;
  477.  
  478.     1 while s{
  479.         (?!$hidCFont)(..|^.|^)
  480.         (
  481.         \b[A-Z]{2,}[\/A-Z+:\-\d_\$]*\b
  482.         )
  483.     } { 
  484.         $1 . noremap( '\\s-1' .  $2 . '\\s0' )
  485.     }egmox;
  486.  
  487.     }
  488. }
  489.  
  490. # make troff just be normal, but make small nroff get quoted
  491. # decided to just put the quotes in the text; sigh;
  492. sub ccvt {
  493.      local($_,$prev) = @_;
  494.      if ( /^\W+$/ && !/^\$./ ) {
  495.      ($prev && "\n") . noremap(qq{.CQ $_ \n\\&});
  496.      # what about $" ?
  497.      } else {
  498.      noremap(qq{${CFont_embed}$_\\fR});
  499.      } 
  500.     noremap(qq{.CQ "$_" \n\\&});
  501.  
  502. sub makespace {
  503.     if ($indent) {
  504.     print ".Sp\n";
  505.     }
  506.     else {
  507.     print ".PP\n";
  508.     }
  509. }
  510.  
  511. sub font {
  512.     local($font) = shift;
  513.     return '\\f' . noremap($font);
  514.  
  515. sub noremap {
  516.     local($thing_to_hide) = shift;
  517.     $thing_to_hide =~ tr/\000-\177/\200-\377/;
  518.     return $thing_to_hide;
  519.  
  520. sub init_noremap {
  521.     if ( /[\200-\377]/ ) {
  522.     warn "hit bit char in input stream";
  523.     } 
  524.  
  525. sub clear_noremap {
  526.     my $ready_to_print = $_[0];
  527.  
  528.     tr/\200-\377/\000-\177/;
  529.  
  530.     # trofficate backslashes
  531.     # s/(?!\\e)(?:..|^.|^)\\/\\e/g;
  532.  
  533.     # now for the E<>s, which have been hidden until now
  534.     # otherwise the interative \w<> processing would have
  535.     # been hosed by the E<gt>
  536.     s {
  537.         E<    
  538.         ( [A-Za-z]+ )    
  539.         >    
  540.     } { 
  541.      do {    
  542.          exists $HTML_Escapes{$1}
  543.         ? do { $HTML_Escapes{$1} }
  544.         : do {
  545.             warn "Unknown escape: $& in $_";
  546.             "E<$1>";
  547.         } 
  548.      } 
  549.     }egx if $ready_to_print;
  550.  
  551. sub internal_lrefs {
  552.     local($_) = shift;
  553.  
  554.     s{L</([^>]+)>}{$1}g;
  555.     my(@items) = split( /(?:,?\s+(?:and\s+)?)/ );
  556.     my $retstr = "the ";
  557.     my $i;
  558.     for ($i = 0; $i <= $#items; $i++) {
  559.     $retstr .= "C<$items[$i]>";
  560.     $retstr .= ", " if @items > 2 && $i != $#items;
  561.     $retstr .= " and " if $i+2 == @items;
  562.     } 
  563.  
  564.     $retstr .= " entr" . ( @items > 1  ? "ies" : "y" )
  565.         .  " elsewhere in this document";
  566.  
  567.     return $retstr;
  568.  
  569.  
  570. BEGIN {
  571. %HTML_Escapes = (
  572.     'amp'    =>    '&',    #   ampersand
  573.     'lt'    =>    '<',    #   left chevron, less-than
  574.     'gt'    =>    '>',    #   right chevron, greater-than
  575.     'quot'    =>    '"',    #   double quote
  576.  
  577.     "Aacute"    =>    "A\\*'",    #   capital A, acute accent
  578.     "aacute"    =>    "a\\*'",    #   small a, acute accent
  579.     "Acirc"    =>    "A\\*^",    #   capital A, circumflex accent
  580.     "acirc"    =>    "a\\*^",    #   small a, circumflex accent
  581.     "AElig"    =>    '\*(AE',    #   capital AE diphthong (ligature)
  582.     "aelig"    =>    '\*(ae',    #   small ae diphthong (ligature)
  583.     "Agrave"    =>    "A\\*`",    #   capital A, grave accent
  584.     "agrave"    =>    "A\\*`",    #   small a, grave accent
  585.     "Aring"    =>    'A\\*o',    #   capital A, ring
  586.     "aring"    =>    'a\\*o',    #   small a, ring
  587.     "Atilde"    =>    'A\\*~',    #   capital A, tilde
  588.     "atilde"    =>    'a\\*~',    #   small a, tilde
  589.     "Auml"    =>    'A\\*:',    #   capital A, dieresis or umlaut mark
  590.     "auml"    =>    'a\\*:',    #   small a, dieresis or umlaut mark
  591.     "Ccedil"    =>    'C\\*,',    #   capital C, cedilla
  592.     "ccedil"    =>    'c\\*,',    #   small c, cedilla
  593.     "Eacute"    =>    "E\\*'",    #   capital E, acute accent
  594.     "eacute"    =>    "e\\*'",    #   small e, acute accent
  595.     "Ecirc"    =>    "E\\*^",    #   capital E, circumflex accent
  596.     "ecirc"    =>    "e\\*^",    #   small e, circumflex accent
  597.     "Egrave"    =>    "E\\*`",    #   capital E, grave accent
  598.     "egrave"    =>    "e\\*`",    #   small e, grave accent
  599.     "ETH"    =>    '\\*(D-',    #   capital Eth, Icelandic
  600.     "eth"    =>    '\\*(d-',    #   small eth, Icelandic
  601.     "Euml"    =>    "E\\*:",    #   capital E, dieresis or umlaut mark
  602.     "euml"    =>    "e\\*:",    #   small e, dieresis or umlaut mark
  603.     "Iacute"    =>    "I\\*'",    #   capital I, acute accent
  604.     "iacute"    =>    "i\\*'",    #   small i, acute accent
  605.     "Icirc"    =>    "I\\*^",    #   capital I, circumflex accent
  606.     "icirc"    =>    "i\\*^",    #   small i, circumflex accent
  607.     "Igrave"    =>    "I\\*`",    #   capital I, grave accent
  608.     "igrave"    =>    "i\\*`",    #   small i, grave accent
  609.     "Iuml"    =>    "I\\*:",    #   capital I, dieresis or umlaut mark
  610.     "iuml"    =>    "i\\*:",    #   small i, dieresis or umlaut mark
  611.     "Ntilde"    =>    'N\*~',        #   capital N, tilde
  612.     "ntilde"    =>    'n\*~',        #   small n, tilde
  613.     "Oacute"    =>    "O\\*'",    #   capital O, acute accent
  614.     "oacute"    =>    "o\\*'",    #   small o, acute accent
  615.     "Ocirc"    =>    "O\\*^",    #   capital O, circumflex accent
  616.     "ocirc"    =>    "o\\*^",    #   small o, circumflex accent
  617.     "Ograve"    =>    "O\\*`",    #   capital O, grave accent
  618.     "ograve"    =>    "o\\*`",    #   small o, grave accent
  619.     "Oslash"    =>    "O\\*/",    #   capital O, slash
  620.     "oslash"    =>    "o\\*/",    #   small o, slash
  621.     "Otilde"    =>    "O\\*~",    #   capital O, tilde
  622.     "otilde"    =>    "o\\*~",    #   small o, tilde
  623.     "Ouml"    =>    "O\\*:",    #   capital O, dieresis or umlaut mark
  624.     "ouml"    =>    "o\\*:",    #   small o, dieresis or umlaut mark
  625.     "szlig"    =>    '\*8',        #   small sharp s, German (sz ligature)
  626.     "THORN"    =>    '\\*(Th',    #   capital THORN, Icelandic
  627.     "thorn"    =>    '\\*(th',,    #   small thorn, Icelandic
  628.     "Uacute"    =>    "U\\*'",    #   capital U, acute accent
  629.     "uacute"    =>    "u\\*'",    #   small u, acute accent
  630.     "Ucirc"    =>    "U\\*^",    #   capital U, circumflex accent
  631.     "ucirc"    =>    "u\\*^",    #   small u, circumflex accent
  632.     "Ugrave"    =>    "U\\*`",    #   capital U, grave accent
  633.     "ugrave"    =>    "u\\*`",    #   small u, grave accent
  634.     "Uuml"    =>    "U\\*:",    #   capital U, dieresis or umlaut mark
  635.     "uuml"    =>    "u\\*:",    #   small u, dieresis or umlaut mark
  636.     "Yacute"    =>    "Y\\*'",    #   capital Y, acute accent
  637.     "yacute"    =>    "y\\*'",    #   small y, acute accent
  638.     "yuml"    =>    "y\\*:",    #   small y, dieresis or umlaut mark
  639. );
  640. }
  641. !NO!SUBS!
  642. chmod 755 pod2man
  643. $eunicefix pod2man
  644.