texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

texinfo/tp TODO texi2any.pl Texinfo/Common.pm T...


From: Patrice Dumas
Subject: texinfo/tp TODO texi2any.pl Texinfo/Common.pm T...
Date: Sun, 06 Nov 2011 17:48:55 +0000

CVSROOT:        /sources/texinfo
Module name:    texinfo
Changes by:     Patrice Dumas <pertusus>        11/11/06 17:48:55

Modified files:
        tp             : TODO texi2any.pl 
        tp/Texinfo     : Common.pm 
        tp/Texinfo/Convert: Text.pm 
        tp/t           : html_tests.t 
Added files:
        tp/init        : latex2html.pm 
        tp/t/results/html_tests: shortcontents_no_top.pl 
                                 tex_expanded_in_copying.pl 

Log message:
        Pass expanded formats to Convert::Text.
        
        Add a new init file to use latex2html to convert @tex and @math.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/TODO?cvsroot=texinfo&r1=1.217&r2=1.218
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/texi2any.pl?cvsroot=texinfo&r1=1.84&r2=1.85
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Common.pm?cvsroot=texinfo&r1=1.92&r2=1.93
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/Texinfo/Convert/Text.pm?cvsroot=texinfo&r1=1.79&r2=1.80
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/init/latex2html.pm?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/html_tests.t?cvsroot=texinfo&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/html_tests/shortcontents_no_top.pl?cvsroot=texinfo&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/texinfo/tp/t/results/html_tests/tex_expanded_in_copying.pl?cvsroot=texinfo&rev=1.1

Patches:
Index: TODO
===================================================================
RCS file: /sources/texinfo/texinfo/tp/TODO,v
retrieving revision 1.217
retrieving revision 1.218
diff -u -b -r1.217 -r1.218
--- TODO        6 Nov 2011 00:55:27 -0000       1.217
+++ TODO        6 Nov 2011 17:48:54 -0000       1.218
@@ -5,6 +5,9 @@
 Before next release
 ===================
 
+html_tests/shortcontents_no_top the section level also appears in 
address@hidden
+
 
 Bugs
 ====

Index: texi2any.pl
===================================================================
RCS file: /sources/texinfo/texinfo/tp/texi2any.pl,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -b -r1.84 -r1.85
--- texi2any.pl 5 Nov 2011 10:20:15 -0000       1.84
+++ texi2any.pl 6 Nov 2011 17:48:54 -0000       1.85
@@ -328,6 +328,18 @@
   return undef;
 }
 
+sub locate_and_load_init_file($$)
+{
+  my $filename = shift;
+  my $directories = shift;
+
+  my $file = locate_init_file($filename, $directories, 0);
+  if (defined($file)) {
+    Texinfo::Config::_load_init_file($file);
+  } else {
+    document_warn (sprintf(__("Can't read init file %s"), $filename));
+  }
+}
 
 # read initialization files
 foreach my $file (locate_init_file($conf_file_name, 
@@ -621,6 +633,8 @@
   return $makeinfo_help;
 }
 
+my $latex2html_file = 'latex2html.pm';
+
 my $result_options = Getopt::Long::GetOptions (
  'help|h' => sub { print makeinfo_help(); exit 0; },
  'version|V' => sub {print "$real_command_name (GNU texinfo) 
$configured_version\n\n";
@@ -694,12 +708,7 @@
  'D=s' => sub {$parser_default_options->{'values'}->{$_[1]} = 1;},
  'U=s' => sub {delete $parser_default_options->{'values'}->{$_[1]};},
  'init-file=s' => sub {
-    my $file = locate_init_file($_[1], [ @conf_dirs, @program_init_dirs ], 0);
-    if (defined($file)) {
-      Texinfo::Config::_load_init_file($file);
-    } else {
-      document_warn (sprintf(__("Can't read init file %s"), $_[1]));
-    }
+    locate_and_load_init_file($_[1], [ @conf_dirs, @program_init_dirs ]);
  },
  'set-init-variable=s' => sub {
    my $var_val = $_[1];
@@ -722,6 +731,11 @@
        $format = 'raw_text';
      } else {
        set_from_cmdline ($var, $value);
+       # FIXME do that here or all command line options are processed?
+       if ($var eq 'L2H' and get_conf('L2H')) {
+         locate_and_load_init_file($latex2html_file, 
+                               [ @conf_dirs, @program_init_dirs ]);
+       }
      # this is very wrong, but a way to avoid a spurious warning.
       # no warnings 'once';
       # if (set_from_cmdline ($var, $value) 

Index: Texinfo/Common.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Common.pm,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -b -r1.92 -r1.93
--- Texinfo/Common.pm   3 Nov 2011 23:54:49 -0000       1.92
+++ Texinfo/Common.pm   6 Nov 2011 17:48:54 -0000       1.93
@@ -1288,6 +1288,7 @@
   $options{'TEST'} = 1 if ($self->get_conf('TEST'));
   $options{'NUMBER_SECTIONS'} = $self->get_conf('NUMBER_SECTIONS');
   $options{'converter'} = $self;
+  $options{'expanded_formats_hash'} = $self->{'expanded_formats_hash'};
   return %options;
 }
 

Index: Texinfo/Convert/Text.pm
===================================================================
RCS file: /sources/texinfo/texinfo/tp/Texinfo/Convert/Text.pm,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -b -r1.79 -r1.80
--- Texinfo/Convert/Text.pm     6 Nov 2011 00:55:28 -0000       1.79
+++ Texinfo/Convert/Text.pm     6 Nov 2011 17:48:54 -0000       1.80
@@ -328,7 +328,9 @@
      and (($root->{'type'} and $ignored_types{$root->{'type'}})
           or ($root->{'cmdname'} 
              and ($ignored_brace_commands{$root->{'cmdname'}} 
-                 or $ignored_block_commands{$root->{'cmdname'}}
+                 or ($ignored_block_commands{$root->{'cmdname'}}
+                     and !(defined($options->{'expanded_formats_hash'})
+                           and 
$options->{'expanded_formats_hash'}->{$root->{'cmdname'}}))
              # here ignore most of the misc commands
                  or ($root->{'args'} and $root->{'args'}->[0] 
                      and $root->{'args'}->[0]->{'type'} 
@@ -569,10 +571,24 @@
   my $self = shift;
   my $tree = shift;
   #print STDERR "OUTPUT\n";
+  my $expanded_formats = $self->{'expanded_formats'};;
   if ($self and $self->{'parser'}) {
     my $parser = $self->{'parser'};
     $self->{'info'} = $self->{'parser'}->global_informations();
     $self->{'extra'} = $self->{'parser'}->global_commands_information();
+    if (!$expanded_formats and $self->{'parser'}->{'expanded_formats'}) {
+      $expanded_formats = $self->{'parser'}->{'expanded_formats'};
+    }
+  }
+  my $expanded_formats_hash;
+  if ($expanded_formats) {
+    foreach my $expanded_format(@$expanded_formats) {
+      $expanded_formats_hash->{$expanded_format} = 1;
+    }
+  }
+  my %options;
+  if ($expanded_formats_hash) {
+    $options{'expanded_formats_hash'} = $expanded_formats_hash;
   }
   my $input_basename;
   if (defined($self->{'info'}->{'input_file_name'})) {
@@ -610,7 +626,7 @@
     $fh = $self->Texinfo::Common::open_out ($outfile);
     return undef if (!$fh);
   }
-  my $result = _convert($tree);
+  my $result = _convert($tree, \%options);
   if ($fh) {
     print $fh $result;
     $result = '';
@@ -711,6 +727,11 @@
 translation, as the converter object is also supposed to be a 
 L<Texinfo::Report> objet.  See also L<Texinfo::Convert::Converter>.
 
+=item expanded_formats_hash
+
+A reference on a hash.  The keys should be format names (like C<html>, 
+C<tex>), and if thecorresponding  value is set, the format is expanded.
+
 =back
 
 =item $result_accent_text = ascii_accent($text, $accent_command)

Index: t/html_tests.t
===================================================================
RCS file: /sources/texinfo/texinfo/tp/t/html_tests.t,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- t/html_tests.t      3 Nov 2011 23:40:38 -0000       1.13
+++ t/html_tests.t      6 Nov 2011 17:48:54 -0000       1.14
@@ -138,6 +138,15 @@
 @shortcontents
 
 '],
+['shortcontents_no_top',
+'@chapter chap
+
address@hidden chap2
+
address@hidden sec
+
address@hidden
+'],
 ['test_xrefautomaticsectiontitle',
 '@node Top
 @top top
@@ -157,6 +166,14 @@
 
 @xref{chap}.
 ']
+,['tex_expanded_in_copying',
+'@copying
address@hidden
+aa
address@hidden tex
address@hidden copying
+', {'expanded_formats' => ['tex']}
+],
 );
 
 my @test_cases_text = (

Index: init/latex2html.pm
===================================================================
RCS file: init/latex2html.pm
diff -N init/latex2html.pm
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ init/latex2html.pm  6 Nov 2011 17:48:54 -0000       1.1
@@ -0,0 +1,632 @@
+#+##############################################################################
+#
+# latex2html.pm: interface to LaTeX2HTML
+#
+#    Copyright (C) 1999, 2000, 2003, 2005, 2006, 2009, 2011
+#                  Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License,
+# or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# This code was taken from the main texi2html file in 2006.
+# Certainly originally written by Olaf Bachmann.
+# Adapted from texi2html T2h_l2h.pm in 2011.
+#
+#-##############################################################################
+
+require 5.0;
+use strict;
+
+use Cwd;
+
+my $global_cmds = get_conf('GLOBAL_COMMANDS');
+if (!defined($global_cmds)) {
+  set_from_init_file('GLOBAL_COMMANDS', []);
+  $global_cmds = get_conf('GLOBAL_COMMANDS');
+}
+push @$global_cmds, ('math', 'tex');
+
+texinfo_register_handler('structure', \&l2h_process);
+texinfo_register_handler('finish', \&l2h_finish);
+
+texinfo_register_command_formatting('math', \&l2h_do_tex);
+texinfo_register_command_formatting('tex', \&l2h_do_tex);
+
+# name/location of latex2html program
+set_from_init_file('L2H_L2H', 'latex2html');
+
+# If this is set the actual call to latex2html is skipped. The previously
+# generated content is reused, instead.
+# If set to 0, the cache is not used.
+# If undef the cache is used for as many tex fragments as possible
+# and for the remaining the command is run.
+set_from_init_file('L2H_SKIP', undef);
+
+# If this is set l2h uses the specified directory for temporary files. The path
+# leading to this directory may not contain a dot (i.e., a ".");
+# otherwise, l2h will fail.
+set_from_init_file('L2H_TMP', '');
+
+# If set, l2h uses the file as latex2html init file
+set_from_init_file('L2H_FILE', undef);
+
+# if this is set the intermediate files generated by texi2html in relation with
+# latex2html are cleaned (they all have the prefix <document name>_l2h_).
+set_from_init_file('L2H_CLEAN', 1);
+
+
+# latex2html conversions consist of 2 stages:
+# 1) l2h_process
+#    to latex: Put "latex" code into a latex file 
+#                    (l2h_to_latex, l2h_finish_to_latex)
+#    to html: Use latex2html to generate corresponding html code and images
+#                    (l2h_to_html)
+#    from html: Extract generated code and images from latex2html run
+#                    (l2h_init_from_html)
+# 2) l2h_do_tex called each time a @tex or @math command is encountered
+#               in the output tree.
+
+# init l2h defaults for files and names
+
+my ($l2h_name, $l2h_latex_file, $l2h_cache_file, $l2h_html_file, $l2h_prefix);
+
+# holds the status of latex2html operations. If 0 it means that there was 
+# an error
+my $status = 0;
+
+my $debug;
+my $verbose;
+my $docu_rdir;
+my $docu_name;
+
+my %commands_counters;
+
+# init_from_html
+my $extract_error_count;
+my $invalid_counter_count;
+
+# change_image_file_names
+my %l2h_img;            # associate src file to destination file
+                        # such that files are not copied twice
+my $image_count;
+
+# do_tex
+my $html_output_count = 0;   # html text outputed in html result file
+
+##########################
+#
+# First stage: Generation of Latex file
+# Initialize with: init
+# Add content with: l2h_to_latex ($text) --> HTML placeholder comment
+# Finish with: finish_to_latex
+#
+
+my $l2h_latex_preamble = <<EOT;
+% This document was automatically generated by the l2h extenstion of texi2html
+% DO NOT EDIT !!!
+\\documentclass{article}
+\\usepackage{html}
+\\begin{document}
+EOT
+
+my $l2h_latex_closing = <<EOT;
+\\end{document}
+EOT
+
+my %l2h_to_latex = ();         # associate a latex text with the index in the
+                               # html result array.
+my @l2h_to_latex = ();         # array used to associate the index with 
+                               # the original latex text.
+my $latex_count = 0;           # number of latex texts really stored
+my $latex_converted_count = 0; # number of latex texts passed through 
latex2html
+my $to_latex_count = 0;        # total number of latex texts processed
+my $cached_count = 0;          # number of cached latex texts
+my %l2h_cache = ();            # the cache hash. Associate latex text with 
+                               # html from the previous run
+my @l2h_from_html;             # array of resulting html
+
+my %global_count = ();         # associate a command name and the 
+                               # corresponding counter to the index in the
+                               # html result array
+
+# set $status to 1, if l2h could be initalized properly, to 0 otherwise
+sub l2h_process($)
+{
+  my $self = shift;
+  %l2h_to_latex = ();         # associate a latex text with the index in the
+                              # html result array.
+  @l2h_to_latex = ();         # array used to associate the index with 
+                              # the original latex text.
+  $latex_count = 0;           # number of latex texts really stored
+  $latex_converted_count = 0; # number of latex texts passed through latex2html
+  $to_latex_count = 0;        # total number of latex texts processed
+  $cached_count = 0;          # number of cached latex texts
+  %l2h_cache = ();            # the cache hash. Associate latex text with 
+                              # html from the previous run
+  @l2h_from_html = ();        # array of resulting html
+
+  %global_count = ();         # associate a command name and the 
+                              # corresponding counter to the index in the
+                              # html result array
+  %commands_counters = ();
+  $extract_error_count = 0;
+  $invalid_counter_count = 0;
+  %l2h_img = ();       # associate src file to destination file
+                       # such that files are not copied twice
+  $image_count = 1;
+
+  $html_output_count = 0;   # html text outputed in html result file
+  $status = 0;
+  return if (defined($self->get_conf('OUTFILE'))
+        and $Texinfo::Common::null_device_file{$self->get_conf('OUTFILE')});
+
+
+  $docu_name = $self->{'document_name'};
+  $docu_rdir = $self->{'destination_directory'};
+  $docu_rdir = '' if (!defined($docu_rdir));
+  $l2h_name =  "${docu_name}_l2h";
+  $l2h_latex_file = "$docu_rdir${l2h_name}.tex";
+  $l2h_cache_file = "${docu_rdir}${docu_name}-l2h_cache.pm";
+  # destination dir -- generated images are put there, should be the same
+  # as dir of enclosing html document --
+  $l2h_html_file = "$docu_rdir${l2h_name}.html";
+  $l2h_prefix = "${l2h_name}_";
+  $debug = $self->get_conf('DEBUG');
+  $verbose = $self->get_conf('VERBOSE');
+
+  unless ($self->get_conf('L2H_SKIP')) {
+    unless (open(L2H_LATEX, ">$l2h_latex_file")) {
+      $self->document_error("l2h: Can't open latex file '$l2h_latex_file' for 
writing: $!");
+      $status = 0;
+      return;
+    }
+    warn "# l2h: use ${l2h_latex_file} as latex file\n" if ($verbose);
+    print L2H_LATEX $l2h_latex_preamble;
+  }
+  # open the database that holds cached text
+  l2h_init_cache($self) if (!defined($self->get_conf('L2H_SKIP')) 
+                   or $self->get_conf('L2H_SKIP'));
+
+  foreach my $command ('tex', 'math') {
+    if ($self->{'extra'}->{$command}) {
+      my $counter = 0;
+      foreach my $root (@{$self->{'extra'}->{$command}}) {
+        $counter++;
+        my $tree;
+        if ($command eq 'math') {
+          $tree = $root->{'args'}->[0];
+        } else {
+          $tree = {'contents' => address@hidden>{'contents'}}]};
+          if ($tree->{'contents'}->[0]
+              and $tree->{'contents'}->[0]->{'type'}
+              and $tree->{'contents'}->[0]->{'type'} eq 
'empty_line_after_command') {
+            shift @{$tree->{'contents'}};
+          }
+        }
+        my $text = Texinfo::Convert::Texinfo::convert($tree);
+        #$text .= "\n" if ($command eq 'tex');
+        l2h_to_latex($self, $command, $text, $counter);
+        $commands_counters{$root} = $counter;
+      }
+    }
+  }
+  $status = l2h_finish_to_latex($self);
+  if ($status) {
+    $status = l2h_to_html($self);
+  }
+  if ($status) {
+    $status = l2h_init_from_html($self);
+  }
+}
+
+
+# print text (2nd arg) into latex file (if not already there nor in cache)
+# which can be later on replaced by the latex2html generated text.
+# 
+sub l2h_to_latex($$$$)
+{
+  my $self = shift;
+  my $command = shift;
+  my $text = shift;
+  my $counter = shift;
+
+  if ($command eq 'tex') {
+    $text .= ' ';
+  } elsif ($command eq 'math') {
+    $text = "\$".$text."\$";
+  }
+  $to_latex_count++;
+  $text =~ s/(\s*)$//;
+  # try whether we have text already on things to do
+  my $count = $l2h_to_latex{$text};
+  unless ($count) {
+    $latex_count++;
+    $count = $latex_count;
+    # try whether we can get it from cache
+    my $cached_text = l2h_from_cache($text);
+    if (defined($cached_text)) {
+      $cached_count++;
+      # put the cached result in the html result array
+      $l2h_from_html[$count] = $cached_text;
+    } else {
+      $latex_converted_count++;
+      unless ($self->get_conf('L2H_SKIP')) {
+        print L2H_LATEX "\\begin{rawhtml}\n\n";
+        print L2H_LATEX "<!-- l2h_begin $l2h_name $count -->\n";
+        print L2H_LATEX "\\end{rawhtml}\n";
+
+        print L2H_LATEX "$text\n";
+
+        print L2H_LATEX "\\begin{rawhtml}\n";
+        print L2H_LATEX "<!-- l2h_end $l2h_name $count -->\n\n";
+        print L2H_LATEX "\\end{rawhtml}\n";
+      }
+    }
+    $l2h_to_latex[$count] = $text;
+    $l2h_to_latex{$text} = $count;
+  }
+  $global_count{"${command}_$counter"} = $count;
+  return 1;
+}
+
+# print closing into latex file and close it
+sub l2h_finish_to_latex($)
+{
+  my $self = shift;
+  my $reused = $to_latex_count - $latex_converted_count - $cached_count;
+  unless ($self->get_conf('L2H_SKIP')) {
+    print L2H_LATEX $l2h_latex_closing;
+    close (L2H_LATEX);
+  }
+  warn "# l2h: finished to latex ($cached_count cached, $reused reused, 
$latex_converted_count to process)\n" if ($verbose);
+  unless ($latex_count) {
+    # no @tex nor @math
+    l2h_finish($self);
+    return 0;
+  }
+  return 1;
+}
+
+###################################
+# Use latex2html to generate corresponding html code and images
+#
+# to_html([$l2h_latex_file, [$l2h_html_dir]]):
+#   Call latex2html on $l2h_latex_file
+#   Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir
+#   Return 1, on success
+#          0, otherwise
+#
+sub l2h_to_html($)
+{
+  my $self = shift;
+  my ($call, $dotbug);
+  # when there are no tex constructs to convert (happens in case everything
+  # comes from the cache), there is no latex2html run
+  if ($self->get_conf('L2H_SKIP') or ($latex_converted_count == 0)) {
+     warn "# l2h: skipping latex2html run\n" if ($verbose);
+     return 1;
+  }
+  # Check for dot in directory where dvips will work
+  if ($self->get_conf('L2H_TMP')) {
+    if ($self->get_conf('L2H_TMP') =~ /\./) {
+      $self->document_warn ("l2h: l2h_tmp dir contains a dot.");
+      $dotbug = 1;
+    }
+  } else {
+    if (cwd() =~ /\./) {
+      $self->document_warn ("l2h: current dir contains a dot.");
+      $dotbug = 1;
+    }
+  }
+  return 0 if ($dotbug);
+
+  $call = $self->get_conf('L2H_L2H');
+  # use init file, if specified
+  my $init_file = $self->get_conf('L2H_FILE');
+  $call = $call . " -init_file " . $init_file 
+    if (defined($init_file) and $init_file ne '' 
+        and -f $init_file and -r $init_file);
+  # set output dir
+  $call .=  (($docu_rdir ne '') ? " -dir $docu_rdir" : " -no_subdir");
+  # use l2h_tmp, if specified
+  $call .= " -tmp ".$self->get_conf('L2H_TMP')
+    if (defined($self->get_conf('L2H_TMP'))
+        and $self->get_conf('L2H_TMP') ne '');
+  # use a given html version if specified
+  $call .= " -html_version ".$self->get_conf('L2H_HTML_VERSION')
+    if (defined($self->get_conf('L2H_HTML_VERSION'))
+        and $self->get_conf('L2H_HTML_VERSION') ne '');
+  # options we want to be sure of
+  $call .= " -address 0 -info 0 -split 0 -no_navigation -no_auto_link";
+  $call .= " -prefix $l2h_prefix $l2h_latex_file";
+
+  warn "# l2h: executing '$call'\n" if ($verbose);
+  if (system($call)) {
+    $self->document_error ("l2h: '${call}' did not succeed");
+    return 0;
+  } else  {
+     warn "# l2h: latex2html finished successfully\n" if ($verbose);
+     return 1;
+  }
+}
+
+##########################
+# Third stage: Extract generated contents from latex2html run
+# Initialize with: init_from_html
+#   open $l2h_html_file for reading
+#   reads in contents into array indexed by numbers
+#   return 1,  on success -- 0, otherwise
+# Finish with: finish
+#   closes $l2h_html_dir/$l2h_name.".$docu_ext"
+
+
+# the images generated by latex2html have names like ${docu_name}_l2h_img?.png
+# they are copied to ${docu_name}_?.png, and html is changed accordingly.
+
+# FIXME is it really necessary to bother doing that? Looks like an unneeded
+# complication to me (pertusus, 2009), and it could go bad if there is some
+# SRC="(.*?)" in the text (though the regexp could be made more specific).
+
+# %l2h_img;            # associate src file to destination file
+                        # such that files are not copied twice
+sub l2h_change_image_file_names($$)
+{
+  my $self = shift;
+  my $content = shift;
+  my @images = ($content =~ /SRC="(.*?)"/g);
+  my ($src, $dest);
+
+  for $src (@images) {
+    $dest = $l2h_img{$src};
+    unless ($dest) {
+      my $ext = '';
+      if ($src =~ /.*\.(.*)$/ and (!defined($self->get_conf('EXTENSION')) 
+                                    or $1 ne $self->get_conf('EXTENSION'))) {
+        $ext = ".$1";
+      } else { 
+        # A warning when the image extension is the same than the 
+        # document extension. copying the file could result in 
+        # overwriting an output file (almost surely if the default 
+        # texi2html file names are used).
+        $self->document_warn ("L2h image $src has invalid extension");
+        next;
+      }
+      while (-e "$docu_rdir${docu_name}_${image_count}$ext") {
+        $image_count++;
+      }
+      $dest = "${docu_name}_${image_count}$ext";
+      if ($debug) {
+        # not portable, but only used with debug.
+        system("cp -f $docu_rdir$src $docu_rdir$dest");
+      } else {
+        if (!rename ("$docu_rdir$src", "$docu_rdir$dest")) {
+          $self->document_warn ("Error renaming $docu_rdir$src as 
$docu_rdir$dest: $!");
+        }
+      }
+      $l2h_img{$src} = $dest;
+      #unlink "$docu_rdir$src" unless ($debug);
+    }
+  $content =~ s/SRC="$src"/SRC="$dest"/g;
+  }
+  return $content;
+}
+
+sub l2h_init_from_html($)
+{
+  my $self = shift;
+  # when there are no tex constructs to convert (happens in case everything
+  # comes from the cache), the html file that was generated by previous
+  # latex2html runs isn't reused.
+  if ($latex_converted_count == 0) {
+    return 1;
+  }
+
+  if (! open(L2H_HTML, "<$l2h_html_file")) {
+    $self->document_warn ("l2h: Can't open $l2h_html_file for reading");
+    return 0;
+  }
+  warn "# l2h: use $l2h_html_file as html file\n" if ($verbose);
+
+  my $html_converted_count = 0;   # number of html resulting texts 
+                                  # retrieved in the file
+
+  my ($count, $h_line);
+  while ($h_line = <L2H_HTML>) {
+    if ($h_line =~ /!-- l2h_begin $l2h_name ([0-9]+) --/) {
+      $count = $1;
+      my $h_content = '';
+      my $h_end_found = 0;
+      while ($h_line = <L2H_HTML>) {
+        if ($h_line =~ /!-- l2h_end $l2h_name $count --/) {
+          $h_end_found = 1;
+          chomp $h_content;
+          chomp $h_content;
+          $html_converted_count++;
+          # transform image file names and copy image files
+          $h_content = l2h_change_image_file_names($self, $h_content);
+          # store result in the html result array
+          $l2h_from_html[$count] = $h_content;
+          # also add the result in cache hash
+          $l2h_cache{$l2h_to_latex[$count]} = $h_content;
+          last;
+        }
+        $h_content = $h_content.$h_line;
+      }
+      unless ($h_end_found) { 
+        # couldn't found the closing comment. Certainly  a bug.
+        warn ("l2h: l2h_end $l2h_name $count not found\n");
+        close(L2H_HTML);
+        return 0;
+      }
+    }
+  }
+
+  # Not the same number of converted elements and retrieved elements
+  if ($latex_converted_count != $html_converted_count) {
+    warn ("l2h: waiting for $latex_converted_count elements found 
$html_converted_count\n");
+  }
+
+  warn "# l2h: Got $html_converted_count of $latex_count html contents\n"
+    if ($verbose);
+
+  close(L2H_HTML);
+  return 1;
+}
+
+# $html_output_count = 0;   # html text outputed in html result file
+
+# called each time a construct handled by latex2html is encountered, should
+# output the corresponding html
+sub l2h_do_tex($$)
+{
+  my $self = shift;
+  my $cmdname = shift;;
+  my $command = shift;
+  my $content = shift;
+
+  my $counter = $commands_counters{$command};
+  return '' unless ($status);
+  my $count = $global_count{"${cmdname}_$counter"}; 
+  ################################## begin debug section (incorrect counts)
+  if (!defined($count)) {
+    # counter is undefined
+    $invalid_counter_count++;
+    warn ("l2h: undefined count for ${cmdname}_$counter\n");
+    return ("<!-- l2h: ". __LINE__ . " undef count for ${cmdname}_$counter 
-->")
+      if ($debug);
+    return '';
+  } elsif(($count <= 0) or ($count > $latex_count)) {
+    # counter out of range
+    $invalid_counter_count++;
+    warn ("l2h: Request of $count content which is out of valide range 
[0,$latex_count)\n");
+    return ("<!-- l2h: ". __LINE__ . " out of range count $count -->") 
+      if ($debug);
+    return '';
+  }
+  ################################## end debug section (incorrect counts)
+
+  # this seems to be a valid counter
+  my $result = '';
+  $result = "<!-- l2h_begin $l2h_name $count -->" if ($debug);
+  if (defined($l2h_from_html[$count])) {
+    $html_output_count++;
+    $result .= $l2h_from_html[$count];
+    $result .= "\n" if ($cmdname eq 'tex');
+  } else {
+    # if the result is not in @l2h_from_html, there is an error somewhere.
+    $extract_error_count++;
+    warn ("l2h: can't extract content $count from html\n");
+    # try simple (ordinary) substitution (without l2h)
+    $result .= "<!-- l2h: ". __LINE__ . " use default -->" if ($debug);
+    $result .= &{$self->default_commands_conversion($cmdname)}($self, 
+                                                 $cmdname, $command, $content);
+  }
+  $result .= "<!-- l2h_end $l2h_name $count -->" if ($debug);
+  return $result;
+}
+
+# store results in the cache and remove temporary files.
+sub l2h_finish($)
+{
+  my $self = shift;
+  return unless($status);
+  if ($verbose) {
+    if ($extract_error_count + $invalid_counter_count) {
+      warn "# l2h: finished from html ($extract_error_count extract and 
$invalid_counter_count invalid counter errors)\n";
+    } else {
+      warn "# l2h: finished from html (no error)\n";
+    }
+    if ($html_output_count != $latex_converted_count) { 
+      # this may happen if @-commands are collected at some places
+      # but @-command at those places are not expanded later. For 
+      # example @math on @multitable lines.
+      warn "# l2h: $html_output_count html outputed for $latex_converted_count 
converted\n";
+    }
+  }
+  l2h_store_cache($self);
+  if ($self->get_conf('L2H_CLEAN')) {
+    local ($_);
+    warn "# l2h: removing temporary files generated by l2h extension\n"
+     if ($verbose);
+    while (<"$docu_rdir$l2h_name"*>) {
+      # FIXME error condition not checked
+      unlink $_;
+    }
+  }
+  warn "# l2h: Finished\n" if $verbose;
+  return 1;
+}
+
+##############################
+# stuff for l2h caching
+#
+# FIXME it is clear that l2h stuff takes very long compared with texi2html
+# which is already quite long. However this also adds some complexity 
+
+# I tried doing this with a dbm data base, but it did not store all
+# keys/values. Hence, I did as latex2html does it
+sub l2h_init_cache($)
+{
+  my $self = shift;
+  if (-r "$l2h_cache_file") {
+    my $rdo = do "$l2h_cache_file";
+    $self->document_error ("l2h: could not load $docu_rdir$l2h_cache_file: $@")
+      unless ($rdo);
+  }
+}
+
+# store all the text obtained through latex2html
+sub l2h_store_cache($)
+{
+  my $self = shift;
+  return unless $latex_count;
+  my ($key, $value);
+  unless (open(FH, ">$l2h_cache_file")) { 
+    $self->document_error ("l2h: could not open $docu_rdir$l2h_cache_file for 
writing: $!");
+    return;
+  }
+  while (($key, $value) = each %l2h_cache) {
+    # escape stuff
+    $key =~ s|/|\\/|g;
+    $key =~ s|\\\\/|\\/|g;
+    # weird, a \ at the end of the key results in an error
+    # maybe this also broke the dbm database stuff
+    $key =~ s|\\$|\\\\|;
+    $value =~ s/\|/\\\|/go;
+    $value =~ s/\\\\\|/\\\|/go;
+    $value =~ s|\\\\|\\\\\\\\|g;
+    print FH "\n\$l2h_cache_key = q/$key/;\n";
+    print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n";
+  }
+  print FH "1;";
+  close (FH);
+}
+
+# return cached html, if it exists for text, and if all pictures
+# are there, as well
+sub l2h_from_cache($)
+{
+  my $text = shift;
+  my $cached = $l2h_cache{$text};
+  if (defined($cached)) {
+    while ($cached =~ m/SRC="(.*?)"/g) {
+      unless (-e "$docu_rdir$1") {
+        return undef;
+      }
+    }
+    return $cached;
+  }
+  return undef;
+}
+
+1;

Index: t/results/html_tests/shortcontents_no_top.pl
===================================================================
RCS file: t/results/html_tests/shortcontents_no_top.pl
diff -N t/results/html_tests/shortcontents_no_top.pl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ t/results/html_tests/shortcontents_no_top.pl        6 Nov 2011 17:48:55 
-0000       1.1
@@ -0,0 +1,343 @@
+use vars qw(%result_texis %result_texts %result_trees %result_errors 
+   %result_indices %result_sectioning %result_nodes %result_menus
+   %result_floats %result_converted %result_converted_errors 
+   %result_elements %result_directions_text);
+
+use utf8;
+
+$result_trees{'shortcontents_no_top'} = {
+  'contents' => [
+    {
+      'contents' => [],
+      'parent' => {},
+      'type' => 'text_root'
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'extra' => {
+                'command' => {}
+              },
+              'parent' => {},
+              'text' => ' ',
+              'type' => 'empty_spaces_after_command'
+            },
+            {
+              'parent' => {},
+              'text' => 'chap'
+            },
+            {
+              'parent' => {},
+              'text' => '
+',
+              'type' => 'spaces_at_end'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'chapter',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'misc_content' => [
+          {}
+        ]
+      },
+      'level' => 1,
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 1,
+        'macro' => ''
+      },
+      'number' => 1,
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'extra' => {
+                'command' => {}
+              },
+              'parent' => {},
+              'text' => ' ',
+              'type' => 'empty_spaces_after_command'
+            },
+            {
+              'parent' => {},
+              'text' => 'chap2'
+            },
+            {
+              'parent' => {},
+              'text' => '
+',
+              'type' => 'spaces_at_end'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'chapter',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        }
+      ],
+      'extra' => {
+        'misc_content' => [
+          {}
+        ]
+      },
+      'level' => 1,
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 3,
+        'macro' => ''
+      },
+      'number' => 2,
+      'parent' => {}
+    },
+    {
+      'args' => [
+        {
+          'contents' => [
+            {
+              'extra' => {
+                'command' => {}
+              },
+              'parent' => {},
+              'text' => ' ',
+              'type' => 'empty_spaces_after_command'
+            },
+            {
+              'parent' => {},
+              'text' => 'sec'
+            },
+            {
+              'parent' => {},
+              'text' => '
+',
+              'type' => 'spaces_at_end'
+            }
+          ],
+          'parent' => {},
+          'type' => 'misc_line_arg'
+        }
+      ],
+      'cmdname' => 'section',
+      'contents' => [
+        {
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line'
+        },
+        {
+          'cmdname' => 'shortcontents',
+          'parent' => {}
+        }
+      ],
+      'extra' => {
+        'misc_content' => [
+          {}
+        ]
+      },
+      'level' => 2,
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 5,
+        'macro' => ''
+      },
+      'number' => '2.1',
+      'parent' => {}
+    }
+  ],
+  'type' => 'document_root'
+};
+$result_trees{'shortcontents_no_top'}{'contents'}[0]{'parent'} = 
$result_trees{'shortcontents_no_top'};
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'extra'}{'command'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[1];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0]{'parent'} = 
$result_trees{'shortcontents_no_top'}{'contents'}[1];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'contents'}[0]{'parent'} 
= $result_trees{'shortcontents_no_top'}{'contents'}[1];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'extra'}{'misc_content'}[0]
 = 
$result_trees{'shortcontents_no_top'}{'contents'}[1]{'args'}[0]{'contents'}[1];
+$result_trees{'shortcontents_no_top'}{'contents'}[1]{'parent'} = 
$result_trees{'shortcontents_no_top'};
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'extra'}{'command'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[2];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0]{'parent'} = 
$result_trees{'shortcontents_no_top'}{'contents'}[2];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'contents'}[0]{'parent'} 
= $result_trees{'shortcontents_no_top'}{'contents'}[2];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'extra'}{'misc_content'}[0]
 = 
$result_trees{'shortcontents_no_top'}{'contents'}[2]{'args'}[0]{'contents'}[1];
+$result_trees{'shortcontents_no_top'}{'contents'}[2]{'parent'} = 
$result_trees{'shortcontents_no_top'};
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0]{'contents'}[0]{'extra'}{'command'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[3];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0]{'parent'} = 
$result_trees{'shortcontents_no_top'}{'contents'}[3];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'contents'}[0]{'parent'} 
= $result_trees{'shortcontents_no_top'}{'contents'}[3];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'contents'}[1]{'parent'} 
= $result_trees{'shortcontents_no_top'}{'contents'}[3];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'extra'}{'misc_content'}[0]
 = 
$result_trees{'shortcontents_no_top'}{'contents'}[3]{'args'}[0]{'contents'}[1];
+$result_trees{'shortcontents_no_top'}{'contents'}[3]{'parent'} = 
$result_trees{'shortcontents_no_top'};
+
+$result_texis{'shortcontents_no_top'} = '@chapter chap
+
address@hidden chap2
+
address@hidden sec
+
address@hidden
+';
+
+
+$result_texts{'shortcontents_no_top'} = '1 chap
+******
+
+2 chap2
+*******
+
+2.1 sec
+=======
+
+';
+
+$result_sectioning{'shortcontents_no_top'} = {
+  'level' => 0,
+  'section_childs' => [
+    {
+      'cmdname' => 'chapter',
+      'extra' => {},
+      'level' => 1,
+      'number' => 1,
+      'section_up' => {}
+    },
+    {
+      'cmdname' => 'chapter',
+      'extra' => {},
+      'level' => 1,
+      'number' => 2,
+      'section_childs' => [
+        {
+          'cmdname' => 'section',
+          'extra' => {},
+          'level' => 2,
+          'number' => '2.1',
+          'section_up' => {}
+        }
+      ],
+      'section_prev' => {},
+      'section_up' => {},
+      'toplevel_prev' => {}
+    }
+  ]
+};
+$result_sectioning{'shortcontents_no_top'}{'section_childs'}[0]{'section_up'} 
= $result_sectioning{'shortcontents_no_top'};
+$result_sectioning{'shortcontents_no_top'}{'section_childs'}[1]{'section_childs'}[0]{'section_up'}
 = $result_sectioning{'shortcontents_no_top'}{'section_childs'}[1];
+$result_sectioning{'shortcontents_no_top'}{'section_childs'}[1]{'section_prev'}
 = $result_sectioning{'shortcontents_no_top'}{'section_childs'}[0];
+$result_sectioning{'shortcontents_no_top'}{'section_childs'}[1]{'section_up'} 
= $result_sectioning{'shortcontents_no_top'};
+$result_sectioning{'shortcontents_no_top'}{'section_childs'}[1]{'toplevel_prev'}
 = $result_sectioning{'shortcontents_no_top'}{'section_childs'}[0];
+
+$result_errors{'shortcontents_no_top'} = [];
+
+
+
+$result_converted{'html'}->{'shortcontents_no_top'} = '<!DOCTYPE html PUBLIC 
"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd";>
+<html>
+<!-- Created by texinfo, http://www.gnu.org/software/texinfo/ -->
+<head>
+<title>Untitled Document</title>
+
+<meta name="description" content="Untitled Document">
+<meta name="keywords" content="Untitled Document">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="tp">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+pre.display {font-family: serif}
+pre.format {font-family: serif}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: serif; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: serif; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nocodebreak {white-space:pre}
+span.nolinebreak {white-space:pre}
+span.roman {font-family:serif; font-weight:normal}
+span.sansserif {font-family:sans-serif; font-weight:normal}
+ul.no-bullet {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" 
vlink="#800080" alink="#FF0000">
+<a name="chap"></a>
+<h2 class="chapter">1 chap</h2>
+
+<a name="chap2"></a>
+<h2 class="chapter">2 chap2</h2>
+
+<a name="sec"></a>
+<h3 class="section">2.1 sec</h3>
+
+<a name="SEC_Overview"></a>
+<h2 class="shortcontents-heading">Short Table of Contents</h2>
+
+<div class="shortcontents">
+<ul class="no-bullet">
+<li><a name="stoc-chap" href="#toc-chap">1 chap</a></li>
+<li><a name="stoc-chap2" href="#toc-chap2">2 chap2</a><ul class="no-bullet">
+<li><a name="stoc-sec" href="#toc-sec">2.1 sec</a></li>
+</ul></li>
+
+</ul>
+</div>
+
+<hr>
+<p>
+
+
+</p>
+</body>
+</html>
+';
+
+$result_converted_errors{'html'}->{'shortcontents_no_top'} = [
+  {
+    'error_line' => 'warning: Must specify a title with a title command or @top
+',
+    'text' => 'Must specify a title with a title command or @top',
+    'type' => 'warning'
+  }
+];
+
+
+1;

Index: t/results/html_tests/tex_expanded_in_copying.pl
===================================================================
RCS file: t/results/html_tests/tex_expanded_in_copying.pl
diff -N t/results/html_tests/tex_expanded_in_copying.pl
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ t/results/html_tests/tex_expanded_in_copying.pl     6 Nov 2011 17:48:55 
-0000       1.1
@@ -0,0 +1,210 @@
+use vars qw(%result_texis %result_texts %result_trees %result_errors 
+   %result_indices %result_sectioning %result_nodes %result_menus
+   %result_floats %result_converted %result_converted_errors 
+   %result_elements %result_directions_text);
+
+use utf8;
+
+$result_trees{'tex_expanded_in_copying'} = {
+  'contents' => [
+    {
+      'cmdname' => 'copying',
+      'contents' => [
+        {
+          'extra' => {
+            'command' => {}
+          },
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line_after_command'
+        },
+        {
+          'cmdname' => 'tex',
+          'contents' => [
+            {
+              'extra' => {
+                'command' => {}
+              },
+              'parent' => {},
+              'text' => '
+',
+              'type' => 'empty_line_after_command'
+            },
+            {
+              'parent' => {},
+              'text' => 'aa',
+              'type' => 'raw'
+            },
+            {
+              'parent' => {},
+              'text' => '
+',
+              'type' => 'last_raw_newline'
+            }
+          ],
+          'line_nr' => {
+            'file_name' => '',
+            'line_nr' => 2,
+            'macro' => ''
+          },
+          'parent' => {}
+        },
+        {
+          'extra' => {
+            'command' => {}
+          },
+          'parent' => {},
+          'text' => '
+',
+          'type' => 'empty_line_after_command'
+        },
+        {
+          'args' => [
+            {
+              'contents' => [
+                {
+                  'extra' => {
+                    'command' => {}
+                  },
+                  'parent' => {},
+                  'text' => ' ',
+                  'type' => 'empty_spaces_after_command'
+                },
+                {
+                  'parent' => {},
+                  'text' => 'copying'
+                },
+                {
+                  'parent' => {},
+                  'text' => '
+',
+                  'type' => 'spaces_at_end'
+                }
+              ],
+              'parent' => {},
+              'type' => 'misc_line_arg'
+            }
+          ],
+          'cmdname' => 'end',
+          'extra' => {
+            'command' => {},
+            'command_argument' => 'copying',
+            'text_arg' => 'copying'
+          },
+          'line_nr' => {
+            'file_name' => '',
+            'line_nr' => 5,
+            'macro' => ''
+          },
+          'parent' => {}
+        }
+      ],
+      'extra' => {
+        'end_command' => {}
+      },
+      'line_nr' => {
+        'file_name' => '',
+        'line_nr' => 1,
+        'macro' => ''
+      },
+      'parent' => {}
+    }
+  ],
+  'type' => 'text_root'
+};
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[0]{'extra'}{'command'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[0]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'extra'}{'command'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1]{'contents'}[0]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1]{'contents'}[1]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1]{'contents'}[2]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[2]{'extra'}{'command'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[1];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[2]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0]{'contents'}[0]{'extra'}{'command'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0]{'contents'}[0]{'parent'}
 = 
$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0]{'contents'}[1]{'parent'}
 = 
$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0]{'contents'}[2]{'parent'}
 = 
$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'args'}[0]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'extra'}{'command'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3]{'parent'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'extra'}{'end_command'}
 = $result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'contents'}[3];
+$result_trees{'tex_expanded_in_copying'}{'contents'}[0]{'parent'} = 
$result_trees{'tex_expanded_in_copying'};
+
+$result_texis{'tex_expanded_in_copying'} = '@copying
address@hidden
+aa
address@hidden tex
address@hidden copying
+';
+
+
+$result_texts{'tex_expanded_in_copying'} = '';
+
+$result_errors{'tex_expanded_in_copying'} = [];
+
+
+
+$result_converted{'html'}->{'tex_expanded_in_copying'} = '<!DOCTYPE html 
PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
+<html>
+<!-- aa -->
+<!-- Created by texinfo, http://www.gnu.org/software/texinfo/ -->
+<head>
+<title>Untitled Document</title>
+
+<meta name="description" content="Untitled Document">
+<meta name="keywords" content="Untitled Document">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="tp">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.smallquotation {font-size: smaller}
+div.display {margin-left: 3.2em}
+div.example {margin-left: 3.2em}
+div.lisp {margin-left: 3.2em}
+div.smalldisplay {margin-left: 3.2em}
+div.smallexample {margin-left: 3.2em}
+div.smalllisp {margin-left: 3.2em}
+pre.display {font-family: serif}
+pre.format {font-family: serif}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: serif; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: serif; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.nocodebreak {white-space:pre}
+span.nolinebreak {white-space:pre}
+span.roman {font-family:serif; font-weight:normal}
+span.sansserif {font-family:sans-serif; font-weight:normal}
+ul.no-bullet {list-style: none}
+-->
+</style>
+
+
+</head>
+
+<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" 
vlink="#800080" alink="#FF0000">
+<p>
+
+
+</p>
+</body>
+</html>
+';
+
+$result_converted_errors{'html'}->{'tex_expanded_in_copying'} = [
+  {
+    'error_line' => 'warning: Must specify a title with a title command or @top
+',
+    'text' => 'Must specify a title with a title command or @top',
+    'type' => 'warning'
+  }
+];
+
+
+1;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]