[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];
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: * tp/Texinfo/Convert/HTML.pm (converter_initialize): setup %customized_accent_entities with all the customized commands before filling accent_entities.,
Patrice Dumas <=
- Prev by Date:
branch master updated: * tp/Texinfo/XS/main/command_data.awk: rename CM_POUND_SIGN as CM_DOUBLE_QUOTE. Add CM_AMPERSAND.
- Next by Date:
branch master updated: * tp/Texinfo/XS/convert/convert_html.c (accent_cmd, html_format_setup) (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): collect accent commands in accent_cmd in convert_html.c, not in converter. Remove accent_cmd converter field.
- Previous by thread:
branch master updated: * tp/Texinfo/XS/main/command_data.awk: rename CM_POUND_SIGN as CM_DOUBLE_QUOTE. Add CM_AMPERSAND.
- Next by thread:
branch master updated: * tp/Texinfo/XS/convert/convert_html.c (accent_cmd, html_format_setup) (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): collect accent commands in accent_cmd in convert_html.c, not in converter. Remove accent_cmd converter field.
- Index(es):