git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH i18n 01/11] Add three convenient format printing functions with \n automatically appended

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Apr 16, 2012, 12:49 UTC
Message-ID
<1334580603-11577-2-git-send-email-pclouds@gmail.com>
In-Reply-To
<1334580603-11577-1-git-send-email-pclouds@gmail.com>

These functions are helpful when we do not want to expose \n to translators. For example

    printf("hello world\n");
can be converted to
    printf_ln(_("hello world"));
---
 strbuf.c |   33 +++++++++++++++++++++++++++++++++
 strbuf.h |    7 +++++++
 2 files changed, 40 insertions(+), 0 deletions(-)
diff --git a/strbuf.c b/strbuf.c
index 5135d59..9fbc75c 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -464,3 +464,36 @@ void strbuf_addstr_urlencode(struct strbuf *sb, const char *s,
 {
 	strbuf_add_urlencode(sb, s, strlen(s), reserved);
 }
+
+void strbuf_addf_ln(struct strbuf *sb, const char *fmt, ...)
+{
+	va_list ap;
+	va_start(ap, fmt);
+	strbuf_vaddf(sb, fmt, ap);
+	va_end(ap);
+	strbuf_addch(sb, '\n');
+}
+
+int printf_ln(const char *fmt, ...)
+{
+	int ret;
+	va_list ap;
+	va_start(ap, fmt);
+	ret = vprintf(fmt, ap);
+	va_end(ap);
+	if (ret >= 0)
+		ret += printf("\n");
+	return ret;
+}
+
+int fprintf_ln(FILE *fp, const char *fmt, ...)
+{
+	int ret;
+	va_list ap;
+	va_start(ap, fmt);
+	ret = vfprintf(fp, fmt, ap);
+	va_end(ap);
+	if (ret >= 0)
+		ret += fprintf(fp, "\n");
+	return ret;
+}
diff --git a/strbuf.h b/strbuf.h
index 3effaa8..b888d40 100644
--- a/strbuf.h
+++ b/strbuf.h
@@ -99,6 +99,8 @@ __attribute__((format (printf,2,3)))
 extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...);
 __attribute__((format (printf,2,0)))
 extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap);
+__attribute__((format (printf,2,3)))
+extern void strbuf_addf_ln(struct strbuf *sb, const char *fmt, ...);
 
 extern void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, size_t size);
 
@@ -129,4 +131,9 @@ extern void strbuf_add_urlencode(struct strbuf *, const char *, size_t,
 extern void strbuf_addstr_urlencode(struct strbuf *, const char *,
 				    int reserved);
 
+__attribute__((format (printf,1,2)))
+extern int printf_ln(const char *fmt, ...);
+__attribute__((format (printf,2,3)))
+extern int fprintf_ln(FILE *fp, const char *fmt, ...);
+
 #endif /* STRBUF_H */
-- 
1.7.3.1.256.g2539c.dirty
Previous: Nguyễn Thái Ngọc DuyNext: Jonathan Nieder
Message 2 of 21 in “Mark more strings for translation”
  1. 00/11 Mark more strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  2. 01/11 Add three convenient format printing functions with \n automatically appendedNguyễn Thái Ngọc Duy, Apr 16, 2012
  3. Jonathan NiederApr 16, 2012
  4. Erik Faye-LundApr 17, 2012
  5. 02/11 i18n: mark relative dates for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  6. 03/11 i18n: parseopt: lookup help and argument translations when showing usageNguyễn Thái Ngọc Duy, Apr 16, 2012
  7. Jonathan NiederApr 16, 2012
  8. Jonathan NiederApr 16, 2012
  9. 04/11 i18n: help: mark parseopt strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  10. 05/11 i18n: help: mark strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  11. Jonathan NiederApr 18, 2012
  12. 06/11 i18n: make warn_dangling_symref() automatically append \nNguyễn Thái Ngọc Duy, Apr 16, 2012
  13. 07/11 i18n: remote: mark strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  14. 08/11 i18n: apply: mark strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  15. 09/11 i18n: apply: update say_patch_name to give translators complete sentenceNguyễn Thái Ngọc Duy, Apr 16, 2012
  16. Zbigniew Jędrzejewski-SzmekApr 22, 2012
  17. Nguyen Thai Ngoc DuyApr 23, 2012
  18. 10/11 i18n: index-pack: mark strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  19. 11/11 i18n: bundle: mark strings for translationNguyễn Thái Ngọc Duy, Apr 16, 2012
  20. Jonathan NiederApr 18, 2012
  21. Nguyen Thai Ngoc DuyApr 22, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.