From f7ecfb787d5c6dd117a499543e4f87683c67698e Mon Sep 17 00:00:00 2001 From: Gavin Smith 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