From: Bruno Haible Date: Thu, 1 Aug 2024 20:47:17 +0000 (+0200) Subject: Refactor directive_domain and set_domain methods. X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=4488d0e791bca9b8b244fb154b2871d33a7908f7;p=thirdparty%2Fgettext.git Refactor directive_domain and set_domain methods. * gettext-tools/src/read-catalog-abstract.h (abstract_catalog_reader_class_ty::directive_domain): Add name_pos parameter. (catalog_reader_seen_domain): Likewise. * gettext-tools/src/read-catalog-abstract.c (call_directive_domain, catalog_reader_seen_domain): Likewise. * gettext-tools/src/read-catalog.h (default_catalog_reader_class_ty::set_domain): Add name_pos parameter. (default_directive_domain, default_set_domain): Likewise. * gettext-tools/src/read-catalog.c (call_set_domain, default_directive_domain): Likewise. (default_set_domain): Add name_pos parameter. Use it instead of the global variable gram_pos. * gettext-tools/src/msgfmt.c (msgfmt_set_domain): Likewise. * gettext-tools/src/xgettext.c (exclude_directive_domain): Likewise. * gettext-tools/src/po-gram-gen.y: Update catalog_reader_seen_domain invocation. --- diff --git a/gettext-tools/src/msgfmt.c b/gettext-tools/src/msgfmt.c index 16f5ed669..b3837449a 100644 --- a/gettext-tools/src/msgfmt.c +++ b/gettext-tools/src/msgfmt.c @@ -1200,7 +1200,8 @@ msgfmt_parse_debrief (abstract_catalog_reader_ty *catr) /* Set 'domain' directive when seen in .po file. */ static void -msgfmt_set_domain (default_catalog_reader_ty *dcatr, char *name) +msgfmt_set_domain (default_catalog_reader_ty *dcatr, + char *name, lex_pos_ty *name_pos) { /* If no output file was given, we change it with each 'domain' directive. */ @@ -1234,7 +1235,7 @@ msgfmt_set_domain (default_catalog_reader_ty *dcatr, char *name) else { if (check_domain) - po_gram_error_at_line (&gram_pos, + po_gram_error_at_line (name_pos, _("'domain %s' directive ignored"), name); /* NAME was allocated in po-gram-gen.y but is not used anywhere. */ diff --git a/gettext-tools/src/po-gram-gen.y b/gettext-tools/src/po-gram-gen.y index 05ff9b6c3..a70fcc1bf 100644 --- a/gettext-tools/src/po-gram-gen.y +++ b/gettext-tools/src/po-gram-gen.y @@ -148,7 +148,7 @@ comment domain : DOMAIN STRING { - catalog_reader_seen_domain (ps->catr, $2.string); + catalog_reader_seen_domain (ps->catr, $2.string, &gram_pos); } ; diff --git a/gettext-tools/src/read-catalog-abstract.c b/gettext-tools/src/read-catalog-abstract.c index 71a9b644e..31c31afa4 100644 --- a/gettext-tools/src/read-catalog-abstract.c +++ b/gettext-tools/src/read-catalog-abstract.c @@ -85,10 +85,11 @@ call_parse_debrief (abstract_catalog_reader_ty *catr) } static inline void -call_directive_domain (abstract_catalog_reader_ty *catr, char *name) +call_directive_domain (abstract_catalog_reader_ty *catr, + char *name, lex_pos_ty *name_pos) { if (catr->methods->directive_domain) - catr->methods->directive_domain (catr, name); + catr->methods->directive_domain (catr, name, name_pos); } static inline void @@ -177,9 +178,10 @@ catalog_reader_parse (abstract_catalog_reader_ty *catr, FILE *fp, void -catalog_reader_seen_domain (abstract_catalog_reader_ty *catr, char *name) +catalog_reader_seen_domain (abstract_catalog_reader_ty *catr, + char *name, lex_pos_ty *name_pos) { - call_directive_domain (catr, name); + call_directive_domain (catr, name, name_pos); } diff --git a/gettext-tools/src/read-catalog-abstract.h b/gettext-tools/src/read-catalog-abstract.h index a9de36878..2381f106a 100644 --- a/gettext-tools/src/read-catalog-abstract.h +++ b/gettext-tools/src/read-catalog-abstract.h @@ -76,7 +76,8 @@ struct abstract_catalog_reader_class_ty void (*parse_debrief) (struct abstract_catalog_reader_ty *catr); /* What to do with a domain directive. */ - void (*directive_domain) (struct abstract_catalog_reader_ty *catr, char *name); + void (*directive_domain) (struct abstract_catalog_reader_ty *catr, + char *name, lex_pos_ty *name_pos); /* What to do with a message directive. */ void (*directive_message) (struct abstract_catalog_reader_ty *catr, @@ -189,7 +190,7 @@ extern void It invokes the 'directive_domain' method. */ extern void catalog_reader_seen_domain (abstract_catalog_reader_ty *catr, - char *name); + char *name, lex_pos_ty *name_pos); /* This callback is called whenever a message has been seen. It invokes the 'directive_message' method. */ extern void diff --git a/gettext-tools/src/read-catalog.c b/gettext-tools/src/read-catalog.c index 2e85fd967..0f8d065f3 100644 --- a/gettext-tools/src/read-catalog.c +++ b/gettext-tools/src/read-catalog.c @@ -39,13 +39,14 @@ /* Inline functions to invoke the methods. */ static inline void -call_set_domain (struct default_catalog_reader_ty *dcatr, char *name) +call_set_domain (struct default_catalog_reader_ty *dcatr, + char *name, lex_pos_ty *name_pos) { default_catalog_reader_class_ty *methods = (default_catalog_reader_class_ty *) dcatr->methods; if (methods->set_domain) - methods->set_domain (dcatr, name); + methods->set_domain (dcatr, name, name_pos); } static inline void @@ -216,11 +217,12 @@ default_reset_comment_state (default_catalog_reader_ty *dcatr) /* Process 'domain' directive from .po file. */ void -default_directive_domain (abstract_catalog_reader_ty *catr, char *name) +default_directive_domain (abstract_catalog_reader_ty *catr, + char *name, lex_pos_ty *name_pos) { default_catalog_reader_ty *dcatr = (default_catalog_reader_ty *) catr; - call_set_domain (dcatr, name); + call_set_domain (dcatr, name, name_pos); /* If there are accumulated comments, throw them away, they are probably part of the file header, or about the domain directive, @@ -313,14 +315,15 @@ default_comment_special (abstract_catalog_reader_ty *catr, const char *s) void -default_set_domain (default_catalog_reader_ty *dcatr, char *name) +default_set_domain (default_catalog_reader_ty *dcatr, + char *name, lex_pos_ty *name_pos) { if (dcatr->allow_domain_directives) /* Override current domain name. Don't free memory. */ dcatr->domain = name; else { - po_gram_error_at_line (&gram_pos, + po_gram_error_at_line (name_pos, _("this file may not contain domain directives")); /* NAME was allocated in po-gram-gen.y but is not used anywhere. */ diff --git a/gettext-tools/src/read-catalog.h b/gettext-tools/src/read-catalog.h index 6fc24528c..72d6111f0 100644 --- a/gettext-tools/src/read-catalog.h +++ b/gettext-tools/src/read-catalog.h @@ -52,7 +52,8 @@ struct default_catalog_reader_class_ty struct abstract_catalog_reader_class_ty super; /* How to change the current domain. */ - void (*set_domain) (struct default_catalog_reader_ty *dcatr, char *name); + void (*set_domain) (struct default_catalog_reader_ty *dcatr, + char *name, lex_pos_ty *name_pos); /* How to add a message to the list. */ void (*add_message) (struct default_catalog_reader_ty *dcatr, @@ -127,7 +128,7 @@ extern void default_destructor (abstract_catalog_reader_ty *catr); extern void default_parse_brief (abstract_catalog_reader_ty *catr); extern void default_parse_debrief (abstract_catalog_reader_ty *catr); extern void default_directive_domain (abstract_catalog_reader_ty *catr, - char *name); + char *name, lex_pos_ty *name_pos); extern void default_directive_message (abstract_catalog_reader_ty *catr, char *msgctxt, char *msgid, @@ -146,7 +147,8 @@ extern void default_comment_filepos (abstract_catalog_reader_ty *catr, const char *file_name, size_t line_number); extern void default_comment_special (abstract_catalog_reader_ty *catr, const char *s); -extern void default_set_domain (default_catalog_reader_ty *dcatr, char *name); +extern void default_set_domain (default_catalog_reader_ty *dcatr, + char *name, lex_pos_ty *name_pos); extern void default_add_message (default_catalog_reader_ty *dcatr, char *msgctxt, char *msgid, diff --git a/gettext-tools/src/xgettext.c b/gettext-tools/src/xgettext.c index aec434313..c470b334b 100644 --- a/gettext-tools/src/xgettext.c +++ b/gettext-tools/src/xgettext.c @@ -1268,9 +1268,10 @@ or by email to <%s>.\n"), static void -exclude_directive_domain (abstract_catalog_reader_ty *catr, char *name) +exclude_directive_domain (abstract_catalog_reader_ty *catr, + char *name, lex_pos_ty *name_pos) { - po_gram_error_at_line (&gram_pos, + po_gram_error_at_line (name_pos, _("this file may not contain domain directives")); }