Front page | perl.perl5.changes.mac |
Postings from July 2002
Change 17668: Help fixes from Thomas Wegner
From:
Chris Nandor
Date:
July 30, 2002 06:08
Subject:
Change 17668: Help fixes from Thomas Wegner
Message ID:
p05111b05b96c3fc6f854@[10.0.1.177]
Change 17668 by pudge@pudge-mobile on 2002/07/30 03:16:52
Help fixes from Thomas Wegner
Affected files ...
.... //depot/macperl/macos/macperl/BuildHelpIndex#2 edit
.... //depot/macperl/macos/macperl/MacPerl.podhelp#4 edit
.... //depot/maint-5.6/macperl/macos/macperl/BuildHelpIndex#2 edit
.... //depot/maint-5.6/macperl/macos/macperl/MacPerl.podhelp#10 edit
.... //depot/maint-5.8/macperl/macos/macperl/BuildHelpIndex#2 edit
.... //depot/maint-5.8/macperl/macos/macperl/MacPerl.podhelp#2 edit
Differences ...
==== //depot/macperl/macos/macperl/BuildHelpIndex#2 (text) ====
Index: macperl/macos/macperl/BuildHelpIndex
--- macperl/macos/macperl/BuildHelpIndex#1~16123~ Tue Apr 23 18:25:17 2002
+++ macperl/macos/macperl/BuildHelpIndex Mon Jul 29 20:16:52 2002
@@ -3,6 +3,461 @@
#!perl -s
+use Pod::Parser;
+
+package MyPodParseLink;
+
+##############################################################################
+# Since Pod::ParseLink is (a) not part of the standard library prior to Perl
+# 5.8, and (b) I needed to make a little change for compatibility with Shuck,
+# its code was copied over here. All credits go to Russ Allbery.
+##############################################################################
+
+# Parse the name and section portion of a link into a name and section.
+sub _parse_section {
+ my ($link) = @_;
+ $link =~ s/^\s+//;
+ $link =~ s/\s+$//;
+
+ # If the whole link is enclosed in quotes, interpret it all as a section
+ # even if it contains a slash.
+ return (undef, $1) if ($link =~ /^"\s*(.*?)\s*"$/);
+
+ # Split into page and section on slash, and then clean up quoting in the
+ # section. If there is no section and the name contains spaces, also
+ # guess that it's an old section link.
+ my ($page, $section) = split (/\s*\/\s*/, $link, 2);
+ $section =~ s/^"\s*(.*?)\s*"$/$1/ if $section;
+ if ($page && $page =~ / / && !defined ($section)) {
+ $section = $page;
+ $page = undef;
+ } else {
+ $page = undef unless $page;
+ $section = undef unless $section;
+ }
+ return ($page, $section);
+}
+
+# Infer link text from the page and section.
+sub _infer_text {
+ my ($page, $section) = @_;
+ my $inferred;
+ if ($page && !$section) {
+ $inferred = $page;
+ } elsif (!$page && $section) {
+ $inferred = '"' . $section . '"';
+ } elsif ($page && $section) {
+ # The string 'the section ' string is prepended for compatibility with
+ # Shuck (this is the only difference from Pod::ParseLink)
+ $inferred = 'the section ' . '"' . $section . '" in ' . $page;
+ }
+ return $inferred;
+}
+
+# Given the contents of an L<> formatting code, parse it into the link text,
+# the possibly inferred link text, the name or URL, the section, and the type
+# of link (pod, man, or url).
+sub parselink {
+ my ($link) = @_;
+ $link =~ s/\s+/ /g;
+ if ($link =~ /\A\w+:[^:\s]\S*\Z/) {
+ return (undef, $link, $link, undef, 'url');
+ } else {
+ my $text;
+ if ($link =~ /\|/) {
+ ($text, $link) = split (/\|/, $link, 2);
+ }
+ my ($name, $section) = _parse_section ($link);
+ my $inferred = $text || _infer_text ($name, $section);
+ my $type = ($name && $name =~ /\(\S*\)/) ? 'man' : 'pod';
+ return ($text, $inferred, $name, $section, $type);
+ }
+}
+
+
+##############################################################################
+# And now our Pod::Parser subclass, MyPodIndexer
+# (A lot of this code was borrowed from Pod::Text, credits to Russ Allbery.)
+##############################################################################
+package MyPodIndexer;
+@ISA = qw(Pod::Parser);
+
+# Table of supported E<> escapes for the Macintosh standard Roman character set.
+# (These are exactly the same escapes as known by Shuck. This list is incomplete
+# since the Macintosh standard Roman character set doesn't contain all characters
+# defined in the ISO 8559-1 (Latin 1) character set.)
+%ESCAPES = (
+ 'amp' => '&', # ampersand
+ 'apos' => "'", # apostrophe
+ 'lt' => '<', # left chevron, less-than
+ 'gt' => '>', # right chevron, greater-than
+ 'quot' => '"', # double quote
+ 'sol' => '/', # solidus (forward slash)
+ 'verbar' => '|', # vertical bar
+
+ "Aacute" => "Á", # capital A, acute accent
+ "aacute" => "á", # small a, acute accent
+ "Acirc" => "Â", # capital A, circumflex accent
+ "acirc" => "â", # small a, circumflex accent
+ "AElig" => "Æ", # capital AE diphthong (ligature)
+ "aelig" => "æ", # small ae diphthong (ligature)
+ "Agrave" => "À", # capital A, grave accent
+ "agrave" => "à", # small a, grave accent
+ "Aring" => "Å", # capital A, ring
+ "aring" => "å", # small a, ring
+ "Atilde" => "Ã", # capital A, tilde
+ "atilde" => "ã", # small a, tilde
+ "Auml" => "Ä", # capital A, dieresis or umlaut mark
+ "auml" => "ä", # small a, dieresis or umlaut mark
+ "Ccedil" => "Ç", # capital C, cedilla
+ "ccedil" => "ç", # small c, cedilla
+ "Eacute" => "É", # capital E, acute accent
+ "eacute" => "é", # small e, acute accent
+ "Ecirc" => "Ê", # capital E, circumflex accent
+ "ecirc" => "ê", # small e, circumflex accent
+ "Egrave" => "È", # capital E, grave accent
+ "egrave" => "è", # small e, grave accent
+ "ETH" => "Eth", # capital Eth, Icelandic
+ "eth" => "eth", # small eth, Icelandic
+ "Euml" => "Ë", # capital E, dieresis or umlaut mark
+ "euml" => "ë", # small e, dieresis or umlaut mark
+ "Iacute" => "Í", # capital I, acute accent
+ "iacute" => "í", # small i, acute accent
+ "Icirc" => "Î", # capital I, circumflex accent
+ "icirc" => "î", # small i, circumflex accent
+ "Igrave" => "Ì", # capital I, grave accent
+ "igrave" => "ì", # small i, grave accent
+ "Iuml" => "Ï", # capital I, dieresis or umlaut mark
+ "iuml" => "ï", # small i, dieresis or umlaut mark
+ "Ntilde" => "Ñ", # capital N, tilde
+ "ntilde" => "ñ", # small n, tilde
+ "Oacute" => "Ó", # capital O, acute accent
+ "oacute" => "ó", # small o, acute accent
+ "Ocirc" => "Ô", # capital O, circumflex accent
+ "ocirc" => "ô", # small o, circumflex accent
+ "Ograve" => "Ò", # capital O, grave accent
+ "ograve" => "ò", # small o, grave accent
+ "Oslash" => "Ø", # capital O, slash
+ "oslash" => "ø", # small o, slash
+ "Otilde" => "Õ", # capital O, tilde
+ "otilde" => "õ", # small o, tilde
+ "Ouml" => "Ö", # capital O, dieresis or umlaut mark
+ "ouml" => "ö", # small o, dieresis or umlaut mark
+ "szlig" => "ß", # small sharp s, German (sz ligature)
+ "THORN" => "Thorn", # capital THORN, Icelandic
+ "thorn" => "thorn", # small thorn, Icelandic
+ "Uacute" => "Ú", # capital U, acute accent
+ "uacute" => "ú", # small u, acute accent
+ "Ucirc" => "Û", # capital U, circumflex accent
+ "ucirc" => "û", # small u, circumflex accent
+ "Ugrave" => "Ù", # capital U, grave accent
+ "ugrave" => "ù", # small u, grave accent
+ "Uuml" => "Ü", # capital U, dieresis or umlaut mark
+ "uuml" => "ü", # small u, dieresis or umlaut mark
+ "Yacute" => "´Y", # capital Y, acute accent
+ "yacute" => "´y", # small y, acute accent
+ "yuml" => "ÿ", # small y, dieresis or umlaut mark
+
+ "laquo" => "«", # left pointing double angle quotation mark
+ "lchevron" => "«", # synonym (backwards compatibility)
+ "raquo" => "»", # right pointing double angle quotation mark
+ "rchevron" => "»", # synonym (backwards compatibility)
+
+ "iexcl" => "¡", # inverted exclamation mark
+ "cent" => "¢", # cent sign
+ "pound" => "£", # (UK) pound sign
+
+ "yen" => "¥", # yen sign
+
+ "sect" => "§", # section sign
+ "uml" => "¨", # diaresis
+ "copy" => "©", # Copyright symbol
+ "ordf" => "ª", # feminine ordinal indicator
+ "not" => "¬", # not sign
+
+ "reg" => "®", # registered trademark
+ "macr" => "¯", # macron, overline
+ "deg" => "°", # degree sign
+ "plusmn" => "±", # plus-minus sign
+
+ "acute" => "´", # acute accent
+ "micro" => "µ", # micro sign
+ "para" => "¶", # pilcrow sign = paragraph sign
+ "middot" => "·", # middle dot = Georgian comma
+ "cedil" => "¸", # cedilla
+
+ "ordm" => "º", # masculine ordinal indicator
+
+ "iquest" => "¿", # inverted question mark
+ "times" => "x", # multiplication sign (just an x)
+ "divide" => "÷", # division sign
+
+ "nbsp" => " ", # non-breaking space
+);
+
+
+# This array maps the ISO 8559-1 (Latin-1) character set to the Mac standard Roman character set.
+# Latin 1: The first 127 characters are equal to ASCII. (0x00 - 0x7F, 0 - 127, where 127 is non-printable)
+# The next 32 characters are non-printable. (0x80 - 0x9F, 128 - 159)
+# The last 96 characters are shown below. (0xA0 - 0xFF, 160 - 255)
+#
+# (subtract 160 from the Latin-1 char code to get the array index)
+@Latin1_to_MacRoman_MAP = (
+
+ 0xCA, # 0 -- 0xA0, 160, ' ' -> nonbreaking space
+ 0xC1, # 1 -- 0xA1, 161, '¡' -> inverted exclamation mark
+ 0xA2, # 2 -- 0xA2, 162, '¢' -> cent sign
+ 0xA3, # 3 -- 0xA3, 163, '£' -> (UK) pound sign
+ 0xDB, # 4 -- 0xA4, 164, '¤' -> currency sign (some fonts display it as Euro sign; select e.g. Futura to see it)
+ 0xB4, # 5 -- 0xA5, 165, '¥' -> yen sign
+ 0x00, # 6 -- 0xA6, 166, n/a -> broken vertical bar (not in the Mac standard Roman character set)
+ 0xA4, # 7 -- 0xA7, 167, '§' -> section sign
+ 0xAC, # 8 -- 0xA8, 168, '¨' -> diaresis
+ 0xA9, # 9 -- 0xA9, 169, '©' -> Copyright symbol
+
+ 0xBB, # 10 -- 0xAA, 170, 'ª' -> feminine ordinal indicator
+ 0xC7, # 11 -- 0xAB, 171, '«' -> left pointing double angle quotation mark, guillemotleft
+ 0xC2, # 12 -- 0xAC, 172, '¬' -> (logical) not sign
+ 0xD0, # 13 -- 0xAD, 173, '' -> soft (discretionary) hyphen (endash)
+ 0xA8, # 14 -- 0xAE, 174, '®' -> registered
+ 0xF8, # 15 -- 0xAF, 175, '¯' -> macron, overline
+ 0xA1, # 16 -- 0xB0, 176, '°' -> degree sign
+ 0xB1, # 17 -- 0xB1, 177, '±' -> plus-minus sign
+ 0x00, # 18 -- 0xB2, 178, n/a -> superscript 2 (not in the Mac standard Roman character set)
+ 0x00, # 19 -- 0xB3, 179, n/a -> superscript 3 (not in the Mac standard Roman character set)
+
+ 0xAB, # 20 -- 0xB4, 180, '´' -> acute accent
+ 0xB5, # 21 -- 0xB5, 181, 'µ' -> micro sign
+ 0xA6, # 22 -- 0xB6, 182, '¶' -> pilcrow sign = paragraph sign
+ 0xE1, # 23 -- 0xB7, 183, '·' -> middle dot or periodcentered = Georgian comma
+ 0xFC, # 24 -- 0xB8, 184, '¸' -> cedilla
+ 0x00, # 25 -- 0xB9, 185, n/a -> superscript 1 (not in the Mac standard Roman character set)
+ 0xBC, # 26 -- 0xBA, 186, 'º' -> masculine ordinal indicator
+ 0xC8, # 27 -- 0xBB, 187, '»' -> right pointing double angle quotation mark, guillemotright
+ 0x00, # 28 -- 0xBC, 188, n/a -> vulgar fraction one quarter (not in the Mac standard Roman character set)
+ 0x00, # 29 -- 0xBD, 189, n/a -> vulgar fraction one half (not in the Mac standard Roman character set)
+
+ 0x00, # 30 -- 0xBE, 190, n/a -> vulgar fraction three quarters (not in the Mac standard Roman character set)
+ 0xC0, # 31 -- 0xBF, 191, '¿' -> inverted question mark
+ 0xCB, # 32 -- 0xC0, 192, 'À' -> capital A, grave accent
+ 0xE7, # 33 -- 0xC1, 193, 'Á' -> capital A, acute accent
+ 0xE5, # 34 -- 0xC2, 194, 'Â' -> capital A, circumflex accent
+ 0xCC, # 35 -- 0xC3, 195, 'Ã' -> capital A, tilde
+ 0x80, # 36 -- 0xC4, 196, 'Ä' -> capital A, dieresis or umlaut mark
+ 0x81, # 37 -- 0xC5, 197, 'Å' -> capital A, ring
+ 0xAE, # 38 -- 0xC6, 198, 'Æ' -> capital AE diphthong (ligature)
+ 0x82, # 39 -- 0xC7, 199, 'Ç' -> capital C, cedilla
+
+ 0xE9, # 40 -- 0xC8, 200, 'È' -> capital E, grave accent
+ 0x83, # 41 -- 0xC9, 201, 'É' -> capital E, acute accent
+ 0xE6, # 42 -- 0xCA, 202, 'Ê' -> capital E, circumflex accent
+ 0xE8, # 43 -- 0xCB, 203, 'Ë' -> capital E, dieresis or umlaut mark
+ 0xED, # 44 -- 0xCC, 204, 'Ì' -> capital I, grave accent
+ 0xEA, # 45 -- 0xCD, 205, 'Í' -> capital I, acute accent
+ 0xEB, # 46 -- 0xCE, 206, 'Î' -> capital I, circumflex accent
+ 0xEC, # 47 -- 0xCF, 207, 'Ï' -> capital I, dieresis or umlaut mark
+ 0x00, # 48 -- 0xD0, 208, n/a -> capital Eth, Icelandic (not in the Mac standard Roman character set)
+ 0x84, # 49 -- 0xD1, 209, 'Ñ' -> capital N, tilde
+
+ 0xF1, # 50 -- 0xD2, 210, 'Ò' -> capital O, grave accent
+ 0xEE, # 51 -- 0xD3, 211, 'Ó' -> capital O, acute accent
+ 0xEF, # 52 -- 0xD4, 212, 'Ô' -> capital O, circumflex accent
+ 0xCD, # 53 -- 0xD5, 213, 'Õ' -> capital O, tilde
+ 0x85, # 54 -- 0xD6, 214, 'Ö' -> capital O, dieresis or umlaut mark
+ 0x00, # 55 -- 0xD7, 215, n/a -> multiplication sign (not in the Mac standard Roman character set)
+ 0xAF, # 56 -- 0xD8, 216, 'Ø' -> capital O, slash
+ 0xF4, # 57 -- 0xD9, 217, 'Ù' -> capital U, grave accent
+ 0xF2, # 58 -- 0xDA, 218, 'Ú' -> capital U, acute accent
+ 0xF3, # 59 -- 0xDB, 219, 'Û' -> capital U, circumflex accent
+
+ 0x86, # 60 -- 0xDC, 220, 'Ü' -> capital U, dieresis or umlaut mark
+ 0x00, # 61 -- 0xDD, 221, n/a -> capital Y, acute accent (not in the Mac standard Roman character set)
+ 0x00, # 62 -- 0xDE, 222, n/a -> capital THORN, Icelandic (not in the Mac standard Roman character set)
+ 0xA7, # 63 -- 0xDF, 223, 'ß' -> small sharp s, German (sz ligature)
+ 0x88, # 64 -- 0xE0, 224, 'à' -> small a, grave accent
+ 0x87, # 65 -- 0xE1, 225, 'á' -> small a, acute accent
+ 0x89, # 66 -- 0xE2, 226, 'â' -> small a, circumflex accent
+ 0x8B, # 67 -- 0xE3, 227, 'ã' -> small a, tilde
+ 0x8A, # 69 -- 0xE4, 228, 'ä' -> small a, dieresis or umlaut mark
+ 0x8C, # 69 -- 0xE5, 229, 'å' -> small a, ring
+
+ 0xBE, # 70 -- 0xE6, 230, 'æ' -> small ae diphthong (ligature)
+ 0x8D, # 71 -- 0xE7, 231, 'ç' -> small c, cedilla
+ 0x8F, # 72 -- 0xE8, 232, 'è' -> small e, grave accent
+ 0x8E, # 73 -- 0xE9, 233, 'é' -> small e, acute accent
+ 0x90, # 74 -- 0xEA, 234, 'ê' -> small e, circumflex accent
+ 0x91, # 75 -- 0xEB, 235, 'ë' -> small e, dieresis or umlaut mark
+ 0x93, # 76 -- 0xEC, 236, 'ì' -> small i, grave accent
+ 0x92, # 77 -- 0xED, 237, 'í' -> small i, acute accent
+ 0x94, # 78 -- 0xEE, 238, 'î' -> small i, circumflex accent
+ 0x95, # 79 -- 0xEF, 239, 'ï' -> small i, dieresis or umlaut mark
+
+ 0x00, # 80 -- 0xF0, 240, n/a -> small eth, Icelandic (not in the Mac standard Roman character set)
+ 0x96, # 81 -- 0xF1, 241, 'ñ' -> small n, tilde
+ 0x98, # 82 -- 0xF2, 242, 'ò' -> small o, grave accent
+ 0x97, # 83 -- 0xF3, 243, 'ó' -> small o, acute accent
+ 0x99, # 84 -- 0xF4, 244, 'ô' -> small o, circumflex accent
+ 0x9B, # 85 -- 0xF5, 245, 'õ' -> small o, tilde
+ 0xBB, # 86 -- 0xF6, 246, 'ö' -> small o, dieresis or umlaut mark
+ 0xD6, # 87 -- 0xF7, 247, '÷' -> division sign
+ 0xBF, # 88 -- 0xF8, 248, 'ø' -> small o, slash
+ 0x9D, # 89 -- 0xF9, 249, 'ù' -> small u, grave accent
+
+ 0x9C, # 90 -- 0xFA, 250, 'ú' -> small u, acute accent
+ 0x9E, # 91 -- 0xFB, 251, 'û' -> small u, circumflex accent
+ 0x9F, # 92 -- 0xFC, 252, 'ü' -> small u, dieresis or umlaut mark
+ 0x00, # 93 -- 0xFD, 253, n/a -> small y, acute accent (not in the Mac standard Roman character set)
+ 0x00, # 94 -- 0xFE, 254, n/a -> small thorn, Icelandic (not in the Mac standard Roman character set)
+ 0xD8 # 95 -- 0xFF, 255, 'ÿ' -> small y, dieresis or umlaut mark
+
+);
+
+
+
+sub command {
+ my ($parser, $command, $paragraph, $line_num) = @_;
+ my $out_fh = $parser->output_handle();
+ my $expansion;
+
+ # interpret the command and its text
+ # for indexing, only =heads and =items are of interest
+ if ( ($command eq 'head1') || ($command eq 'head2') ||
+ ($command eq 'head3') || ($command eq 'head4') ||
+ ($command eq 'item') )
+ {
+ # expand formatting codes
+ $expansion = $parser->interpolate($paragraph, $line_num);
+ # print to out file
+ print $out_fh '=' . $command . ' ' . $expansion;
+ }
+}
+
+sub verbatim {
+ my ($parser, $paragraph, $line_num) = @_;
+ # do nothing
+}
+
+sub textblock {
+ my ($parser, $paragraph, $line_num) = @_;
+ # do nothing
+}
+
+
+# Handle links. Most of the work is done by MyPodParseLink.
+sub seq_Link {
+ my ($self, $link, $seq) = @_;
+ my ($text, $type) = (MyPodParseLink::parselink ($link))[1,4];
+ my ($file, $line) = $seq->file_line;
+ $text = $self->interpolate ($text, $line);
+ $text = '<' . $text . '>' if $type eq 'url';
+ return $text || '';
+}
+
+# Called for a formatting code. Gets the command, argument, and a
+# Pod::InteriorSequence object and is expected to return the resulting text.
+sub interior_sequence {
+ my ($parser, $seq_command, $seq_argument, $pod_seq) = @_;
+
+ my $parent = $pod_seq->nested;
+ while (defined $parent) {
+ return $pod_seq->raw_text if ($parent->cmd_name eq 'L');
+ $parent = $parent->nested;
+ }
+
+ # get filename and line number
+ my ($file, $line) = $pod_seq->file_line;
+
+ # Index entries are ignored in plain text.
+ return '' if ($seq_command eq 'X' || $seq_command eq 'Z');
+
+ # Expand escapes into the actual character now, warning if invalid.
+ if ($seq_command eq 'E') {
+
+ my $is_Number = 0;
+ if ( $seq_argument =~ m/^(0x[a-fA-F0-9]+)$/ ) {
+ # hexadecimal
+ $charCode = hex($1);
+ $is_Number = 1;
+ }
+ elsif ( $seq_argument =~ m/^(0[0-7]+)$/ ) {
+ # octal
+ $charCode = oct($1);
+ $is_Number = 1;
+ }
+ elsif ( $seq_argument =~ m/^(0|(?:[1-9][0-9]*))$/) {
+ # decimal, but not e.g. 099
+ $charCode = $1;
+ $is_Number = 1;
+ }
+
+ if ($is_Number) { # $seq_argument is a character number
+
+ if ( ($charCode < 0) || ($charCode > 255) ) {
+ warn "$file:$line: Character code out of range: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+
+ }
+ else {
+
+ if ($charCode < 32) {
+ # standard ASCII, non-printable
+ warn "$file:$line: Character is non-printable: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ elsif ( ($charCode >= 32) && ($charCode < 127) ) {
+ # standard ASCII
+ return chr($charCode);
+ }
+ elsif ( ($charCode >= 127) && ($charCode < 160) ) {
+ # 127 : standard ASCII, but non-printable (DEL)
+ # 128 - 159 : not defined in ISO 8559-1 (Latin-1)
+ warn "$file:$line: Character is non-printable: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ else {
+ # 160 - 255 (0xA0 - 0xFF)
+ # map ISO 8559-1 (Latin-1) to Mac standard Roman
+ my $MacCharCode = $Latin1_to_MacRoman_MAP[$charCode-160];
+ if ($MacCharCode == 0) {
+ # not in Mac Roman
+ warn "$file:$line: Character is not in the Macintosh standard Roman character set: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ else {
+ return chr($MacCharCode);
+ }
+ }
+ }
+
+ }
+ else {
+ return $ESCAPES{$seq_argument} if defined $ESCAPES{$seq_argument};
+ warn "$file:$line: Unknown escape: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ }
+
+ # For all the other formatting codes, empty content produces no output.
+ return if $seq_argument eq '';
+
+ # L gets dispatched to another method, anything else returns its argument
+ if ($seq_command eq 'B') { return "$seq_argument";}
+ elsif ($seq_command eq 'C') { return "$seq_argument"; }
+ elsif ($seq_command eq 'F') { return "$seq_argument"; }
+ elsif ($seq_command eq 'I') { return "$seq_argument"; }
+ elsif ($seq_command eq 'S') { return "$seq_argument"; }
+ elsif ($seq_command eq 'L') { return $parser->seq_Link ($seq_argument, $pod_seq) }
+ else {
+ warn "$file:$line: Unknown formatting code: $$seq_command<${seq_argument}>\n";
+ }
+}
+
+
+##############################################################################
+# MAIN
+##############################################################################
+package main;
+
($index = shift @ARGV) || die "No help index specified";
dbmopen(%INDEX, $index, 0666) || die "Couldn't open index file \"$index\"";
@@ -123,6 +578,15 @@
local($file, $var) = @_;
local(%rename, %alias);
+ # Create a parser object
+ my $parser = new MyPodIndexer();
+ $file =~ m/([^:]+)\.pod$/;
+ my $indexfile = $1 . '.idx'; # our temporary index file
+
+ # Read POD from file.pod and write to file.idx
+ # (create the index file in our current directory, which normally is ":macperl_src:macperl:")
+ $parser->parse_from_file ("::perl$file", ":$indexfile");
+
$url = $file;
if ($url =~ /^:/) {
$url = $';
@@ -132,7 +596,7 @@
$url =~ s|:|/|g;
$url = "pod://$url";
}
- open(INDEX, "::perl$file") || die "Can't open index file \"$file\"";
+ open(INDEX, ":$indexfile") || die "Can't open index file \"$indexfile\"";
while (<>) {
if (/\@end/) {
goto startindex;
@@ -154,7 +618,13 @@
while (<INDEX>) {
if (/^=item\s+(.*\S)\s*$/) {
$name = $1;
- next if ($name eq "*");
+
+ # bullet lists and numbered lists are not indexed by Shuck
+ next if ($name eq "*"); # skip =item *
+ next if ($name =~ m/^\d+\.?$/); # skip =item 1/2./0377 (decimal, octal)
+ next if ($name =~ m/^0x[0-9a-fA-F]+$/); # skip =item 0x20 (hex)
+ next if ($name =~ m/^0b[01]+$/); # skip =item 0b1100 (binary)
+
if ($name =~ /^\$([A-Za-z_]+|\^[A-Z]|<I<digit>>|.)(.?)/) {
if ($2 eq "{") {
$key = "\%$1";
@@ -192,4 +662,7 @@
warn "\"$value\" undefined" unless $INDEX{$value};
$INDEX{$lastkey = $key} ||= $INDEX{$value};
}
+
+ close INDEX;
+ unlink $indexfile;
}
==== //depot/macperl/macos/macperl/MacPerl.podhelp#4 (text) ====
Index: macperl/macos/macperl/MacPerl.podhelp
--- macperl/macos/macperl/MacPerl.podhelp#3~16977~ Sun Jun 2 10:21:45 2002
+++ macperl/macos/macperl/MacPerl.podhelp Mon Jul 29 20:16:52 2002
@@ -87,10 +87,8 @@
pod:pod/perlop.pod Operators and precedence (perlop)
pod:pod/perlsub.pod Subroutines (perlsub)
pod:pod/perlfunc.pod Builtin functions (perlfunc)
-@sub Function Tutorials
pod:pod/perlopentut.pod open() tutorial (perlopentut)
pod:pod/perlpacktut.pod pack() and unpack() tutorial (perlpacktut)
-@end
@sep
pod:pod/perlpod.pod Plain old documentation (perlpod)
pod:pod/perlpodspec.pod Plain old documentation format specification (perlpod)
@@ -122,13 +120,11 @@
@sep
pod:pod/perlsec.pod Security (perlsec)
@sep
-@sub Modules
-pod:pod/perlmod.pod How they work (perlmod)
+pod:pod/perlmod.pod How modules work (perlmod)
pod:pod/perlmodlib.pod How to write and use (perlmodlib)
pod:pod/perlmodstyle.pod How to write with style (perlmodstyle)
pod:pod/perlmodinstall.pod How to install from CPAN (perlmodinstall)
pod:pod/perlnewmod.pod Preparing a new module for distribution (perlnewmod)
-@end
@sep
pod:pod/perlutil.pod Utilities packaged with the Perl distribution (perlutil)
pod:pod/perlfilter.pod Source filters (perlfilter)
@@ -209,7 +205,8 @@
@alias ^ Bitwise Or and Exclusive Or
@alias && C-style Logical And
@alias || C-style Logical Or
-@alias .. Range Operator
+@alias .. Range Operators
+@alias ... Range Operators
@alias ? Conditional Operator
@alias : Conditional Operator
@alias = Assignment Operators
==== //depot/maint-5.6/macperl/macos/macperl/BuildHelpIndex#2 (text) ====
Index: macperl/macos/macperl/BuildHelpIndex
--- macperl/macos/macperl/BuildHelpIndex#1~11243~ Mon Jul 9 15:16:12 2001
+++ macperl/macos/macperl/BuildHelpIndex Mon Jul 29 20:16:52 2002
@@ -3,6 +3,461 @@
#!perl -s
+use Pod::Parser;
+
+package MyPodParseLink;
+
+##############################################################################
+# Since Pod::ParseLink is (a) not part of the standard library prior to Perl
+# 5.8, and (b) I needed to make a little change for compatibility with Shuck,
+# its code was copied over here. All credits go to Russ Allbery.
+##############################################################################
+
+# Parse the name and section portion of a link into a name and section.
+sub _parse_section {
+ my ($link) = @_;
+ $link =~ s/^\s+//;
+ $link =~ s/\s+$//;
+
+ # If the whole link is enclosed in quotes, interpret it all as a section
+ # even if it contains a slash.
+ return (undef, $1) if ($link =~ /^"\s*(.*?)\s*"$/);
+
+ # Split into page and section on slash, and then clean up quoting in the
+ # section. If there is no section and the name contains spaces, also
+ # guess that it's an old section link.
+ my ($page, $section) = split (/\s*\/\s*/, $link, 2);
+ $section =~ s/^"\s*(.*?)\s*"$/$1/ if $section;
+ if ($page && $page =~ / / && !defined ($section)) {
+ $section = $page;
+ $page = undef;
+ } else {
+ $page = undef unless $page;
+ $section = undef unless $section;
+ }
+ return ($page, $section);
+}
+
+# Infer link text from the page and section.
+sub _infer_text {
+ my ($page, $section) = @_;
+ my $inferred;
+ if ($page && !$section) {
+ $inferred = $page;
+ } elsif (!$page && $section) {
+ $inferred = '"' . $section . '"';
+ } elsif ($page && $section) {
+ # The string 'the section ' string is prepended for compatibility with
+ # Shuck (this is the only difference from Pod::ParseLink)
+ $inferred = 'the section ' . '"' . $section . '" in ' . $page;
+ }
+ return $inferred;
+}
+
+# Given the contents of an L<> formatting code, parse it into the link text,
+# the possibly inferred link text, the name or URL, the section, and the type
+# of link (pod, man, or url).
+sub parselink {
+ my ($link) = @_;
+ $link =~ s/\s+/ /g;
+ if ($link =~ /\A\w+:[^:\s]\S*\Z/) {
+ return (undef, $link, $link, undef, 'url');
+ } else {
+ my $text;
+ if ($link =~ /\|/) {
+ ($text, $link) = split (/\|/, $link, 2);
+ }
+ my ($name, $section) = _parse_section ($link);
+ my $inferred = $text || _infer_text ($name, $section);
+ my $type = ($name && $name =~ /\(\S*\)/) ? 'man' : 'pod';
+ return ($text, $inferred, $name, $section, $type);
+ }
+}
+
+
+##############################################################################
+# And now our Pod::Parser subclass, MyPodIndexer
+# (A lot of this code was borrowed from Pod::Text, credits to Russ Allbery.)
+##############################################################################
+package MyPodIndexer;
+@ISA = qw(Pod::Parser);
+
+# Table of supported E<> escapes for the Macintosh standard Roman character set.
+# (These are exactly the same escapes as known by Shuck. This list is incomplete
+# since the Macintosh standard Roman character set doesn't contain all characters
+# defined in the ISO 8559-1 (Latin 1) character set.)
+%ESCAPES = (
+ 'amp' => '&', # ampersand
+ 'apos' => "'", # apostrophe
+ 'lt' => '<', # left chevron, less-than
+ 'gt' => '>', # right chevron, greater-than
+ 'quot' => '"', # double quote
+ 'sol' => '/', # solidus (forward slash)
+ 'verbar' => '|', # vertical bar
+
+ "Aacute" => "Á", # capital A, acute accent
+ "aacute" => "á", # small a, acute accent
+ "Acirc" => "Â", # capital A, circumflex accent
+ "acirc" => "â", # small a, circumflex accent
+ "AElig" => "Æ", # capital AE diphthong (ligature)
+ "aelig" => "æ", # small ae diphthong (ligature)
+ "Agrave" => "À", # capital A, grave accent
+ "agrave" => "à", # small a, grave accent
+ "Aring" => "Å", # capital A, ring
+ "aring" => "å", # small a, ring
+ "Atilde" => "Ã", # capital A, tilde
+ "atilde" => "ã", # small a, tilde
+ "Auml" => "Ä", # capital A, dieresis or umlaut mark
+ "auml" => "ä", # small a, dieresis or umlaut mark
+ "Ccedil" => "Ç", # capital C, cedilla
+ "ccedil" => "ç", # small c, cedilla
+ "Eacute" => "É", # capital E, acute accent
+ "eacute" => "é", # small e, acute accent
+ "Ecirc" => "Ê", # capital E, circumflex accent
+ "ecirc" => "ê", # small e, circumflex accent
+ "Egrave" => "È", # capital E, grave accent
+ "egrave" => "è", # small e, grave accent
+ "ETH" => "Eth", # capital Eth, Icelandic
+ "eth" => "eth", # small eth, Icelandic
+ "Euml" => "Ë", # capital E, dieresis or umlaut mark
+ "euml" => "ë", # small e, dieresis or umlaut mark
+ "Iacute" => "Í", # capital I, acute accent
+ "iacute" => "í", # small i, acute accent
+ "Icirc" => "Î", # capital I, circumflex accent
+ "icirc" => "î", # small i, circumflex accent
+ "Igrave" => "Ì", # capital I, grave accent
+ "igrave" => "ì", # small i, grave accent
+ "Iuml" => "Ï", # capital I, dieresis or umlaut mark
+ "iuml" => "ï", # small i, dieresis or umlaut mark
+ "Ntilde" => "Ñ", # capital N, tilde
+ "ntilde" => "ñ", # small n, tilde
+ "Oacute" => "Ó", # capital O, acute accent
+ "oacute" => "ó", # small o, acute accent
+ "Ocirc" => "Ô", # capital O, circumflex accent
+ "ocirc" => "ô", # small o, circumflex accent
+ "Ograve" => "Ò", # capital O, grave accent
+ "ograve" => "ò", # small o, grave accent
+ "Oslash" => "Ø", # capital O, slash
+ "oslash" => "ø", # small o, slash
+ "Otilde" => "Õ", # capital O, tilde
+ "otilde" => "õ", # small o, tilde
+ "Ouml" => "Ö", # capital O, dieresis or umlaut mark
+ "ouml" => "ö", # small o, dieresis or umlaut mark
+ "szlig" => "ß", # small sharp s, German (sz ligature)
+ "THORN" => "Thorn", # capital THORN, Icelandic
+ "thorn" => "thorn", # small thorn, Icelandic
+ "Uacute" => "Ú", # capital U, acute accent
+ "uacute" => "ú", # small u, acute accent
+ "Ucirc" => "Û", # capital U, circumflex accent
+ "ucirc" => "û", # small u, circumflex accent
+ "Ugrave" => "Ù", # capital U, grave accent
+ "ugrave" => "ù", # small u, grave accent
+ "Uuml" => "Ü", # capital U, dieresis or umlaut mark
+ "uuml" => "ü", # small u, dieresis or umlaut mark
+ "Yacute" => "´Y", # capital Y, acute accent
+ "yacute" => "´y", # small y, acute accent
+ "yuml" => "ÿ", # small y, dieresis or umlaut mark
+
+ "laquo" => "«", # left pointing double angle quotation mark
+ "lchevron" => "«", # synonym (backwards compatibility)
+ "raquo" => "»", # right pointing double angle quotation mark
+ "rchevron" => "»", # synonym (backwards compatibility)
+
+ "iexcl" => "¡", # inverted exclamation mark
+ "cent" => "¢", # cent sign
+ "pound" => "£", # (UK) pound sign
+
+ "yen" => "¥", # yen sign
+
+ "sect" => "§", # section sign
+ "uml" => "¨", # diaresis
+ "copy" => "©", # Copyright symbol
+ "ordf" => "ª", # feminine ordinal indicator
+ "not" => "¬", # not sign
+
+ "reg" => "®", # registered trademark
+ "macr" => "¯", # macron, overline
+ "deg" => "°", # degree sign
+ "plusmn" => "±", # plus-minus sign
+
+ "acute" => "´", # acute accent
+ "micro" => "µ", # micro sign
+ "para" => "¶", # pilcrow sign = paragraph sign
+ "middot" => "·", # middle dot = Georgian comma
+ "cedil" => "¸", # cedilla
+
+ "ordm" => "º", # masculine ordinal indicator
+
+ "iquest" => "¿", # inverted question mark
+ "times" => "x", # multiplication sign (just an x)
+ "divide" => "÷", # division sign
+
+ "nbsp" => " ", # non-breaking space
+);
+
+
+# This array maps the ISO 8559-1 (Latin-1) character set to the Mac standard Roman character set.
+# Latin 1: The first 127 characters are equal to ASCII. (0x00 - 0x7F, 0 - 127, where 127 is non-printable)
+# The next 32 characters are non-printable. (0x80 - 0x9F, 128 - 159)
+# The last 96 characters are shown below. (0xA0 - 0xFF, 160 - 255)
+#
+# (subtract 160 from the Latin-1 char code to get the array index)
+@Latin1_to_MacRoman_MAP = (
+
+ 0xCA, # 0 -- 0xA0, 160, ' ' -> nonbreaking space
+ 0xC1, # 1 -- 0xA1, 161, '¡' -> inverted exclamation mark
+ 0xA2, # 2 -- 0xA2, 162, '¢' -> cent sign
+ 0xA3, # 3 -- 0xA3, 163, '£' -> (UK) pound sign
+ 0xDB, # 4 -- 0xA4, 164, '¤' -> currency sign (some fonts display it as Euro sign; select e.g. Futura to see it)
+ 0xB4, # 5 -- 0xA5, 165, '¥' -> yen sign
+ 0x00, # 6 -- 0xA6, 166, n/a -> broken vertical bar (not in the Mac standard Roman character set)
+ 0xA4, # 7 -- 0xA7, 167, '§' -> section sign
+ 0xAC, # 8 -- 0xA8, 168, '¨' -> diaresis
+ 0xA9, # 9 -- 0xA9, 169, '©' -> Copyright symbol
+
+ 0xBB, # 10 -- 0xAA, 170, 'ª' -> feminine ordinal indicator
+ 0xC7, # 11 -- 0xAB, 171, '«' -> left pointing double angle quotation mark, guillemotleft
+ 0xC2, # 12 -- 0xAC, 172, '¬' -> (logical) not sign
+ 0xD0, # 13 -- 0xAD, 173, '' -> soft (discretionary) hyphen (endash)
+ 0xA8, # 14 -- 0xAE, 174, '®' -> registered
+ 0xF8, # 15 -- 0xAF, 175, '¯' -> macron, overline
+ 0xA1, # 16 -- 0xB0, 176, '°' -> degree sign
+ 0xB1, # 17 -- 0xB1, 177, '±' -> plus-minus sign
+ 0x00, # 18 -- 0xB2, 178, n/a -> superscript 2 (not in the Mac standard Roman character set)
+ 0x00, # 19 -- 0xB3, 179, n/a -> superscript 3 (not in the Mac standard Roman character set)
+
+ 0xAB, # 20 -- 0xB4, 180, '´' -> acute accent
+ 0xB5, # 21 -- 0xB5, 181, 'µ' -> micro sign
+ 0xA6, # 22 -- 0xB6, 182, '¶' -> pilcrow sign = paragraph sign
+ 0xE1, # 23 -- 0xB7, 183, '·' -> middle dot or periodcentered = Georgian comma
+ 0xFC, # 24 -- 0xB8, 184, '¸' -> cedilla
+ 0x00, # 25 -- 0xB9, 185, n/a -> superscript 1 (not in the Mac standard Roman character set)
+ 0xBC, # 26 -- 0xBA, 186, 'º' -> masculine ordinal indicator
+ 0xC8, # 27 -- 0xBB, 187, '»' -> right pointing double angle quotation mark, guillemotright
+ 0x00, # 28 -- 0xBC, 188, n/a -> vulgar fraction one quarter (not in the Mac standard Roman character set)
+ 0x00, # 29 -- 0xBD, 189, n/a -> vulgar fraction one half (not in the Mac standard Roman character set)
+
+ 0x00, # 30 -- 0xBE, 190, n/a -> vulgar fraction three quarters (not in the Mac standard Roman character set)
+ 0xC0, # 31 -- 0xBF, 191, '¿' -> inverted question mark
+ 0xCB, # 32 -- 0xC0, 192, 'À' -> capital A, grave accent
+ 0xE7, # 33 -- 0xC1, 193, 'Á' -> capital A, acute accent
+ 0xE5, # 34 -- 0xC2, 194, 'Â' -> capital A, circumflex accent
+ 0xCC, # 35 -- 0xC3, 195, 'Ã' -> capital A, tilde
+ 0x80, # 36 -- 0xC4, 196, 'Ä' -> capital A, dieresis or umlaut mark
+ 0x81, # 37 -- 0xC5, 197, 'Å' -> capital A, ring
+ 0xAE, # 38 -- 0xC6, 198, 'Æ' -> capital AE diphthong (ligature)
+ 0x82, # 39 -- 0xC7, 199, 'Ç' -> capital C, cedilla
+
+ 0xE9, # 40 -- 0xC8, 200, 'È' -> capital E, grave accent
+ 0x83, # 41 -- 0xC9, 201, 'É' -> capital E, acute accent
+ 0xE6, # 42 -- 0xCA, 202, 'Ê' -> capital E, circumflex accent
+ 0xE8, # 43 -- 0xCB, 203, 'Ë' -> capital E, dieresis or umlaut mark
+ 0xED, # 44 -- 0xCC, 204, 'Ì' -> capital I, grave accent
+ 0xEA, # 45 -- 0xCD, 205, 'Í' -> capital I, acute accent
+ 0xEB, # 46 -- 0xCE, 206, 'Î' -> capital I, circumflex accent
+ 0xEC, # 47 -- 0xCF, 207, 'Ï' -> capital I, dieresis or umlaut mark
+ 0x00, # 48 -- 0xD0, 208, n/a -> capital Eth, Icelandic (not in the Mac standard Roman character set)
+ 0x84, # 49 -- 0xD1, 209, 'Ñ' -> capital N, tilde
+
+ 0xF1, # 50 -- 0xD2, 210, 'Ò' -> capital O, grave accent
+ 0xEE, # 51 -- 0xD3, 211, 'Ó' -> capital O, acute accent
+ 0xEF, # 52 -- 0xD4, 212, 'Ô' -> capital O, circumflex accent
+ 0xCD, # 53 -- 0xD5, 213, 'Õ' -> capital O, tilde
+ 0x85, # 54 -- 0xD6, 214, 'Ö' -> capital O, dieresis or umlaut mark
+ 0x00, # 55 -- 0xD7, 215, n/a -> multiplication sign (not in the Mac standard Roman character set)
+ 0xAF, # 56 -- 0xD8, 216, 'Ø' -> capital O, slash
+ 0xF4, # 57 -- 0xD9, 217, 'Ù' -> capital U, grave accent
+ 0xF2, # 58 -- 0xDA, 218, 'Ú' -> capital U, acute accent
+ 0xF3, # 59 -- 0xDB, 219, 'Û' -> capital U, circumflex accent
+
+ 0x86, # 60 -- 0xDC, 220, 'Ü' -> capital U, dieresis or umlaut mark
+ 0x00, # 61 -- 0xDD, 221, n/a -> capital Y, acute accent (not in the Mac standard Roman character set)
+ 0x00, # 62 -- 0xDE, 222, n/a -> capital THORN, Icelandic (not in the Mac standard Roman character set)
+ 0xA7, # 63 -- 0xDF, 223, 'ß' -> small sharp s, German (sz ligature)
+ 0x88, # 64 -- 0xE0, 224, 'à' -> small a, grave accent
+ 0x87, # 65 -- 0xE1, 225, 'á' -> small a, acute accent
+ 0x89, # 66 -- 0xE2, 226, 'â' -> small a, circumflex accent
+ 0x8B, # 67 -- 0xE3, 227, 'ã' -> small a, tilde
+ 0x8A, # 69 -- 0xE4, 228, 'ä' -> small a, dieresis or umlaut mark
+ 0x8C, # 69 -- 0xE5, 229, 'å' -> small a, ring
+
+ 0xBE, # 70 -- 0xE6, 230, 'æ' -> small ae diphthong (ligature)
+ 0x8D, # 71 -- 0xE7, 231, 'ç' -> small c, cedilla
+ 0x8F, # 72 -- 0xE8, 232, 'è' -> small e, grave accent
+ 0x8E, # 73 -- 0xE9, 233, 'é' -> small e, acute accent
+ 0x90, # 74 -- 0xEA, 234, 'ê' -> small e, circumflex accent
+ 0x91, # 75 -- 0xEB, 235, 'ë' -> small e, dieresis or umlaut mark
+ 0x93, # 76 -- 0xEC, 236, 'ì' -> small i, grave accent
+ 0x92, # 77 -- 0xED, 237, 'í' -> small i, acute accent
+ 0x94, # 78 -- 0xEE, 238, 'î' -> small i, circumflex accent
+ 0x95, # 79 -- 0xEF, 239, 'ï' -> small i, dieresis or umlaut mark
+
+ 0x00, # 80 -- 0xF0, 240, n/a -> small eth, Icelandic (not in the Mac standard Roman character set)
+ 0x96, # 81 -- 0xF1, 241, 'ñ' -> small n, tilde
+ 0x98, # 82 -- 0xF2, 242, 'ò' -> small o, grave accent
+ 0x97, # 83 -- 0xF3, 243, 'ó' -> small o, acute accent
+ 0x99, # 84 -- 0xF4, 244, 'ô' -> small o, circumflex accent
+ 0x9B, # 85 -- 0xF5, 245, 'õ' -> small o, tilde
+ 0xBB, # 86 -- 0xF6, 246, 'ö' -> small o, dieresis or umlaut mark
+ 0xD6, # 87 -- 0xF7, 247, '÷' -> division sign
+ 0xBF, # 88 -- 0xF8, 248, 'ø' -> small o, slash
+ 0x9D, # 89 -- 0xF9, 249, 'ù' -> small u, grave accent
+
+ 0x9C, # 90 -- 0xFA, 250, 'ú' -> small u, acute accent
+ 0x9E, # 91 -- 0xFB, 251, 'û' -> small u, circumflex accent
+ 0x9F, # 92 -- 0xFC, 252, 'ü' -> small u, dieresis or umlaut mark
+ 0x00, # 93 -- 0xFD, 253, n/a -> small y, acute accent (not in the Mac standard Roman character set)
+ 0x00, # 94 -- 0xFE, 254, n/a -> small thorn, Icelandic (not in the Mac standard Roman character set)
+ 0xD8 # 95 -- 0xFF, 255, 'ÿ' -> small y, dieresis or umlaut mark
+
+);
+
+
+
+sub command {
+ my ($parser, $command, $paragraph, $line_num) = @_;
+ my $out_fh = $parser->output_handle();
+ my $expansion;
+
+ # interpret the command and its text
+ # for indexing, only =heads and =items are of interest
+ if ( ($command eq 'head1') || ($command eq 'head2') ||
+ ($command eq 'head3') || ($command eq 'head4') ||
+ ($command eq 'item') )
+ {
+ # expand formatting codes
+ $expansion = $parser->interpolate($paragraph, $line_num);
+ # print to out file
+ print $out_fh '=' . $command . ' ' . $expansion;
+ }
+}
+
+sub verbatim {
+ my ($parser, $paragraph, $line_num) = @_;
+ # do nothing
+}
+
+sub textblock {
+ my ($parser, $paragraph, $line_num) = @_;
+ # do nothing
+}
+
+
+# Handle links. Most of the work is done by MyPodParseLink.
+sub seq_Link {
+ my ($self, $link, $seq) = @_;
+ my ($text, $type) = (MyPodParseLink::parselink ($link))[1,4];
+ my ($file, $line) = $seq->file_line;
+ $text = $self->interpolate ($text, $line);
+ $text = '<' . $text . '>' if $type eq 'url';
+ return $text || '';
+}
+
+# Called for a formatting code. Gets the command, argument, and a
+# Pod::InteriorSequence object and is expected to return the resulting text.
+sub interior_sequence {
+ my ($parser, $seq_command, $seq_argument, $pod_seq) = @_;
+
+ my $parent = $pod_seq->nested;
+ while (defined $parent) {
+ return $pod_seq->raw_text if ($parent->cmd_name eq 'L');
+ $parent = $parent->nested;
+ }
+
+ # get filename and line number
+ my ($file, $line) = $pod_seq->file_line;
+
+ # Index entries are ignored in plain text.
+ return '' if ($seq_command eq 'X' || $seq_command eq 'Z');
+
+ # Expand escapes into the actual character now, warning if invalid.
+ if ($seq_command eq 'E') {
+
+ my $is_Number = 0;
+ if ( $seq_argument =~ m/^(0x[a-fA-F0-9]+)$/ ) {
+ # hexadecimal
+ $charCode = hex($1);
+ $is_Number = 1;
+ }
+ elsif ( $seq_argument =~ m/^(0[0-7]+)$/ ) {
+ # octal
+ $charCode = oct($1);
+ $is_Number = 1;
+ }
+ elsif ( $seq_argument =~ m/^(0|(?:[1-9][0-9]*))$/) {
+ # decimal, but not e.g. 099
+ $charCode = $1;
+ $is_Number = 1;
+ }
+
+ if ($is_Number) { # $seq_argument is a character number
+
+ if ( ($charCode < 0) || ($charCode > 255) ) {
+ warn "$file:$line: Character code out of range: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+
+ }
+ else {
+
+ if ($charCode < 32) {
+ # standard ASCII, non-printable
+ warn "$file:$line: Character is non-printable: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ elsif ( ($charCode >= 32) && ($charCode < 127) ) {
+ # standard ASCII
+ return chr($charCode);
+ }
+ elsif ( ($charCode >= 127) && ($charCode < 160) ) {
+ # 127 : standard ASCII, but non-printable (DEL)
+ # 128 - 159 : not defined in ISO 8559-1 (Latin-1)
+ warn "$file:$line: Character is non-printable: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ else {
+ # 160 - 255 (0xA0 - 0xFF)
+ # map ISO 8559-1 (Latin-1) to Mac standard Roman
+ my $MacCharCode = $Latin1_to_MacRoman_MAP[$charCode-160];
+ if ($MacCharCode == 0) {
+ # not in Mac Roman
+ warn "$file:$line: Character is not in the Macintosh standard Roman character set: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ else {
+ return chr($MacCharCode);
+ }
+ }
+ }
+
+ }
+ else {
+ return $ESCAPES{$seq_argument} if defined $ESCAPES{$seq_argument};
+ warn "$file:$line: Unknown escape: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ }
+
+ # For all the other formatting codes, empty content produces no output.
+ return if $seq_argument eq '';
+
+ # L gets dispatched to another method, anything else returns its argument
+ if ($seq_command eq 'B') { return "$seq_argument";}
+ elsif ($seq_command eq 'C') { return "$seq_argument"; }
+ elsif ($seq_command eq 'F') { return "$seq_argument"; }
+ elsif ($seq_command eq 'I') { return "$seq_argument"; }
+ elsif ($seq_command eq 'S') { return "$seq_argument"; }
+ elsif ($seq_command eq 'L') { return $parser->seq_Link ($seq_argument, $pod_seq) }
+ else {
+ warn "$file:$line: Unknown formatting code: $$seq_command<${seq_argument}>\n";
+ }
+}
+
+
+##############################################################################
+# MAIN
+##############################################################################
+package main;
+
($index = shift @ARGV) || die "No help index specified";
dbmopen(%INDEX, $index, 0666) || die "Couldn't open index file \"$index\"";
@@ -123,6 +578,15 @@
local($file, $var) = @_;
local(%rename, %alias);
+ # Create a parser object
+ my $parser = new MyPodIndexer();
+ $file =~ m/([^:]+)\.pod$/;
+ my $indexfile = $1 . '.idx'; # our temporary index file
+
+ # Read POD from file.pod and write to file.idx
+ # (create the index file in our current directory, which normally is ":macperl_src:macperl:")
+ $parser->parse_from_file ("::perl$file", ":$indexfile");
+
$url = $file;
if ($url =~ /^:/) {
$url = $';
@@ -132,7 +596,7 @@
$url =~ s|:|/|g;
$url = "pod://$url";
}
- open(INDEX, "::perl$file") || die "Can't open index file \"$file\"";
+ open(INDEX, ":$indexfile") || die "Can't open index file \"$indexfile\"";
while (<>) {
if (/\@end/) {
goto startindex;
@@ -154,7 +618,13 @@
while (<INDEX>) {
if (/^=item\s+(.*\S)\s*$/) {
$name = $1;
- next if ($name eq "*");
+
+ # bullet lists and numbered lists are not indexed by Shuck
+ next if ($name eq "*"); # skip =item *
+ next if ($name =~ m/^\d+\.?$/); # skip =item 1/2./0377 (decimal, octal)
+ next if ($name =~ m/^0x[0-9a-fA-F]+$/); # skip =item 0x20 (hex)
+ next if ($name =~ m/^0b[01]+$/); # skip =item 0b1100 (binary)
+
if ($name =~ /^\$([A-Za-z_]+|\^[A-Z]|<I<digit>>|.)(.?)/) {
if ($2 eq "{") {
$key = "\%$1";
@@ -192,4 +662,7 @@
warn "\"$value\" undefined" unless $INDEX{$value};
$INDEX{$lastkey = $key} ||= $INDEX{$value};
}
+
+ close INDEX;
+ unlink $indexfile;
}
==== //depot/maint-5.6/macperl/macos/macperl/MacPerl.podhelp#10 (text) ====
Index: macperl/macos/macperl/MacPerl.podhelp
--- macperl/macos/macperl/MacPerl.podhelp#9~16472~ Tue May 7 20:51:06 2002
+++ macperl/macos/macperl/MacPerl.podhelp Mon Jul 29 20:16:52 2002
@@ -180,7 +180,8 @@
@alias ^ Bitwise Or and Exclusive Or
@alias && C-style Logical And
@alias || C-style Logical Or
-@alias .. Range Operator
+@alias .. Range Operators
+@alias ... Range Operators
@alias ? Conditional Operator
@alias : Conditional Operator
@alias = Assignment Operators
==== //depot/maint-5.8/macperl/macos/macperl/BuildHelpIndex#2 (text) ====
Index: macperl/macos/macperl/BuildHelpIndex
--- macperl/macos/macperl/BuildHelpIndex#1~17650~ Mon Jul 22 08:27:48 2002
+++ macperl/macos/macperl/BuildHelpIndex Mon Jul 29 20:16:52 2002
@@ -3,6 +3,461 @@
#!perl -s
+use Pod::Parser;
+
+package MyPodParseLink;
+
+##############################################################################
+# Since Pod::ParseLink is (a) not part of the standard library prior to Perl
+# 5.8, and (b) I needed to make a little change for compatibility with Shuck,
+# its code was copied over here. All credits go to Russ Allbery.
+##############################################################################
+
+# Parse the name and section portion of a link into a name and section.
+sub _parse_section {
+ my ($link) = @_;
+ $link =~ s/^\s+//;
+ $link =~ s/\s+$//;
+
+ # If the whole link is enclosed in quotes, interpret it all as a section
+ # even if it contains a slash.
+ return (undef, $1) if ($link =~ /^"\s*(.*?)\s*"$/);
+
+ # Split into page and section on slash, and then clean up quoting in the
+ # section. If there is no section and the name contains spaces, also
+ # guess that it's an old section link.
+ my ($page, $section) = split (/\s*\/\s*/, $link, 2);
+ $section =~ s/^"\s*(.*?)\s*"$/$1/ if $section;
+ if ($page && $page =~ / / && !defined ($section)) {
+ $section = $page;
+ $page = undef;
+ } else {
+ $page = undef unless $page;
+ $section = undef unless $section;
+ }
+ return ($page, $section);
+}
+
+# Infer link text from the page and section.
+sub _infer_text {
+ my ($page, $section) = @_;
+ my $inferred;
+ if ($page && !$section) {
+ $inferred = $page;
+ } elsif (!$page && $section) {
+ $inferred = '"' . $section . '"';
+ } elsif ($page && $section) {
+ # The string 'the section ' string is prepended for compatibility with
+ # Shuck (this is the only difference from Pod::ParseLink)
+ $inferred = 'the section ' . '"' . $section . '" in ' . $page;
+ }
+ return $inferred;
+}
+
+# Given the contents of an L<> formatting code, parse it into the link text,
+# the possibly inferred link text, the name or URL, the section, and the type
+# of link (pod, man, or url).
+sub parselink {
+ my ($link) = @_;
+ $link =~ s/\s+/ /g;
+ if ($link =~ /\A\w+:[^:\s]\S*\Z/) {
+ return (undef, $link, $link, undef, 'url');
+ } else {
+ my $text;
+ if ($link =~ /\|/) {
+ ($text, $link) = split (/\|/, $link, 2);
+ }
+ my ($name, $section) = _parse_section ($link);
+ my $inferred = $text || _infer_text ($name, $section);
+ my $type = ($name && $name =~ /\(\S*\)/) ? 'man' : 'pod';
+ return ($text, $inferred, $name, $section, $type);
+ }
+}
+
+
+##############################################################################
+# And now our Pod::Parser subclass, MyPodIndexer
+# (A lot of this code was borrowed from Pod::Text, credits to Russ Allbery.)
+##############################################################################
+package MyPodIndexer;
+@ISA = qw(Pod::Parser);
+
+# Table of supported E<> escapes for the Macintosh standard Roman character set.
+# (These are exactly the same escapes as known by Shuck. This list is incomplete
+# since the Macintosh standard Roman character set doesn't contain all characters
+# defined in the ISO 8559-1 (Latin 1) character set.)
+%ESCAPES = (
+ 'amp' => '&', # ampersand
+ 'apos' => "'", # apostrophe
+ 'lt' => '<', # left chevron, less-than
+ 'gt' => '>', # right chevron, greater-than
+ 'quot' => '"', # double quote
+ 'sol' => '/', # solidus (forward slash)
+ 'verbar' => '|', # vertical bar
+
+ "Aacute" => "Á", # capital A, acute accent
+ "aacute" => "á", # small a, acute accent
+ "Acirc" => "Â", # capital A, circumflex accent
+ "acirc" => "â", # small a, circumflex accent
+ "AElig" => "Æ", # capital AE diphthong (ligature)
+ "aelig" => "æ", # small ae diphthong (ligature)
+ "Agrave" => "À", # capital A, grave accent
+ "agrave" => "à", # small a, grave accent
+ "Aring" => "Å", # capital A, ring
+ "aring" => "å", # small a, ring
+ "Atilde" => "Ã", # capital A, tilde
+ "atilde" => "ã", # small a, tilde
+ "Auml" => "Ä", # capital A, dieresis or umlaut mark
+ "auml" => "ä", # small a, dieresis or umlaut mark
+ "Ccedil" => "Ç", # capital C, cedilla
+ "ccedil" => "ç", # small c, cedilla
+ "Eacute" => "É", # capital E, acute accent
+ "eacute" => "é", # small e, acute accent
+ "Ecirc" => "Ê", # capital E, circumflex accent
+ "ecirc" => "ê", # small e, circumflex accent
+ "Egrave" => "È", # capital E, grave accent
+ "egrave" => "è", # small e, grave accent
+ "ETH" => "Eth", # capital Eth, Icelandic
+ "eth" => "eth", # small eth, Icelandic
+ "Euml" => "Ë", # capital E, dieresis or umlaut mark
+ "euml" => "ë", # small e, dieresis or umlaut mark
+ "Iacute" => "Í", # capital I, acute accent
+ "iacute" => "í", # small i, acute accent
+ "Icirc" => "Î", # capital I, circumflex accent
+ "icirc" => "î", # small i, circumflex accent
+ "Igrave" => "Ì", # capital I, grave accent
+ "igrave" => "ì", # small i, grave accent
+ "Iuml" => "Ï", # capital I, dieresis or umlaut mark
+ "iuml" => "ï", # small i, dieresis or umlaut mark
+ "Ntilde" => "Ñ", # capital N, tilde
+ "ntilde" => "ñ", # small n, tilde
+ "Oacute" => "Ó", # capital O, acute accent
+ "oacute" => "ó", # small o, acute accent
+ "Ocirc" => "Ô", # capital O, circumflex accent
+ "ocirc" => "ô", # small o, circumflex accent
+ "Ograve" => "Ò", # capital O, grave accent
+ "ograve" => "ò", # small o, grave accent
+ "Oslash" => "Ø", # capital O, slash
+ "oslash" => "ø", # small o, slash
+ "Otilde" => "Õ", # capital O, tilde
+ "otilde" => "õ", # small o, tilde
+ "Ouml" => "Ö", # capital O, dieresis or umlaut mark
+ "ouml" => "ö", # small o, dieresis or umlaut mark
+ "szlig" => "ß", # small sharp s, German (sz ligature)
+ "THORN" => "Thorn", # capital THORN, Icelandic
+ "thorn" => "thorn", # small thorn, Icelandic
+ "Uacute" => "Ú", # capital U, acute accent
+ "uacute" => "ú", # small u, acute accent
+ "Ucirc" => "Û", # capital U, circumflex accent
+ "ucirc" => "û", # small u, circumflex accent
+ "Ugrave" => "Ù", # capital U, grave accent
+ "ugrave" => "ù", # small u, grave accent
+ "Uuml" => "Ü", # capital U, dieresis or umlaut mark
+ "uuml" => "ü", # small u, dieresis or umlaut mark
+ "Yacute" => "´Y", # capital Y, acute accent
+ "yacute" => "´y", # small y, acute accent
+ "yuml" => "ÿ", # small y, dieresis or umlaut mark
+
+ "laquo" => "«", # left pointing double angle quotation mark
+ "lchevron" => "«", # synonym (backwards compatibility)
+ "raquo" => "»", # right pointing double angle quotation mark
+ "rchevron" => "»", # synonym (backwards compatibility)
+
+ "iexcl" => "¡", # inverted exclamation mark
+ "cent" => "¢", # cent sign
+ "pound" => "£", # (UK) pound sign
+
+ "yen" => "¥", # yen sign
+
+ "sect" => "§", # section sign
+ "uml" => "¨", # diaresis
+ "copy" => "©", # Copyright symbol
+ "ordf" => "ª", # feminine ordinal indicator
+ "not" => "¬", # not sign
+
+ "reg" => "®", # registered trademark
+ "macr" => "¯", # macron, overline
+ "deg" => "°", # degree sign
+ "plusmn" => "±", # plus-minus sign
+
+ "acute" => "´", # acute accent
+ "micro" => "µ", # micro sign
+ "para" => "¶", # pilcrow sign = paragraph sign
+ "middot" => "·", # middle dot = Georgian comma
+ "cedil" => "¸", # cedilla
+
+ "ordm" => "º", # masculine ordinal indicator
+
+ "iquest" => "¿", # inverted question mark
+ "times" => "x", # multiplication sign (just an x)
+ "divide" => "÷", # division sign
+
+ "nbsp" => " ", # non-breaking space
+);
+
+
+# This array maps the ISO 8559-1 (Latin-1) character set to the Mac standard Roman character set.
+# Latin 1: The first 127 characters are equal to ASCII. (0x00 - 0x7F, 0 - 127, where 127 is non-printable)
+# The next 32 characters are non-printable. (0x80 - 0x9F, 128 - 159)
+# The last 96 characters are shown below. (0xA0 - 0xFF, 160 - 255)
+#
+# (subtract 160 from the Latin-1 char code to get the array index)
+@Latin1_to_MacRoman_MAP = (
+
+ 0xCA, # 0 -- 0xA0, 160, ' ' -> nonbreaking space
+ 0xC1, # 1 -- 0xA1, 161, '¡' -> inverted exclamation mark
+ 0xA2, # 2 -- 0xA2, 162, '¢' -> cent sign
+ 0xA3, # 3 -- 0xA3, 163, '£' -> (UK) pound sign
+ 0xDB, # 4 -- 0xA4, 164, '¤' -> currency sign (some fonts display it as Euro sign; select e.g. Futura to see it)
+ 0xB4, # 5 -- 0xA5, 165, '¥' -> yen sign
+ 0x00, # 6 -- 0xA6, 166, n/a -> broken vertical bar (not in the Mac standard Roman character set)
+ 0xA4, # 7 -- 0xA7, 167, '§' -> section sign
+ 0xAC, # 8 -- 0xA8, 168, '¨' -> diaresis
+ 0xA9, # 9 -- 0xA9, 169, '©' -> Copyright symbol
+
+ 0xBB, # 10 -- 0xAA, 170, 'ª' -> feminine ordinal indicator
+ 0xC7, # 11 -- 0xAB, 171, '«' -> left pointing double angle quotation mark, guillemotleft
+ 0xC2, # 12 -- 0xAC, 172, '¬' -> (logical) not sign
+ 0xD0, # 13 -- 0xAD, 173, '' -> soft (discretionary) hyphen (endash)
+ 0xA8, # 14 -- 0xAE, 174, '®' -> registered
+ 0xF8, # 15 -- 0xAF, 175, '¯' -> macron, overline
+ 0xA1, # 16 -- 0xB0, 176, '°' -> degree sign
+ 0xB1, # 17 -- 0xB1, 177, '±' -> plus-minus sign
+ 0x00, # 18 -- 0xB2, 178, n/a -> superscript 2 (not in the Mac standard Roman character set)
+ 0x00, # 19 -- 0xB3, 179, n/a -> superscript 3 (not in the Mac standard Roman character set)
+
+ 0xAB, # 20 -- 0xB4, 180, '´' -> acute accent
+ 0xB5, # 21 -- 0xB5, 181, 'µ' -> micro sign
+ 0xA6, # 22 -- 0xB6, 182, '¶' -> pilcrow sign = paragraph sign
+ 0xE1, # 23 -- 0xB7, 183, '·' -> middle dot or periodcentered = Georgian comma
+ 0xFC, # 24 -- 0xB8, 184, '¸' -> cedilla
+ 0x00, # 25 -- 0xB9, 185, n/a -> superscript 1 (not in the Mac standard Roman character set)
+ 0xBC, # 26 -- 0xBA, 186, 'º' -> masculine ordinal indicator
+ 0xC8, # 27 -- 0xBB, 187, '»' -> right pointing double angle quotation mark, guillemotright
+ 0x00, # 28 -- 0xBC, 188, n/a -> vulgar fraction one quarter (not in the Mac standard Roman character set)
+ 0x00, # 29 -- 0xBD, 189, n/a -> vulgar fraction one half (not in the Mac standard Roman character set)
+
+ 0x00, # 30 -- 0xBE, 190, n/a -> vulgar fraction three quarters (not in the Mac standard Roman character set)
+ 0xC0, # 31 -- 0xBF, 191, '¿' -> inverted question mark
+ 0xCB, # 32 -- 0xC0, 192, 'À' -> capital A, grave accent
+ 0xE7, # 33 -- 0xC1, 193, 'Á' -> capital A, acute accent
+ 0xE5, # 34 -- 0xC2, 194, 'Â' -> capital A, circumflex accent
+ 0xCC, # 35 -- 0xC3, 195, 'Ã' -> capital A, tilde
+ 0x80, # 36 -- 0xC4, 196, 'Ä' -> capital A, dieresis or umlaut mark
+ 0x81, # 37 -- 0xC5, 197, 'Å' -> capital A, ring
+ 0xAE, # 38 -- 0xC6, 198, 'Æ' -> capital AE diphthong (ligature)
+ 0x82, # 39 -- 0xC7, 199, 'Ç' -> capital C, cedilla
+
+ 0xE9, # 40 -- 0xC8, 200, 'È' -> capital E, grave accent
+ 0x83, # 41 -- 0xC9, 201, 'É' -> capital E, acute accent
+ 0xE6, # 42 -- 0xCA, 202, 'Ê' -> capital E, circumflex accent
+ 0xE8, # 43 -- 0xCB, 203, 'Ë' -> capital E, dieresis or umlaut mark
+ 0xED, # 44 -- 0xCC, 204, 'Ì' -> capital I, grave accent
+ 0xEA, # 45 -- 0xCD, 205, 'Í' -> capital I, acute accent
+ 0xEB, # 46 -- 0xCE, 206, 'Î' -> capital I, circumflex accent
+ 0xEC, # 47 -- 0xCF, 207, 'Ï' -> capital I, dieresis or umlaut mark
+ 0x00, # 48 -- 0xD0, 208, n/a -> capital Eth, Icelandic (not in the Mac standard Roman character set)
+ 0x84, # 49 -- 0xD1, 209, 'Ñ' -> capital N, tilde
+
+ 0xF1, # 50 -- 0xD2, 210, 'Ò' -> capital O, grave accent
+ 0xEE, # 51 -- 0xD3, 211, 'Ó' -> capital O, acute accent
+ 0xEF, # 52 -- 0xD4, 212, 'Ô' -> capital O, circumflex accent
+ 0xCD, # 53 -- 0xD5, 213, 'Õ' -> capital O, tilde
+ 0x85, # 54 -- 0xD6, 214, 'Ö' -> capital O, dieresis or umlaut mark
+ 0x00, # 55 -- 0xD7, 215, n/a -> multiplication sign (not in the Mac standard Roman character set)
+ 0xAF, # 56 -- 0xD8, 216, 'Ø' -> capital O, slash
+ 0xF4, # 57 -- 0xD9, 217, 'Ù' -> capital U, grave accent
+ 0xF2, # 58 -- 0xDA, 218, 'Ú' -> capital U, acute accent
+ 0xF3, # 59 -- 0xDB, 219, 'Û' -> capital U, circumflex accent
+
+ 0x86, # 60 -- 0xDC, 220, 'Ü' -> capital U, dieresis or umlaut mark
+ 0x00, # 61 -- 0xDD, 221, n/a -> capital Y, acute accent (not in the Mac standard Roman character set)
+ 0x00, # 62 -- 0xDE, 222, n/a -> capital THORN, Icelandic (not in the Mac standard Roman character set)
+ 0xA7, # 63 -- 0xDF, 223, 'ß' -> small sharp s, German (sz ligature)
+ 0x88, # 64 -- 0xE0, 224, 'à' -> small a, grave accent
+ 0x87, # 65 -- 0xE1, 225, 'á' -> small a, acute accent
+ 0x89, # 66 -- 0xE2, 226, 'â' -> small a, circumflex accent
+ 0x8B, # 67 -- 0xE3, 227, 'ã' -> small a, tilde
+ 0x8A, # 69 -- 0xE4, 228, 'ä' -> small a, dieresis or umlaut mark
+ 0x8C, # 69 -- 0xE5, 229, 'å' -> small a, ring
+
+ 0xBE, # 70 -- 0xE6, 230, 'æ' -> small ae diphthong (ligature)
+ 0x8D, # 71 -- 0xE7, 231, 'ç' -> small c, cedilla
+ 0x8F, # 72 -- 0xE8, 232, 'è' -> small e, grave accent
+ 0x8E, # 73 -- 0xE9, 233, 'é' -> small e, acute accent
+ 0x90, # 74 -- 0xEA, 234, 'ê' -> small e, circumflex accent
+ 0x91, # 75 -- 0xEB, 235, 'ë' -> small e, dieresis or umlaut mark
+ 0x93, # 76 -- 0xEC, 236, 'ì' -> small i, grave accent
+ 0x92, # 77 -- 0xED, 237, 'í' -> small i, acute accent
+ 0x94, # 78 -- 0xEE, 238, 'î' -> small i, circumflex accent
+ 0x95, # 79 -- 0xEF, 239, 'ï' -> small i, dieresis or umlaut mark
+
+ 0x00, # 80 -- 0xF0, 240, n/a -> small eth, Icelandic (not in the Mac standard Roman character set)
+ 0x96, # 81 -- 0xF1, 241, 'ñ' -> small n, tilde
+ 0x98, # 82 -- 0xF2, 242, 'ò' -> small o, grave accent
+ 0x97, # 83 -- 0xF3, 243, 'ó' -> small o, acute accent
+ 0x99, # 84 -- 0xF4, 244, 'ô' -> small o, circumflex accent
+ 0x9B, # 85 -- 0xF5, 245, 'õ' -> small o, tilde
+ 0xBB, # 86 -- 0xF6, 246, 'ö' -> small o, dieresis or umlaut mark
+ 0xD6, # 87 -- 0xF7, 247, '÷' -> division sign
+ 0xBF, # 88 -- 0xF8, 248, 'ø' -> small o, slash
+ 0x9D, # 89 -- 0xF9, 249, 'ù' -> small u, grave accent
+
+ 0x9C, # 90 -- 0xFA, 250, 'ú' -> small u, acute accent
+ 0x9E, # 91 -- 0xFB, 251, 'û' -> small u, circumflex accent
+ 0x9F, # 92 -- 0xFC, 252, 'ü' -> small u, dieresis or umlaut mark
+ 0x00, # 93 -- 0xFD, 253, n/a -> small y, acute accent (not in the Mac standard Roman character set)
+ 0x00, # 94 -- 0xFE, 254, n/a -> small thorn, Icelandic (not in the Mac standard Roman character set)
+ 0xD8 # 95 -- 0xFF, 255, 'ÿ' -> small y, dieresis or umlaut mark
+
+);
+
+
+
+sub command {
+ my ($parser, $command, $paragraph, $line_num) = @_;
+ my $out_fh = $parser->output_handle();
+ my $expansion;
+
+ # interpret the command and its text
+ # for indexing, only =heads and =items are of interest
+ if ( ($command eq 'head1') || ($command eq 'head2') ||
+ ($command eq 'head3') || ($command eq 'head4') ||
+ ($command eq 'item') )
+ {
+ # expand formatting codes
+ $expansion = $parser->interpolate($paragraph, $line_num);
+ # print to out file
+ print $out_fh '=' . $command . ' ' . $expansion;
+ }
+}
+
+sub verbatim {
+ my ($parser, $paragraph, $line_num) = @_;
+ # do nothing
+}
+
+sub textblock {
+ my ($parser, $paragraph, $line_num) = @_;
+ # do nothing
+}
+
+
+# Handle links. Most of the work is done by MyPodParseLink.
+sub seq_Link {
+ my ($self, $link, $seq) = @_;
+ my ($text, $type) = (MyPodParseLink::parselink ($link))[1,4];
+ my ($file, $line) = $seq->file_line;
+ $text = $self->interpolate ($text, $line);
+ $text = '<' . $text . '>' if $type eq 'url';
+ return $text || '';
+}
+
+# Called for a formatting code. Gets the command, argument, and a
+# Pod::InteriorSequence object and is expected to return the resulting text.
+sub interior_sequence {
+ my ($parser, $seq_command, $seq_argument, $pod_seq) = @_;
+
+ my $parent = $pod_seq->nested;
+ while (defined $parent) {
+ return $pod_seq->raw_text if ($parent->cmd_name eq 'L');
+ $parent = $parent->nested;
+ }
+
+ # get filename and line number
+ my ($file, $line) = $pod_seq->file_line;
+
+ # Index entries are ignored in plain text.
+ return '' if ($seq_command eq 'X' || $seq_command eq 'Z');
+
+ # Expand escapes into the actual character now, warning if invalid.
+ if ($seq_command eq 'E') {
+
+ my $is_Number = 0;
+ if ( $seq_argument =~ m/^(0x[a-fA-F0-9]+)$/ ) {
+ # hexadecimal
+ $charCode = hex($1);
+ $is_Number = 1;
+ }
+ elsif ( $seq_argument =~ m/^(0[0-7]+)$/ ) {
+ # octal
+ $charCode = oct($1);
+ $is_Number = 1;
+ }
+ elsif ( $seq_argument =~ m/^(0|(?:[1-9][0-9]*))$/) {
+ # decimal, but not e.g. 099
+ $charCode = $1;
+ $is_Number = 1;
+ }
+
+ if ($is_Number) { # $seq_argument is a character number
+
+ if ( ($charCode < 0) || ($charCode > 255) ) {
+ warn "$file:$line: Character code out of range: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+
+ }
+ else {
+
+ if ($charCode < 32) {
+ # standard ASCII, non-printable
+ warn "$file:$line: Character is non-printable: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ elsif ( ($charCode >= 32) && ($charCode < 127) ) {
+ # standard ASCII
+ return chr($charCode);
+ }
+ elsif ( ($charCode >= 127) && ($charCode < 160) ) {
+ # 127 : standard ASCII, but non-printable (DEL)
+ # 128 - 159 : not defined in ISO 8559-1 (Latin-1)
+ warn "$file:$line: Character is non-printable: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ else {
+ # 160 - 255 (0xA0 - 0xFF)
+ # map ISO 8559-1 (Latin-1) to Mac standard Roman
+ my $MacCharCode = $Latin1_to_MacRoman_MAP[$charCode-160];
+ if ($MacCharCode == 0) {
+ # not in Mac Roman
+ warn "$file:$line: Character is not in the Macintosh standard Roman character set: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ else {
+ return chr($MacCharCode);
+ }
+ }
+ }
+
+ }
+ else {
+ return $ESCAPES{$seq_argument} if defined $ESCAPES{$seq_argument};
+ warn "$file:$line: Unknown escape: E<${seq_argument}>\n";
+ return 'E<' . $seq_argument . '>';
+ }
+ }
+
+ # For all the other formatting codes, empty content produces no output.
+ return if $seq_argument eq '';
+
+ # L gets dispatched to another method, anything else returns its argument
+ if ($seq_command eq 'B') { return "$seq_argument";}
+ elsif ($seq_command eq 'C') { return "$seq_argument"; }
+ elsif ($seq_command eq 'F') { return "$seq_argument"; }
+ elsif ($seq_command eq 'I') { return "$seq_argument"; }
+ elsif ($seq_command eq 'S') { return "$seq_argument"; }
+ elsif ($seq_command eq 'L') { return $parser->seq_Link ($seq_argument, $pod_seq) }
+ else {
+ warn "$file:$line: Unknown formatting code: $$seq_command<${seq_argument}>\n";
+ }
+}
+
+
+##############################################################################
+# MAIN
+##############################################################################
+package main;
+
($index = shift @ARGV) || die "No help index specified";
dbmopen(%INDEX, $index, 0666) || die "Couldn't open index file \"$index\"";
@@ -123,6 +578,15 @@
local($file, $var) = @_;
local(%rename, %alias);
+ # Create a parser object
+ my $parser = new MyPodIndexer();
+ $file =~ m/([^:]+)\.pod$/;
+ my $indexfile = $1 . '.idx'; # our temporary index file
+
+ # Read POD from file.pod and write to file.idx
+ # (create the index file in our current directory, which normally is ":macperl_src:macperl:")
+ $parser->parse_from_file ("::perl$file", ":$indexfile");
+
$url = $file;
if ($url =~ /^:/) {
$url = $';
@@ -132,7 +596,7 @@
$url =~ s|:|/|g;
$url = "pod://$url";
}
- open(INDEX, "::perl$file") || die "Can't open index file \"$file\"";
+ open(INDEX, ":$indexfile") || die "Can't open index file \"$indexfile\"";
while (<>) {
if (/\@end/) {
goto startindex;
@@ -154,7 +618,13 @@
while (<INDEX>) {
if (/^=item\s+(.*\S)\s*$/) {
$name = $1;
- next if ($name eq "*");
+
+ # bullet lists and numbered lists are not indexed by Shuck
+ next if ($name eq "*"); # skip =item *
+ next if ($name =~ m/^\d+\.?$/); # skip =item 1/2./0377 (decimal, octal)
+ next if ($name =~ m/^0x[0-9a-fA-F]+$/); # skip =item 0x20 (hex)
+ next if ($name =~ m/^0b[01]+$/); # skip =item 0b1100 (binary)
+
if ($name =~ /^\$([A-Za-z_]+|\^[A-Z]|<I<digit>>|.)(.?)/) {
if ($2 eq "{") {
$key = "\%$1";
@@ -192,4 +662,7 @@
warn "\"$value\" undefined" unless $INDEX{$value};
$INDEX{$lastkey = $key} ||= $INDEX{$value};
}
+
+ close INDEX;
+ unlink $indexfile;
}
==== //depot/maint-5.8/macperl/macos/macperl/MacPerl.podhelp#2 (text) ====
Index: macperl/macos/macperl/MacPerl.podhelp
--- macperl/macos/macperl/MacPerl.podhelp#1~17650~ Mon Jul 22 08:27:48 2002
+++ macperl/macos/macperl/MacPerl.podhelp Mon Jul 29 20:16:52 2002
@@ -87,10 +87,8 @@
pod:pod/perlop.pod Operators and precedence (perlop)
pod:pod/perlsub.pod Subroutines (perlsub)
pod:pod/perlfunc.pod Builtin functions (perlfunc)
-@sub Function Tutorials
pod:pod/perlopentut.pod open() tutorial (perlopentut)
pod:pod/perlpacktut.pod pack() and unpack() tutorial (perlpacktut)
-@end
@sep
pod:pod/perlpod.pod Plain old documentation (perlpod)
pod:pod/perlpodspec.pod Plain old documentation format specification (perlpod)
@@ -122,13 +120,11 @@
@sep
pod:pod/perlsec.pod Security (perlsec)
@sep
-@sub Modules
-pod:pod/perlmod.pod How they work (perlmod)
+pod:pod/perlmod.pod How modules work (perlmod)
pod:pod/perlmodlib.pod How to write and use (perlmodlib)
pod:pod/perlmodstyle.pod How to write with style (perlmodstyle)
pod:pod/perlmodinstall.pod How to install from CPAN (perlmodinstall)
pod:pod/perlnewmod.pod Preparing a new module for distribution (perlnewmod)
-@end
@sep
pod:pod/perlutil.pod Utilities packaged with the Perl distribution (perlutil)
pod:pod/perlfilter.pod Source filters (perlfilter)
@@ -209,7 +205,8 @@
@alias ^ Bitwise Or and Exclusive Or
@alias && C-style Logical And
@alias || C-style Logical Or
-@alias .. Range Operator
+@alias .. Range Operators
+@alias ... Range Operators
@alias ? Conditional Operator
@alias : Conditional Operator
@alias = Assignment Operators
End of Patch.
--
Chris Nandor pudge@pobox.com http://pudge.net/
Open Source Development Network pudge@osdn.com http://osdn.com/
-
Change 17668: Help fixes from Thomas Wegner
by Chris Nandor