bug-gettext
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gettext] Bug#641371: xgettext -k_ hello.scm fails if block-comm


From: David Pirotte
Subject: Re: [bug-gettext] Bug#641371: xgettext -k_ hello.scm fails if block-comment are used inside a function (fwd)
Date: Tue, 11 Oct 2011 19:20:36 -0300

Hello Bruno,
Santiago,

        I am not sure I should reopen or if reply-all as I am doing now is the 
right
        thing to do, please inform me if you prefer a new bug report...

Whereas the patch you sent - here below - did solve the problem I originally
submitted, it still does not handle properly all modes of commenting code in 
scheme.
The following 2 other ways fail:

        #| ... |#       [and nested 'friends']
        #;

Here is a modified hello.scm to help you as much as I can. I was actually happy
since I so far only used #! !# and ; to comment my code, but after some talking 
on
guile iirc, others did ask, then I tried and found out ...

I am not sure if xgettext uses libguile/read.c or not, but in case it does, 
please
note that I did see your bug report and Andy's correction and I did a git pull 
to
get the very latest guile  [guile (GNU Guile) 2.0.2.59-eddd8 as of
yesterday] before to try xgettext on the attached hello.scm

Many thanks again,
David

;; --

> 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
> > address@hidden@ -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  <address@hidden>
> 
>       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 <address@hidden>
>       via Santiago Vila <address@hidden>.
> 
> --- 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 <address@hidden>, 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;
>                  }

Attachment: hello.scm
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]