diff options
Diffstat (limited to 'lib/Pod')
-rw-r--r-- | lib/Pod/Html.pm | 321 |
1 files changed, 172 insertions, 149 deletions
diff --git a/lib/Pod/Html.pm b/lib/Pod/Html.pm index 9586f8e373..c61e7d5e1b 100644 --- a/lib/Pod/Html.pm +++ b/lib/Pod/Html.pm @@ -41,8 +41,8 @@ Pod::Html takes the following arguments: --backlink="Back to Top" -Adds "Back to Top" links in front of every HEAD1 heading (except for -the first). By default, no backlink are being generated. +Adds "Back to Top" links in front of every C<head1> heading (except for +the first). By default, no backlinks are generated. =item cachedir @@ -54,7 +54,8 @@ Creates the item and directory caches in the given directory. --css=stylesheet -Specify the URL of a cascading style sheet. +Specify the URL of a cascading style sheet. Also disables all HTML/CSS +C<style> attributes that are output by default (to avoid conflicts). =item flush @@ -67,8 +68,8 @@ Flushes the item and directory caches. --header --noheader -Creates header and footer blocks containing the text of the NAME -section. By default, no headers are being generated. +Creates header and footer blocks containing the text of the C<NAME> +section. By default, no headers are generated. =item help @@ -118,8 +119,7 @@ List of page names (eg, "perlfunc") which contain linkable C<=item>s. --netscape --nonetscape -Use Netscape HTML directives when applicable. By default, they will -B<not> be used. +B<Deprecated>, has no effect. For backwards compatibility only. =item outfile @@ -133,7 +133,7 @@ is specified. --podpath=name:...:name Specify which subdirectories of the podroot contain pod files whose -HTML converted forms can be linked-to in cross-references. +HTML converted forms can be linked to in cross references. =item podroot @@ -175,7 +175,7 @@ Display progress messages. By default, they won't be displayed. =head1 EXAMPLE pod2html("pod2html", - "--podpath=lib:ext:pod:vms", + "--podpath=lib:ext:pod:vms", "--podroot=/usr/src/perl", "--htmlroot=/perl/nmanual", "--libpods=perlfunc:perlguts:perlvar:perlrun:perlop", @@ -185,7 +185,7 @@ Display progress messages. By default, they won't be displayed. =head1 ENVIRONMENT -Uses $Config{pod2html} to setup default options. +Uses C<$Config{pod2html}> to setup default options. =head1 AUTHOR @@ -238,11 +238,10 @@ my $ignore = 1; # whether or not to format text. we don't my %items_named = (); # for the multiples of the same item in perlfunc my @items_seen = (); -my $netscape = 0; # whether or not to use netscape directives. my $title; # title to give the pod(s) my $header = 0; # produce block header/footer my $top = 1; # true if we are at the top of the doc. used - # to prevent the first <HR> directive. + # to prevent the first <hr /> directive. my $paragraph; # which paragraph we're processing (used # for error messages) my $ptQuote = 0; # status of double-quote conversion @@ -285,11 +284,10 @@ $ignore = 1; # whether or not to format text. we don't @items_seen = (); %items_named = (); -$netscape = 0; # whether or not to use netscape directives. $header = 0; # produce block header/footer $title = ''; # title to give the pod(s) $top = 1; # true if we are at the top of the doc. used - # to prevent the first <HR> directive. + # to prevent the first <hr /> directive. $paragraph = ''; # which paragraph we're processing (used # for error messages) %sections = (); # sections within this page @@ -337,27 +335,30 @@ sub pod2html { # parse the command-line parameters parse_command_line(); + # escape the backlink argument (same goes for title but is done later...) + $backlink = html_escape($backlink) if defined $backlink; + # set some variables to their default values if necessary local *POD; - unless (@ARGV && $ARGV[0]) { + unless (@ARGV && $ARGV[0]) { $podfile = "-" unless $podfile; # stdin open(POD, "<$podfile") || die "$0: cannot open $podfile file for input: $!\n"; } else { $podfile = $ARGV[0]; # XXX: might be more filenames *POD = *ARGV; - } + } $htmlfile = "-" unless $htmlfile; # stdout $htmlroot = "" if $htmlroot eq "/"; # so we don't get a // $htmldir =~ s#/\z## ; # so we don't get a // if ( $htmlroot eq '' - && defined( $htmldir ) + && defined( $htmldir ) && $htmldir ne '' - && substr( $htmlfile, 0, length( $htmldir ) ) eq $htmldir - ) + && substr( $htmlfile, 0, length( $htmldir ) ) eq $htmldir + ) { # Set the 'base' url for this file, so that we can use it - # as the location from which to calculate relative links + # as the location from which to calculate relative links # to other files. If this is '', then absolute links will # be used throughout. $htmlfileurl= "$htmldir/" . substr( $htmlfile, length( $htmldir ) + 1); @@ -384,25 +385,25 @@ sub pod2html { # put a title in the HTML file if one wasn't specified if ($title eq '') { TITLE_SEARCH: { - for my $i ( 0..$#poddata ) { + for (my $i = 0; $i < @poddata; $i++) { if ($poddata[$i] =~ /^=head1\s*NAME\b/m) { - for my $para ( @poddata[$i, $i+1] ) { + for my $para ( @poddata[$i, $i+1] ) { last TITLE_SEARCH if ($title) = $para =~ /(\S+\s+-+.*\S)/s; } - } + } - } + } } } if (!$title and $podfile =~ /\.pod\z/) { # probably a split pod so take first =head[12] as title - for my $i ( 0..$#poddata ) { + for (my $i = 0; $i < @poddata; $i++) { last if ($title) = $poddata[$i] =~ /^=head[12]\s*(.*)/; - } + } warn "adopted '$title' as title for $podfile\n" if $verbose and $title; - } + } if ($title) { $title =~ s/\s*\(.*\)//; } else { @@ -411,25 +412,38 @@ sub pod2html { $title = ($podfile eq "-" ? 'No Title' : $1); warn "using $title" if $verbose; } - my $csslink = $css ? qq(\n<LINK REL="stylesheet" HREF="$css" TYPE="text/css">) : ''; - $csslink =~ s,\\,/,g; - $csslink =~ s,(/.):,$1|,; - - my $block = $header ? <<END_OF_BLOCK : ''; -<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%> -<TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc"> -<FONT SIZE=+1><STRONG><P CLASS=block> $title</P></STRONG></FONT> -</TD></TR> -</TABLE> + $title = html_escape($title); + + my $csslink = ''; + my $bodystyle = ' style="background-color: white"'; + my $tdstyle = ' style="background-color: #cccccc"'; + + if ($css) { + $csslink = qq(\n<link rel="stylesheet" href="$css" type="text/css" />); + $csslink =~ s,\\,/,g; + $csslink =~ s,(/.):,$1|,; + $bodystyle = ''; + $tdstyle = ''; + } + + my $block = $header ? <<END_OF_BLOCK : ''; +<table border="0" width="100%" cellspacing="0" cellpadding="3"> +<tr><td class="block"$tdstyle valign="middle"> +<big><strong><span class="block"> $title</span></strong></big> +</td></tr> +</table> END_OF_BLOCK print HTML <<END_OF_HEAD; -<HTML> -<HEAD> -<TITLE>$title</TITLE>$csslink -</HEAD> - -<BODY> +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +head> +<title>$title</title>$csslink +<link rev="made" href="mailto:$Config{perladmin}" /> +</head> + +<body$bodystyle> $block END_OF_HEAD @@ -443,16 +457,17 @@ END_OF_HEAD # still generate an index, but surround it with an html comment. # that way some other program can extract it if desired. $index =~ s/--+/-/g; - print HTML "<A NAME=\"__index__\"></A>\n"; + print HTML "<p><a name=\"__index__\"></a></p>\n"; print HTML "<!-- INDEX BEGIN -->\n"; print HTML "<!--\n" unless $doindex; print HTML $index; print HTML "-->\n" unless $doindex; print HTML "<!-- INDEX END -->\n\n"; - print HTML "<HR>\n" if $doindex and $index; + print HTML "<hr />\n" if $doindex and $index; # now convert this file my $after_item; # set to true after an =item + my $need_dd = 0; warn "Converting input file $podfile\n" if $verbose; foreach my $i (0..$#poddata){ $ptQuote = 0; # status of quote conversion @@ -462,6 +477,7 @@ END_OF_HEAD if (/^(=.*)/s) { # is it a pod directive? $ignore = 0; $after_item = 0; + $need_dd = 0; $_ = $1; if (/^=begin\s+(\S+)\s*(.*)/si) {# =begin process_begin($1, $2); @@ -479,7 +495,7 @@ END_OF_HEAD } elsif (/^=item\s*(.*\S)?/sm) { # =item text warn "$0: $podfile: =item without bullet, number or text" . " in paragraph $paragraph.\n" if !defined($1) or $1 eq ''; - process_item( $1 ); + $need_dd = process_item( $1 ); $after_item = 1; } elsif (/^=over\s*(.*)/) { # =over N process_over(); @@ -498,11 +514,12 @@ END_OF_HEAD else { next if $ignore; next if @begin_stack && $begin_stack[-1] ne 'html'; - print HTML and next if @begin_stack && $begin_stack[-1] eq 'html'; + print HTML and next if @begin_stack && $begin_stack[-1] eq 'html'; + print HTML "<dd>\n" if $need_dd; my $text = $_; if( $text =~ /\A\s+/ ){ process_pre( \$text ); - print HTML "<PRE>\n$text</PRE>\n"; + print HTML "<pre>\n$text</pre>\n"; } else { process_text( \$text ); @@ -520,10 +537,10 @@ END_OF_HEAD } } if( $all > 0 ){ - $text =~ s/\t+/<TD>/g; - $text =~ s/^/<TR><TD>/gm; - $text = '<TABLE CELLSPACING=0 CELLPADDING=0>' . - $text . '</TABLE>'; + $text =~ s/\t+/<td>/g; + $text =~ s/^/<tr><td>/gm; + $text = '<table cellspacing="0" cellpadding="0">' . + $text . '</table>'; } } } @@ -533,9 +550,10 @@ END_OF_HEAD print HTML "$text\n"; $after_lpar = 1; } else { - print HTML "<P>$text</P>\n"; + print HTML "<p>$text</p>\n"; } } + print HTML "</dd>\n" if $need_dd; $after_item = 0; } } @@ -544,14 +562,14 @@ END_OF_HEAD finish_list(); # link to page index - print HTML "<P><A HREF=\"#__index__\"><SMALL>$backlink</SMALL></A></P>\n" + print HTML "<p><a href=\"#__index__\"><small>$backlink</small></a></p>\n" if $doindex and $index and $backlink; print HTML <<END_OF_TAIL; $block -</BODY> +</body> -</HTML> +</html> END_OF_TAIL # close the html file @@ -592,8 +610,6 @@ Usage: $0 --help --htmlroot=<name> --infile=<name> --outfile=<name> directives in as targets of C<> and implicit links (empty by default). note, these are not filenames, but rather page names like those that appear in L<> links. - --[no]netscape - will use netscape html directives when applicable. - (default is not to use them). --outfile - filename for the resulting html file (output sent to stdout by default). --podpath - colon-separated list of directories containing library @@ -605,6 +621,7 @@ Usage: $0 --help --htmlroot=<name> --infile=<name> --outfile=<name> (default behaviour). --title - title that will appear in resulting html file. --[no]verbose - self-explanatory (off by default). + --[no]netscape - deprecated, has no effect. for backwards compatibility only. END_OF_USAGE @@ -652,7 +669,6 @@ sub parse_command_line { $htmlroot = $opt_htmlroot if defined $opt_htmlroot; $doindex = $opt_index if defined $opt_index; $podfile = $opt_infile if defined $opt_infile; - $netscape = $opt_netscape if defined $opt_netscape; $htmlfile = $opt_outfile if defined $opt_outfile; $podroot = $opt_podroot if defined $opt_podroot; $quiet = $opt_quiet if defined $opt_quiet; @@ -944,37 +960,38 @@ sub scan_headings { # scan for =head directives, note their name, and build an index # pointing to each of them. foreach my $line (@data) { - if ($line =~ /^=(head)([1-6])\s+(.*)/) { - ($tag, $which_head, $otitle) = ($1,$2,$3); + if ($line =~ /^=(head)([1-6])\s+(.*)/) { + ($tag, $which_head, $otitle) = ($1,$2,$3); - my $title = depod( $otitle ); - my $name = htmlify( $title ); - $$sections{$name} = 1; - $title = process_text( \$otitle ); + my $title = depod( $otitle ); + my $name = htmlify( $title ); + $$sections{$name} = 1; + $name =~ s/\s/_/g; # htmlify keeps spaces but we don't want them here.. + $title = process_text( \$otitle ); while ($which_head != $listdepth) { if ($which_head > $listdepth) { - $index .= "\n" . ("\t" x $listdepth) . "<UL>\n"; + $index .= "\n" . ("\t" x $listdepth) . "<ul>\n"; $listdepth++; } elsif ($which_head < $listdepth) { $listdepth--; - $index .= "\n" . ("\t" x $listdepth) . "</UL>\n"; + $index .= "\n" . ("\t" x $listdepth) . "</ul>\n"; } } - $index .= "\n" . ("\t" x $listdepth) . "<LI>" . - "<A HREF=\"#" . $name . "\">" . - $title . "</A></LI>"; + $index .= "\n" . ("\t" x $listdepth) . "<li>" . + "<a href=\"#" . $name . "\">" . + $title . "</a></li>"; } } # finish off the lists while ($listdepth--) { - $index .= "\n" . ("\t" x $listdepth) . "</UL>\n"; + $index .= "\n" . ("\t" x $listdepth) . "</ul>\n"; } # get rid of bogus lists - $index =~ s,\t*<UL>\s*</UL>\n,,g; + $index =~ s,\t*<ul>\s*</ul>\n,,g; $ignore = 1; # restore old value; @@ -1030,16 +1047,19 @@ sub process_head { } } - print HTML "<P>\n"; + print HTML "<p>\n"; if( $level == 1 && ! $top ){ - print HTML "<A HREF=\"#__index__\"><SMALL>$backlink</SMALL></A>\n" - if $hasindex and $backlink; - print HTML "<HR>\n" + print HTML "<a href=\"#__index__\"><small>$backlink</small></a>\n" + if $hasindex and $backlink; + print HTML "</p>\n<hr />\n" + } else { + print HTML "</p>\n"; } my $name = htmlify( depod( $heading ) ); + $name =~ s/\s/_/g; # htmlify keeps spaces but we don't want them here... my $convert = process_text( \$heading ); - print HTML "<H$level><A NAME=\"$name\">$convert</A></H$level>\n"; + print HTML "<h$level><a name=\"$name\">$convert</a></h$level>\n"; } @@ -1056,14 +1076,15 @@ sub emit_item_tag($$$){ $EmittedItem = $item; ### print STDERR "emit_item_tag=$item ($text)\n"; - print HTML '<STRONG>'; + print HTML '<strong>'; if ($items_named{$item}++) { print HTML process_text( \$otext ); } else { my $name = 'item_' . $item; - print HTML qq{<A NAME="$name">}, process_text( \$otext ), '</A>'; + $name =~ s/\s/_/g; # we don't want spaces here... + print HTML qq{<a name="$name">}, process_text( \$otext ), '</a>'; } - print HTML "</STRONG><BR>\n"; + print HTML "</strong><br />\n"; undef( $EmittedItem ); } @@ -1073,7 +1094,9 @@ sub emit_li { push( @listend, "</$tag>" ); print HTML "<$tag>\n"; } - print HTML $tag eq 'DL' ? '<DT>' : '<LI>'; + my $emitted = $tag eq 'dl' ? 'dt' : 'li'; + print HTML "<$emitted>"; + return $emitted; } # @@ -1081,6 +1104,7 @@ sub emit_li { # sub process_item { my( $otext ) = @_; + my $need_dd = 0; # set to 1 if we need a <dd></dd> after an item # lots of documents start a list without doing an =over. this is # bad! but, the proper thing to do seems to be to just assume @@ -1092,38 +1116,42 @@ sub process_item { # formatting: insert a paragraph if preceding item has >1 paragraph if( $after_lpar ){ - print HTML "<P></P>\n"; + print HTML "<p></p>\n"; $after_lpar = 0; } # remove formatting instructions from the text my $text = depod( $otext ); + my $emitted; # the tag actually emitted, used for closing + # all the list variants: if( $text =~ /\A\*/ ){ # bullet - emit_li( 'UL' ); - if ($text =~ /\A\*\s+(.+)\Z/s ) { # with additional text - my $tag = $1; - $otext =~ s/\A\*\s+//; - emit_item_tag( $otext, $tag, 1 ); - } + $emitted = emit_li( 'ul' ); + if ($text =~ /\A\*\s+(.+)\Z/s ) { # with additional text + my $tag = $1; + $otext =~ s/\A\*\s+//; + emit_item_tag( $otext, $tag, 1 ); + } } elsif( $text =~ /\A\d+/ ){ # numbered list - emit_li( 'OL' ); - if ($text =~ /\A(?>\d+\.?)\s*(.+)\Z/s ) { # with additional text - my $tag = $1; - $otext =~ s/\A\d+\.?\s*//; - emit_item_tag( $otext, $tag, 1 ); - } + $emitted = emit_li( 'ol' ); + if ($text =~ /\A(?>\d+\.?)\s*(.+)\Z/s ) { # with additional text + my $tag = $1; + $otext =~ s/\A\d+\.?\s*//; + emit_item_tag( $otext, $tag, 1 ); + } } else { # definition list - emit_li( 'DL' ); - if ($text =~ /\A(.+)\Z/s ){ # should have text - emit_item_tag( $otext, $text, 1 ); - } - print HTML '<DD>'; + $emitted = emit_li( 'dl' ); + if ($text =~ /\A(.+)\Z/s ){ # should have text + emit_item_tag( $otext, $text, 1 ); + } + $need_dd = 1; } + print HTML "</$emitted>" if $emitted; print HTML "\n"; + return $need_dd; } # @@ -1150,7 +1178,7 @@ sub process_back { # $listend[$listlevel] may have never been initialized. $listlevel--; if( defined $listend[$listlevel] ){ - print HTML '<P></P>' if $after_lpar; + print HTML '<p></p>' if $after_lpar; print HTML $listend[$listlevel]; print HTML "\n"; pop( @listend ); @@ -1189,7 +1217,7 @@ sub process_for { for my $ext (qw[.png .gif .jpeg .jpg .tga .pcl .bmp]) { $text .= $ext, last if -r "$text$ext"; } - print HTML qq{<p align = "center"><img src = "$text" alt = "$text illustration"></p>}; + print HTML qq{<p align="center"><img src="$text" alt="$text illustration" /></p>}; } } @@ -1216,12 +1244,12 @@ sub process_end { $whom = lc($whom); if ($begin_stack[-1] ne $whom ) { die "Unmatched begin/end at chunk $paragraph\n" - } + } pop( @begin_stack ); } # -# process_pre - indented paragraph, made into <PRE></PRE> +# process_pre - indented paragraph, made into <pre></pre> # sub process_pre { my( $text ) = @_; @@ -1238,10 +1266,7 @@ sub process_pre { #eg; # convert some special chars to HTML escapes - $rest =~ s/&/&/g; - $rest =~ s/</</g; - $rest =~ s/>/>/g; - $rest =~ s/"/"/g; + $rest = html_escape($rest); # try and create links for all occurrences of perl.* within # the preformatted text. @@ -1249,19 +1274,19 @@ sub process_pre { (\s*)(perl\w+) }{ if ( defined $pages{$2} ){ # is a link - qq($1<A HREF="$htmlroot/$pages{$2}">$2</A>); + qq($1<a href="$htmlroot/$pages{$2}">$2</a>); } elsif (defined $pages{dosify($2)}) { # is a link - qq($1<A HREF="$htmlroot/$pages{dosify($2)}">$2</A>); + qq($1<a href="$htmlroot/$pages{dosify($2)}">$2</a>); } else { "$1$2"; } }xeg; $rest =~ s{ - (<A\ HREF="?) ([^>:]*:)? ([^>:]*) \.pod: ([^>:]*:)? + (<a\ href="?) ([^>:]*:)? ([^>:]*) \.pod: ([^>:]*:)? }{ my $url ; if ( $htmlfileurl ne '' ){ - # Here, we take advantage of the knowledge + # Here, we take advantage of the knowledge # that $htmlfileurl ne '' implies $htmlroot eq ''. # Since $htmlroot eq '', we need to prepend $htmldir # on the fron of the link to get the absolute path @@ -1288,9 +1313,9 @@ sub process_pre { file wais ftp - } ) + } ) . ')'; - + my $ltrs = '\w'; my $gunk = '/#~:.?+=&%@!\-'; my $punc = '.:?\-'; @@ -1312,7 +1337,7 @@ sub process_pre { | # or else $ # then end of the string ) - }{<A HREF="$1">$1</A>}igox; + }{<a href="$1">$1</a>}igox; # text should be as it is (verbatim) $$text = $rest; @@ -1374,7 +1399,7 @@ sub process_puretext { if( $args =~ /^\d+$/ ){ my $url = page_sect( $word, '' ); if( defined $url ){ - $word = "<A HREF=\"$url\">the $word manpage</A>"; + $word = "<a href=\"$url\">the $word manpage</a>"; next; } } @@ -1389,17 +1414,14 @@ sub process_puretext { } elsif ($word =~ m,^\w+://\w,) { # looks like a URL # Don't relativize it: leave it as the author intended - $word = qq(<A HREF="$word">$word</A>); + $word = qq(<a href="$word">$word</a>); } elsif ($word =~ /[\w.-]+\@[\w-]+\.\w/) { # looks like an e-mail address my ($w1, $w2, $w3) = ("", $word, ""); ($w1, $w2, $w3) = ("(", $1, ")$2") if $word =~ /^\((.*?)\)(,?)/; ($w1, $w2, $w3) = ("<", $1, ">$2") if $word =~ /^<(.*?)>(,?)/; - $word = qq($w1<A HREF="mailto:$w2">$w2</A>$w3); - } elsif ($word !~ /[a-z]/ && $word =~ /[A-Z]/) { # all uppercase? - $word = html_escape($word) if $word =~ /["&<>]/; - $word = "\n<FONT SIZE=-1>$word</FONT>" if $netscape; - } else { + $word = qq($w1<a href="mailto:$w2">$w2</a>$w3); + } else { $word = html_escape($word) if $word =~ /["&<>]/; } } @@ -1437,10 +1459,10 @@ sub process_text1($$;$$){ if( $func eq 'B' ){ # B<text> - boldface - $res = '<STRONG>' . process_text1( $lev, $rstr ) . '</STRONG>'; + $res = '<strong>' . process_text1( $lev, $rstr ) . '</strong>'; } elsif( $func eq 'C' ){ - # C<code> - can be a ref or <CODE></CODE> + # C<code> - can be a ref or <code></code> # need to extract text my $par = go_ahead( $rstr, 'C', $closing ); @@ -1448,7 +1470,7 @@ sub process_text1($$;$$){ my $text = depod( $par ); ### my $x = $par =~ /[BI]</ ? 'yes' : 'no' ; - ### print STDERR "-->call emit_C($par) lev=$lev, par with BI=$x\n"; + ### print STDERR "-->call emit_C($par) lev=$lev, par with BI=$x\n"; $res = emit_C( $text, $lev > 1 || ($par =~ /[BI]</) ); @@ -1461,15 +1483,15 @@ sub process_text1($$;$$){ } elsif( $func eq 'F' ){ # F<filename> - italizice - $res = '<EM>' . process_text1( $lev, $rstr ) . '</EM>'; + $res = '<em>' . process_text1( $lev, $rstr ) . '</em>'; } elsif( $func eq 'I' ){ # I<text> - italizice - $res = '<EM>' . process_text1( $lev, $rstr ) . '</EM>'; + $res = '<em>' . process_text1( $lev, $rstr ) . '</em>'; } elsif( $func eq 'L' ){ # L<link> - link - ## L<text|cross-ref> => produce text, use cross-ref for linking + ## L<text|cross-ref> => produce text, use cross-ref for linking ## L<cross-ref> => make text from cross-ref ## need to extract text my $par = go_ahead( $rstr, 'L', $closing ); @@ -1492,7 +1514,7 @@ sub process_text1($$;$$){ if( $par =~ s{^([^|]+)\|}{} ){ $linktext = $1; } - + # make sure sections start with a / $par =~ s{^"}{/"}; @@ -1500,7 +1522,7 @@ sub process_text1($$;$$){ # check for link patterns if( $par =~ m{^([^/]+?)/(?!")(.*?)$} ){ # name/ident - # we've got a name/ident (no quotes) + # we've got a name/ident (no quotes) ( $page, $ident ) = ( $1, $2 ); ### print STDERR "--> L<$par> to page $page, ident $ident\n"; @@ -1551,7 +1573,7 @@ sub process_text1($$;$$){ ### print STDERR "got page/section url=$url\n"; last RESOLVE; } - ## no luck: go for an ident + ## no luck: go for an ident if( $section ){ $ident = $section; } else { @@ -1577,9 +1599,9 @@ sub process_text1($$;$$){ # now we have a URL or just plain code $$rstr = $linktext . '>' . $$rstr; if( defined( $url ) ){ - $res = "<A HREF=\"$url\">" . process_text1( $lev, $rstr ) . '</A>'; + $res = "<a href=\"$url\">" . process_text1( $lev, $rstr ) . '</a>'; } else { - $res = '<EM>' . process_text1( $lev, $rstr ) . '</EM>'; + $res = '<em>' . process_text1( $lev, $rstr ) . '</em>'; } } elsif( $func eq 'S' ){ @@ -1592,7 +1614,7 @@ sub process_text1($$;$$){ $$rstr =~ s/^[^>]*>//; } elsif( $func eq 'Z' ){ - # Z<> - empty + # Z<> - empty warn "$0: $podfile: invalid X<> in paragraph $paragraph." unless $$rstr =~ s/^>//; @@ -1655,11 +1677,11 @@ sub emit_C($;$$){ if( defined( $url ) && (!defined( $EmittedItem ) || $EmittedItem ne $fid ) ){ - $res = "<A HREF=\"$url\"><CODE>$linktext</CODE></A>"; + $res = "<a href=\"$url\"><code>$linktext</code></a>"; } elsif( 0 && $nocode ){ $res = $linktext; } else { - $res = "<CODE>$linktext</CODE>"; + $res = "<code>$linktext</code>"; } return $res; } @@ -1673,8 +1695,9 @@ sub html_escape { $rest =~ s/</</g; $rest =~ s/>/>/g; $rest =~ s/"/"/g; + $rest =~ s/'/'/g; return $rest; -} +} # @@ -1717,8 +1740,8 @@ sub page_sect($$) { # an intermediate page that is an index to all such pages. my $page_name = $page ; $page_name =~ s,^.*/,,s ; - if ( defined( $pages{ $page_name } ) && - $pages{ $page_name } =~ /([^:]*$page)\.(?:pod|pm):/ + if ( defined( $pages{ $page_name } ) && + $pages{ $page_name } =~ /([^:]*$page)\.(?:pod|pm):/ ) { $page = $1 ; } @@ -1796,11 +1819,11 @@ sub page_sect($$) { sub relativize_url { my ($dest,$source) = @_ ; - my ($dest_volume,$dest_directory,$dest_file) = + my ($dest_volume,$dest_directory,$dest_file) = File::Spec::Unix->splitpath( $dest ) ; $dest = File::Spec::Unix->catpath( $dest_volume, $dest_directory, '' ) ; - my ($source_volume,$source_directory,$source_file) = + my ($source_volume,$source_directory,$source_file) = File::Spec::Unix->splitpath( $source ) ; $source = File::Spec::Unix->catpath( $source_volume, $source_directory, '' ) ; @@ -1809,9 +1832,9 @@ sub relativize_url { $rel_path = File::Spec::Unix->abs2rel( $dest, $source ) ; } - if ( $rel_path ne '' && + if ( $rel_path ne '' && substr( $rel_path, -1 ) ne '/' && - substr( $dest_file, 0, 1 ) ne '#' + substr( $dest_file, 0, 1 ) ne '#' ) { $rel_path .= "/$dest_file" ; } @@ -1876,7 +1899,7 @@ sub coderef($$){ } confess "url has space: $url" if $url =~ /"[^"]*\s[^"]*"/; - } + } return( $url, $fid ); } @@ -1900,7 +1923,7 @@ sub relative_url { # sub finish_list { while ($listlevel > 0) { - print HTML "</DL>\n"; + print HTML "</dl>\n"; $listlevel--; } } @@ -1942,7 +1965,7 @@ sub depod($){ } else { $string = $_[0]; depod1( \$string ); - } + } } sub depod1($;$$){ @@ -1964,7 +1987,7 @@ sub depod1($;$$){ # X<> - ignore $$rstr =~ s/^[^>]*>//; } elsif( $func eq 'Z' ){ - # Z<> - empty + # Z<> - empty $$rstr =~ s/^>//; } else { # all others: either recurse into new function or @@ -2027,9 +2050,9 @@ sub fragment_id { # sub make_URL_href($){ my( $url ) = @_; - if( $url !~ - s{^(http:[-\w/#~:.+=&%@!]+)(\?.*)$}{<A HREF="$1$2">$1</A>}i ){ - $url = "<A HREF=\"$url\">$url</A>"; + if( $url !~ + s{^(http:[-\w/#~:.+=&%@!]+)(\?.*)$}{<a href="$1$2">$1</a>}i ){ + $url = "<a href=\"$url\">$url</a>"; } return $url; } |