[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 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.,
Patrice Dumas <=