diff options
Diffstat (limited to 'tools/linuxdoc-tools/LinuxDocTools/FixRef.pm')
-rw-r--r-- | tools/linuxdoc-tools/LinuxDocTools/FixRef.pm | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tools/linuxdoc-tools/LinuxDocTools/FixRef.pm b/tools/linuxdoc-tools/LinuxDocTools/FixRef.pm new file mode 100644 index 00000000..d2549857 --- /dev/null +++ b/tools/linuxdoc-tools/LinuxDocTools/FixRef.pm @@ -0,0 +1,76 @@ +# +# FixRef.pm +# +# $Id: FixRef.pm,v 1.1.1.1 2001/05/24 15:57:41 sano Exp $ +# +# Start conversion from parsed linuxdoc-sgml to html. +# - Identify references and file count +# +# Rules based on fixref.l +# +package LinuxDocTools::FixRef; + +# Externally visible variables +$fixref = {}; + +# Initialize: set splitlevel before using rules +# Usage: &{$fixref->{init}}(<split level>); + # 0 - super page mode + # 1 - big page mode + # 2 - small page mode +$fixref->{init} = sub { + $splitlevel = shift; +}; + +# Outputs: Read after using rules +$fixref->{filenum} = 0; # Count of files we will create +$fixref->{lrec} = {}; # label -> filenum + +# Package variables +$chapter_mode = 0; # <report> vs. <article> +$splitlevel = 0; # See $fixref->{init} above; + # Automatically reduced by 1 for chapter mode + +# Finalize parsing +$fixref->{finish} = sub { }; # Do nothing when we're done + +# Ruleset +$fixref->{rules} = {}; # Individual parsing rules +$fixref->{defaultrule} = sub { }; # If line does not match any rules + +# Set the rules +# <@@ssect> - split file if necessary +$fixref->{rules}->{'^<@@ssect>.*$'} = sub { &splitfile(2); }; + +# <@@sect> - split file if necessary +$fixref->{rules}->{'^<@@sect>.*$'} = sub { &splitfile(1); }; + +# <@@chapt> - set chapter mode; reduce splitlevel if needed; split file +$fixref->{rules}->{'^<@@chapt>.*$'} = sub { + $splitlevel-- if (!$chapter_mode); + $chapter_mode = 1; &splitfile(0); +}; + +# <@@label> - Identify label location +$fixref->{rules}->{'^<@@label>(.*)$'} = sub { + $fixref->{lrec}->{$1} = $fixref->{filenum}; +}; + +#============================== +# Split the file (-split option; level in parentheses): +# non-chapter mode: -0 -> don't split +# -1 -> split at sect (1) +# -2 -> split at sect (1) and ssect (2) +# chapter mode: -0 -> split at chapt (0) +# -1 -> split at chapt (0) +# -2 -> split at chapt (0) and sect (1) +sub splitfile +{ + my ($level) = @_; + if (($level == 0) || ($splitlevel >= $level)) { + $fixref->{filenum}++; + } +} + +1; + |