Hello, David Pirotte wrote: > I found that > xgettext will properly work until it reaches a block-comment inside a > scheme function [as opposed to a toplevel block-comment which xgettext > appears to propely manage. > > On the modified hello.scm below, if you run: > > xgettext -k_ -o hello.pot hello.scm > > and cat hello.pot, you'll see that xgettext 'stopped' working properly > after extracting "let's see: xgettext 1". In case you could not > reproduce exactly, I'll also attach the hello.pot I got here. > > ;; hello.scm [modified] starts here > #!@GUILE@ -s > !# > ;;; Example for use of GNU gettext. > ;;; This file is in the public domain. > > ;;; Source code of the GNU guile program. > > (use-modules (ice-9 format)) > > (catch #t (lambda () (setlocale LC_ALL "")) (lambda args #f)) > (textdomain "hello-guile") > (bindtextdomain "hello-guile" "@localedir@") > (define _ gettext) > > (display (_ "Hello, world!")) > (newline) > (format #t (_ "This program is running as process number ~D.") (getpid)) > (newline) > > #! > this toplevel block-comment does seem to confuse ngettext > (_ "this first string should not be extracted") > !# > > (define (further-testing-xgettext) > (_ "let's see: xgettext 1") > #! > then for some reason, i'v noticed that xgettext gets confused if > block-comment is used inside a function, unlike @ toplevel > (_ "this second string should not be extracted") > !# > (_ "let's see: xgettext 2")) > > (display (_ "let's see: xgettext 3")) > ;; hello.scm [modified] ends here
Thank you. It is perfectly reproducible. The point is that you are using a syntax which is valid in guile-2.0 but not in guile-1.6.4 or guile-1.7.1. In these older versions, the !# had to come on a line of its own, without spaces. I'm applying this patch to teach xgettext the newer (relaxed) syntax for the end of block comments. 2011-10-04 Bruno Haible <br...@clisp.org> xgettext for Scheme: Understand guile 2.0 comment syntax, part 1. * x-scheme.c (read_object): Understand !# as a block comment terminator even when not surrounded by newlines. Reported by David Pirotte <da...@altosw.be> via Santiago Vila <sanv...@unex.es>. --- gettext-tools/src/x-scheme.c.orig Tue Oct 4 22:58:49 2011 +++ gettext-tools/src/x-scheme.c Tue Oct 4 22:20:11 2011 @@ -1,5 +1,5 @@ /* xgettext Scheme backend. - Copyright (C) 2004-2009 Free Software Foundation, Inc. + Copyright (C) 2004-2009, 2011 Free Software Foundation, Inc. This file was written by Bruno Haible <br...@clisp.org>, 2004-2005. @@ -40,7 +40,7 @@ /* The Scheme syntax is described in R5RS. It is implemented in - guile-1.6.4/libguile/read.c. + guile-2.0.0/libguile/read.c. Since we are interested only in strings and in forms similar to (gettext msgid ...) or (ngettext msgid msgid_plural ...) @@ -60,7 +60,7 @@ - The syntax code assigned to each character, and how tokens are built up from characters (single escape, multiple escape etc.). - - Comment syntax: ';' and '#! ... \n!#\n'. + - Comment syntax: ';' and '#! ... !#'. - String syntax: "..." with single escapes. @@ -935,12 +935,10 @@ } case '!': - /* Block comment '#! ... \n!#\n'. We don't extract it + /* Block comment '#! ... !#'. We don't extract it because it's only used to introduce scripts on Unix. */ { - int last1 = 0; - int last2 = 0; - int last3 = 0; + int last = 0; for (;;) { @@ -948,12 +946,9 @@ if (c == EOF) /* EOF is not allowed here. But be tolerant. */ break; - if (last3 == '\n' && last2 == '!' && last1 == '#' - && c == '\n') + if (last == '!' && c == '#') break; - last3 = last2; - last2 = last1; - last1 = c; + last = c; } continue; } -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org