texinfo-commits
[Top][All Lists]
Advanced

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

[no subject]


From: Patrice Dumas
Date: Sun, 29 Sep 2024 18:10:30 -0400 (EDT)

branch: master
commit c4ad1e732e9fbde0c55522b76b40748bcea4541c
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Thu Jul 18 11:33:51 2024 +0200

    * tp/Texinfo/XS/convert/convert_html.c (html_prepare_css): initialize
    css_import_lines and css_rule_lines only if there are css files, from
    valgrind.
    
    * tp/Texinfo/XS/convert/get_html_perl_info.c
    (html_converter_initialize_sv): initialize stage handlers only if
    there is at least one.
    
    * tp/Texinfo/Convert/HTML.pm (_XS_html_converter_initialize)
    (converter_initialize), tp/Texinfo/XS/convert/ConvertXS.xs
    (html_converter_initialize_sv), tp/Texinfo/XS/convert/convert_html.c
    (html_free_converter), tp/Texinfo/XS/convert/get_html_perl_info.c
    (html_converter_initialize_sv), tp/Texinfo/XS/main/converter_types.h
    (CONVERTER): pass default_converted_directions_strings to perl, to
    default_converted_directions_strings in converter.
---
 ChangeLog                                  |  18 +++
 tp/Texinfo/Convert/HTML.pm                 |  10 +-
 tp/Texinfo/XS/convert/ConvertXS.xs         |   2 +-
 tp/Texinfo/XS/convert/convert_html.c       |  37 ++++--
 tp/Texinfo/XS/convert/get_html_perl_info.c | 194 +++++++++++++++++++----------
 tp/Texinfo/XS/convert/get_html_perl_info.h |   4 +-
 tp/Texinfo/XS/main/converter_types.h       |   1 +
 7 files changed, 183 insertions(+), 83 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 34fb0ba2a7..f6474cbc7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2024-07-18  Patrice Dumas  <pertusus@free.fr>
+
+       * tp/Texinfo/XS/convert/convert_html.c (html_prepare_css): initialize
+       css_import_lines and css_rule_lines only if there are css files, from
+       valgrind.
+
+       * tp/Texinfo/XS/convert/get_html_perl_info.c
+       (html_converter_initialize_sv): initialize stage handlers only if
+       there is at least one.
+
+       * tp/Texinfo/Convert/HTML.pm (_XS_html_converter_initialize)
+       (converter_initialize), tp/Texinfo/XS/convert/ConvertXS.xs
+       (html_converter_initialize_sv), tp/Texinfo/XS/convert/convert_html.c
+       (html_free_converter), tp/Texinfo/XS/convert/get_html_perl_info.c
+       (html_converter_initialize_sv), tp/Texinfo/XS/main/converter_types.h
+       (CONVERTER): pass default_converted_directions_strings to perl, to
+       default_converted_directions_strings in converter.
+
 2024-07-18  Patrice Dumas  <pertusus@free.fr>
 
        * tp/Texinfo/XS/convert/converter.c (determine_files_and_directory):
diff --git a/tp/Texinfo/Convert/HTML.pm b/tp/Texinfo/Convert/HTML.pm
index e46de61f1f..aacf56510f 100644
--- a/tp/Texinfo/Convert/HTML.pm
+++ b/tp/Texinfo/Convert/HTML.pm
@@ -293,7 +293,8 @@ my %XS_conversion_overrides = (
    => "Texinfo::Convert::ConvertXS::html_node_redirections",
 );
 
-# XS initialization independent of customization
+# XS initialization independent of customization and of Perl
+# variables setup.
 sub _XS_format_setup()
 {
 }
@@ -9100,7 +9101,7 @@ my %special_characters = (
   'non_breaking_space' => [$xml_named_entity_nbsp, '00A0'],
 );
 
-sub _XS_html_converter_initialize($$$$$$$$$$$$)
+sub _XS_html_converter_initialize($$$$$$$$$$$$$)
 {
 }
 
@@ -9479,6 +9480,7 @@ sub converter_initialize($)
       $self->{'sorted_special_unit_varieties'}
         = [sort(keys(%all_special_unit_varieties))];
     }
+
     _XS_html_converter_initialize($self,
                              \%default_formatting_references,
                              \%default_css_string_formatting_references,
@@ -9490,7 +9492,9 @@ sub converter_initialize($)
                              \%default_css_string_types_conversion,
                              \%default_output_units_conversion,
                              \%defaults_format_special_unit_body_contents,
-                             \%default_css_element_class_styles);
+                             \%default_css_element_class_styles,
+                             \%default_converted_directions_strings
+                            );
     delete $self->{'sorted_special_unit_varieties'};
     delete $self->{'simplified_special_unit_info'};
   }
diff --git a/tp/Texinfo/XS/convert/ConvertXS.xs 
b/tp/Texinfo/XS/convert/ConvertXS.xs
index bd5cf3749a..16e0283fbb 100644
--- a/tp/Texinfo/XS/convert/ConvertXS.xs
+++ b/tp/Texinfo/XS/convert/ConvertXS.xs
@@ -558,7 +558,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 
*default_css_element_class_styles)
+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 
*default_css_element_class_styles, SV *default_converted_directions_strings)
 
 void
 html_initialize_output_state (SV *converter_in, char *context)
diff --git a/tp/Texinfo/XS/convert/convert_html.c 
b/tp/Texinfo/XS/convert/convert_html.c
index 64bec1d55a..a28ee9cdad 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -17986,14 +17986,14 @@ html_prepare_css (CONVERTER *self)
   if (self->conf->NO_CSS.o.integer > 0)
     return;
 
-  css_import_lines = new_string_list ();
-  css_rule_lines = new_string_list ();
-
   css_files = self->conf->CSS_FILES.o.strlist;
 
   if (!css_files || css_files->number <= 0)
     return;
 
+  css_import_lines = new_string_list ();
+  css_rule_lines = new_string_list ();
+
   for (i = 0; i < css_files->number; i++)
     {
       FILE *css_file_fh;
@@ -18597,16 +18597,6 @@ html_free_converter (CONVERTER *self)
         }
     }
 
-  for (i = 0; i < SUI_type_heading+1; i++)
-    {
-      int k;
-      for (k = 0; k < self->special_unit_varieties.number; k++)
-        {
-          free (self->special_unit_info[i][k]);
-        }
-      free (self->special_unit_info[i]);
-    }
-
   for (i = 0; i < TDS_TYPE_MAX_NR; i++)
     {
       int j;
@@ -18648,6 +18638,27 @@ html_free_converter (CONVERTER *self)
     }
   free (self->htmlxref.list);
 
+  for (i = 0; i < (TDS_TYPE_MAX_NR) - (TDS_TRANSLATED_MAX_NR); i++)
+    {
+      int j;
+
+      for (j = 0; j < nr_string_directions; j++)
+        {
+          free (self->default_converted_directions_strings[i][j]);
+        }
+      free (self->default_converted_directions_strings[i]);
+    }
+
+  for (i = 0; i < SUI_type_heading+1; i++)
+    {
+      int k;
+      for (k = 0; k < self->special_unit_varieties.number; k++)
+        {
+          free (self->special_unit_info[i][k]);
+        }
+      free (self->special_unit_info[i]);
+    }
+
   /* should be freed on exit.
   free (no_arg_formatted_cmd.list);
    */
diff --git a/tp/Texinfo/XS/convert/get_html_perl_info.c 
b/tp/Texinfo/XS/convert/get_html_perl_info.c
index 535ff2c38e..00e552a248 100644
--- a/tp/Texinfo/XS/convert/get_html_perl_info.c
+++ b/tp/Texinfo/XS/convert/get_html_perl_info.c
@@ -134,7 +134,9 @@ html_converter_initialize_sv (SV *converter_sv,
                               SV *default_css_string_types_conversion,
                               SV *default_output_units_conversion,
                               SV *default_special_unit_body,
-                              SV *default_css_element_class_styles)
+                              SV *default_css_element_class_styles,
+                              SV *default_converted_directions_strings
+                             )
 {
   int i;
   HV *converter_hv;
@@ -218,6 +220,129 @@ html_converter_initialize_sv (SV *converter_sv,
     }
 
 #define FETCH(key) key##_sv = hv_fetch (converter_hv, #key, strlen (#key), 0);
+  FETCH(sorted_special_unit_varieties)
+
+  if (sorted_special_unit_varieties_sv)
+    {
+      int i;
+      enum special_unit_info_type j;
+      SV **simplified_special_unit_info_sv;
+      HV *special_unit_info_hv;
+
+      STRING_LIST *special_unit_varieties = &converter->special_unit_varieties;
+      if (sorted_special_unit_varieties_sv)
+        add_svav_to_string_list (*sorted_special_unit_varieties_sv,
+                                 special_unit_varieties, svt_char);
+
+      FETCH(simplified_special_unit_info);
+
+      special_unit_info_hv = (HV *) SvRV(*simplified_special_unit_info_sv);
+
+      for (j = 0; j < SUI_type_heading+1; j++)
+        {
+          SV **special_unit_info_type_sv;
+          const char *sui_type = special_unit_info_type_names[j];
+          special_unit_info_type_sv = hv_fetch (special_unit_info_hv,
+                                                sui_type, strlen (sui_type), 
0);
+          if (special_unit_info_type_sv)
+            {
+              int k;
+              HV *special_unit_info_type_hv;
+
+              if (!SvOK (*special_unit_info_type_sv))
+                {
+                  fprintf (stderr, "BUG: special_unit_info: %s: undef\n",
+                                   sui_type);
+                }
+
+              special_unit_info_type_hv
+                   = (HV *) SvRV(*special_unit_info_type_sv);
+
+              converter->special_unit_info[j]
+                = new_special_unit_info_type (special_unit_varieties->number);
+
+              for (k = 0; k < special_unit_varieties->number; k++)
+                {
+                  char *variety_name = special_unit_varieties->list[k];
+                  SV **info_type_variety_sv
+                   = hv_fetch (special_unit_info_type_hv, variety_name,
+                               strlen (variety_name), 0);
+                  if (info_type_variety_sv)
+                    {
+                      /* can be undef if set undef in user init file */
+                      if (SvOK (*info_type_variety_sv))
+                        {
+                          const char *value
+                            = (char *) SvPVutf8_nolen (*info_type_variety_sv);
+                          converter->special_unit_info[j][k]
+                             = non_perl_strdup (value);
+                        }
+                      else
+                        converter->special_unit_info[j][k] = 0;
+                    }
+                    /*
+                  else
+                    fprintf (stderr, "Missing %d:%s %d:%s\n", j, sui_type, k, 
variety_name);
+                     */
+                }
+            }
+        }
+    }
+
+  /* Should always be true */
+  if (default_converted_directions_strings
+      && SvOK (default_converted_directions_strings))
+    {
+      HV *default_converted_directions_strings_hv
+         = (HV *) SvRV (default_converted_directions_strings);
+      nr_string_directions = NON_SPECIAL_DIRECTIONS_NR - FIRSTINFILE_NR
+                            + converter->special_unit_varieties.number;
+      int non_translated_directions_strings_nr
+          = (TDS_TYPE_MAX_NR) - (TDS_TRANSLATED_MAX_NR);
+      for (DS_type = 0; DS_type < non_translated_directions_strings_nr;
+           DS_type++)
+        {
+          const char *type_name
+             = direction_string_type_names[TDS_TRANSLATED_MAX_NR + DS_type];
+          SV **direction_sv
+             = hv_fetch (default_converted_directions_strings_hv,
+                                        type_name, strlen (type_name), 0);
+
+          converter->default_converted_directions_strings[DS_type]
+            = (char **) malloc (nr_string_directions * sizeof (char *));
+          memset (converter->default_converted_directions_strings[DS_type],
+                  0, nr_string_directions * sizeof (char *));
+
+          if (direction_sv)
+            {
+              int i;
+              HV *direction_hv = (HV *) SvRV (*direction_sv);
+
+              for (i = 0; i < nr_string_directions; i++)
+                {
+                  const char *direction_name;
+                  SV **spec_sv;
+
+                  if (i < FIRSTINFILE_MIN_IDX)
+                    direction_name = html_button_direction_names[i];
+                  else
+                    direction_name
+                      = converter->special_unit_info[SUI_type_direction]
+                                       [i - FIRSTINFILE_MIN_IDX];
+
+                  spec_sv = hv_fetch (direction_hv, direction_name,
+                                          strlen (direction_name), 0);
+
+                  if (spec_sv && SvOK (*spec_sv))
+                    {
+                      
converter->default_converted_directions_strings[DS_type][i]
+                        = strdup (SvPVutf8_nolen (*spec_sv));
+                    }
+                }
+            }
+        }
+    }
+
   FETCH(htmlxref)
 
   if (htmlxref_sv)
@@ -461,76 +586,12 @@ html_converter_initialize_sv (SV *converter_sv,
         output_units_conversion_hv);
     }
 
-  FETCH(sorted_special_unit_varieties)
-
   if (sorted_special_unit_varieties_sv)
     {
-      int i;
-      enum special_unit_info_type j;
-      SV **simplified_special_unit_info_sv;
-      HV *special_unit_info_hv;
       SV **special_unit_body_sv;
       HV *special_unit_body_hv;
       HV *default_special_unit_body_hv;
-
       STRING_LIST *special_unit_varieties = &converter->special_unit_varieties;
-      if (sorted_special_unit_varieties_sv)
-        add_svav_to_string_list (*sorted_special_unit_varieties_sv,
-                                 special_unit_varieties, svt_char);
-
-      FETCH(simplified_special_unit_info);
-
-      special_unit_info_hv = (HV *) SvRV(*simplified_special_unit_info_sv);
-
-      for (j = 0; j < SUI_type_heading+1; j++)
-        {
-          SV **special_unit_info_type_sv;
-          const char *sui_type = special_unit_info_type_names[j];
-          special_unit_info_type_sv = hv_fetch (special_unit_info_hv,
-                                                sui_type, strlen (sui_type), 
0);
-          if (special_unit_info_type_sv)
-            {
-              int k;
-              HV *special_unit_info_type_hv;
-
-              if (!SvOK (*special_unit_info_type_sv))
-                {
-                  fprintf (stderr, "BUG: special_unit_info: %s: undef\n",
-                                   sui_type);
-                }
-
-              special_unit_info_type_hv
-                   = (HV *) SvRV(*special_unit_info_type_sv);
-
-              converter->special_unit_info[j]
-                = new_special_unit_info_type (special_unit_varieties->number);
-
-              for (k = 0; k < special_unit_varieties->number; k++)
-                {
-                  char *variety_name = special_unit_varieties->list[k];
-                  SV **info_type_variety_sv
-                   = hv_fetch (special_unit_info_type_hv, variety_name,
-                               strlen (variety_name), 0);
-                  if (info_type_variety_sv)
-                    {
-                      /* can be undef if set undef in user init file */
-                      if (SvOK (*info_type_variety_sv))
-                        {
-                          const char *value
-                            = (char *) SvPVutf8_nolen (*info_type_variety_sv);
-                          converter->special_unit_info[j][k]
-                             = non_perl_strdup (value);
-                        }
-                      else
-                        converter->special_unit_info[j][k] = 0;
-                    }
-                    /*
-                  else
-                    fprintf (stderr, "Missing %d:%s %d:%s\n", j, sui_type, k, 
variety_name);
-                     */
-                }
-            }
-        }
 
       converter->special_unit_body
        = new_special_unit_formatting_references
@@ -961,6 +1022,9 @@ html_converter_initialize_sv (SV *converter_sv,
                 = &converter->html_stage_handlers[stage];
               SSize_t stage_handlers_info_nr = av_top_index (stage_av) +1;
 
+              if (stage_handlers_info_nr == 0)
+                continue;
+
               stage_handler_list->number = stage_handlers_info_nr;
               stage_handler_list->list = (HTML_STAGE_HANDLER_INFO *)
                  malloc (sizeof (HTML_STAGE_HANDLER_INFO)
diff --git a/tp/Texinfo/XS/convert/get_html_perl_info.h 
b/tp/Texinfo/XS/convert/get_html_perl_info.h
index 739f5a6297..d1a5ecd254 100644
--- a/tp/Texinfo/XS/convert/get_html_perl_info.h
+++ b/tp/Texinfo/XS/convert/get_html_perl_info.h
@@ -20,7 +20,9 @@ void html_converter_initialize_sv (SV *converter_sv,
                                   SV *default_css_string_types_conversion,
                                   SV *default_output_units_conversion,
                                   SV *default_special_unit_body,
-                                  SV *default_css_element_class_styles);
+                                  SV *default_css_element_class_styles,
+                                  SV *default_converted_directions_strings
+                                  );
 
 void html_conversion_initialization_sv (SV *converter_sv,
                                         CONVERTER *converter);
diff --git a/tp/Texinfo/XS/main/converter_types.h 
b/tp/Texinfo/XS/main/converter_types.h
index 4e988d1cb2..e543571134 100644
--- a/tp/Texinfo/XS/main/converter_types.h
+++ b/tp/Texinfo/XS/main/converter_types.h
@@ -817,6 +817,7 @@ typedef struct CONVERTER {
     /* set for a converter, modified in a document */
     HTML_COMMAND_CONVERSION 
html_command_conversion[BUILTIN_CMD_NUMBER][HCC_type_css_string+1];
     char ***directions_strings[TDS_TYPE_MAX_NR];
+    char **default_converted_directions_strings[TDS_TYPE_MAX_NR];
     const char **direction_unit_direction_name;
 
     /* set for a document */



reply via email to

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