texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * tp/Texinfo/Convert/NodeNameNormalization.pm (no


From: Patrice Dumas
Subject: branch master updated: * tp/Texinfo/Convert/NodeNameNormalization.pm (normalize_transliterate_texinfo, transliterate_texinfo): modify transliterate_texinfo such that it only transliterates but does not protect characters, and add normalize_transliterate_texinfo for the previous behaviour. Update callers.
Date: Fri, 23 Dec 2022 15:10:41 -0500

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 20ccdde244 * tp/Texinfo/Convert/NodeNameNormalization.pm 
(normalize_transliterate_texinfo, transliterate_texinfo): modify 
transliterate_texinfo such that it only transliterates but does not protect 
characters, and add normalize_transliterate_texinfo for the previous behaviour. 
 Update callers.
20ccdde244 is described below

commit 20ccdde2440daa37c976191c4abd444999c5a643
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Fri Dec 23 21:10:31 2022 +0100

    * tp/Texinfo/Convert/NodeNameNormalization.pm
    (normalize_transliterate_texinfo, transliterate_texinfo): modify
    transliterate_texinfo such that it only transliterates but does not
    protect characters, and add normalize_transliterate_texinfo for the
    previous behaviour.  Update callers.
    
    * tp/Texinfo/Convert/LaTeX.pm (_prepare_floats): transliterate the
    first float element type of a float type to set up the LaTeX float
    name to get more different categories when float type expands to
    non-ASCII characters.
    
    * tp/t/27float.t: expand LaTeX output for the float_with_at_commands
    test.
---
 ChangeLog                                    | 16 +++++++
 tp/Texinfo/Convert/Converter.pm              |  4 +-
 tp/Texinfo/Convert/HTML.pm                   |  2 +-
 tp/Texinfo/Convert/LaTeX.pm                  | 10 ++++-
 tp/Texinfo/Convert/NodeNameNormalization.pm  | 33 +++++++++++----
 tp/t/27float.t                               |  1 +
 tp/t/nodenormalization.t                     |  6 +--
 tp/t/results/float/float_with_at_commands.pl | 62 ++++++++++++++++++++++++++++
 8 files changed, 120 insertions(+), 14 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4e799dfa90..c16c9409b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2022-12-23  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/Convert/NodeNameNormalization.pm
+       (normalize_transliterate_texinfo, transliterate_texinfo): modify
+       transliterate_texinfo such that it only transliterates but does not
+       protect characters, and add normalize_transliterate_texinfo for the
+       previous behaviour.  Update callers.
+
+       * tp/Texinfo/Convert/LaTeX.pm (_prepare_floats): transliterate the
+       first float element type of a float type to set up the LaTeX float
+       name to get more different categories when float type expands to
+       non-ASCII characters.
+
+       * tp/t/27float.t: expand LaTeX output for the float_with_at_commands
+       test.
+
 2022-12-23  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/Convert/LaTeX.pm (_prepare_floats): fix type filtering
diff --git a/tp/Texinfo/Convert/Converter.pm b/tp/Texinfo/Convert/Converter.pm
index d7e1b06531..0c0ceece91 100644
--- a/tp/Texinfo/Convert/Converter.pm
+++ b/tp/Texinfo/Convert/Converter.pm
@@ -707,7 +707,7 @@ sub normalized_sectioning_command_filename($$)
                         and !$self->get_conf('USE_UNIDECODE'));
 
   my $normalized_name
-    = Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
+    = Texinfo::Convert::NodeNameNormalization::normalize_transliterate_texinfo(
          {'contents' => $command->{'args'}->[0]->{'contents'}},
                   $no_unidecode);
 
@@ -730,7 +730,7 @@ sub node_information_filename($$)
   my $filename;
   if (defined($node_info->{'normalized'})) {
     if ($self->get_conf('TRANSLITERATE_FILE_NAMES')) {
-      $filename = 
Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
+      $filename = 
Texinfo::Convert::NodeNameNormalization::normalize_transliterate_texinfo(
        {'contents' => $node_info->{'node_content'}},
             $no_unidecode);
     } else {
diff --git a/tp/Texinfo/Convert/HTML.pm b/tp/Texinfo/Convert/HTML.pm
index 38906f3ec2..c58e5b61fc 100644
--- a/tp/Texinfo/Convert/HTML.pm
+++ b/tp/Texinfo/Convert/HTML.pm
@@ -9016,7 +9016,7 @@ sub _prepare_index_entries($)
         my $trimmed_contents
           = Texinfo::Common::trim_spaces_comment_from_content(\@contents);
         my $normalized_index =
-          Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
+          
Texinfo::Convert::NodeNameNormalization::normalize_transliterate_texinfo(
             {'contents' => \@contents}, $no_unidecode);
         my $target_base = "index-" . $region .$normalized_index;
         my $nr=1;
diff --git a/tp/Texinfo/Convert/LaTeX.pm b/tp/Texinfo/Convert/LaTeX.pm
index 34730c1ded..74f496e778 100644
--- a/tp/Texinfo/Convert/LaTeX.pm
+++ b/tp/Texinfo/Convert/LaTeX.pm
@@ -891,7 +891,15 @@ sub _prepare_floats($)
     $self->{'normalized_float_latex'} = {};
     $self->{'latex_floats'} = {};
     foreach my $normalized_float_type (sort(keys(%{$self->{'floats'}}))) {
-      my $latex_variable_float_name = $normalized_float_type;
+      my $latex_variable_float_name;
+      if (scalar(@{$self->{'floats'}->{$normalized_float_type}})) {
+        my $float = $self->{'floats'}->{$normalized_float_type}->[0];
+        $latex_variable_float_name
+          = Texinfo::Convert::NodeNameNormalization::transliterate_texinfo(
+           {'contents' => $float->{'args'}->[0]->{'contents'}});
+      } else {
+        $latex_variable_float_name = $normalized_float_type;
+      }
       # note that with that transformation, some float types
       # may be put together
       $latex_variable_float_name =~ s/[^a-zA-Z]//g;
diff --git a/tp/Texinfo/Convert/NodeNameNormalization.pm 
b/tp/Texinfo/Convert/NodeNameNormalization.pm
index 7024ff0555..c588abb6c4 100644
--- a/tp/Texinfo/Convert/NodeNameNormalization.pm
+++ b/tp/Texinfo/Convert/NodeNameNormalization.pm
@@ -50,6 +50,7 @@ use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
 
 %EXPORT_TAGS = ( 'all' => [ qw(
   normalize_node
+  normalize_transliterate_texinfo
   transliterate_texinfo
   transliterate_protect_file_name
 ) ] );
@@ -98,7 +99,7 @@ sub normalize_node($)
   return $result;
 }
 
-sub transliterate_texinfo($;$)
+sub normalize_transliterate_texinfo($;$)
 {
   my $root = shift;
   my $no_unidecode = shift;
@@ -109,6 +110,16 @@ sub transliterate_texinfo($;$)
   return $result;
 }
 
+sub transliterate_texinfo($;$)
+{
+  my $root = shift;
+  my $no_unidecode = shift;
+  my $result = _convert($root);
+  $result = Unicode::Normalize::NFC($result);
+  $result = _unicode_to_transliterate($result, $no_unidecode);
+  return $result;
+}
+
 sub transliterate_protect_file_name($;$)
 {
   my $input_text = shift;
@@ -206,7 +217,7 @@ sub _unicode_to_transliterate($;$)
       # in this case, we want to avoid calling unidecode, as we are sure
       # that there is no useful transliteration of the unicode character
       # instead we want to keep it as is.
-      # This is the case, for example, for @exclamdown, is corresponds
+      # This is the case, for example, for @exclamdown, it corresponds
       # with x00a1, but unidecode transliterates it to a !, we want
       # to avoid that and keep x00a1.
       } elsif (ord($char) <= hex(0xFFFF)
@@ -455,11 +466,11 @@ Texinfo::Convert::NodeNameNormalization - Normalize and 
transliterate Texinfo tr
 =head1 SYNOPSIS
 
   use Texinfo::Convert::NodeNameNormalization qw(normalize_node
-                                              transliterate_texinfo);
+                                              normalize_transliterate_texinfo);
 
   my $normalized = normalize_node({'contents' => $node_contents});
 
-  my $file_name = transliterate_texinfo({'contents'
+  my $file_name = normalize_transliterate_texinfo({'contents'
                                             => $section_contents});
 
 =head1 NOTES
@@ -478,7 +489,7 @@ for C<@node>, C<@float> and C<@anchor> names normalization, 
but also C<@float>
 types and C<@acronym> and C<@abbr> first argument.
 
 It is also possible to transliterate non-ASCII letters, instead of mangling
-them, with C<transliterate_texinfo>, losing the uniqueness feature of
+them, with C<normalize_transliterate_texinfo>, losing the uniqueness feature of
 normalized node names.
 
 Another method, C<transliterate_protect_file_name> transliterates non-ASCII
@@ -506,14 +517,22 @@ The result will be poor for Texinfo trees which are not 
@-command arguments
 (on an @-command line or in braces), for instance if the tree contains
 C<@node> or block commands.
 
-=item $transliterated = transliterate_texinfo($tree, $no_unidecode)
-X<C<transliterate_texinfo>>
+=item $transliterated = normalize_transliterate_texinfo($tree, $no_unidecode)
+X<C<normalize_transliterate_texinfo>>
 
 The Texinfo I<$tree> is returned as a string, with non-ASCII letters
 transliterated as ASCII, but otherwise similar with C<normalize_node>
 output.  If the optional I<$no_unidecode> argument is set, C<Text::Unidecode>
 is not used for characters whose transliteration is not built-in.
 
+=item $transliterated = transliterate_texinfo($tree, $no_unidecode)
+X<C<transliterate_texinfo>>
+
+The Texinfo I<$tree> is returned as a string, with non-ASCII letters
+transliterated as ASCII.  If the optional I<$no_unidecode> argument is set,
+C<Text::Unidecode> is not used for characters whose transliteration is not
+built-in.
+
 =item $file_name = transliterate_protect_file_name($string, $no_unidecode)
 X<C<transliterate_protect_file_name>>
 
diff --git a/tp/t/27float.t b/tp/t/27float.t
index c5ba2fc06c..22926db03d 100644
--- a/tp/t/27float.t
+++ b/tp/t/27float.t
@@ -588,6 +588,7 @@ my %info_tests = (
 my %latex_tests = (
   'float_in_block_commands' => 1,
   'special_characters_in_float_type' => 1,
+  'float_with_at_commands' => 1,
 );
 
 foreach my $test (@test_cases) {
diff --git a/tp/t/nodenormalization.t b/tp/t/nodenormalization.t
index 204a07b54c..7574164fd5 100644
--- a/tp/t/nodenormalization.t
+++ b/tp/t/nodenormalization.t
@@ -11,7 +11,7 @@ use Data::Dumper;
 use Locale::Messages;
 
 use Texinfo::Convert::Texinfo;
-use Texinfo::Convert::NodeNameNormalization qw(normalize_node 
transliterate_texinfo);
+use Texinfo::Convert::NodeNameNormalization qw(normalize_node 
normalize_transliterate_texinfo);
 use Texinfo::Parser;
 
 my $srcdir = $ENV{'srcdir'};
@@ -165,11 +165,11 @@ SKIP: {
   is ($normalized_line,
   
'-A-SC-accents-_00ef-_00ef-_1e14-_0142-_1e08-_0146_0303_0304-_0155_030c-_0129_0304-_00ff-_0131-_0237-_00c7-_0118-_1ea1-a_0361-_0227-characters-_0142-_00a1-_00e5-_0153-_002c-error_002d_002d_003e-_2026-_002e_002e_002e-no-brace-commands-_0040-_002e-_007d-signs-_002d_002d-_002d_002d_002d-_0060_0060-_0027_0027-_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e-_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e-spaces-_00a0_2003_2002_0085_180e-',
   'normalized complex line');
-  my $transliterated_line = transliterate_texinfo($line_tree);
+  my $transliterated_line = normalize_transliterate_texinfo($line_tree);
   is ($transliterated_line,
   
'-A-SC-accents-i-i-E-l-C-n-r-i-y-i-j-C-E-a-a-a-characters-l-_00a1-aa-oe-_002c-error_002d_002d_003e-_2026-_002e_002e_002e-no-brace-commands-_0040-_002e-_007d-signs-_002d_002d-_002d_002d_002d-_0060_0060-_0027_0027-_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e-_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e-spaces-',
   'transliterated complex line');
-  my $transliterated_line_no_unidecode = transliterate_texinfo($line_tree, 1);
+  my $transliterated_line_no_unidecode = 
normalize_transliterate_texinfo($line_tree, 1);
   is ($transliterated_line_no_unidecode,
 
'-A-SC-accents-i-i-_1e14-l-_1e08-n-r-i-y-i-j-C-E-a-a-a-characters-l-_00a1-aa-oe-_002c-error_002d_002d_003e-_2026-_002e_002e_002e-no-brace-commands-_0040-_002e-_007d-signs-_002d_002d-_002d_002d_002d-_0060_0060-_0027_0027-_0021_005f_0022_0023_0024_0025_0026_0027_0028_0029_002a_002b_002d_002e-_002f_003b_003c_003d_003e_003f_005b_005c_005d_005e_005f_0060_007c_007e-spaces-_00a0_2003_2002_0085_180e-',
   'transliterated complex line no unidecode');
diff --git a/tp/t/results/float/float_with_at_commands.pl 
b/tp/t/results/float/float_with_at_commands.pl
index f3dda7fea3..cc6beb092c 100644
--- a/tp/t/results/float/float_with_at_commands.pl
+++ b/tp/t/results/float/float_with_at_commands.pl
@@ -509,4 +509,66 @@ $result_converted{'xml'}->{'float_with_at_commands'} = 
'<float name="premi_00e8r
 <listoffloats type="entrée" spaces=" ">entr<accent type="acute" 
bracketed="off">e</accent>e</listoffloats>
 ';
 
+
+$result_converted{'latex'}->{'float_with_at_commands'} = '\\documentclass{book}
+\\usepackage{amsfonts}
+\\usepackage{amsmath}
+\\usepackage[gen]{eurosym}
+\\usepackage{textcomp}
+\\usepackage{graphicx}
+\\usepackage{etoolbox}
+\\usepackage{titleps}
+\\usepackage[utf8]{inputenc}
+\\usepackage[T1]{fontenc}
+\\usepackage{float}
+% use hidelinks to remove boxes around links to be similar to Texinfo TeX
+\\usepackage[hidelinks]{hyperref}
+
+\\makeatletter
+\\newcommand{\\Texinfosettitle}{No Title}%
+
+% new float for type `entrée\'
+\\newfloat{TexinfoFloatentree}{htb}{tfl}[chapter]
+\\floatname{TexinfoFloatentree}{}
+% redefine the \\mainmatter command such that it does not clear page
+% as if in double page
+\\renewcommand\\mainmatter{\\clearpage\\@mainmattertrue\\pagenumbering{arabic}}
+\\newenvironment{Texinfopreformatted}{%
+  
\\par\\GNUTobeylines\\obeyspaces\\frenchspacing\\parskip=\\z@\\parindent=\\z@}{}
+{\\catcode`\\^^M=13 \\gdef\\GNUTobeylines{\\catcode`\\^^M=13 
\\def^^M{\\null\\par}}}
+\\newenvironment{Texinfoindented}{\\begin{list}{}{}\\item\\relax}{\\end{list}}
+
+% used for substitutions in commands
+\\newcommand{\\Texinfoplaceholder}[1]{}
+
+\\newpagestyle{single}{\\sethead[\\chaptername{} \\thechapter{} 
\\chaptertitle{}][][\\thepage]
+                              {\\chaptername{} \\thechapter{} 
\\chaptertitle{}}{}{\\thepage}}
+
+% allow line breaking at underscore
+\\let\\Texinfounderscore\\_
+\\renewcommand{\\_}{\\Texinfounderscore\\discretionary{}{}{}}
+\\renewcommand{\\includegraphics}[1]{\\fbox{FIG \\detokenize{#1}}}
+
+\\makeatother
+% set default for @setchapternewpage
+\\makeatletter
+\\patchcmd{\\chapter}{\\if@openright\\cleardoublepage\\else\\clearpage\\fi}{\\Texinfoplaceholder{setchapternewpage
 placeholder}\\clearpage}{}{}
+\\makeatother
+\\pagestyle{single}%
+
+\\begin{document}
+\\begin{TexinfoFloatentree}
+
+Ceci est notre premi\\`{e}re entr\\\'{e}e.
+\\caption{La premi\\`{e}re entr\\\'{e}e est importante}
+
+
+\\label{anchor:premi_00e8re-entr_00e9e}%
+\\end{TexinfoFloatentree}
+
+
+\\listof{TexinfoFloatentree}{}
+\\end{document}
+';
+
 1;



reply via email to

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