summaryrefslogtreecommitdiff
path: root/systems/doc/pdftex/manual/syntaxform.pl
diff options
context:
space:
mode:
Diffstat (limited to 'systems/doc/pdftex/manual/syntaxform.pl')
-rwxr-xr-xsystems/doc/pdftex/manual/syntaxform.pl77
1 files changed, 40 insertions, 37 deletions
diff --git a/systems/doc/pdftex/manual/syntaxform.pl b/systems/doc/pdftex/manual/syntaxform.pl
index ad92b3ce30..2ebe41e990 100755
--- a/systems/doc/pdftex/manual/syntaxform.pl
+++ b/systems/doc/pdftex/manual/syntaxform.pl
@@ -1,70 +1,74 @@
#!/usr/bin/env perl
-# $Id: syntaxform.pl 743 2016-04-25 17:34:08Z karl $
+# $Id: syntaxform.pl 914 2024-01-07 21:48:39Z karl $
# Public domain. Originally written by Karl Berry, 2016.
-# Read pdftex-t.tex, generate pdftex-syntax.tex
+# Read pdftex.tex and generate pdftex-syntax.tex
# by looking for the primitive descriptions.
-use warnings;
+use strict; use warnings;
+
+# classes need to be shown in a specific order,
+# and have specific text for the headings.
+# sorry for using an array. global for simpler sorting.
+my %class_info = (
+ "integer" => [1, "Integer registers"],
+ "read-only integer" => [2, "Read-only integers"],
+ "dimen" => [3, "Dimen registers"],
+ "tokens" => [4, "Token registers"],
+ "expandable" => [5, "Expandable commands"],
+ "general" => [6, "General commands"],
+);
+
+exit (&main ());
sub main {
my %primitive = &read_manual_for_primitives ();
# group primitives into classes based on their \Whatever construct.
my %class;
+ #warn "\n\f\n sorting\n";
for my $p (sort keys %primitive) {
+ #print STDERR "sorting primitive $p...";
my ($class) = $primitive{$p} =~ /\\Whatever *\{(.*?)\}/;
# general commands don't have a \Whatever.
$class = "general" if ! $class;
+ #warn "class $class\n";
# append this primitive, comma-separated.
$class{$class} .= "$p,"
}
print <<END_HEADER;
-%%S \$Id: syntaxform.pl 742 2016-04-25 17:30:55Z karl \$
-%%S This is the list of new or extended primitives provided by pdftex.
-%%S Don't edit this file, as it is now auto-generated from the
-%%S pdfTeX manual source pdftex-t.tex (and the generated
-%%S pdftex-syntax.tex) by the script syntaxform.awk.
-%%S Syntax rule conventions borrowed from `TeXbook naruby' by Petr Olsak.
+% This is the list of new or extended primitives provided by pdftex.
+% Don't edit this file, as it is auto-generated from the
+% pdfTeX manual source pdftex.tex by the script syntaxform.pl.
+% Syntax rule conventions borrowed from `TeXbook naruby' by Petr Olsak.
END_HEADER
&print_by_class (\%class, \%primitive);
return 0;
}
{
- # classes should be shown in a specific order,
- # and have specific text for the headings.
- # sorry for using an array.
- my %class_info = (
- "integer" => [1, "Integer registers"],
- "read||only integer" => [2, "Read-only integers"],
- "dimen" => [3, "Dimen registers"],
- "tokens" => [4, "Token registers"],
- "expandable" => [5, "Expandable commands"],
- "general" => [6, "General commands"],
- );
sub print_by_class {
my ($class_ref,$primitive_ref) = @_;
my %class = %$class_ref;
+ #warn "\n\f\n printing by class\n";
for my $c (sort by_class keys %class) {
- my $aref = $class_info{$c};
+ #warn "\f printing class $c\n";
+ my $aref = $class_info{$c};
my $heading_name = $class_info{$c}->[1];
- # the %%S lines are for syntaxform.awk
+ #warn " heading_name $heading_name\n";
print <<END_START_CLASS;
-%%S NL
-%%S $heading_name:
-\\subsubject{$heading_name}
+\\section{$heading_name}
-\\startpacked
END_START_CLASS
# extract list of primitives for this class.
my @prims = split (/,/, $class{$c});
for my $p (@prims) {
my $val = $primitive_ref->{$p};
+ #warn " primitive $p, val $val\n";
# get rid of the \pdftexprimitive{ and trailing }
$val =~ s,^\\pdftexprimitive *\{,,;
@@ -79,11 +83,14 @@ END_START_CLASS
print "\n$val\n";
}
- print "\n\\stoppacked\n";
}
}
-sub by_class { $class_info{$a}->[0] <=> $class_info{$b}->[0]; }
+sub by_class {
+ if (! defined ($class_info{$a}->[0])) {
+ warn "undef $a $class_info{$a},", $class_info{$a}->[0], ".\n"; }
+# if (! $class_info{$b}->[0]) { warn "no class info for $b\n"; }
+$class_info{$a}->[0] <=> $class_info{$b}->[0]; }
} # end block for %class_info
@@ -95,6 +102,7 @@ sub by_class { $class_info{$a}->[0] <=> $class_info{$b}->[0]; }
sub read_manual_for_primitives {
my $printing = 0;
my $primitive = "";
+ my %primitive;
while (<>) {
# \pdftexprimitive block ends at next unindented blank or \... line.
@@ -103,14 +111,10 @@ sub read_manual_for_primitives {
$printing = 1;
my $type;
- # \tex is used for primitives specified without a leading \.
- ($type,$primitive) = m/\\([Tt])ex *\{(.*?)\}/;
+ ($primitive) = m/\\cs *\{(.*?)\}/;
+ #warn "$.: found primitive $primitive\n";
warn "$ARGV:$.: no primitive found in: $_" if (! $primitive);
- $primitive = "\\$primitive" if $type eq "t";
-
- # \pdfmovechars is still in the manual, but doesn't do anything.
- # Omit it from the output.
- next if $primitive eq "\\pdfmovechars";
+ $primitive = "\\$primitive";
# Just one case, \special, has multiple instances of \pdftexprimitive.
# kludge by appending spaces to the name to make it unique;
@@ -122,10 +126,9 @@ sub read_manual_for_primitives {
# concatenate lines of definition; assume spacing is reasonable.
chomp;
$primitive{$primitive} .= $_;
+ #warn " concatenated $primitive to $primitive{$primitive}\n";
}
}
return %primitive;
}
-
-exit (&main ());