texinfo-commits
[Top][All Lists]
Advanced

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

branch master updated: * tp/Texinfo/Convert/HTML.pm (converter_initializ


From: Patrice Dumas
Subject: branch master updated: * tp/Texinfo/Convert/HTML.pm (converter_initialize): setup %customized_accent_entities with all the customized commands before filling accent_entities.
Date: Wed, 02 Oct 2024 06:22:51 -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 e054a765f5 * tp/Texinfo/Convert/HTML.pm (converter_initialize): setup 
%customized_accent_entities with all the customized commands before filling 
accent_entities.
e054a765f5 is described below

commit e054a765f5aad9563ab087f4698ee02e9d748ed6
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Wed Jul 31 14:25:16 2024 +0200

    * tp/Texinfo/Convert/HTML.pm (converter_initialize): setup
    %customized_accent_entities with all the customized commands before
    filling accent_entities.
    
    * tp/Texinfo/XS/convert/converter.c (xml_accent_text_entities),
    tp/Texinfo/XS/main/converter_types.h (COMMAND_ACCENT_ENTITY_INFO):
    setup xml_accent_text_entities defaults.
    
    * tp/Texinfo/Convert/HTML.pm (converter_initialize),
    tp/Texinfo/XS/convert/ConvertXS.xs (html_converter_initialize_sv),
    tp/Texinfo/XS/convert/convert_html.c (html_converter_initialize)
    (html_free_converter), tp/Texinfo/XS/convert/get_html_perl_info.c
    (html_converter_initialize_sv), tp/Texinfo/XS/main/converter_types.h
    (CONVERTER): add html_customized_accent_entity_info field to
    CONVERTER, with type COMMAND_ACCENT_ENTITY_INFO.  Pass
    customized_accent_entities from Perl to C through
    html_converter_initialize_sv.  Set self->accent_entities in
    html_converter_initialize based on xml_accent_text_entities, with
    customized values added.  Do not get accent_entities from Perl
    anymore.
---
 ChangeLog                                  | 23 ++++++++++++++
 tp/Texinfo/Convert/HTML.pm                 | 25 +++++++++++++--
 tp/Texinfo/XS/convert/ConvertXS.xs         |  3 +-
 tp/Texinfo/XS/convert/convert_html.c       | 51 ++++++++++++++++++++++++++++++
 tp/Texinfo/XS/convert/converter.c          | 19 +++++++++++
 tp/Texinfo/XS/convert/converter.h          |  2 ++
 tp/Texinfo/XS/convert/get_html_perl_info.c | 25 +++++++++++----
 tp/Texinfo/XS/convert/get_html_perl_info.h |  1 +
 tp/Texinfo/XS/main/converter_types.h       |  6 ++++
 9 files changed, 144 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5ae93d4e39..f00f968b09 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2024-07-31  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/Convert/HTML.pm (converter_initialize): setup
+       %customized_accent_entities with all the customized commands before
+       filling accent_entities.
+
+       * tp/Texinfo/XS/convert/converter.c (xml_accent_text_entities),
+       tp/Texinfo/XS/main/converter_types.h (COMMAND_ACCENT_ENTITY_INFO):
+       setup xml_accent_text_entities defaults.
+
+       * tp/Texinfo/Convert/HTML.pm (converter_initialize),
+       tp/Texinfo/XS/convert/ConvertXS.xs (html_converter_initialize_sv),
+       tp/Texinfo/XS/convert/convert_html.c (html_converter_initialize)
+       (html_free_converter), tp/Texinfo/XS/convert/get_html_perl_info.c
+       (html_converter_initialize_sv), tp/Texinfo/XS/main/converter_types.h
+       (CONVERTER): add html_customized_accent_entity_info field to
+       CONVERTER, with type COMMAND_ACCENT_ENTITY_INFO.  Pass
+       customized_accent_entities from Perl to C through
+       html_converter_initialize_sv.  Set self->accent_entities in
+       html_converter_initialize based on xml_accent_text_entities, with
+       customized values added.  Do not get accent_entities from Perl
+       anymore.
+
 2024-07-31  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/XS/main/command_data.awk: rename CM_POUND_SIGN as
diff --git a/tp/Texinfo/Convert/HTML.pm b/tp/Texinfo/Convert/HTML.pm
index bf9276fafc..56aaecca5d 100644
--- a/tp/Texinfo/Convert/HTML.pm
+++ b/tp/Texinfo/Convert/HTML.pm
@@ -8745,7 +8745,7 @@ my %special_characters = (
   'non_breaking_space' => [$xml_named_entity_nbsp, '00A0'],
 );
 
-sub _XS_html_converter_initialize($$$$$$$$$$$$$$$)
+sub _XS_html_converter_initialize($$$$$$$$$$$$$$$$)
 {
 }
 
@@ -8897,12 +8897,30 @@ sub converter_initialize($)
     }
   }
 
-  $self->{'accent_entities'} = {};
+  my %customized_accent_entities;
+
   foreach my $accent_command
      (keys(%Texinfo::Convert::Converter::xml_accent_entities)) {
-    $self->{'accent_entities'}->{$accent_command} = [];
     my ($accent_command_entity, $accent_command_text_with_entities)
       = Texinfo::Config::GNUT_get_accent_command_formatting($accent_command);
+    if (defined($accent_command_entity)
+        or defined($accent_command_text_with_entities)) {
+      $customized_accent_entities{$accent_command} = [$accent_command_entity,
+                                           $accent_command_text_with_entities];
+    }
+  }
+
+  $self->{'accent_entities'} = {};
+  foreach my $accent_command
+     (keys(%Texinfo::Convert::Converter::xml_accent_entities)) {
+    $self->{'accent_entities'}->{$accent_command} = [];
+
+    my ($accent_command_entity, $accent_command_text_with_entities);
+    if ($customized_accent_entities{$accent_command}) {
+      ($accent_command_entity, $accent_command_text_with_entities)
+        = @{$customized_accent_entities{$accent_command}};
+    }
+
     if (not defined($accent_command_entity)
         and 
defined($Texinfo::Convert::Converter::xml_accent_text_with_entities{
                                                               
$accent_command})) {
@@ -9129,6 +9147,7 @@ sub converter_initialize($)
                              \%defaults_format_special_unit_body_contents,
                              $customized_upper_case_commands,
                              $customized_type_formatting,
+                             \%customized_accent_entities,
                              $customized_special_unit_info,
                              $customized_direction_strings
                             );
diff --git a/tp/Texinfo/XS/convert/ConvertXS.xs 
b/tp/Texinfo/XS/convert/ConvertXS.xs
index 53f041c3a0..3ad38615fd 100644
--- a/tp/Texinfo/XS/convert/ConvertXS.xs
+++ b/tp/Texinfo/XS/convert/ConvertXS.xs
@@ -579,7 +579,7 @@ void
 html_format_setup ()
 
 void
-html_converter_initialize_sv (SV *converter_in, SV 
*default_formatting_references, SV *default_css_string_formatting_references, 
SV *default_commands_open, SV *default_commands_conversion, SV 
*default_css_string_commands_conversion, SV *default_types_open, SV 
*default_types_conversion, SV *default_css_string_types_conversion, SV 
*default_output_units_conversion, SV *default_special_unit_body, SV 
*customized_upper_case_commands, SV *customized_type_formatting, SV 
*customized_special_unit_ [...]
+html_converter_initialize_sv (SV *converter_in, SV 
*default_formatting_references, SV *default_css_string_formatting_references, 
SV *default_commands_open, SV *default_commands_conversion, SV 
*default_css_string_commands_conversion, SV *default_types_open, SV 
*default_types_conversion, SV *default_css_string_types_conversion, SV 
*default_output_units_conversion, SV *default_special_unit_body, SV 
*customized_upper_case_commands, SV *customized_type_formatting, SV 
*customized_accent_entiti [...]
       PREINIT:
         CONVERTER *self;
       CODE:
@@ -606,6 +606,7 @@ html_converter_initialize_sv (SV *converter_in, SV 
*default_formatting_reference
                           default_special_unit_body,
                           customized_upper_case_commands,
                           customized_type_formatting,
+                          customized_accent_entities,
                           customized_direction_strings);
 
 
diff --git a/tp/Texinfo/XS/convert/convert_html.c 
b/tp/Texinfo/XS/convert/convert_html.c
index dceedd562b..d3afe125fe 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -17497,6 +17497,44 @@ html_converter_initialize (CONVERTER *self)
         }
     }
 
+  for (i = 0; xml_accent_text_entities[i].cmd; i++)
+    {
+      enum command_id cmd = xml_accent_text_entities[i].cmd;
+      const ACCENT_ENTITY_INFO *xml_accent_info
+        = &xml_accent_text_entities[i].accent_entity_info;
+      ACCENT_ENTITY_INFO *accent_info = &self->accent_entities[cmd];
+
+      if (xml_accent_info->entity)
+        accent_info->entity = strdup (xml_accent_info->entity);
+      if (xml_accent_info->characters)
+        accent_info->characters = strdup (xml_accent_info->characters);
+    }
+
+  if (self->html_customized_accent_entity_info)
+    {
+      for (i = 0; self->html_customized_accent_entity_info[i].cmd; i++)
+        {
+          enum command_id cmd = 
self->html_customized_accent_entity_info[i].cmd;
+          const ACCENT_ENTITY_INFO *custom_accent_info
+            = &self->html_customized_accent_entity_info[i].accent_entity_info;
+          ACCENT_ENTITY_INFO *accent_info = &self->accent_entities[cmd];
+
+          if (custom_accent_info->entity)
+            {
+              free (accent_info->entity);
+              if (strlen (custom_accent_info->entity))
+                accent_info->entity = strdup (custom_accent_info->entity);
+              else
+                accent_info->entity = 0;
+            }
+          if (custom_accent_info->characters)
+            {
+              free (accent_info->characters);
+              accent_info->characters = strdup 
(custom_accent_info->characters);
+            }
+        }
+    }
+
   self->direction_unit_direction_name = (const char **) malloc
      ((nr_special_units + NON_SPECIAL_DIRECTIONS_NR +1) * sizeof (char *));
   memcpy (self->direction_unit_direction_name, html_button_direction_names,
@@ -19731,6 +19769,19 @@ html_free_converter (CONVERTER *self)
       self->html_customized_pre_class_types = 0;
     }
 
+  if (self->html_customized_accent_entity_info)
+    {
+      for (i = 0; self->html_customized_accent_entity_info[i].cmd; i++)
+        {
+          ACCENT_ENTITY_INFO *accent_info
+            = &self->html_customized_accent_entity_info[i].accent_entity_info;
+          free (accent_info->entity);
+          free (accent_info->characters);
+        }
+      free (self->html_customized_accent_entity_info);
+      self->html_customized_accent_entity_info = 0;
+    }
+
   /* should be freed on exit.
   free (no_arg_formatted_cmd.list);
    */
diff --git a/tp/Texinfo/XS/convert/converter.c 
b/tp/Texinfo/XS/convert/converter.c
index f8de5a3256..63e3d34409 100644
--- a/tp/Texinfo/XS/convert/converter.c
+++ b/tp/Texinfo/XS/convert/converter.c
@@ -75,6 +75,25 @@ enum command_id default_upper_case_commands[] = {
   CM_sc, 0,
 };
 
+/* In sync with Convert/Converter.pm %xml_accent_entities and
+   %xml_accent_text_with_entities */
+COMMAND_ACCENT_ENTITY_INFO xml_accent_text_entities[] = {
+  {CM_DOUBLE_QUOTE,  {"uml",   "aeiouyAEIOU"}},
+  {CM_TILDE,         {"tilde", "nNaoAO"}},
+  {CM_CIRCUMFLEX,    {"circ",  "aeiouAEIOU"}},
+  {CM_BACKQUOTE,     {"grave", "aeiouAEIOU"}},
+  {CM_APOSTROPHE,    {"acute", "aeiouyAEIOUY"}},
+  {CM_COMMA,         {"cedil", "cC"}},
+  {CM_ringaccent,    {"ring",  "aA"}},
+/* according to http://www2.lib.virginia.edu/small/vhp/download/ISO.txt
+   however this doesn't seems to work in firefox
+   ogonek:  "aeiuAEIU"
+ */
+  {CM_ogonek,        {"ogon",  0}},
+  {CM_dotless,       {"nodot", "i"}},
+  {0,                {0,       0}}
+};
+
 static CONVERTER **converter_list;
 static size_t converter_number;
 static size_t converter_space;
diff --git a/tp/Texinfo/XS/convert/converter.h 
b/tp/Texinfo/XS/convert/converter.h
index 3f33ae9926..1d6591c213 100644
--- a/tp/Texinfo/XS/convert/converter.h
+++ b/tp/Texinfo/XS/convert/converter.h
@@ -98,6 +98,8 @@ extern const char * xml_text_entity_no_arg_commands[];
 /* in converter.c */
 extern const char *xml_text_entity_no_arg_commands_formatting[];
 
+extern COMMAND_ACCENT_ENTITY_INFO xml_accent_text_entities[];
+
 extern PATHS_INFORMATION conversion_paths_info;
 
 void converter_setup (void);
diff --git a/tp/Texinfo/XS/convert/get_html_perl_info.c 
b/tp/Texinfo/XS/convert/get_html_perl_info.c
index 8cf7ebaf52..771b068028 100644
--- a/tp/Texinfo/XS/convert/get_html_perl_info.c
+++ b/tp/Texinfo/XS/convert/get_html_perl_info.c
@@ -227,6 +227,7 @@ html_converter_initialize_sv (SV *converter_sv,
                               SV *default_special_unit_body,
                               SV *customized_upper_case_commands,
                               SV *customized_type_formatting,
+                              SV *customized_accent_entities,
                               SV *customized_direction_strings
                              )
 {
@@ -243,7 +244,6 @@ html_converter_initialize_sv (SV *converter_sv,
   HV *default_output_units_conversion_hv;
   SV **htmlxref_sv;
   SV **formatting_function_sv;
-  SV **accent_entities_sv;
   SV **style_commands_formatting_sv;
   SV **stage_handlers_sv;
   SV **special_unit_body_sv;
@@ -436,19 +436,23 @@ html_converter_initialize_sv (SV *converter_sv,
         }
     }
 
-#define FETCH(key) key##_sv = hv_fetch (converter_hv, #key, strlen (#key), 0);
-  FETCH(accent_entities)
-
-  if (accent_entities_sv)
+  if (customized_accent_entities && SvOK (customized_accent_entities))
     {
       I32 hv_number;
       I32 i;
+      int cmd_idx = 0;
 
       HV *accent_entities_hv
-        = (HV *)SvRV (*accent_entities_sv);
+        = (HV *)SvRV (customized_accent_entities);
 
       hv_number = hv_iterinit (accent_entities_hv);
 
+      converter->html_customized_accent_entity_info
+        = (COMMAND_ACCENT_ENTITY_INFO *) malloc ((hv_number + 1)
+                                  * sizeof (COMMAND_ACCENT_ENTITY_INFO));
+      memset (converter->html_customized_accent_entity_info, 0,
+              (hv_number + 1) * sizeof (COMMAND_ACCENT_ENTITY_INFO));
+
       for (i = 0; i < hv_number; i++)
         {
           char *cmdname;
@@ -462,12 +466,17 @@ html_converter_initialize_sv (SV *converter_sv,
                 fprintf (stderr, "ERROR: %s: no accent command\n", cmdname);
               else
                 {
+                  COMMAND_ACCENT_ENTITY_INFO *cmd_accent_info
+                    = &converter->html_customized_accent_entity_info[cmd_idx];
                   ACCENT_ENTITY_INFO *accent_info
-                    = &converter->accent_entities[cmd];
+                    = &cmd_accent_info->accent_entity_info;
+
                   AV *spec_av = (AV *)SvRV (spec_sv);
                   SV **entity_sv = av_fetch (spec_av, 0, 0);
                   SV **characters_sv = av_fetch (spec_av, 1, 0);
 
+                  cmd_accent_info->cmd = cmd;
+
                   if (entity_sv)
                     {
                       char *entity = (char *) SvPVutf8_nolen (*entity_sv);
@@ -481,12 +490,14 @@ html_converter_initialize_sv (SV *converter_sv,
                       if (strlen (characters))
                         accent_info->characters = non_perl_strdup (characters);
                     }
+                  cmd_idx++;
                 }
             }
         }
     }
 
 
+#define FETCH(key) key##_sv = hv_fetch (converter_hv, #key, strlen (#key), 0);
   FETCH(style_commands_formatting)
 
   if (style_commands_formatting_sv)
diff --git a/tp/Texinfo/XS/convert/get_html_perl_info.h 
b/tp/Texinfo/XS/convert/get_html_perl_info.h
index f73c15a9cd..0b56cc38f7 100644
--- a/tp/Texinfo/XS/convert/get_html_perl_info.h
+++ b/tp/Texinfo/XS/convert/get_html_perl_info.h
@@ -24,6 +24,7 @@ void html_converter_initialize_sv (SV *converter_sv,
                                   SV *default_special_unit_body,
                                   SV *customized_upper_case_commands,
                                   SV *customized_type_formatting,
+                                  SV *customized_accent_entities,
                                   SV *customized_direction_strings
                                   );
 
diff --git a/tp/Texinfo/XS/main/converter_types.h 
b/tp/Texinfo/XS/main/converter_types.h
index a3597f9678..9c82f68171 100644
--- a/tp/Texinfo/XS/main/converter_types.h
+++ b/tp/Texinfo/XS/main/converter_types.h
@@ -560,6 +560,11 @@ typedef struct ACCENT_ENTITY_INFO {
     char *characters;
 } ACCENT_ENTITY_INFO;
 
+typedef struct COMMAND_ACCENT_ENTITY_INFO {
+    enum command_id cmd;
+    ACCENT_ENTITY_INFO accent_entity_info;
+} COMMAND_ACCENT_ENTITY_INFO;
+
 typedef struct COMMAND_CONVERSION_FUNCTION {
     enum formatting_reference_status status;
     /* points to the perl formatting reference if it is used for
@@ -827,6 +832,7 @@ typedef struct CONVERTER {
     HTML_NO_ARG_COMMAND_CONVERSION 
*customized_no_arg_commands_formatting[BUILTIN_CMD_NUMBER][NO_ARG_COMMAND_CONTEXT_NR];
     char ***customized_directions_strings[(TDS_TYPE_MAX_NR) - 
(TDS_TRANSLATED_MAX_NR)];
     PRE_CLASS_TYPE_INFO *html_customized_pre_class_types;
+    COMMAND_ACCENT_ENTITY_INFO *html_customized_accent_entity_info;
     HTML_STYLE_COMMAND_CONVERSION 
html_style_command_conversion[BUILTIN_CMD_NUMBER][STYLE_COMMAND_CONTEXT_NR];
     /* set for a converter, modified in a document */
     HTML_NO_ARG_COMMAND_CONVERSION 
html_no_arg_command_conversion[BUILTIN_CMD_NUMBER][NO_ARG_COMMAND_CONTEXT_NR];



reply via email to

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