[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
branch master updated: * tp/Texinfo/XS/convert/call_html_perl_function.c
From: |
Patrice Dumas |
Subject: |
branch master updated: * tp/Texinfo/XS/convert/call_html_perl_function.c (call_types_conversion, call_types_open, call_commands_conversion) (call_commands_open, call_output_units_conversion), tp/Texinfo/XS/convert/convert_html.c (TYPE_INTERNAL_CONVERSION) (convert_table_term_type, command_conversion_external) (command_open, type_conversion_external, type_open) (convert_to_html_internal, output_unit_conversion) (convert_output_unit, convert_convert_output_unit_internal): pass TEXT to gather conversion results ins [...] |
Date: |
Thu, 16 Nov 2023 14:12:54 -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 358e05f80f * tp/Texinfo/XS/convert/call_html_perl_function.c
(call_types_conversion, call_types_open, call_commands_conversion)
(call_commands_open, call_output_units_conversion),
tp/Texinfo/XS/convert/convert_html.c (TYPE_INTERNAL_CONVERSION)
(convert_table_term_type, command_conversion_external) (command_open,
type_conversion_external, type_open) (convert_to_html_internal,
output_unit_conversion) (convert_output_unit,
convert_convert_output_unit_internal): pass TEXT to gather c [...]
358e05f80f is described below
commit 358e05f80ff1effe9a2d5c601f438b7c91bfec85
Author: Patrice Dumas <pertusus@free.fr>
AuthorDate: Thu Nov 16 20:12:22 2023 +0100
* tp/Texinfo/XS/convert/call_html_perl_function.c
(call_types_conversion, call_types_open, call_commands_conversion)
(call_commands_open, call_output_units_conversion),
tp/Texinfo/XS/convert/convert_html.c (TYPE_INTERNAL_CONVERSION)
(convert_table_term_type, command_conversion_external)
(command_open, type_conversion_external, type_open)
(convert_to_html_internal, output_unit_conversion)
(convert_output_unit, convert_convert_output_unit_internal):
pass TEXT to gather conversion results instead of returning char *.
Also more const for functions arguments.
* tp/Texinfo/XS/convert/convert_html.c
(convert_output_output_unit_internal): use text->end for res_len
if possible.
---
ChangeLog | 17 +++
tp/Texinfo/XS/convert/call_html_perl_function.c | 71 ++++------
tp/Texinfo/XS/convert/call_html_perl_function.h | 29 ++--
tp/Texinfo/XS/convert/convert_html.c | 174 +++++++++---------------
tp/Texinfo/XS/main/converter_types.h | 11 +-
5 files changed, 137 insertions(+), 165 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 84d4bcac9e..0e30048469 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,23 @@
* configure.ac: Delete commented-out AC_CHECK_PROGS line for hevea.
* contrib/nontests/Makefile.am: Remove as file is unused.
+2023-11-16 Patrice Dumas <pertusus@free.fr>
+
+ * tp/Texinfo/XS/convert/call_html_perl_function.c
+ (call_types_conversion, call_types_open, call_commands_conversion)
+ (call_commands_open, call_output_units_conversion),
+ tp/Texinfo/XS/convert/convert_html.c (TYPE_INTERNAL_CONVERSION)
+ (convert_table_term_type, command_conversion_external)
+ (command_open, type_conversion_external, type_open)
+ (convert_to_html_internal, output_unit_conversion)
+ (convert_output_unit, convert_convert_output_unit_internal):
+ pass TEXT to gather conversion results instead of returning char *.
+ Also more const for functions arguments.
+
+ * tp/Texinfo/XS/convert/convert_html.c
+ (convert_output_output_unit_internal): use text->end for res_len
+ if possible.
+
2023-11-16 Patrice Dumas <pertusus@free.fr>
* tp/Texinfo/Convert/HTML.pm (_convert_text, convert, output),
diff --git a/tp/Texinfo/XS/convert/call_html_perl_function.c
b/tp/Texinfo/XS/convert/call_html_perl_function.c
index 0bedffd0fd..2ff735d593 100644
--- a/tp/Texinfo/XS/convert/call_html_perl_function.c
+++ b/tp/Texinfo/XS/convert/call_html_perl_function.c
@@ -30,6 +30,7 @@
#undef context
+#include "text.h"
#include "utils.h"
/* for newSVpv_utf8 build_texinfo_tree */
#include "build_perl_info.h"
@@ -747,13 +748,13 @@ call_formatting_function_format_translate_message
(CONVERTER *self,
-char *
-call_types_conversion (CONVERTER *self, enum element_type type,
- FORMATTING_REFERENCE *formatting_reference,
- const ELEMENT *element, char *content)
+void
+call_types_conversion (CONVERTER *self, const enum element_type type,
+ const FORMATTING_REFERENCE *formatting_reference,
+ const ELEMENT *element, const char *content,
+ TEXT *result)
{
int count;
- char *result;
char *result_ret;
STRLEN len;
SV *result_sv;
@@ -762,7 +763,7 @@ call_types_conversion (CONVERTER *self, enum element_type
type,
dTHX;
if (!self->hv)
- return 0;
+ return;
if (self->tree_to_build)
{
@@ -807,22 +808,19 @@ call_types_conversion (CONVERTER *self, enum element_type
type,
It could be possible to add a wrapper in perl that encode to UTF-8,
but probably not worth it */
result_ret = SvPVutf8 (result_sv, len);
- result = strdup (result_ret);
+ text_append (result, result_ret);
PUTBACK;
FREETMPS;
LEAVE;
-
- return result;
}
-char *
-call_types_open (CONVERTER *self, enum element_type type,
- const ELEMENT *element)
+void
+call_types_open (CONVERTER *self, const enum element_type type,
+ const ELEMENT *element, TEXT *result)
{
int count;
- char *result;
char *result_ret;
STRLEN len;
SV *result_sv;
@@ -837,7 +835,7 @@ call_types_open (CONVERTER *self, enum element_type type,
}
if (!self->hv)
- return 0;
+ return;
formatting_reference_sv = self->types_open[type].sv_reference;
@@ -873,25 +871,22 @@ call_types_open (CONVERTER *self, enum element_type type,
It could be possible to add a wrapper in perl that encode to UTF-8,
but probably not worth it */
result_ret = SvPVutf8 (result_sv, len);
- result = strdup (result_ret);
+ text_append (result, result_ret);
PUTBACK;
FREETMPS;
LEAVE;
-
- return result;
}
-char *
-call_commands_conversion (CONVERTER *self, enum command_id cmd,
- FORMATTING_REFERENCE *formatting_reference,
+void
+call_commands_conversion (CONVERTER *self, const enum command_id cmd,
+ const FORMATTING_REFERENCE *formatting_reference,
const ELEMENT *element,
const HTML_ARGS_FORMATTED *args_formatted,
- const char *content)
+ const char *content, TEXT *result)
{
int count;
- char *result;
char *result_ret;
STRLEN len;
SV *result_sv;
@@ -902,7 +897,7 @@ call_commands_conversion (CONVERTER *self, enum command_id
cmd,
dTHX;
if (!self->hv)
- return 0;
+ return;
if (self->tree_to_build)
{
@@ -953,22 +948,19 @@ call_commands_conversion (CONVERTER *self, enum
command_id cmd,
It could be possible to add a wrapper in perl that encode to UTF-8,
but probably not worth it */
result_ret = SvPVutf8 (result_sv, len);
- result = strdup (result_ret);
+ text_append (result, result_ret);
PUTBACK;
FREETMPS;
LEAVE;
-
- return result;
}
-char *
-call_commands_open (CONVERTER *self, enum command_id cmd,
- const ELEMENT *element)
+void
+call_commands_open (CONVERTER *self, const enum command_id cmd,
+ const ELEMENT *element, TEXT *result)
{
int count;
- char *result;
char *result_ret;
STRLEN len;
SV *result_sv;
@@ -978,7 +970,7 @@ call_commands_open (CONVERTER *self, enum command_id cmd,
dTHX;
if (!self->hv)
- return 0;
+ return;
if (self->tree_to_build)
{
@@ -1023,24 +1015,21 @@ call_commands_open (CONVERTER *self, enum command_id
cmd,
It could be possible to add a wrapper in perl that encode to UTF-8,
but probably not worth it */
result_ret = SvPVutf8 (result_sv, len);
- result = strdup (result_ret);
+ text_append (result, result_ret);
PUTBACK;
FREETMPS;
LEAVE;
-
- return result;
}
-char *
+void
call_output_units_conversion (CONVERTER *self,
- enum output_unit_type unit_type,
+ const enum output_unit_type unit_type,
const OUTPUT_UNIT *output_unit,
- const char *content)
+ const char *content, TEXT *result)
{
int count;
- char *result;
char *result_ret;
STRLEN len;
SV *result_sv;
@@ -1049,7 +1038,7 @@ call_output_units_conversion (CONVERTER *self,
dTHX;
if (!self->hv)
- return 0;
+ return;
if (self->tree_to_build)
{
@@ -1096,14 +1085,12 @@ call_output_units_conversion (CONVERTER *self,
It could be possible to add a wrapper in perl that encode to UTF-8,
but probably not worth it */
result_ret = SvPVutf8 (result_sv, len);
- result = strdup (result_ret);
+ text_append (result, result_ret);
PUTBACK;
FREETMPS;
LEAVE;
-
- return result;
}
diff --git a/tp/Texinfo/XS/convert/call_html_perl_function.h
b/tp/Texinfo/XS/convert/call_html_perl_function.h
index 9d47362faa..5d195a1104 100644
--- a/tp/Texinfo/XS/convert/call_html_perl_function.h
+++ b/tp/Texinfo/XS/convert/call_html_perl_function.h
@@ -47,21 +47,24 @@ char *call_formatting_function_format_begin_file (CONVERTER
*self,
char *filename,
const OUTPUT_UNIT *output_unit);
-char *call_types_conversion (CONVERTER *self, enum element_type type,
- FORMATTING_REFERENCE *formatting_reference,
- const ELEMENT *element, char *content);
-char *call_types_open (CONVERTER *self, enum element_type type,
- const ELEMENT *element);
-char *call_commands_conversion (CONVERTER *self, enum command_id cmd,
- FORMATTING_REFERENCE *formatting_reference,
+void call_types_conversion (CONVERTER *self, const enum element_type type,
+ const FORMATTING_REFERENCE *formatting_reference,
+ const ELEMENT *element, const char *content,
+ TEXT *result);
+void call_types_open (CONVERTER *self, const enum element_type type,
+ const ELEMENT *element, TEXT *result);
+void call_commands_conversion (CONVERTER *self, const enum command_id cmd,
+ const FORMATTING_REFERENCE *formatting_reference,
const ELEMENT *element,
const HTML_ARGS_FORMATTED *args_formatted,
- const char *content);
-char *call_commands_open (CONVERTER *self, enum command_id cmd,
- const ELEMENT *element);
-char *call_output_units_conversion (CONVERTER *self,
- enum output_unit_type unit_type,
- const OUTPUT_UNIT *output_unit, const char *content);
+ const char *content, TEXT *result);
+void call_commands_open (CONVERTER *self, const enum command_id cmd,
+ const ELEMENT *element, TEXT *result);
+void call_output_units_conversion (CONVERTER *self,
+ const enum output_unit_type unit_type,
+ const OUTPUT_UNIT *output_unit, const char *content,
+ TEXT *result);
+
char *call_formatting_function_format_translate_message (CONVERTER *self,
const char *message, const char *lang,
const char *message_context);
diff --git a/tp/Texinfo/XS/convert/convert_html.c
b/tp/Texinfo/XS/convert/convert_html.c
index 52b30bb786..a76d55756d 100644
--- a/tp/Texinfo/XS/convert/convert_html.c
+++ b/tp/Texinfo/XS/convert/convert_html.c
@@ -59,7 +59,9 @@ typedef struct CMD_VARIETY {
typedef struct TYPE_INTERNAL_CONVERSION {
enum element_type type;
- char * (* type_conversion) (CONVERTER *self, enum element_type type, const
ELEMENT *element, char *content);
+ void (* type_conversion) (CONVERTER *self, const enum element_type type,
+ const ELEMENT *element, const char *content,
+ TEXT *result);
} TYPE_INTERNAL_CONVERSION;
char *html_global_unit_direction_names[] = {
@@ -2492,21 +2494,16 @@ protect_text_unicode_text (const char *text, TEXT
*result)
}
}
-char *
-convert_table_term_type (CONVERTER *self, enum element_type type,
- const ELEMENT *element, char *content)
+void
+convert_table_term_type (CONVERTER *self, const enum element_type type,
+ const ELEMENT *element, const char *content,
+ TEXT *result)
{
- TEXT result;
-
- text_init (&result);
- text_append (&result, "");
-
if (content)
{
- text_append (&result, "<dt>");
- text_append (&result, content);
+ text_append (result, "<dt>");
+ text_append (result, content);
}
- return result.text;
}
/* associate type to the C function implementing the conversion */
@@ -2515,10 +2512,11 @@ static TYPE_INTERNAL_CONVERSION
types_internal_conversion_table[] = {
{0, 0},
};
-static char *
-command_conversion_external (CONVERTER *self, enum command_id cmd,
- const ELEMENT *element, HTML_ARGS_FORMATTED
*args_formatted,
- char *content)
+void
+command_conversion_external (CONVERTER *self, const enum command_id cmd,
+ const ELEMENT *element,
+ const HTML_ARGS_FORMATTED *args_formatted,
+ const char *content, TEXT *result)
{
/* TODO call a C function if status is FRS_status_default_set
maybe putting function references in an array */
@@ -2533,42 +2531,42 @@ command_conversion_external (CONVERTER *self, enum
command_id cmd,
= self->current_commands_conversion_function[cmd]->formatting_reference;
if (formatting_reference->status > 0)
- return call_commands_conversion (self, cmd, formatting_reference,
- element, args_formatted, content);
- return 0;
+ call_commands_conversion (self, cmd, formatting_reference,
+ element, args_formatted, content,
+ result);
}
-static char *
-command_open (CONVERTER *self, enum command_id cmd, const ELEMENT *element)
+static void
+command_open (CONVERTER *self, const enum command_id cmd,
+ const ELEMENT *element, TEXT *result)
{
/* TODO call a C function if status is FRS_status_default_set
maybe putting function references in an array */
if (self->commands_open[cmd].status > 0)
- return call_commands_open (self, cmd, element);
- return 0;
+ call_commands_open (self, cmd, element, result);
}
-static char *
-type_conversion_external (CONVERTER *self, enum element_type type,
- const ELEMENT *element, char *content)
+static void
+type_conversion_external (CONVERTER *self, const enum element_type type,
+ const ELEMENT *element, const char *content,
+ TEXT *result)
{
FORMATTING_REFERENCE *formatting_reference
= self->current_types_conversion_function[type]->formatting_reference;
if (formatting_reference->status > 0)
- return call_types_conversion (self, type, formatting_reference,
- element, content);
- return 0;
+ call_types_conversion (self, type, formatting_reference,
+ element, content, result);
}
-static char *
-type_open (CONVERTER *self, enum element_type type, const ELEMENT *element)
+static void
+type_open (CONVERTER *self, enum element_type type, const ELEMENT *element,
+ TEXT *result)
{
/* TODO call a C function if status is FRS_status_default_set
maybe putting function references in an array */
if (self->types_open[type].status > 0)
- return call_types_open (self, type, element);
- return 0;
+ call_types_open (self, type, element, result);
}
static void
@@ -3606,14 +3604,8 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
}
else
{
- char *conv_text
- =
(*self->current_types_conversion_function[ET_text]->type_conversion)
- (self, ET_text, element, element->text.text);
- if (conv_text)
- {
- text_append (&text_result, conv_text);
- free (conv_text);
- }
+ (*self->current_types_conversion_function[ET_text]->type_conversion)
+ (self, ET_text, element, element->text.text, &text_result);
}
if (self->conf->DEBUG > 0)
@@ -3759,12 +3751,7 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
if (self->commands_open[cmd].status)
{
- char *cmd_open_str = command_open (self, data_cmd, element);
- if (cmd_open_str)
- {
- ADD(cmd_open_str);
- free (cmd_open_str);
- }
+ command_open (self, data_cmd, element, result);
}
text_init (&content_formatted);
@@ -4078,14 +4065,9 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
/* args are formatted, now format the command itself */
if (self->current_commands_conversion_function[cmd])
{
- char *conv_str
- =
(*self->current_commands_conversion_function[cmd]->command_conversion)
- (self, cmd, element, args_formatted,
content_formatted.text);
- if (conv_str)
- {
- ADD(conv_str);
- free (conv_str);
- }
+ (*self->current_commands_conversion_function[cmd]->command_conversion)
+ (self, cmd, element, args_formatted,
+ content_formatted.text, result);
}
else if (args_formatted)
fprintf (stderr, "No command_conversion for %s\n",
@@ -4122,7 +4104,6 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
}
else if (element->type)
{
- char *open_result;
enum element_type type = element->type;
char *type_name = element_type_names[type];
TEXT type_result;
@@ -4134,12 +4115,7 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
text_init (&type_result);
text_append (&type_result, "");
- open_result = type_open (self, type, element);
- if (open_result)
- {
- text_append (&type_result, open_result);
- free (open_result);
- }
+ type_open (self, type, element, &type_result);
if (type == ET_paragraph)
{
@@ -4203,14 +4179,8 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
if (self->current_types_conversion_function[type])
{
- char *conversion_result
- = (*self->current_types_conversion_function[type]->type_conversion)
- (self, type, element, content_formatted.text);
- if (conversion_result)
- {
- text_append (&type_result, conversion_result);
- free (conversion_result);
- }
+ (*self->current_types_conversion_function[type]->type_conversion)
+ (self, type, element, content_formatted.text, &type_result);
}
else if (content_formatted.end > 0)
{
@@ -4283,14 +4253,8 @@ convert_to_html_internal (CONVERTER *self, const ELEMENT
*element,
if (self->current_types_conversion_function[0]
&& self->current_types_conversion_function[0]->type_conversion)
{
- char *conversion_result
- = (*self->current_types_conversion_function[0]->type_conversion)
- (self, 0, element, "");
- if (conversion_result)
- {
- ADD(conversion_result);
- free (conversion_result);
- }
+ (*self->current_types_conversion_function[0]->type_conversion)
+ (self, 0, element, "", result);
goto out;
}
else
@@ -4305,32 +4269,34 @@ convert_to_html_internal (CONVERTER *self, const
ELEMENT *element,
}
#undef ADD
-static char *
-output_unit_conversion (CONVERTER *self, enum output_unit_type unit_type,
- const OUTPUT_UNIT *output_unit, const char *content)
+static void
+output_unit_conversion (CONVERTER *self, const enum output_unit_type unit_type,
+ const OUTPUT_UNIT *output_unit, const char *content,
+ TEXT *result)
{
/* TODO call a C function if status is FRS_status_default_set
maybe putting function references in an array */
if (self->output_units_conversion[unit_type].status > 0)
- return call_output_units_conversion (self, unit_type, output_unit,
content);
- return 0;
+ call_output_units_conversion (self, unit_type, output_unit, content,
+ result);
}
-char *
+void
convert_output_unit (CONVERTER *self, const OUTPUT_UNIT *output_unit,
- char *explanation)
+ char *explanation, TEXT *result)
{
- char *result = 0;
TEXT content_formatted;
+ size_t input_result_end = result->end;
enum output_unit_type unit_type = output_unit->unit_type;
if (self->output_units_conversion[unit_type].status == FRS_status_ignored)
{
if (self->conf->DEBUG > 0)
{
- fprintf (stderr, "IGNORED OU %s\n",
output_unit_type_names[unit_type]);
+ fprintf (stderr, "IGNORED OU %s\n",
+ output_unit_type_names[unit_type]);
}
- return strdup ("");
+ return;
}
if (self->conf->DEBUG > 0)
@@ -4366,14 +4332,12 @@ convert_output_unit (CONVERTER *self, const OUTPUT_UNIT
*output_unit,
if (self->output_units_conversion[unit_type].status)
{
- result = output_unit_conversion (self, unit_type, output_unit,
- content_formatted.text);
- if (! result)
- result = strdup ("");
+ output_unit_conversion (self, unit_type, output_unit,
+ content_formatted.text, result);
}
else
{
- result = strdup (content_formatted.text);
+ text_append (result, content_formatted.text);
}
free (content_formatted.text);
@@ -4383,9 +4347,7 @@ convert_output_unit (CONVERTER *self, const OUTPUT_UNIT
*output_unit,
if (self->conf->DEBUG > 0)
fprintf (stderr, "DOUNIT (%s) => `%s'\n",
output_unit_type_names[unit_type],
- result);
-
- return result;
+ result->text + input_result_end);
}
/* wrapper to avoid code repetition and use similar functions as in perl */
@@ -4395,17 +4357,13 @@ convert_convert_output_unit_internal (CONVERTER *self,
TEXT *result,
char *debug_str, char *explanation_str)
{
char *explanation;
- char *output_unit_text;
if (self->conf->DEBUG > 0)
fprintf (stderr, "\n%s %d\n", debug_str, unit_nr);
xasprintf (&explanation, "%s %d", explanation_str, unit_nr);
- output_unit_text = convert_output_unit (self, output_unit,
- explanation);
- text_append (result, output_unit_text);
+ convert_output_unit (self, output_unit, explanation, result);
free (explanation);
- free (output_unit_text);
}
char *
@@ -4589,12 +4547,16 @@ convert_output_output_unit_internal (CONVERTER *self,
size_t write_len;
if (conversion)
- result = encode_with_iconv (conversion->iconv, text->text, 0);
+ {
+ result = encode_with_iconv (conversion->iconv, text->text, 0);
+ res_len = strlen (result);
+ }
else
- result = text->text;
- res_len = strlen (result);
- write_len = fwrite (result, sizeof (char), res_len,
- file_fh);
+ {
+ result = text->text;
+ res_len = text->end;
+ }
+ write_len = fwrite (result, sizeof (char), res_len, file_fh);
if (conversion)
free (result);
if (write_len != res_len)
diff --git a/tp/Texinfo/XS/main/converter_types.h
b/tp/Texinfo/XS/main/converter_types.h
index 8c37763734..b9695c541d 100644
--- a/tp/Texinfo/XS/main/converter_types.h
+++ b/tp/Texinfo/XS/main/converter_types.h
@@ -462,7 +462,9 @@ typedef struct TYPE_CONVERSION_FUNCTION {
FORMATTING_REFERENCE *formatting_reference;
/* the function used for conversion, either a function that calls
the perl function in formatting_reference, or another C function */
- char * (* type_conversion) (CONVERTER *self, enum element_type type, const
ELEMENT *element, char *content);
+ void (* type_conversion) (CONVERTER *self, const enum element_type type,
+ const ELEMENT *element, const char *content,
+ TEXT *text);
} TYPE_CONVERSION_FUNCTION;
typedef struct HTML_ARG_FORMATTED {
@@ -482,9 +484,10 @@ typedef struct COMMAND_CONVERSION_FUNCTION {
FORMATTING_REFERENCE *formatting_reference;
/* the function used for conversion, either a function that calls
the perl function in formatting_reference, or another C function */
- char * (* command_conversion) (CONVERTER *self, enum command_id cmd,
- const ELEMENT *element, HTML_ARGS_FORMATTED
*args_formatted,
- char *content);
+ void (* command_conversion) (CONVERTER *self, const enum command_id cmd,
+ const ELEMENT *element,
+ const HTML_ARGS_FORMATTED *args_formatted,
+ const char *content, TEXT *result);
} COMMAND_CONVERSION_FUNCTION;
typedef struct TRANSLATED_SUI_ASSOCIATION {
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- branch master updated: * tp/Texinfo/XS/convert/call_html_perl_function.c (call_types_conversion, call_types_open, call_commands_conversion) (call_commands_open, call_output_units_conversion), tp/Texinfo/XS/convert/convert_html.c (TYPE_INTERNAL_CONVERSION) (convert_table_term_type, command_conversion_external) (command_open, type_conversion_external, type_open) (convert_to_html_internal, output_unit_conversion) (convert_output_unit, convert_convert_output_unit_internal): pass TEXT to gather conversion results ins [...],
Patrice Dumas <=