2005-05-26 Bruno Haible * data/yacc.c: Include when NLS is enabled. (BISON_I18N): Renamed from _. Use dcgettext when NLS is enabled. * po/POTFILES.in: Remove autogenerated file src/parse-gram.c. * skeleton-po: New directory. * skeleton-po/Makefile.in.in: New file, copied from po/. * skeleton-po/Rules-quot: Likewise. * skeleton-po/quot.sed: Likewise. * skeleton-po/boldquot.sed: Likewise. * skeleton-po/address@hidden: Likewise. * skeleton-po/address@hidden: Likewise. * skeleton-po/insert-header.sin: Likewise. * skeleton-po/remove-potcdate.sin: Likewise. * skeleton-po/Makevars: New file. * skeleton-po/POTFILES.in: New file. * skeleton-po/LINGUAS: New file. * skeleton-po/de.po: New file. * data/bison-po: New directory. * data/bison-po/Makefile.am: New file. * data/Makefile.am (bisonpodir, bisonpo_DATA): New variables. * m4/bison.m4: New file. * Makefile.am (SUBDIRS): Add skeleton-po. (aclocaldir, aclocal_DATA): New variables. * configure.ac: Add AC_CONFIG_FILES of skeleton-po/Makefile.in. Define aclocaldir. * src/getargs.c (usage): Document --print-localedir option. (PRINT_LOCALEDIR_OPTION): New enum item. (long_options): Add --print-localedir option. (getargs): Handle --print-localedir option. * doc/bison.texinfo (Bison Parser): Remove paragraph about _(). (Internationalization): New section. diff -r -c3 --unidirectional-new-file bison-2.0a.orig/data/yacc.c bison-2.0a/data/yacc.c *** bison-2.0a.orig/data/yacc.c 2005-05-21 19:12:32.000000000 +0200 --- bison-2.0a/data/yacc.c 2005-05-26 13:23:27.000000000 +0200 *************** *** 261,266 **** --- 261,271 ---- #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ + #if ENABLE_NLS && defined PACKAGE && (defined (__STDC__) || defined (__cplusplus)) + # include + #endif + + #if (! defined (yyoverflow) \ && (! defined (__cplusplus) \ || (]b4_location_if([[defined (YYLTYPE_IS_TRIVIAL) && YYLTYPE_IS_TRIVIAL \ *************** *** 388,395 **** #endif /* INFRINGES ON USER NAME SPACE */ ! #ifndef _ ! # define _(msgid) msgid #endif # ifdef YYPRINT --- 393,404 ---- #endif /* INFRINGES ON USER NAME SPACE */ ! #ifndef BISON_I18N ! # if ENABLE_NLS && defined PACKAGE && (defined (__STDC__) || defined (__cplusplus)) ! # define BISON_I18N(msgid) dgettext (PACKAGE "-bison", msgid) ! # else ! # define BISON_I18N(msgid) msgid ! # endif #endif # ifdef YYPRINT *************** *** 509,515 **** } \ else \ { \ ! yyerror (]b4_yyerror_args[_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) --- 518,524 ---- } \ else \ { \ ! yyerror (]b4_yyerror_args[BISON_I18N("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) *************** *** 603,609 **** [[short int *bottom], [bottom]], [[short int *top], [top]])[ { ! YYFPRINTF (stderr, _("Stack now")); for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); --- 612,618 ---- [[short int *bottom], [bottom]], [[short int *top], [top]])[ { ! YYFPRINTF (stderr, BISON_I18N("Stack now")); for (/* Nothing. */; bottom <= top; ++bottom) YYFPRINTF (stderr, " %d", *bottom); YYFPRINTF (stderr, "\n"); *************** *** 625,631 **** { int yyi; unsigned int yylno = yyrline[yyrule]; ! YYFPRINTF (stderr, _("Reducing stack by rule %d (line %u), "), yyrule - 1, yylno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) --- 634,640 ---- { int yyi; unsigned int yylno = yyrline[yyrule]; ! YYFPRINTF (stderr, BISON_I18N("Reducing stack by rule %d (line %u), "), yyrule - 1, yylno); /* Print the symbols being reduced, and their result. */ for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) *************** *** 894,900 **** data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ ! yyoverflow (_("parser stack overflow"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), ]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[ --- 903,909 ---- data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ ! yyoverflow (BISON_I18N("parser stack overflow"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), ]b4_location_if([ &yyls1, yysize * sizeof (*yylsp),])[ *************** *** 934,947 **** yyvsp = yyvs + yysize - 1; ]b4_location_if([ yylsp = yyls + yysize - 1;])[ ! YYDPRINTF ((stderr, _("Stack size increased to %lu\n"), (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } ! YYDPRINTF ((stderr, _("Entering state %d\n"), yystate)); goto yybackup; --- 943,956 ---- yyvsp = yyvs + yysize - 1; ]b4_location_if([ yylsp = yyls + yysize - 1;])[ ! YYDPRINTF ((stderr, BISON_I18N("Stack size increased to %lu\n"), (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } ! YYDPRINTF ((stderr, BISON_I18N("Entering state %d\n"), yystate)); goto yybackup; *************** *** 965,983 **** /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { ! YYDPRINTF ((stderr, _("Reading a token: "))); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; ! YYDPRINTF ((stderr, _("Now at end of input.\n"))); } else { yytoken = YYTRANSLATE (yychar); ! YY_SYMBOL_PRINT (_("Next token is"), yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to --- 974,992 ---- /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ if (yychar == YYEMPTY) { ! YYDPRINTF ((stderr, BISON_I18N("Reading a token: "))); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; ! YYDPRINTF ((stderr, BISON_I18N("Now at end of input.\n"))); } else { yytoken = YYTRANSLATE (yychar); ! YY_SYMBOL_PRINT (BISON_I18N("Next token is"), yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to *************** *** 998,1004 **** YYACCEPT; /* Shift the look-ahead token. */ ! YY_SYMBOL_PRINT (_("Shifting"), yytoken, &yylval, &yylloc); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) --- 1007,1013 ---- YYACCEPT; /* Shift the look-ahead token. */ ! YY_SYMBOL_PRINT (BISON_I18N("Shifting"), yytoken, &yylval, &yylloc); /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) *************** *** 1106,1116 **** #if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ ! _("syntax error, unexpected %s"); ! _("syntax error, unexpected %s, expecting %s"); ! _("syntax error, unexpected %s, expecting %s or %s"); ! _("syntax error, unexpected %s, expecting %s or %s or %s"); ! _("syntax error, unexpected %s, expecting %s or %s or %s or %s"); #endif char *yyfmt; char const *yyf; --- 1115,1125 ---- #if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ ! BISON_I18N("syntax error, unexpected %s"); ! BISON_I18N("syntax error, unexpected %s, expecting %s"); ! BISON_I18N("syntax error, unexpected %s, expecting %s or %s"); ! BISON_I18N("syntax error, unexpected %s, expecting %s or %s or %s"); ! BISON_I18N("syntax error, unexpected %s, expecting %s or %s or %s or %s"); #endif char *yyfmt; char const *yyf; *************** *** 1153,1159 **** yyprefix = yyor; } ! yyf = _(yyformat); yysize1 = yysize + strlen (yyf); yysize_overflow |= yysize1 < yysize; yysize = yysize1; --- 1162,1168 ---- yyprefix = yyor; } ! yyf = BISON_I18N(yyformat); yysize1 = yysize + strlen (yyf); yysize_overflow |= yysize1 < yysize; yysize = yysize1; *************** *** 1184,1194 **** YYSTACK_FREE (yymsg); } else ! yyerror (]b4_yyerror_args[_("syntax error; also memory exhausted")); } else #endif /* YYERROR_VERBOSE */ ! yyerror (]b4_yyerror_args[_("syntax error")); } ]b4_location_if([[ yyerror_range[0] = yylloc;]])[ --- 1193,1203 ---- YYSTACK_FREE (yymsg); } else ! yyerror (]b4_yyerror_args[BISON_I18N("syntax error; also memory exhausted")); } else #endif /* YYERROR_VERBOSE */ ! yyerror (]b4_yyerror_args[BISON_I18N("syntax error")); } ]b4_location_if([[ yyerror_range[0] = yylloc;]])[ *************** *** 1207,1213 **** } else { ! yydestruct (_("Error: discarding"), yytoken, &yylval]b4_location_if([, &yylloc])[); yychar = YYEMPTY; } } --- 1216,1222 ---- } else { ! yydestruct (BISON_I18N("Error: discarding"), yytoken, &yylval]b4_location_if([, &yylloc])[); yychar = YYEMPTY; } } *************** *** 1261,1267 **** YYABORT; ]b4_location_if([[ yyerror_range[0] = *yylsp;]])[ ! yydestruct (_("Error: popping"), yystos[yystate], yyvsp]b4_location_if([, yylsp])[); YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); --- 1270,1276 ---- YYABORT; ]b4_location_if([[ yyerror_range[0] = *yylsp;]])[ ! yydestruct (BISON_I18N("Error: popping"), yystos[yystate], yyvsp]b4_location_if([, yylsp])[); YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); *************** *** 1279,1285 **** *++yylsp = yyloc;]])[ /* Shift the error token. */ ! YY_SYMBOL_PRINT (_("Shifting"), yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; --- 1288,1294 ---- *++yylsp = yyloc;]])[ /* Shift the error token. */ ! YY_SYMBOL_PRINT (BISON_I18N("Shifting"), yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; *************** *** 1304,1317 **** | yyoverflowlab -- parser overflow comes here. | `----------------------------------------------*/ yyoverflowlab: ! yyerror (]b4_yyerror_args[_("parser stack overflow")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) ! yydestruct (_("Error: discarding lookahead"), yytoken, &yylval]b4_location_if([, &yylloc])[); if (yyssp != yyss) for (;;) --- 1313,1326 ---- | yyoverflowlab -- parser overflow comes here. | `----------------------------------------------*/ yyoverflowlab: ! yyerror (]b4_yyerror_args[BISON_I18N("parser stack overflow")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) ! yydestruct (BISON_I18N("Error: discarding lookahead"), yytoken, &yylval]b4_location_if([, &yylloc])[); if (yyssp != yyss) for (;;) *************** *** 1320,1326 **** YYPOPSTACK; if (yyssp == yyss) break; ! yydestruct (_("Error: popping"), yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[); } #ifndef yyoverflow --- 1329,1335 ---- YYPOPSTACK; if (yyssp == yyss) break; ! yydestruct (BISON_I18N("Error: popping"), yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[); } #ifndef yyoverflow diff -r -c3 --unidirectional-new-file bison-2.0a.orig/po/POTFILES.in bison-2.0a/po/POTFILES.in *** bison-2.0a.orig/po/POTFILES.in 2005-04-14 01:55:19.000000000 +0200 --- bison-2.0a/po/POTFILES.in 2005-05-26 12:14:58.000000000 +0200 *************** *** 4,10 **** src/getargs.c src/gram.c src/main.c - src/parse-gram.c src/parse-gram.y src/print.c src/reader.c --- 4,9 ---- diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/Makefile.in.in bison-2.0a/skeleton-po/Makefile.in.in *** bison-2.0a.orig/skeleton-po/Makefile.in.in 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/Makefile.in.in 2005-05-26 12:21:34.000000000 +0200 *************** *** 0 **** --- 1,353 ---- + # Makefile for PO directory in any package using GNU gettext. + # Copyright (C) 1995-1997, 2000-2003 by Ulrich Drepper + # + # This file can be copied and used freely without restrictions. It can + # be used in projects which are not available under the GNU General Public + # License but which still want to provide support for the GNU gettext + # functionality. + # Please note that the actual code of GNU gettext is covered by the GNU + # General Public License and is *not* in the public domain. + + PACKAGE = @PACKAGE@ + VERSION = @VERSION@ + + SHELL = /bin/sh + @SET_MAKE@ + + srcdir = @srcdir@ + top_srcdir = @top_srcdir@ + VPATH = @srcdir@ + + prefix = @prefix@ + exec_prefix = @exec_prefix@ + datadir = @datadir@ + localedir = $(datadir)/locale + gettextsrcdir = $(datadir)/gettext/po + + INSTALL = @INSTALL@ + INSTALL_DATA = @INSTALL_DATA@ + MKINSTALLDIRS = @MKINSTALLDIRS@ + mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + + GMSGFMT = @GMSGFMT@ + MSGFMT = @MSGFMT@ + XGETTEXT = @XGETTEXT@ + MSGMERGE = msgmerge + MSGMERGE_UPDATE = @MSGMERGE@ --update + MSGINIT = msginit + MSGCONV = msgconv + MSGFILTER = msgfilter + + POFILES = @POFILES@ + GMOFILES = @GMOFILES@ + UPDATEPOFILES = @UPDATEPOFILES@ + DUMMYPOFILES = @DUMMYPOFILES@ + DISTFILES.common = Makefile.in.in remove-potcdate.sin \ + $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) + DISTFILES = $(DISTFILES.common) Makevars POTFILES.in $(DOMAIN).pot stamp-po \ + $(POFILES) $(GMOFILES) \ + $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + + POTFILES = \ + + CATALOGS = @CATALOGS@ + + # Makevars gets inserted here. (Don't remove this line!) + + .SUFFIXES: + .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-update + + .po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + + .po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + + .sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + + all: address@hidden@ + + all-yes: stamp-po + all-no: + + # stamp-po is a timestamp denoting the last time at which the CATALOGS have + # been loosely updated. Its purpose is that when a developer or translator + # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, + # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent + # invocations of "make" will do nothing. This timestamp would not be necessary + # if updating the $(CATALOGS) would always touch them; however, the rule for + # $(POFILES) has been designed to not touch files that don't need to be + # changed. + stamp-po: $(srcdir)/$(DOMAIN).pot + test -z "$(CATALOGS)" || $(MAKE) $(CATALOGS) + @echo "touch stamp-po" + @echo timestamp > stamp-poT + @mv stamp-poT stamp-po + + # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', + # otherwise packages like GCC can not be built if only parts of the source + # have been downloaded. + + # This target rebuilds $(DOMAIN).pot; it is an expensive operation. + # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. + $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address='$(MSGID_BUGS_ADDRESS)' + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + + # This rule has no dependencies: we don't need to update $(DOMAIN).pot at + # every "make" invocation, only create it when it is missing. + # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. + $(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + + # This target rebuilds a PO file if $(DOMAIN).pot has changed. + # Note that a PO file is not touched if it doesn't need to be changed. + $(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot + + + install: install-exec install-data + install-exec: + install-data: address@hidden@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi + install-data-no: all + install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + + install-strip: install + + installdirs: installdirs-exec installdirs-data + installdirs-exec: + installdirs-data: address@hidden@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi + installdirs-data-no: + installdirs-data-yes: + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + + # Define this as empty until I found a useful application. + installcheck: + + uninstall: uninstall-exec uninstall-data + uninstall-exec: + uninstall-data: address@hidden@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi + uninstall-data-no: + uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + + check: all + + info dvi ps pdf html tags TAGS ctags CTAGS ID: + + mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + + clean: mostlyclean + + distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + + maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + + distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 + # This is a separate target because 'update-po' must be executed before. + dist2: $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir); \ + else \ + cp -p $(srcdir)/$$file $(distdir); \ + fi; \ + done + + update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + + # General rule for updating PO files. + + .nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + + $(DUMMYPOFILES): + + update-gmo: Makefile $(GMOFILES) + @: + + Makefile: Makefile.in.in $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/address@hidden CONFIG_HEADERS= \ + $(SHELL) ./config.status + + force: + + # Tell versions [3.59,3.63) of GNU make not to export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/Rules-quot bison-2.0a/skeleton-po/Rules-quot *** bison-2.0a.orig/skeleton-po/Rules-quot 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/Rules-quot 2004-09-27 22:43:21.000000000 +0200 *************** *** 0 **** --- 1,42 ---- + # Special Makefile rules for English message catalogs with quotation marks. + + DISTFILES.common.extra1 = quot.sed boldquot.sed address@hidden address@hidden insert-header.sin Rules-quot + + .SUFFIXES: .insert-header .po-update-en + + address@hidden: address@hidden + address@hidden: address@hidden + + .insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + + address@hidden: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/address@hidden/g' $(srcdir)/insert-header.sin > address@hidden + + address@hidden: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/address@hidden/g' $(srcdir)/insert-header.sin > address@hidden + + mostlyclean: mostlyclean-quot + mostlyclean-quot: + rm -f *.insert-header diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/address@hidden bison-2.0a/skeleton-po/address@hidden *** bison-2.0a.orig/skeleton-po/address@hidden 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/address@hidden 2004-09-27 22:43:22.000000000 +0200 *************** *** 0 **** --- 1,22 ---- + # All this catalog "translates" are quotation characters. + # The msgids must be ASCII and therefore cannot contain real quotation + # characters, only substitutes like grave accent (0x60), apostrophe (0x27) + # and double quote (0x22). These substitutes look strange; see + # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html + # + # This catalog translates grave accent (0x60) and apostrophe (0x27) to + # left single quotation mark (U+2018) and right single quotation mark (U+2019). + # It also translates pairs of apostrophe (0x27) to + # left single quotation mark (U+2018) and right single quotation mark (U+2019) + # and pairs of quotation mark (0x22) to + # left double quotation mark (U+201C) and right double quotation mark (U+201D). + # + # When output to an UTF-8 terminal, the quotation characters appear perfectly. + # When output to an ISO-8859-1 terminal, the single quotation marks are + # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to + # grave/acute accent (by libiconv), and the double quotation marks are + # transliterated to 0x22. + # When output to an ASCII terminal, the single quotation marks are + # transliterated to apostrophes, and the double quotation marks are + # transliterated to 0x22. + # diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/address@hidden bison-2.0a/skeleton-po/address@hidden *** bison-2.0a.orig/skeleton-po/address@hidden 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/address@hidden 2004-09-27 22:43:21.000000000 +0200 *************** *** 0 **** --- 1,25 ---- + # All this catalog "translates" are quotation characters. + # The msgids must be ASCII and therefore cannot contain real quotation + # characters, only substitutes like grave accent (0x60), apostrophe (0x27) + # and double quote (0x22). These substitutes look strange; see + # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html + # + # This catalog translates grave accent (0x60) and apostrophe (0x27) to + # left single quotation mark (U+2018) and right single quotation mark (U+2019). + # It also translates pairs of apostrophe (0x27) to + # left single quotation mark (U+2018) and right single quotation mark (U+2019) + # and pairs of quotation mark (0x22) to + # left double quotation mark (U+201C) and right double quotation mark (U+201D). + # + # When output to an UTF-8 terminal, the quotation characters appear perfectly. + # When output to an ISO-8859-1 terminal, the single quotation marks are + # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to + # grave/acute accent (by libiconv), and the double quotation marks are + # transliterated to 0x22. + # When output to an ASCII terminal, the single quotation marks are + # transliterated to apostrophes, and the double quotation marks are + # transliterated to 0x22. + # + # This catalog furthermore displays the text between the quotation marks in + # bold face, assuming the VT100/XTerm escape sequences. + # diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/insert-header.sin bison-2.0a/skeleton-po/insert-header.sin *** bison-2.0a.orig/skeleton-po/insert-header.sin 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/insert-header.sin 2004-09-27 22:43:22.000000000 +0200 *************** *** 0 **** --- 1,23 ---- + # Sed script that inserts the file called HEADER before the header entry. + # + # At each occurrence of a line starting with "msgid ", we execute the following + # commands. At the first occurrence, insert the file. At the following + # occurrences, do nothing. The distinction between the first and the following + # occurrences is achieved by looking at the hold space. + /^msgid /{ + x + # Test if the hold space is empty. + s/m/m/ + ta + # Yes it was empty. First occurrence. Read the file. + r HEADER + # Output the file's contents by reading the next line. But don't lose the + # current line while doing this. + g + N + bb + :a + # The hold space was nonempty. Following occurrences. Do nothing. + x + :b + } diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/remove-potcdate.sin bison-2.0a/skeleton-po/remove-potcdate.sin *** bison-2.0a.orig/skeleton-po/remove-potcdate.sin 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/remove-potcdate.sin 2004-09-27 22:43:22.000000000 +0200 *************** *** 0 **** --- 1,19 ---- + # Sed script that remove the POT-Creation-Date line in the header entry + # from a POT file. + # + # The distinction between the first and the following occurrences of the + # pattern is achieved by looking at the hold space. + /^"POT-Creation-Date: .*"$/{ + x + # Test if the hold space is empty. + s/P/P/ + ta + # Yes it was empty. First occurrence. Remove the line. + g + d + bb + :a + # The hold space was nonempty. Following occurrences. Do nothing. + x + :b + } diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/Makevars bison-2.0a/skeleton-po/Makevars *** bison-2.0a.orig/skeleton-po/Makevars 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/Makevars 2005-05-26 12:31:31.000000000 +0200 *************** *** 0 **** --- 1,41 ---- + # Makefile variables for PO directory in any package using GNU gettext. + + # Usually the message domain is the same as the package name. + DOMAIN = bison-skeleton + + # These two variables depend on the location of this directory. + subdir = skeleton-po + top_builddir = .. + + # These options get passed to xgettext. + XGETTEXT_OPTIONS = --keyword=BISON_I18N + + # This is the copyright holder that gets inserted into the header of the + # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding + # package. (Note that the msgstr strings, extracted from the package's + # sources, belong to the copyright holder of the package.) Translators are + # expected to transfer the copyright for their translations to this person + # or entity, or to disclaim their copyright. The empty string stands for + # the public domain; in this case the translators are expected to disclaim + # their copyright. + COPYRIGHT_HOLDER = Free Software Foundation, Inc. + + # This is the email address or URL to which the translators shall report + # bugs in the untranslated strings: + # - Strings which are not entire sentences, see the maintainer guidelines + # in the GNU gettext documentation, section 'Preparing Strings'. + # - Strings which use unclear terms or require additional context to be + # understood. + # - Strings which make invalid assumptions about notation of date, time or + # money. + # - Pluralisation problems. + # - Incorrect English spelling. + # - Incorrect formatting. + # It can be your email address, or a mailing list address where translators + # can write to without being subscribed, or the URL of a web page through + # which the translators can contact you. + MSGID_BUGS_ADDRESS = address@hidden + + # This is the list of locale categories, beyond LC_MESSAGES, for which the + # message catalogs shall be used. It is usually empty. + EXTRA_LOCALE_CATEGORIES = diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/POTFILES.in bison-2.0a/skeleton-po/POTFILES.in *** bison-2.0a.orig/skeleton-po/POTFILES.in 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/POTFILES.in 2005-05-26 12:28:44.000000000 +0200 *************** *** 0 **** --- 1 ---- + data/yacc.c diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/LINGUAS bison-2.0a/skeleton-po/LINGUAS *** bison-2.0a.orig/skeleton-po/LINGUAS 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/LINGUAS 2005-05-26 12:33:37.000000000 +0200 *************** *** 0 **** --- 1 ---- + de diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/bison-skeleton.pot bison-2.0a/skeleton-po/bison-skeleton.pot *** bison-2.0a.orig/skeleton-po/bison-skeleton.pot 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/bison-skeleton.pot 2005-05-26 13:24:16.000000000 +0200 *************** *** 0 **** --- 1,105 ---- + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR Free Software Foundation, Inc. + # This file is distributed under the same license as the PACKAGE package. + # FIRST AUTHOR , YEAR. + # + #, fuzzy + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "Report-Msgid-Bugs-To: address@hidden" + "POT-Creation-Date: 2005-05-26 13:24+0200\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=CHARSET\n" + "Content-Transfer-Encoding: 8bit\n" + + #: data/yacc.c:521 + msgid "syntax error: cannot back up" + msgstr "" + + #: data/yacc.c:615 + msgid "Stack now" + msgstr "" + + #: data/yacc.c:637 + #, c-format + msgid "Reducing stack by rule %d (line %u), " + msgstr "" + + #: data/yacc.c:906 data/yacc.c:1316 + msgid "parser stack overflow" + msgstr "" + + #: data/yacc.c:946 + #, c-format + msgid "Stack size increased to %lu\n" + msgstr "" + + #: data/yacc.c:953 + #, c-format + msgid "Entering state %d\n" + msgstr "" + + #: data/yacc.c:977 + msgid "Reading a token: " + msgstr "" + + #: data/yacc.c:984 + msgid "Now at end of input.\n" + msgstr "" + + #: data/yacc.c:989 + msgid "Next token is" + msgstr "" + + #: data/yacc.c:1010 data/yacc.c:1291 + msgid "Shifting" + msgstr "" + + #: data/yacc.c:1118 + #, c-format + msgid "syntax error, unexpected %s" + msgstr "" + + #: data/yacc.c:1119 + #, c-format + msgid "syntax error, unexpected %s, expecting %s" + msgstr "" + + #: data/yacc.c:1120 + #, c-format + msgid "syntax error, unexpected %s, expecting %s or %s" + msgstr "" + + #: data/yacc.c:1121 + #, c-format + msgid "syntax error, unexpected %s, expecting %s or %s or %s" + msgstr "" + + #: data/yacc.c:1122 + #, c-format + msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s" + msgstr "" + + #: data/yacc.c:1196 + msgid "syntax error; also memory exhausted" + msgstr "" + + #: data/yacc.c:1200 + msgid "syntax error" + msgstr "" + + #: data/yacc.c:1219 + msgid "Error: discarding" + msgstr "" + + #: data/yacc.c:1273 data/yacc.c:1332 + msgid "Error: popping" + msgstr "" + + #: data/yacc.c:1323 + msgid "Error: discarding lookahead" + msgstr "" diff -r -c3 --unidirectional-new-file bison-2.0a.orig/skeleton-po/de.po bison-2.0a/skeleton-po/de.po *** bison-2.0a.orig/skeleton-po/de.po 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/skeleton-po/de.po 2005-05-27 00:07:19.000000000 +0200 *************** *** 0 **** --- 1,109 ---- + # translation of de.po to Deutsch + # German translations for GNU Bison package + # German messages for GNU Bison. + # Copyright (C) 2005 Free Software Foundation, Inc. + # This file is distributed under the same license as the GNU Bison package. + # Bruno Haible , 2005. + # + msgid "" + msgstr "" + "Project-Id-Version: de\n" + "Report-Msgid-Bugs-To: address@hidden" + "POT-Creation-Date: 2005-05-26 13:24+0200\n" + "PO-Revision-Date: 2005-05-26 12:54+0200\n" + "Last-Translator: Bruno Haible \n" + "Language-Team: Deutsch \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "Plural-Forms: nplurals=2; plural=(n != 1);\n" + "X-Generator: KBabel 1.0.2\n" + + #: data/yacc.c:521 + msgid "syntax error: cannot back up" + msgstr "" + + #: data/yacc.c:615 + msgid "Stack now" + msgstr "Stapel jetzt:" + + #: data/yacc.c:637 + #, c-format + msgid "Reducing stack by rule %d (line %u), " + msgstr "Stapel verkleinert durch Regel %d (Zeile %u), " + + #: data/yacc.c:906 data/yacc.c:1316 + msgid "parser stack overflow" + msgstr "Überlauf des Parser-Stapels" + + #: data/yacc.c:946 + #, c-format + msgid "Stack size increased to %lu\n" + msgstr "Stapel wurde auf %lu Elemente vergrößert.\n" + + #: data/yacc.c:953 + #, c-format + msgid "Entering state %d\n" + msgstr "Eintritt in Zustand %d\n" + + #: data/yacc.c:977 + msgid "Reading a token: " + msgstr "Lese ein Token: " + + #: data/yacc.c:984 + msgid "Now at end of input.\n" + msgstr "Am Ende des Eingabestroms angelangt.\n" + + #: data/yacc.c:989 + msgid "Next token is" + msgstr "Das nächste Token ist" + + #: data/yacc.c:1010 data/yacc.c:1291 + msgid "Shifting" + msgstr "Schieben" + + #: data/yacc.c:1118 + #, c-format + msgid "syntax error, unexpected %s" + msgstr "Syntaxfehler, %s wird hier nicht erwartet" + + #: data/yacc.c:1119 + #, c-format + msgid "syntax error, unexpected %s, expecting %s" + msgstr "Syntaxfehler, %s wird hier nicht erwartet, sondern %s" + + #: data/yacc.c:1120 + #, c-format + msgid "syntax error, unexpected %s, expecting %s or %s" + msgstr "Syntaxfehler, %s wird hier nicht erwartet, sondern %s oder %s" + + #: data/yacc.c:1121 + #, c-format + msgid "syntax error, unexpected %s, expecting %s or %s or %s" + msgstr "Syntaxfehler, %s wird hier nicht erwartet, sondern %s oder %s oder %s" + + #: data/yacc.c:1122 + #, c-format + msgid "syntax error, unexpected %s, expecting %s or %s or %s or %s" + msgstr "" + "Syntaxfehler, %s wird hier nicht erwartet, sondern %s oder %s oder %s oder %s" + + #: data/yacc.c:1196 + msgid "syntax error; also memory exhausted" + msgstr "Syntaxfehler und kein Speicher mehr" + + #: data/yacc.c:1200 + msgid "syntax error" + msgstr "Syntaxfehler" + + #: data/yacc.c:1219 + msgid "Error: discarding" + msgstr "Fehler, ignoriere" + + #: data/yacc.c:1273 data/yacc.c:1332 + msgid "Error: popping" + msgstr "Fehler, entferne" + + #: data/yacc.c:1323 + msgid "Error: discarding lookahead" + msgstr "Fehler, ignoriere bereits gelesenes Token" diff -r -c3 --unidirectional-new-file bison-2.0a.orig/data/bison-po/Makefile.am bison-2.0a/data/bison-po/Makefile.am *** bison-2.0a.orig/data/bison-po/Makefile.am 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/data/bison-po/Makefile.am 2005-05-26 22:24:37.000000000 +0200 *************** *** 0 **** --- 1,142 ---- + ## Makefile for the bison-po directory + ## Copyright (C) 2005 Free Software Foundation, Inc. + ## + ## This program is free software; you can redistribute it and/or modify + ## it under the terms of the GNU General Public License as published by + ## the Free Software Foundation; either version 2, or (at your option) + ## any later version. + ## + ## This program is distributed in the hope that it will be useful, + ## but WITHOUT ANY WARRANTY; without even the implied warranty of + ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + ## GNU General Public License for more details. + ## + ## You should have received a copy of the GNU General Public License + ## along with this program; if not, write to the Free Software Foundation, + ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + ## Process this file with automake to produce Makefile.in. + + # These rules assume that the version of bison doesn't change between + # 'configure' and 'make install'. After installing a new version of bison, + # you need to "make distclean" and re-configure. + + BISON_DOMAIN = $(PACKAGE)-bison + + localedir = $(datadir)/locale + + all-local: LINGUAS + + # The LINGUAS file contains the list of languages for which translations are + # provided. It also serves as a stamp file. It and the *.mo files are + # updated everytime bison is invoked. + LINGUAS: @BISON_BUILT_FILES@ + if test @BISON_USE_NLS@ = yes; then \ + linguas=""; \ + for bisoncat in "@BISON_LOCALEDIR@"/*/LC_MESSAGES/bison-skeleton.mo; do \ + lang=`echo "$$bisoncat" | sed -e 's,^.*/\([^/]*\)/[^/]*/[^/]*$$,\1,'` ; \ + cp -p "@BISON_LOCALEDIR@"/$$lang/LC_MESSAGES/bison-skeleton.mo $(srcdir)/$$lang.mo; \ + linguas="$$linguas$$lang "; \ + done; \ + echo "$$linguas" > $(srcdir)/LINGUAS; \ + fi + + install-data-local: address@hidden@ + install-data-bison-nls-no: all-local + install-data-bison-nls-yes: all-local + @linguas=""; \ + for presentlang in `cat $(srcdir)/LINGUAS`; do \ + useit=no; \ + if test "%UNSET%" != "@USER_LINGUAS@"; then \ + desiredlanguages="@USER_LINGUAS@"; \ + for desiredlang in $$desiredlanguages; do \ + case "$$desiredlang" in \ + "$$presentlang"*) useit=yes;; \ + esac; \ + done; \ + else \ + useit=yes; \ + fi; \ + if test $$useit = yes; then \ + lang=$$presentlang; \ + dir="$(localedir)"/$$lang/LC_MESSAGES; cat=$(BISON_DOMAIN).mo; \ + $(mkinstalldirs) "$(DESTDIR)$$dir"; \ + if test -r $$lang.mo; then realcat=$$lang.mo; else realcat=$(srcdir)/$$lang.mo; fi; \ + $(INSTALL_DATA) "$$realcat" "$(DESTDIR)$$dir"/$$cat; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$$cat"; \ + fi; \ + done + + installdirs-local: address@hidden@ + installdirs-bison-nls-no: all-local + installdirs-bison-nls-yes: all-local + @linguas=""; \ + for presentlang in `cat $(srcdir)/LINGUAS`; do \ + useit=no; \ + if test "%UNSET%" != "@USER_LINGUAS@"; then \ + desiredlanguages="@USER_LINGUAS@"; \ + for desiredlang in $$desiredlanguages; do \ + case "$$desiredlang" in \ + "$$presentlang"*) useit=yes;; \ + esac; \ + done; \ + else \ + useit=yes; \ + fi; \ + if test $$useit = yes; then \ + lang=$$presentlang; \ + echo "$(mkinstalldirs) $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES"; \ + $(mkinstalldirs) "$(DESTDIR)$(localedir)"/$$lang/LC_MESSAGES; \ + fi; \ + done + + uninstall-local: address@hidden@ + uninstall-bison-nls-no: all-local + uninstall-bison-nls-yes: all-local + @linguas=""; \ + for presentlang in `cat $(srcdir)/LINGUAS`; do \ + useit=no; \ + if test "%UNSET%" != "@USER_LINGUAS@"; then \ + desiredlanguages="@USER_LINGUAS@"; \ + for desiredlang in $$desiredlanguages; do \ + case "$$desiredlang" in \ + "$$presentlang"*) useit=yes;; \ + esac; \ + done; \ + else \ + useit=yes; \ + fi; \ + if test $$useit = yes; then \ + lang=$$presentlang; \ + echo "rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(BISON_DOMAIN).mo"; \ + rm -f "$(DESTDIR)$(localedir)"/$$lang/LC_MESSAGES/$(BISON_DOMAIN).mo; \ + fi; \ + done + + # We have to handle Makefile.am and Makefile.in here, because since + # automake-1.5 it is impossible to extend the 'distdir' rule: a distdir + # declaration overrides the default distdir rule, and a distdir-local + # declaration is ignored. + # Everything would be so easy if we could write + # EXTRA_DIST = \ + # `if test -f $(srcdir)/LINGUAS; then \ + # echo LINGUAS; \ + # for lang in \`cat $(srcdir)/LINGUAS\`; do echo $$lang.mo; done; \ + # fi` + distdir: + for file in Makefile.am Makefile.in; do \ + cp -p $(srcdir)/$$file $(distdir)/$$file || exit 1; \ + done; \ + if test -f $(srcdir)/LINGUAS; then \ + for file in LINGUAS; do \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + cp -p $$d/$$file $(distdir)/$$file || exit 1; \ + done; \ + for lang in `cat $(srcdir)/LINGUAS`; do \ + file=$$lang.mo; \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + cp -p $$d/$$file $(distdir)/$$file || exit 1; \ + done; \ + fi + + MAINTAINERCLEANFILES = LINGUAS *.mo diff -r -c3 --unidirectional-new-file bison-2.0a.orig/data/Makefile.am bison-2.0a/data/Makefile.am *** bison-2.0a.orig/data/Makefile.am 2005-05-14 08:52:28.000000000 +0200 --- bison-2.0a/data/Makefile.am 2005-05-26 22:37:34.000000000 +0200 *************** *** 1,4 **** ! ## Copyright (C) 2002 Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by --- 1,4 ---- ! ## Copyright (C) 2002, 2005 Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by *************** *** 19,21 **** --- 19,24 ---- m4sugardir = $(pkgdatadir)/m4sugar dist_m4sugar_DATA = m4sugar/m4sugar.m4 + + bisonpodir = $(pkgdatadir)/bison-po + bisonpo_DATA = bison-po/Makefile.am diff -r -c3 --unidirectional-new-file bison-2.0a.orig/m4/bison.m4 bison-2.0a/m4/bison.m4 *** bison-2.0a.orig/m4/bison.m4 1970-01-01 01:00:00.000000000 +0100 --- bison-2.0a/m4/bison.m4 2005-05-26 21:48:17.000000000 +0200 *************** *** 0 **** --- 1,63 ---- + # bison.m4 serial 1 (bison-2.1) + dnl Copyright (C) 2005 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. + + dnl From Bruno Haible. + + dnl Support for internationalization of bison-generated parsers. + + dnl BISON_I18N(BISON_BUILT_FILES) + dnl should be used in configure.ac, after AM_GNU_GETTEXT. + dnl It sets BISON_USE_NLS to yes or no. If yes, it also sets BISON_LOCALEDIR + dnl to indicate where to find the bison-skeleton.mo files and USER_LINGUAS + dnl to indicate the languages for which the user wants support. + AC_DEFUN([BISON_I18N], + [ + if test -z "$USE_NLS"; then + echo "The BISON-I18N macro is used without being preceded by AM-GNU-GETTEXT." 1>&2 + exit 1 + fi + BISON_BUILT_FILES= + for f in $1; do + BISON_BUILT_FILES="$BISON_BUILT_FILES ../$f" + done + AC_SUBST(BISON_BUILT_FILES) + BISON_LOCALEDIR= + if test "$USE_NLS" = yes; then + dnl AC_PROG_YACC sets the YACC variable; other macros set the BISON variable. + if test -n "$YACC"; then + case "$YACC" in + *bison*) + if ($YACC --print-localedir) >/dev/null 2>&1; then + BISON_LOCALEDIR=`$YACC --print-localedir` + fi + ;; + esac + else + if test -n "$BISON"; then + if test "$BISON" != ":"; then + if ($BISON --print-localedir) >/dev/null 2>&1; then + BISON_LOCALEDIR=`$BISON --print-localedir` + fi + fi + fi + fi + if test -n "$BISON_LOCALEDIR"; then + AC_SUBST(BISON_LOCALEDIR) + USER_LINGUAS="${LINGUAS-%UNSET%}" + AC_SUBST(USER_LINGUAS) + if test -n "$USER_LINGUAS"; then + BISON_USE_NLS=yes + else + BISON_USE_NLS=no + fi + else + BISON_USE_NLS=no + fi + else + BISON_USE_NLS=no + fi + AC_SUBST(BISON_USE_NLS) + ]) diff -r -c3 --unidirectional-new-file bison-2.0a.orig/Makefile.am bison-2.0a/Makefile.am *** bison-2.0a.orig/Makefile.am 2005-05-14 08:52:28.000000000 +0200 --- bison-2.0a/Makefile.am 2005-05-26 13:04:41.000000000 +0200 *************** *** 1,5 **** ## Process this file with automake to produce Makefile.in -*-Makefile-*- ! ## Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by --- 1,5 ---- ## Process this file with automake to produce Makefile.in -*-Makefile-*- ! ## Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by *************** *** 18,24 **** ACLOCAL_AMFLAGS = -I m4 ! SUBDIRS = config po lib data src doc tests EXTRA_DIST = REFERENCES OChangeLog Makefile.maint GNUmakefile Makefile.cfg --- 18,28 ---- ACLOCAL_AMFLAGS = -I m4 ! SUBDIRS = config po skeleton-po lib data src doc tests ! ! # Files installed for use by automake. ! aclocaldir = @aclocaldir@ ! aclocal_DATA = m4/bison.m4 EXTRA_DIST = REFERENCES OChangeLog Makefile.maint GNUmakefile Makefile.cfg diff -r -c3 --unidirectional-new-file bison-2.0a.orig/configure.ac bison-2.0a/configure.ac *** bison-2.0a.orig/configure.ac 2005-05-22 08:44:16.000000000 +0200 --- bison-2.0a/configure.ac 2005-05-26 13:06:45.000000000 +0200 *************** *** 107,115 **** # gnulib and gettext. GNULIB_AUTOCONF_SNIPPET ! # We use po/Makevars.template, so we need at least gettext 0.12. AM_GNU_GETTEXT_VERSION([0.12]) # Initialize the test suite. AC_CONFIG_TESTDIR(tests) AC_CONFIG_FILES([tests/Makefile tests/atlocal]) --- 107,121 ---- # gnulib and gettext. GNULIB_AUTOCONF_SNIPPET ! # We use po/Makevars, so we need at least gettext 0.12. AM_GNU_GETTEXT_VERSION([0.12]) + # Internationalized parsers. + AC_CONFIG_FILES([skeleton-po/Makefile.in]) + # Autoconf macros for packages using internationalized parsers. + aclocaldir='${datadir}/aclocal' + AC_SUBST(aclocaldir) + # Initialize the test suite. AC_CONFIG_TESTDIR(tests) AC_CONFIG_FILES([tests/Makefile tests/atlocal]) diff -r -c3 --unidirectional-new-file bison-2.0a.orig/src/getargs.c bison-2.0a/src/getargs.c *** bison-2.0a.orig/src/getargs.c 2005-05-14 08:52:29.000000000 +0200 --- bison-2.0a/src/getargs.c 2005-05-26 13:16:14.000000000 +0200 *************** *** 207,215 **** fputs (_("\ Operation modes:\n\ ! -h, --help display this help and exit\n\ ! -V, --version output version information and exit\n\ ! -y, --yacc emulate POSIX yacc\n"), stdout); putc ('\n', stdout); fputs (_("\ --- 207,216 ---- fputs (_("\ Operation modes:\n\ ! -h, --help display this help and exit\n\ ! -V, --version output version information and exit\n\ ! --print-localedir output directory containing locale-dependent data\n\ ! -y, --yacc emulate POSIX yacc\n"), stdout); putc ('\n', stdout); fputs (_("\ *************** *** 289,302 **** /* Values for long options that do not have single-letter equivalents. */ enum { ! LOCATIONS_OPTION = CHAR_MAX + 1 }; static struct option const long_options[] = { /* Operation modes. */ ! { "help", no_argument, 0, 'h' }, ! { "version", no_argument, 0, 'V' }, /* Parser. */ { "name-prefix", required_argument, 0, 'p' }, --- 290,305 ---- /* Values for long options that do not have single-letter equivalents. */ enum { ! LOCATIONS_OPTION = CHAR_MAX + 1, ! PRINT_LOCALEDIR_OPTION = CHAR_MAX + 2 }; static struct option const long_options[] = { /* Operation modes. */ ! { "help", no_argument, 0, 'h' }, ! { "version", no_argument, 0, 'V' }, ! { "print-localedir", no_argument, 0, PRINT_LOCALEDIR_OPTION }, /* Parser. */ { "name-prefix", required_argument, 0, 'p' }, *************** *** 364,369 **** --- 367,376 ---- version (); exit (EXIT_SUCCESS); + case PRINT_LOCALEDIR_OPTION: + printf ("%s\n", LOCALEDIR); + exit (EXIT_SUCCESS); + case 'g': /* Here, the -g and --graph=FILE options are differentiated. */ graph_flag = true; diff -r -c3 --unidirectional-new-file bison-2.0a.orig/doc/bison.texinfo bison-2.0a/doc/bison.texinfo *** bison-2.0a.orig/doc/bison.texinfo 2005-05-14 08:52:28.000000000 +0200 --- bison-2.0a/doc/bison.texinfo 2005-05-27 00:02:57.000000000 +0200 *************** *** 242,247 **** --- 242,249 ---- which reads tokens. * Error Reporting:: You must supply a function @code{yyerror}. * Action Features:: Special features for use in actions. + * Internationalization:: How to let the parser speak in the user's + native language. The Lexical Analyzer Function @code{yylex} *************** *** 1166,1179 **** arrange for it to call @code{yyparse} or the parser will never run. @xref{Interface, ,Parser C-Language Interface}. ! If your code defines a C preprocessor macro @code{_} (a single ! underscore), Bison assumes that it can be used to translate ! English-language strings to the user's preferred language using a ! function-like syntax, e.g., @code{_("syntax error")}. Otherwise, ! Bison defines a no-op macro by that name that merely returns its ! argument, so strings are not translated. ! ! Aside from @code{_} and the token type names and the symbols in the actions you write, all symbols defined in the Bison parser file itself begin with @samp{yy} or @samp{YY}. This includes interface functions such as the lexical analyzer function @code{yylex}, the error reporting --- 1168,1174 ---- arrange for it to call @code{yyparse} or the parser will never run. @xref{Interface, ,Parser C-Language Interface}. ! Aside from the token type names and the symbols in the actions you write, all symbols defined in the Bison parser file itself begin with @samp{yy} or @samp{YY}. This includes interface functions such as the lexical analyzer function @code{yylex}, the error reporting *************** *** 4229,4234 **** --- 4224,4231 ---- which reads tokens. * Error Reporting:: You must supply a function @code{yyerror}. * Action Features:: Special features for use in actions. + * Internationalization:: How to let the parser speak in the user's + native language. @end menu @node Parser Function *************** *** 4791,4796 **** --- 4788,4891 ---- Tracking Locations}. @end deffn + @node Internationalization + @section Parser Internationalization + @cindex internationalization + @cindex i18n + @cindex NLS + @cindex gettext + @cindex bison-po + + The parser can print diagnostics -- error messages and tracing messages --. + By default, they appear in English. However, Bison also supports to output + them in the user's native language. To make this work, the user only has + to set the usual environment variables; see the @file{ABOUT-NLS} file for + details. The maintainer of a package that uses a bison-generated parser + enables the internationalization of the parser's output through the + following steps. Here we assume a package that uses GNU autoconf and + GNU automake. + + @enumerate + @item + In the top-level directory of your package, create a subdirectory called + @samp{bison-po}. It will contain localization files borrowed from the + Bison installation. + @smallexample + $ mkdir bison-po + @end smallexample + + @item + Into the @samp{bison-po} directory, copy the @samp{Makefile.am} file + installed by Bison under @samp{share/bison/bison-po/Makefile.am} in Bison's + installation directory. For example, if the @file{bison} program is + installed as @file{/usr/local/bin/bison}, you will find the file under + @file{/usr/local/share/bison/bison-po/Makefile.am}. + @smallexample + $ cp /usr/local/share/bison/bison-po/Makefile.am bison-po/Makefile.am + @end smallexample + The other files in this directory will be created later, automatically. + + @item + Into the directory containing the GNU autoconf macros used by the package + -- often called @file{m4/} -- copy the @samp{bison.m4} file installed by + Bison under @samp{share/aclocal/bison.m4} in Bison's installation directory. + Example: + @smallexample + $ cp /usr/local/share/aclocal/bison.m4 m4/bison.m4 + @end smallexample + + @item + In the top-level @file{Makefile.am}, add @samp{bison-po} to the SUBDIRS + variable and, if present, also to the DIST_SUBDIRS variable. It should + be mentioned after directories that contain .y files that are processed + by Bison, such as -- usually -- @samp{src}. Example: + @smallexample + SUBDIRS = doc lib src po bison-po tests + @end smallexample + + @item + In the top-level @file{configure.ac}, add @samp{bison-po/Makefile} to the + @code{AC_CONFIG_FILES} command that lists the autogenerated Makefiles. + Example: + @smallexample + AC_CONFIG_FILES([doc/Makefile lib/Makefile src/Makefile \ + po/Makefile.in bison-po/Makefile tests/Makefile]) + @end smallexample + + @item + In the top-level @file{configure.ac}, after the @code{AM_GNU_GETTEXT} + invocation, add an invocation of @code{BISON_I18N}. As argument, you pass + a space-separated list of parser code files generated by Bison. Example: + @smallexample + BISON_I18N([rpcalc.c]) + @end smallexample + The @code{BISON_I18N} macro is defined in @file{bison.m4} that you copied + earlier. It will cause @samp{configure} to find the values of some variables + that are used by @code{bison-po/Makefile.am}. + + @item + In the @code{main()} function of your program, designate the directory where + Bison's message catalogs will be copied to, through a call to + @samp{bindtextdomain}. By convention, the @code{gettext} domain name is + formed by contatenating the package name and a @code{"-bison"} suffix. + Typically this call will occur next to the call for the package's own + message domain. Example: + @smallexample + bindtextdomain (PACKAGE, LOCALEDIR); + bindtextdomain (PACKAGE "-bison", LOCALEDIR); + @end smallexample + Note that here we rely on @samp{PACKAGE} to be defined as a literal string + macro through @code{config.h}, and on @samp{LOCALEDIR} to be defined as a + literal string through the @file{Makefile}. + + @item + Finally, invoke @samp{autoreconf}, to rebuild the autoconf/automake generated + build infrastructure. + @smallexample + $ autoreconf + @end smallexample + @end enumerate + @node Algorithm @chapter The Bison Parser Algorithm *** /dev/null 2003-09-23 19:59:22.000000000 +0200 --- bison-2.0a/skeleton-po/quot.sed 2004-09-27 22:43:22.000000000 +0200 *************** *** 0 **** --- 1,6 ---- + s/"\([^"]*\)"/“\1”/g + s/`\([^`']*\)'/‘\1’/g + s/ '\([^`']*\)' / ‘\1’ /g + s/ '\([^`']*\)'$/ ‘\1’/g + s/^'\([^`']*\)' /‘\1’ /g + s/“”/""/g *** /dev/null 2003-09-23 19:59:22.000000000 +0200 --- bison-2.0a/skeleton-po/boldquot.sed 2004-09-27 22:43:21.000000000 +0200 *************** *** 0 **** --- 1,10 ---- + s/"\([^"]*\)"/“\1”/g + s/`\([^`']*\)'/‘\1’/g + s/ '\([^`']*\)' / ‘\1’ /g + s/ '\([^`']*\)'$/ ‘\1’/g + s/^'\([^`']*\)' /‘\1’ /g + s/“”/""/g + s/“/“/g + s/”/”/g + s/‘/‘/g + s/’/’/g