[Python-checkins] CVS: python/dist/src/Doc/perl python.perl,1.104,1.105
Fred L. Drake
fdrake@users.sourceforge.net
Fri, 06 Jul 2001 15:43:04 -0700
Update of /cvsroot/python/python/dist/src/Doc/perl
In directory usw-pr-cvs1:/tmp/cvs-serv29947/perl
Modified Files:
python.perl
Log Message:
Add support for \ulink and hyperlink grammars.
do_cmd_verbatiminput(): Write out a text file containing the content of the
input file with a .txt extension, and add a link to it at the bottom of
the presentation. This easier retrieval of example source code for
copy & paste use.
Index: python.perl
===================================================================
RCS file: /cvsroot/python/python/dist/src/Doc/perl/python.perl,v
retrieving revision 1.104
retrieving revision 1.105
diff -C2 -r1.104 -r1.105
*** python.perl 2001/06/23 03:13:30 1.104
--- python.perl 2001/07/06 22:43:02 1.105
***************
*** 91,94 ****
--- 91,96 ----
sub do_cmd_infinity{ '∞' . @_[0]; }
sub do_cmd_plusminus{ '±' . @_[0]; }
+ sub do_cmd_menuselection{ @_[0]; }
+ sub do_cmd_sub{ ' > ' . @_[0]; }
***************
*** 325,328 ****
--- 327,337 ----
}
+ sub do_cmd_ulink{
+ local($_) = @_;
+ my $text = next_argument();
+ my $url = next_argument();
+ return "<a class=\"ulink\" href=\"$url\"\n >$text</a>" . $_;
+ }
+
sub do_cmd_citetitle{
local($_) = @_;
***************
*** 683,686 ****
--- 692,824 ----
}
+
+ %TokenToTargetMapping = ();
+ %DefinedGrammars = ();
+ %BackpatchGrammarFiles = ();
+
+ sub do_cmd_token{
+ local($_) = @_;
+ my $token = next_argument();
+ my $target = $TokenToTargetMapping{"$CURRENT_GRAMMAR:$token"};
+ if ($token eq $CURRENT_TOKEN || $CURRENT_GRAMMAR eq '*') {
+ # recursive definition or display-only productionlist
+ return "$token";
+ }
+ if ($target eq '') {
+ $target = "<pyGrammarToken><$CURRENT_GRAMMAR><$token>";
+ if (! $BackpatchGrammarFiles{"$CURRENT_FILE"}) {
+ print "Adding '$CURRENT_FILE' to back-patch list.\n";
+ }
+ $BackpatchGrammarFiles{"$CURRENT_FILE"} = 1;
+ }
+ return "<a href=\"$target\">$token</a>" . $_;
+ }
+
+ sub do_env_productionlist{
+ local($_) = @_;
+ my $lang = next_optional_argument();
+ my $filename = "grammar-$lang.txt";
+ if ($lang eq '') {
+ $filename = 'grammar.txt';
+ }
+ local($CURRENT_GRAMMAR) = $lang;
+ $DefinedGrammars{$lang} .= $_;
+ return ("<dl><dd class=\"grammar\">\n"
+ . "<div class=\"productions\">\n"
+ . "<table cellpadding=\"2\" valign=\"baseline\">\n"
+ . translate_commands(translate_environments($_))
+ . "</table>\n"
+ . "</div>\n"
+ . (($lang eq '*')
+ ? ''
+ : ("<a class=\"grammar-footer\"\n"
+ . " href=\"$filename\" type=\"text/plain\"\n"
+ . " >Download entire grammar as text.</a>\n"))
+ . "</dd></dl>");
+ }
+
+ sub do_cmd_production{
+ local($_) = @_;
+ my $token = next_argument();
+ my $defn = next_argument();
+ my $lang = $CURRENT_GRAMMAR;
+ local($CURRENT_TOKEN) = $token;
+ if ($lang eq '*') {
+ return ("<tr>\n"
+ . " <td><code>$token</code></td>\n"
+ . " <td> ::= </td>\n"
+ . " <td><code>"
+ . translate_commands($defn)
+ . "</code></td></tr>"
+ . $_);
+ }
+ my $target;
+ if ($lang eq '') {
+ $target = "$CURRENT_FILE\#tok-$token";
+ }
+ else {
+ $target = "$CURRENT_FILE\#tok-$lang-$token";
+ }
+ $TokenToTargetMapping{"$CURRENT_GRAMMAR:$token"} = $target;
+ return ("<tr>\n"
+ . " <td><code><a name=\"tok-$token\">$token</a></code></td>\n"
+ . " <td> ::= </td>\n"
+ . " <td><code>"
+ . translate_commands($defn)
+ . "</code></td></tr>"
+ . $_);
+ }
+
+ sub process_grammar_files{
+ my $lang;
+ my $filename;
+ local($_);
+ print "process_grammar_files()\n";
+ foreach $lang (keys %DefinedGrammars) {
+ $filename = "grammar-$lang.txt";
+ if ($lang eq '*') {
+ next;
+ }
+ if ($lang eq '') {
+ $filename = 'grammar.txt';
+ }
+ open(GRAMMAR, ">$filename") || die "\n$!\n";
+ print GRAMMAR strip_grammar_markup($DefinedGrammars{$lang});
+ close(GRAMMAR);
+ print "Wrote grammar file $filename\n";
+ }
+ my $PATTERN = '<pyGrammarToken><([^>]*)><([^>]*)>';
+ foreach $filename (keys %BackpatchGrammarFiles) {
+ print "\nBack-patching grammar links in $filename\n";
+ my $buffer;
+ open(GRAMMAR, "<$filename") || die "\n$!\n";
+ # read all of the file into the buffer
+ sysread(GRAMMAR, $buffer, 1024*1024);
+ close(GRAMMAR);
+ while ($buffer =~ /$PATTERN/) {
+ my($lang, $token) = ($1, $2);
+ my $target = $TokenToTargetMapping{"$lang:$token"};
+ my $source = "<pyGrammarToken><$lang><$token>";
+ $buffer =~ s/$source/$target/g;
+ }
+ open(GRAMMAR, ">$filename") || die "\n$!\n";
+ print GRAMMAR $buffer;
+ close(GRAMMAR);
+ }
+ }
+
+ sub strip_grammar_markup{
+ local($_) = @_;
+ s/\\production(<<\d+>>)(.+)\1/\n\2 ::= /g;
+ s/\\token(<<\d+>>)(.+)\1/\2/g;
+ s/\\e([^a-zA-Z])/\\\1/g;
+ s/<<\d+>>//g;
+ s/;SPMgt;/>/g;
+ s/;SPMlt;/</g;
+ s/;SPMquot;/\"/g;
+ return $_;
+ }
+
+
$REFCOUNTS_LOADED = 0;
***************
*** 1491,1494 ****
--- 1629,1633 ----
sub process_python_state{
process_all_localmoduletables();
+ process_grammar_files();
}
***************
*** 1686,1689 ****
--- 1825,1829 ----
last if ($found = (-f $file));
}
+ my $srcname;
my $text;
if ($found) {
***************
*** 1691,1694 ****
--- 1831,1840 ----
read(MYFILE, $text, 1024*1024);
close(MYFILE);
+ use File::Basename;
+ my $srcdir, $srcext;
+ ($srcname, $srcdir, $srcext) = fileparse($file, '\..*');
+ open(MYFILE, ">$srcname.txt");
+ print MYFILE $text;
+ close(MYFILE);
#
# These rewrites convert the raw text to something that will
***************
*** 1716,1722 ****
$text = '<b>Could not locate requested file <i>$fname</i>!</b>\n';
}
! return ($alltt_start
. $text
! . $alltt_end
. $_);
}
--- 1862,1871 ----
$text = '<b>Could not locate requested file <i>$fname</i>!</b>\n';
}
! return ('<dl><dd><pre class="verbatim">'
. $text
! . "</pre>\n<div class=\"verbatiminput-footer\">\n"
! . "<a href=\"$srcname.txt\" type=\"text/plain\""
! . ">Download as text.</a>"
! . "\n</div>\n</dd></dl>"
. $_);
}