diff options
Diffstat (limited to 'systems/doc/pdftex/manual/syntaxform.pl')
-rwxr-xr-x | systems/doc/pdftex/manual/syntaxform.pl | 77 |
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 ()); |