texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * tp/Texinfo/Convert/Converter.pm (_normalize_fil


From: Patrice Dumas
Subject: branch master updated: * tp/Texinfo/Convert/Converter.pm (_normalize_filename_case) (set_tree_unit_file, set_file_path, _set_tree_units_files), tp/Texinfo/Convert/HTML.pm (_html_set_pages_files): split set_file_path out of set_tree_unit_file to set file path for each file name, which should be done for each file name, and therefore with a different function than set_tree_unit_file, which is called for each tree unit element. Add _normalize_filename_case to be used in both set_tree_unit_file and set_file_path.
Date: Tue, 11 Oct 2022 15:45:59 -0400

This is an automated email from the git hooks/post-receive script.

pertusus pushed a commit to branch master
in repository texinfo.

The following commit(s) were added to refs/heads/master by this push:
     new c99c2cf83c * tp/Texinfo/Convert/Converter.pm 
(_normalize_filename_case) (set_tree_unit_file, set_file_path, 
_set_tree_units_files), tp/Texinfo/Convert/HTML.pm (_html_set_pages_files): 
split set_file_path out of set_tree_unit_file to set file path for each file 
name, which should be done for each file name, and therefore with a different 
function than set_tree_unit_file, which is called for each tree unit element.  
Add _normalize_filename_case to be used in both set_tree_unit_file [...]
c99c2cf83c is described below

commit c99c2cf83c4fab66415ccd390540479c629779ea
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Tue Oct 11 21:45:29 2022 +0200

    * tp/Texinfo/Convert/Converter.pm (_normalize_filename_case)
    (set_tree_unit_file, set_file_path, _set_tree_units_files),
    tp/Texinfo/Convert/HTML.pm (_html_set_pages_files): split set_file_path
    out of set_tree_unit_file to set file path for each file name,
    which should be done for each file name, and therefore with a
    different function than set_tree_unit_file, which is called for each
    tree unit element.  Add _normalize_filename_case to be used in both
    set_tree_unit_file and set_file_path.
---
 ChangeLog                       |  11 +++++
 tp/TODO                         |   6 ---
 tp/Texinfo/Common.pm            |   4 ++
 tp/Texinfo/Convert/Converter.pm | 107 +++++++++++++++++++++++++++-------------
 tp/Texinfo/Convert/HTML.pm      |  43 ++++++++++------
 5 files changed, 116 insertions(+), 55 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d75e6dca99..3d097309cb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2022-10-11  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/Convert/Converter.pm (_normalize_filename_case)
+       (set_tree_unit_file, set_file_path, _set_tree_units_files),
+       tp/Texinfo/Convert/HTML.pm (_html_set_pages_files): split set_file_path
+       out of set_tree_unit_file to set file path for each file name,
+       which should be done for each file name, and therefore with a
+       different function than set_tree_unit_file, which is called for each
+       tree unit element.  Add _normalize_filename_case to be used in both
+       set_tree_unit_file and set_file_path.
+
 2022-10-11  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/Convert/HTML.pm (_set_root_commands_targets_node_files):
diff --git a/tp/TODO b/tp/TODO
index 5c06820117..32614de65d 100644
--- a/tp/TODO
+++ b/tp/TODO
@@ -12,12 +12,6 @@ Before next release
 
 Add in_math (for /)?
 
-set_tree_unit_file should also only be called once per file. HTML
-needs to be changed and a check added to set_tree_unit_file.
-Also maybe do not set $tree_unit->{'structure'}->{'unit_filename'}
-in set_tree_unit_file and change the name of the function.  Maybe
-split in two.
-
 Bugs
 ====
 
diff --git a/tp/Texinfo/Common.pm b/tp/Texinfo/Common.pm
index 7acf634955..49f67b6b76 100644
--- a/tp/Texinfo/Common.pm
+++ b/tp/Texinfo/Common.pm
@@ -817,6 +817,10 @@ sub output_files_open_out($$$;$$)
   my $use_binmode = shift;
   my $output_encoding = shift;
 
+  #if (!defined($file_path)) {
+  #  cluck('output_files_open_out: file_path undef');
+  #}
+
   my $encoding;
   if (defined($output_encoding)) {
     $encoding = $output_encoding;
diff --git a/tp/Texinfo/Convert/Converter.pm b/tp/Texinfo/Convert/Converter.pm
index a1902bc291..87789524a5 100644
--- a/tp/Texinfo/Convert/Converter.pm
+++ b/tp/Texinfo/Convert/Converter.pm
@@ -757,20 +757,13 @@ sub initialize_tree_units_files($)
   }
 }
 
-# sets out_filepaths converter state
-# $FILEPATH can be given explicitly, otherwise it is based on $FILENAME
-# and $DESTINATION_DIRECTORY
-sub set_tree_unit_file($$$$;$)
+# If CASE_INSENSITIVE_FILENAMES is set, reuse the first
+# filename with the same name insensitive to the case.
+sub _normalize_filename_case($$)
 {
   my $self = shift;
-  my $tree_unit = shift;
   my $filename = shift;
-  my $destination_directory = shift;
-  my $filepath = shift;
 
-  if (!defined($filename)) {
-    cluck("set_tree_unit_file: filename not defined\n");
-  }
   if ($self->get_conf('CASE_INSENSITIVE_FILENAMES')) {
     if (exists($self->{'filenames'}->{lc($filename)})) {
       if ($self->get_conf('DEBUG')) {
@@ -782,7 +775,24 @@ sub set_tree_unit_file($$$$;$)
       $self->{'filenames'}->{lc($filename)} = $filename;
     }
   }
+  return $filename;
+}
+
+# Sets $tree_unit->{'structure'}->{'unit_filename'}.
+sub set_tree_unit_file($$$)
+{
+  my $self = shift;
+  my $tree_unit = shift;
+  my $filename = shift;
+
+  if (!defined($filename)) {
+    cluck("set_tree_unit_file: filename not defined\n");
+  }
+
+  $filename = $self->_normalize_filename_case($filename);
+
   $tree_unit->{'structure'} = {} if (!($tree_unit->{'structure'}));
+
   # This should never happen, set_tree_unit_file is called once per
   # tree unit.
   if (exists($tree_unit->{'structure'}->{'unit_filename'})) {
@@ -796,14 +806,45 @@ sub set_tree_unit_file($$$$;$)
     }
   }
   $tree_unit->{'structure'}->{'unit_filename'} = $filename;
-  if (defined($filepath)) {
-    $self->{'out_filepaths'}->{$filename} = $filepath;
-  } elsif (defined($destination_directory) and $destination_directory ne '') {
-    $self->{'out_filepaths'}->{$filename} =
-      File::Spec->catfile($destination_directory, $filename);
-  } else {
-    $self->{'out_filepaths'}->{$filename} = $filename;
+}
+
+# sets out_filepaths converter state, associating a file name
+# to a file path.
+# $FILEPATH can be given explicitly, otherwise it is based on $FILENAME
+# and $DESTINATION_DIRECTORY
+sub set_file_path($$$;$)
+{
+  my $self = shift;
+  my $filename = shift;
+  my $destination_directory = shift;
+  my $filepath = shift;
+
+  if (!defined($filename)) {
+    cluck("set_file_path: filename not defined\n");
+  }
+
+  $filename = $self->_normalize_filename_case($filename);
+
+  if (not defined($filepath)) {
+    if (defined($destination_directory) and $destination_directory ne '') {
+      $filepath = File::Spec->catfile($destination_directory, $filename);
+    } else {
+      $filepath = $filename;
+    }
+  }
+  # should not happen, the file path should be set only once
+  # per file name.
+  if (defined($self->{'out_filepaths'}->{$filename})) {
+    if ($self->{'out_filepaths'}->{$filename} eq $filepath) {
+      print STDERR "set_file_path: filepath set: $filepath\n"
+         if ($self->get_conf('DEBUG'));
+    } else {
+      print STDERR  "set_file_path: filepath reset: "
+        .$self->{'out_filepaths'}->{$filename}.", $filepath\n"
+         if ($self->get_conf('DEBUG'));
+    }
   }
+  $self->{'out_filepaths'}->{$filename} = $filepath;
 }
 
 sub top_node_filename($$)
@@ -872,9 +913,9 @@ sub _set_tree_units_files($$$$$$)
                 and $self->get_conf('EXTENSION') ne '');
 
   if (!$self->get_conf('SPLIT')) {
+    $self->set_file_path($output_filename, undef, $output_file);
     foreach my $tree_unit (@$tree_units) {
-      $self->set_tree_unit_file($tree_unit, $output_filename, undef,
-                                $output_file);
+      $self->set_tree_unit_file($tree_unit, $output_filename);
     }
   } else {
     my $node_top;
@@ -885,8 +926,8 @@ sub _set_tree_units_files($$$$$$)
     if ($node_top and defined($top_node_filename)) {
       my ($node_top_unit) = $self->_get_root_element($node_top);
       die "BUG: No element for top node" if (!defined($node_top));
-      $self->set_tree_unit_file($node_top_unit, $top_node_filename,
-                                $destination_directory);
+      $self->set_file_path($top_node_filename, $destination_directory);
+      $self->set_tree_unit_file($node_top_unit, $top_node_filename);
     }
     my $file_nr = 0;
     my $previous_page;
@@ -912,8 +953,8 @@ sub _set_tree_units_files($$$$$$)
                = $self->node_information_filename($root_command->{'extra'});
             }
             $node_filename .= $extension;
-            $self->set_tree_unit_file($file_tree_unit, $node_filename,
-                                      $destination_directory);
+            $self->set_file_path($node_filename,$destination_directory);
+            $self->set_tree_unit_file($file_tree_unit, $node_filename);
             last;
           }
         }
@@ -923,31 +964,31 @@ sub _set_tree_units_files($$$$$$)
           if ($command) {
             if ($command->{'cmdname'} eq 'top' and !$node_top
                 and defined($top_node_filename)) {
-              $self->set_tree_unit_file($file_tree_unit, $top_node_filename,
-                                        $destination_directory);
+              $self->set_file_path($top_node_filename, $destination_directory);
+              $self->set_tree_unit_file($file_tree_unit, $top_node_filename);
             } else {
               my ($normalized_name, $filename)
                  = $self->normalized_sectioning_command_filename($command);
-              $self->set_tree_unit_file($file_tree_unit, $filename,
-                                        $destination_directory);
+              $self->set_file_path($filename, $destination_directory);
+              $self->set_tree_unit_file($file_tree_unit, $filename);
             }
           } else {
             # when everything else has failed
             if ($file_nr == 0 and !$node_top and defined($top_node_filename)) {
-              $self->set_tree_unit_file($file_tree_unit, $top_node_filename,
-                                        $destination_directory);
+              $self->set_file_path($top_node_filename, $destination_directory);
+              $self->set_tree_unit_file($file_tree_unit, $top_node_filename);
             } else {
               my $filename = $document_name . "_$file_nr";
               $filename .= $extension;
-              $self->set_tree_unit_file($tree_unit, $filename,
-                                        $destination_directory);
+              $self->set_file_path($filename, $destination_directory);
+              $self->set_tree_unit_file($tree_unit, $filename);
             }
             $file_nr++;
           }
         }
       }
-      $tree_unit->{'structure'}->{'unit_filename'}
-        = $file_tree_unit->{'structure'}->{'unit_filename'};
+      $self->set_tree_unit_file($tree_unit,
+                    $file_tree_unit->{'structure'}->{'unit_filename'});
     }
   }
 
diff --git a/tp/Texinfo/Convert/HTML.pm b/tp/Texinfo/Convert/HTML.pm
index c523e53920..54afd1a27e 100644
--- a/tp/Texinfo/Convert/HTML.pm
+++ b/tp/Texinfo/Convert/HTML.pm
@@ -7800,10 +7800,12 @@ sub _html_set_pages_files($$$$$$$$)
             if (defined($self->get_conf('EXTENSION'))
                 and $self->get_conf('EXTENSION') ne '');
 
+  my %filenames_paths;
   my %unit_file_name_paths;
   if (!$self->get_conf('SPLIT')) {
+    $filenames_paths{$output_filename} = $output_file;
     foreach my $tree_unit (@$tree_units) {
-      $unit_file_name_paths{$tree_unit} = [$output_filename, $output_file];
+      $unit_file_name_paths{$tree_unit} = $output_filename;
     }
   } else {
     my $node_top;
@@ -7815,7 +7817,8 @@ sub _html_set_pages_files($$$$$$$$)
     if ($node_top and defined($top_node_filename)) {
       my ($node_top_tree_unit) = $self->_html_get_tree_root_element($node_top);
       die "BUG: No element for top node" if (!defined($node_top_tree_unit));
-      $unit_file_name_paths{$node_top_tree_unit} = [$top_node_filename, undef];
+      $filenames_paths{$top_node_filename} = undef;
+      $unit_file_name_paths{$node_top_tree_unit} = $top_node_filename;
     }
     my $file_nr = 0;
     my $previous_page;
@@ -7842,7 +7845,8 @@ sub _html_set_pages_files($$$$$$$$)
               $node_filename
                 = $self->{'targets'}->{$root_command}->{'node_filename'};
             }
-            $unit_file_name_paths{$file_tree_unit} = [$node_filename, undef];
+            $filenames_paths{$node_filename} = undef;
+            $unit_file_name_paths{$file_tree_unit} = $node_filename;
             last;
           }
         }
@@ -7852,22 +7856,25 @@ sub _html_set_pages_files($$$$$$$$)
           if ($command) {
             if ($command->{'cmdname'} eq 'top' and !$node_top
                 and defined($top_node_filename)) {
-              $unit_file_name_paths{$file_tree_unit}
-                                     = [$top_node_filename, undef];
+              $filenames_paths{$top_node_filename} = undef;
+              $unit_file_name_paths{$file_tree_unit} = $top_node_filename;
             } else {
-              $unit_file_name_paths{$file_tree_unit}
-                = [$self->{'targets'}->{$command}->{'section_filename'}, 
undef];
+              my $section_filename
+                   = $self->{'targets'}->{$command}->{'section_filename'};
+              $filenames_paths{$section_filename} = undef;
+              $unit_file_name_paths{$file_tree_unit} = $section_filename;
             }
           } else {
             # when everything else has failed
             if ($file_nr == 0 and !$node_top
                 and defined($top_node_filename)) {
-              $unit_file_name_paths{$file_tree_unit}
-                                      = [$top_node_filename, undef];
+              $filenames_paths{$top_node_filename} = undef;
+              $unit_file_name_paths{$file_tree_unit} = $top_node_filename;
             } else {
               my $filename = $document_name . "_$file_nr";
               $filename .= $extension;
-              $unit_file_name_paths{$file_tree_unit} = [$filename, undef];
+              $filenames_paths{$filename} = undef;
+              $unit_file_name_paths{$file_tree_unit} = $filename;
             }
             $file_nr++;
           }
@@ -7881,7 +7888,8 @@ sub _html_set_pages_files($$$$$$$$)
   }
 
   foreach my $tree_unit (@$tree_units) {
-    my ($filename, $filepath) = @{$unit_file_name_paths{$tree_unit}};
+    my $filename = $unit_file_name_paths{$tree_unit};
+    my $filepath = $filenames_paths{$filename};
     if (defined($self->{'file_id_setting'}->{'tree_unit_file_name'})) {
       # NOTE the information that it is associated with @top or @node Top
       # may be determined with $self->element_is_tree_unit_top($tree_unit);
@@ -7890,11 +7898,10 @@ sub _html_set_pages_files($$$$$$$$)
                $self, $tree_unit, $filename, $filepath);
       if (defined($user_filename)) {
         $filename = $user_filename;
-        $filepath = $user_filepath;
+        $filenames_paths{$filename} = $user_filepath;
       }
     }
-    $self->set_tree_unit_file($tree_unit, $filename, $destination_directory,
-                              $filepath);
+    $self->set_tree_unit_file($tree_unit, $filename);
     my $tree_unit_filename = $tree_unit->{'structure'}->{'unit_filename'};
     $self->{'file_counters'}->{$tree_unit_filename} = 0
        if (!exists($self->{'file_counters'}->{$tree_unit_filename}));
@@ -7910,8 +7917,8 @@ sub _html_set_pages_files($$$$$$$$)
       my $filename
        = $self->{'targets'}->{$special_element}->{'special_element_filename'};
       if (defined($filename)) {
-        $self->set_tree_unit_file($special_element, $filename,
-                                  $destination_directory);
+        $filenames_paths{$filename} = undef;
+        $self->set_tree_unit_file($special_element, $filename);
         $self->{'file_counters'}->{$filename} = 0
            if (!exists($self->{'file_counters'}->{$filename}));
         $self->{'file_counters'}->{$filename}++;
@@ -7924,6 +7931,10 @@ sub _html_set_pages_files($$$$$$$$)
       $previous_tree_unit = $special_element;
     }
   }
+  foreach my $filename (keys(%filenames_paths)) {
+    $self->set_file_path($filename, $destination_directory,
+                         $filenames_paths{$filename});
+  }
 }
 
 # $ROOT is a parsed Texinfo tree.  Return a list of the "elements" we need to



reply via email to

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