+2001-04-30 Bruno Haible <haible@clisp.cons.org>
+
+ 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 <haible@clisp.cons.org>
Reduce running time for very long msgstrs from O(n^2) to O(n) where
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));
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;
char *msgstr;
size_t msgstr_len;
lex_pos_ty *msgstr_pos;
+ int obsolete;
{
compare_class_ty *this = (compare_class_ty *) that;
message_ty *mp;
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));
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;
char *msgstr;
size_t msgstr_len;
lex_pos_ty *msgstr_pos;
+ int obsolete;
{
extract_class_ty *this = (extract_class_ty *)that;
message_ty *mp;
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));
/* 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;
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;
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);
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);
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,
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;
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); */
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);
}
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. */
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));
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));
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;
char *msgstr;
size_t msgstr_len;
lex_pos_ty *msgstr_pos;
+ int obsolete;
{
readall_class_ty *this = (readall_class_ty *) that;
message_ty *mp;
/* 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
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));
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));
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;
char *msgstr;
size_t msgstr_len;
lex_pos_ty *msgstr_pos;
+ int obsolete;
{
message_ty *mp;
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;
char *msgstr;
size_t msgstr_len;
lex_pos_ty *msgstr_pos;
+ int obsolete;
{
extract_class_ty *this = (extract_class_ty *)that;
message_ty *mp;