]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Add support for msgctxt to the log output.
authorBruno Haible <bruno@clisp.org>
Thu, 15 Jan 2009 09:05:19 +0000 (09:05 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:15:58 +0000 (12:15 +0200)
gettext-runtime/intl/ChangeLog
gettext-runtime/intl/log.c

index ba7b37255f400aea45e6747f092eb43b656c4675..6b9982101e15421639f3b7fefb0ceca12ca4b4f7 100644 (file)
@@ -1,3 +1,11 @@
+2009-01-15  Bruno Haible  <bruno@clisp.org>
+
+       * 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 <https://savannah.gnu.org/bugs/?25315>.
+
 2008-11-10  Ingo Weinhold  <ingo_weinhold@gmx.de>
 
        * config.charset: Treat Haiku like BeOS.
index e3ab5d0e66b27b1c0cea178fff1ccf9803722786..3f18b166c5432a464ff98efda14360015ad88599 100644 (file)
@@ -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
 # 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