texinfo: add missing patch

salvaged from the src.tar.gz
This commit is contained in:
Christoph Reiter 2020-06-05 18:47:30 +02:00
parent fb9cf2df90
commit f5e934fcbb

View File

@ -0,0 +1,125 @@
From f7ecfb787d5c6dd117a499543e4f87683c67698e Mon Sep 17 00:00:00 2001
From: Gavin Smith <gavinsmith0123@gmail.com>
Date: Tue, 19 Feb 2019 19:49:00 +0000
Subject: [PATCH] @documentencoding is not file-specific.
* tp/Texinfo/XS/parsetexi/input.c (input_encoding): New
variable.
(set_input_encoding, next_text):
Use that encoding instead of an encoding on the input stack.
(INPUT): Remove field 'encoding'.
(input_push, input_push_file): Update.
Eli Zaretskii reported that a @documentencoding command in an
@include'd file would not take effect outside of that file,
which was wrong for the Emacs manuals.
---
ChangeLog | 16 ++++++++++++++
tp/Texinfo/XS/parsetexi/input.c | 37 ++++++++++++++-------------------
2 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/tp/Texinfo/XS/parsetexi/input.c b/tp/Texinfo/XS/parsetexi/input.c
index cad1edc47..560e637f8 100644
--- a/tp/Texinfo/XS/parsetexi/input.c
+++ b/tp/Texinfo/XS/parsetexi/input.c
@@ -42,7 +42,6 @@ typedef struct {
enum input_type type;
FILE *file;
- char *input_encoding;
LINE_NR line_nr;
char *text; /* Input text to be parsed as Texinfo. */
@@ -50,6 +49,15 @@ typedef struct {
into lines. */
} INPUT;
+static char *input_encoding;
+
+void
+set_input_encoding (char *encoding)
+{
+ input_encoding = encoding;
+}
+
+
static INPUT *input_stack = 0;
int input_number = 0;
int input_space = 0;
@@ -134,9 +142,9 @@ text_buffer_iconv (TEXT *buf, iconv_t iconv_state,
-/* Return conversion of S according to ENC. This function frees S. */
+/* Return conversion of S according to ENCODING. This function frees S. */
static char *
-convert_to_utf8 (char *s, char *input_encoding)
+convert_to_utf8 (char *s, char *encoding)
{
iconv_t our_iconv;
static TEXT t;
@@ -184,13 +192,13 @@ convert_to_utf8 (char *s, char *input_encoding)
}
enc = ce_latin1;
- if (!input_encoding)
+ if (!encoding)
;
- else if (!strcmp (input_encoding, "utf-8"))
+ else if (!strcmp (encoding, "utf-8"))
enc = ce_utf8;
- else if (!strcmp (input_encoding, "iso-8859-2"))
+ else if (!strcmp (encoding, "iso-8859-2"))
enc = ce_latin2;
- else if (!strcmp (input_encoding, "shift_jis"))
+ else if (!strcmp (encoding, "shift_jis"))
enc = ce_shiftjis;
switch (enc)
@@ -325,7 +333,7 @@ next_text (void)
i->line_nr.line_nr++;
line_nr = i->line_nr;
- return convert_to_utf8 (line, i->input_encoding);
+ return convert_to_utf8 (line, input_encoding);
}
free (line); line = 0;
break;
@@ -368,7 +376,6 @@ input_push (char *text, char *macro, char *filename, int line_number)
input_stack[input_number].file = 0;
input_stack[input_number].text = text;
input_stack[input_number].ptext = text;
- input_stack[input_number].input_encoding = 0;
if (!macro)
line_number--;
@@ -473,17 +480,6 @@ top_file_index (void)
return i;
}
-void
-set_input_encoding (char *encoding)
-{
- int i;
-
- /* Set encoding of top file in stack. */
- i = top_file_index ();
- if (i >= 0)
- input_stack[i].input_encoding = encoding;
-}
-
static char **include_dirs;
static size_t include_dirs_number;
@@ -578,7 +574,6 @@ input_push_file (char *filename)
input_stack[input_number].line_nr.macro = 0;
input_stack[input_number].text = 0;
input_stack[input_number].ptext = 0;
- input_stack[input_number].input_encoding = 0;
input_number++;
return 0;
--
2.17.0