From: Bruno Haible Date: Mon, 7 May 2001 13:12:13 +0000 (+0000) Subject: Record the obsoleteness status in the message_ty struct. X-Git-Tag: v0.11~738 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24993cc5cfe5b23520225d5db1c16384bbbb1fef;p=thirdparty%2Fgettext.git Record the obsoleteness status in the message_ty struct. --- diff --git a/src/ChangeLog b/src/ChangeLog index 47a2b762d..44c5801f5 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,21 @@ +2001-04-30 Bruno Haible + + Save the messages' obsoleteness status in the 'message_ty'. + * po.h (struct po_method_ty): Add 'obsolete' argument to + directive_message method. + (po_callback_message): Add 'obsolete' argument. + * po.c (po_directive_message): Add 'obsolete' argument. Pass it to + method->directive_message. + (po_callback_message): Add 'obsolete' argument. + * po-gram-gen.y (message): Pass 'obsolete' argument to + po_callback_message. + * msgcmp.c (compare_directive_message): Add 'obsolete' argument. + * msgcomm.c (extract_directive_message): Likewise. + * msgfmt.c (format_directive_message): Likewise. + * xgettext.c (exclude_directive_message, extract_directive_message): + Likewise. + * read-po.c (readall_directive_message): Likewise. Set mp->obsolete. + 2001-05-01 Bruno Haible Reduce running time for very long msgstrs from O(n^2) to O(n) where diff --git a/src/msgcmp.c b/src/msgcmp.c index ef07b1dbb..816cbe1c7 100644 --- a/src/msgcmp.c +++ b/src/msgcmp.c @@ -80,7 +80,8 @@ static void compare_directive_message PARAMS ((po_ty *__that, char *__msgid, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); static void compare_parse_debrief PARAMS ((po_ty *__that)); @@ -338,7 +339,7 @@ compare_directive_domain (that, name) static void compare_directive_message (that, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, obsolete) po_ty *that; char *msgid; lex_pos_ty *msgid_pos; @@ -346,6 +347,7 @@ compare_directive_message (that, msgid, msgid_pos, msgid_plural, char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { compare_class_ty *this = (compare_class_ty *) that; message_ty *mp; diff --git a/src/msgcomm.c b/src/msgcomm.c index 420227043..7e4917a9c 100644 --- a/src/msgcomm.c +++ b/src/msgcomm.c @@ -115,7 +115,8 @@ static void extract_directive_message PARAMS ((po_ty *__that, char *__msgid, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int obsolete)); static void extract_parse_brief PARAMS ((po_ty *__that)); static void extract_comment PARAMS ((po_ty *__that, const char *__s)); static void extract_comment_dot PARAMS ((po_ty *__that, const char *__s)); @@ -564,7 +565,7 @@ extract_directive_domain (that, name) static void extract_directive_message (that, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, obsolete) po_ty *that; char *msgid; lex_pos_ty *msgid_pos; @@ -572,6 +573,7 @@ extract_directive_message (that, msgid, msgid_pos, msgid_plural, char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { extract_class_ty *this = (extract_class_ty *)that; message_ty *mp; diff --git a/src/msgfmt.c b/src/msgfmt.c index 3b10a156c..e175597d9 100644 --- a/src/msgfmt.c +++ b/src/msgfmt.c @@ -176,7 +176,8 @@ static void format_directive_message PARAMS ((po_ty *__pop, char *__msgid, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); static void format_comment_special PARAMS ((po_ty *pop, const char *s)); static void format_debrief PARAMS ((po_ty *)); static struct msg_domain *new_domain PARAMS ((const char *name)); @@ -552,7 +553,7 @@ domain name \"%s\" not suitable as file name: will use prefix"), name); /* Process `msgid'/`msgstr' pair from .po file. */ static void format_directive_message (that, msgid_string, msgid_pos, msgid_plural, - msgstr_string, msgstr_len, msgstr_pos) + msgstr_string, msgstr_len, msgstr_pos, obsolete) po_ty *that; char *msgid_string; lex_pos_ty *msgid_pos; @@ -560,6 +561,7 @@ format_directive_message (that, msgid_string, msgid_pos, msgid_plural, char *msgstr_string; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { msgfmt_class_ty *this = (msgfmt_class_ty *) that; struct hashtable_entry *entry; diff --git a/src/po-gram-gen.y b/src/po-gram-gen.y index fdee4862d..b539b56b6 100644 --- a/src/po-gram-gen.y +++ b/src/po-gram-gen.y @@ -145,7 +145,8 @@ message check_obsolete ($1, $4); if (!$1.obsolete || pass_obsolete_entries) po_callback_message (string2, &$1.pos, NULL, - string4, strlen (string4) + 1, &$3.pos); + string4, strlen (string4) + 1, &$3.pos, + $1.obsolete); else { free (string2); @@ -161,7 +162,8 @@ message check_obsolete ($1, $4); if (!$1.obsolete || pass_obsolete_entries) po_callback_message (string2, &$1.pos, $3.string, - $4.rhs.msgstr, $4.rhs.msgstr_len, &$4.pos); + $4.rhs.msgstr, $4.rhs.msgstr_len, &$4.pos, + $1.obsolete); else { free (string2); diff --git a/src/po.c b/src/po.c index 0bf95ffcd..e9ccb33da 100644 --- a/src/po.c +++ b/src/po.c @@ -39,7 +39,8 @@ static void po_directive_message PARAMS ((po_ty *__pop, char *__msgid, lex_pos_ty *__msgid_pos, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); static void po_comment PARAMS ((po_ty *__pop, const char *__s)); static void po_comment_dot PARAMS ((po_ty *__pop, const char *__s)); static void po_comment_filepos PARAMS ((po_ty *__pop, const char *__name, @@ -136,7 +137,7 @@ po_callback_domain (name) static void po_directive_message (pop, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, obsolete) po_ty *pop; char *msgid; lex_pos_ty *msgid_pos; @@ -144,22 +145,25 @@ po_directive_message (pop, msgid, msgid_pos, msgid_plural, char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { if (pop->method->directive_message) pop->method->directive_message (pop, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos); + msgstr, msgstr_len, msgstr_pos, obsolete); } void po_callback_message (msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, + obsolete) char *msgid; lex_pos_ty *msgid_pos; char *msgid_plural; char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { /* assert(callback_arg); */ @@ -168,7 +172,7 @@ po_callback_message (msgid, msgid_pos, msgid_plural, po_lex_charset_set (msgstr, gram_pos.file_name); po_directive_message (callback_arg, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos); + msgstr, msgstr_len, msgstr_pos, obsolete); } diff --git a/src/po.h b/src/po.h index 0b77f8e85..069296dc5 100644 --- a/src/po.h +++ b/src/po.h @@ -59,7 +59,8 @@ struct po_method_ty char *__msgid, lex_pos_ty *__msgid_pos, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); /* This method is invoked before the parse, but after the file is opened by the lexer. */ @@ -134,7 +135,8 @@ extern void po_callback_message PARAMS ((char *__msgid, lex_pos_ty *__msgid_pos, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); extern void po_callback_comment PARAMS ((const char *__s)); extern void po_callback_comment_dot PARAMS ((const char *__s)); extern void po_callback_comment_filepos PARAMS ((const char *__s, int __line)); diff --git a/src/read-po.c b/src/read-po.c index 920fc7c34..7c502494a 100644 --- a/src/read-po.c +++ b/src/read-po.c @@ -76,7 +76,8 @@ static void readall_directive_message PARAMS ((po_ty *that, char *msgid, lex_pos_ty *msgid_pos, char *msgid_plural, char *msgstr, size_t msgstr_len, - lex_pos_ty *msgstr_pos)); + lex_pos_ty *msgstr_pos, + int obsolete)); static void readall_parse_brief PARAMS ((po_ty *that)); static void readall_parse_debrief PARAMS ((po_ty *that)); static void readall_comment PARAMS ((po_ty *that, const char *s)); @@ -160,7 +161,7 @@ readall_directive_domain (that, name) static void readall_directive_message (that, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, obsolete) po_ty *that; char *msgid; lex_pos_ty *msgid_pos; @@ -168,6 +169,7 @@ readall_directive_message (that, msgid, msgid_pos, msgid_plural, char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { readall_class_ty *this = (readall_class_ty *) that; message_ty *mp; @@ -180,11 +182,16 @@ readall_directive_message (that, msgid, msgid_pos, msgid_plural, /* See if this message ID has been seen before. */ mp = message_list_search (this->mlp, msgid); if (mp) - free (msgid); + { + free (msgid); + if (!obsolete) + mp->obsolete = 0; + } else { mp = message_alloc (msgid, msgid_plural); message_list_append (this->mlp, mp); + mp->obsolete = obsolete; } /* Add the accumulated comments to the message. Clear the diff --git a/src/xgettext.c b/src/xgettext.c index 5c451bf3e..abfba6184 100644 --- a/src/xgettext.c +++ b/src/xgettext.c @@ -157,7 +157,8 @@ static void exclude_directive_message PARAMS ((po_ty *__pop, char *__msgid, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); static void read_exclusion_file PARAMS ((char *__file_name)); static message_ty *remember_a_message PARAMS ((message_list_ty *__mlp, xgettext_token_ty *__tp)); @@ -172,7 +173,8 @@ static void extract_directive_message PARAMS ((po_ty *__that, char *__msgid, char *__msgid_plural, char *__msgstr, size_t __msgstr_len, - lex_pos_ty *__msgstr_pos)); + lex_pos_ty *__msgstr_pos, + int __obsolete)); static void extract_parse_brief PARAMS ((po_ty *__that)); static void extract_comment PARAMS ((po_ty *__that, const char *__s)); static void extract_comment_dot PARAMS ((po_ty *__that, const char *__s)); @@ -675,7 +677,7 @@ exclude_directive_domain (pop, name) static void exclude_directive_message (pop, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, obsolete) po_ty *pop; char *msgid; lex_pos_ty *msgid_pos; @@ -683,6 +685,7 @@ exclude_directive_message (pop, msgid, msgid_pos, msgid_plural, char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { message_ty *mp; @@ -1093,7 +1096,7 @@ extract_directive_domain (that, name) static void extract_directive_message (that, msgid, msgid_pos, msgid_plural, - msgstr, msgstr_len, msgstr_pos) + msgstr, msgstr_len, msgstr_pos, obsolete) po_ty *that; char *msgid; lex_pos_ty *msgid_pos; @@ -1101,6 +1104,7 @@ extract_directive_message (that, msgid, msgid_pos, msgid_plural, char *msgstr; size_t msgstr_len; lex_pos_ty *msgstr_pos; + int obsolete; { extract_class_ty *this = (extract_class_ty *)that; message_ty *mp;