[nr-pm] Tex parsen
maxmon at gmx.de
maxmon at gmx.de
Fre Mar 15 11:23:17 CST 2002
Vorweg schon mal zur Erinnerung:
Unser nächstes Treffen ist regulär am 21. März, als Ort ist Tisch 1
(Preussen-Zimmer) im Landgasthof Hückelsmay in Krefeld
reserviert (http://www.hueckelsmay.com).
Zugesagt haben bisher 5 Personen:
Regina, Bernd, Arne, Jan-Patrick, Markus
Zum bibliophilen Hobby könnte ich momentan Perl für Sysadmins
(O'Reilly, engl.) und Perl für Profis (dpunkt) beitragen.
Perl-o.ä. Fragestellung beim Tex-Text-parsen:
pod2html ergibt in Perl 5.6.0 tex-sourcen, die in den nicht-verbatim-
Umgebungen umgekehrte Fragezeichen statt in meiner Latex2e-
Suite produzieren.
meine 3 Lösungsansätze waren:
1. Einzeiler zum Maskieren von </> zu $<$ bzw. $>$:
perl -0 -pe's {((\Q\begin{verbatim}\E.+?\Q\end{verbatim}\E) |
(<|>)) } { $3 ? \$$3\$ : $2 }xmg' Pg.tex >Pg-ok.tex
-> erzeugt an den nicht-Treffern "?$$"
2. 10 Zeilen-Grammatik für Parse::RecDescent (siehe Anhang)
-> bringt nur den Slash von \begin{document}
3. Patchen von pod2latex (todo?)
So, wie würdet ihr schnuckelige perlpod-booklets (pstops) mit
korrekten Typos erzeugen? Andere / pragmatischere Lösungen
würden mir auch gefallen.
Gruß
Markus
Anhang:
erster Parse::RecDescent-Versuch:
#!/usr/local/bin/perl -w
#
# prd.pl - Parse::RecDescent-Testsuite
#
# Quellen (teilweise): www.perl.com/lpt/a/2001/06/13/recdescent.html
# ( Tutorial )
#
# mmo - 15.03.2002
#
use strict;
use Parse::RecDescent;
use Data::Dumper;
use vars qw( $intxt $suchstring );
# Enable warnings within the Parse::RecDescent module.
$::RD_ERRORS = 1; # Make sure the parser dies when it encounters an
error
$::RD_WARN = 1; # Enable warnings. This will warn on unused rules
&c.
$::RD_HINT = 1; # Give out hint to help fix problems.
my $grammar = <<'_EOGRAMMAR_';
verbatim: '\begin{verbatim}' /.+?/m '\end{verbatim}' # verbatim-
environment
{ print "Nummer 1: @item"; return join @item[1,] }
nonverbatim: /.+/ # plain-vanilla-environment
{ print "Nr.2 at item"; return main::vanilla( @item ) } # -> replace "<" and
">"
envt: verbatim
| nonverbatim
{ print "env-opfer: ", @item, "\n" }
startrule: envt(s) { print "startrule: ", scalar( @item ), " - fin\n" }
_EOGRAMMAR_
sub vanilla {
shift;
$suchstring = join " ", @_;
print "Vanillamaterial: ", $suchstring, length( $suchstring ), "\n";
$suchstring =~ s!(<|>)!\$$1\$!g;
return $suchstring;
}
my $parser = Parse::RecDescent->new( $grammar );
open IN, "pg.tex";
$intxt = join "", (<IN>);
close IN;
print "Analyse: ", $parser->startrule( $intxt );
___________________________
Abmelden:
Mail an majordomo at hfb.pm.org mit dem Text:
unsubscribe niederrhein-pm