[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