From 686f9f72f4ee60ccea8244cbd49cd2bb1c29a6e0 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Thu, 15 Jan 2009 09:05:19 +0000 Subject: [PATCH] Add support for msgctxt to the log output. --- gettext-runtime/intl/ChangeLog | 8 ++++++++ gettext-runtime/intl/log.c | 26 +++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/gettext-runtime/intl/ChangeLog b/gettext-runtime/intl/ChangeLog index ba7b37255..6b9982101 100644 --- a/gettext-runtime/intl/ChangeLog +++ b/gettext-runtime/intl/ChangeLog @@ -1,3 +1,11 @@ +2009-01-15 Bruno Haible + + * log.c (MSGCTXT_SEPARATOR): New macro. + (print_escaped): Add an str_end argument. + (_nl_log_untranslated_locked): If msgid1 contains the msgctxt + separator, split it into msgctxt and msgid. + Reported at . + 2008-11-10 Ingo Weinhold * config.charset: Treat Haiku like BeOS. diff --git a/gettext-runtime/intl/log.c b/gettext-runtime/intl/log.c index e3ab5d0e6..3f18b166c 100644 --- a/gettext-runtime/intl/log.c +++ b/gettext-runtime/intl/log.c @@ -1,5 +1,5 @@ /* Log file output. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published @@ -33,16 +33,19 @@ # include "lock.h" #endif +/* Separator between msgctxt and msgid in .mo files. */ +#define MSGCTXT_SEPARATOR '\004' /* EOT */ + /* Print an ASCII string with quotes and escape sequences where needed. */ static void -print_escaped (FILE *stream, const char *str) +print_escaped (FILE *stream, const char *str, const char *str_end) { putc ('"', stream); - for (; *str != '\0'; str++) + for (; str != str_end; str++) if (*str == '\n') { fputs ("\\n\"", stream); - if (str[1] == '\0') + if (str + 1 == str_end) return; fputs ("\n\"", stream); } @@ -64,6 +67,7 @@ _nl_log_untranslated_locked (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural) { FILE *logfile; + const char *separator; /* Can we reuse the last opened logfile? */ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0) @@ -91,13 +95,21 @@ _nl_log_untranslated_locked (const char *logfilename, const char *domainname, logfile = last_logfile; fprintf (logfile, "domain "); - print_escaped (logfile, domainname); + print_escaped (logfile, domainname, domainname + strlen (domainname)); + separator = strchr (msgid1, MSGCTXT_SEPARATOR); + if (separator != NULL) + { + /* The part before the MSGCTXT_SEPARATOR is the msgctxt. */ + fprintf (logfile, "\nmsgctxt "); + print_escaped (logfile, msgid1, separator); + msgid1 = separator + 1; + } fprintf (logfile, "\nmsgid "); - print_escaped (logfile, msgid1); + print_escaped (logfile, msgid1, msgid1 + strlen (msgid1)); if (plural) { fprintf (logfile, "\nmsgid_plural "); - print_escaped (logfile, msgid2); + print_escaped (logfile, msgid2, msgid2 + strlen (msgid2)); fprintf (logfile, "\nmsgstr[0] \"\"\n"); } else -- 2.47.2