[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 */