aboutsummaryrefslogtreecommitdiff
path: root/intl/plural.c
AgeCommit message (Collapse)AuthorFilesLines
2012-03-10Replace FSF snail mail address with URL in Yacc input.Paul Eggert1-246/+293
2011-10-23More WSUlrich Drepper1-1/+1
2011-10-23Fix WSUlrich Drepper1-8/+7
2011-10-23Regnerate with modern bisonUlrich Drepper1-751/+1239
2003-04-29Update.Ulrich Drepper1-0/+1
* sysdeps/i386/fpu/ftestexcept.c: Also check SSE status word. * include/signal.h: Use libc_hidden_proto for sigaddset and sigdelset. * signal/sigaddset.c: Add libc_hidden_def. * signal/sigdelset.c: Likewise. 2003-04-29 Jakub Jelinek <jakub@redhat.com> * sysdeps/i386/i486/string-inlines.c (__memcpy_g, __strchr_g): Move to the end of the file. * configure.in: Change __oline__ to $LINENO. (HAVE_BUILTIN_REDIRECTION): New check. * config.h.in (HAVE_BUILTIN_REDIRECTION): Add. * include/libc-symbols.h (libc_hidden_builtin_proto, libc_hidden_builtin_def, libc_hidden_builtin_weak, libc_hidden_builtin_ver): Define. * include/string.h (memchr, memcpy, memmove, memset, strcat, strchr, strcmp, strcpy, strcspn, strlen, strncmp, strncpy, strpbrk, strrchr, strspn, strstr): Add libc_hidden_builtin_proto. * intl/plural.y: Include string.h. * sysdeps/alpha/alphaev6/memchr.S (memchr): Add libc_hidden_builtin_def. * sysdeps/alpha/alphaev6/memcpy.S (memcpy): Likewise. * sysdeps/alpha/alphaev6/memset.S (memset): Likewise. * sysdeps/alpha/alphaev67/strcat.S (strcat): Likewise. * sysdeps/alpha/alphaev67/strchr.S (strchr): Likewise. * sysdeps/alpha/alphaev67/strlen.S (strlen): Likewise. * sysdeps/alpha/alphaev67/strrchr.S (strrchr): Likewise. * sysdeps/alpha/memchr.S (memchr): Likewise. * sysdeps/alpha/memset.S (memset): Likewise. * sysdeps/alpha/strcat.S (strcat): Likewise. * sysdeps/alpha/strchr.S (strchr): Likewise. * sysdeps/alpha/strcmp.S (strcmp): Likewise. * sysdeps/alpha/strcpy.S (strcpy): Likewise. * sysdeps/alpha/strlen.S (strlen): Likewise. * sysdeps/alpha/strncmp.S (strncmp): Likewise. * sysdeps/alpha/strncpy.S (strncpy): Likewise. * sysdeps/alpha/strrchr.S (strrchr): Likewise. * sysdeps/arm/memset.S (memset): Likewise. * sysdeps/arm/strlen.S (strlen): Likewise. * sysdeps/generic/memchr.c (memchr): Likewise. * sysdeps/generic/memcpy.c (memcpy): Likewise. * sysdeps/generic/memmove.c (memmove): Likewise. * sysdeps/generic/memset.c (memset): Likewise. * sysdeps/generic/strcat.c (strcat): Likewise. * sysdeps/generic/strchr.c (strchr): Likewise. * sysdeps/generic/strcmp.c (strcmp): Likewise. * sysdeps/generic/strcpy.c (strcpy): Likewise. * sysdeps/generic/strcspn.c (strcspn): Likewise. * sysdeps/generic/strlen.c (strlen): Likewise. * sysdeps/generic/strncmp.c (strncmp): Likewise. * sysdeps/generic/strncpy.c (strncpy): Likewise. * sysdeps/generic/strpbrk.c (strpbrk): Likewise. * sysdeps/generic/strrchr.c (strrchr): Likewise. * sysdeps/generic/strspn.c (strspn): Likewise. * sysdeps/generic/strstr.c (strstr): Likewise. * sysdeps/i386/i486/strcat.S (strcat): Likewise. * sysdeps/i386/i486/strlen.S (strlen): Likewise. * sysdeps/i386/i586/memcpy.S (memcpy): Likewise. * sysdeps/i386/i586/memset.S (memset): Likewise. * sysdeps/i386/i586/strchr.S (strchr): Likewise. * sysdeps/i386/i586/strcpy.S (strcpy): Likewise. * sysdeps/i386/i586/strlen.S (strlen): Likewise. * sysdeps/i386/i686/memcpy.S (memcpy): Likewise. * sysdeps/i386/i686/memmove.S (memmove): Likewise. * sysdeps/i386/i686/memset.S (memset): Likewise. * sysdeps/i386/i686/strcmp.S (strcmp): Likewise. * sysdeps/i386/memchr.S (memchr): Likewise. * sysdeps/i386/memset.c (memset): Likewise. * sysdeps/i386/strchr.S (strchr): Likewise. * sysdeps/i386/strcspn.S (strcspn): Likewise. * sysdeps/i386/strlen.c (strlen): Likewise. * sysdeps/i386/strpbrk.S (strpbrk): Likewise. * sysdeps/i386/strrchr.S (strrchr): Likewise. * sysdeps/i386/strspn.S (strspn): Likewise. * sysdeps/ia64/memchr.S (memchr): Likewise. * sysdeps/ia64/memcpy.S (memcpy): Likewise. * sysdeps/ia64/memmove.S (memmove): Likewise. * sysdeps/ia64/memset.S (memset): Likewise. * sysdeps/ia64/strcat.S (strcat): Likewise. * sysdeps/ia64/strchr.S (strchr): Likewise. * sysdeps/ia64/strcmp.S (strcmp): Likewise. * sysdeps/ia64/strcpy.S (strcpy): Likewise. * sysdeps/ia64/strlen.S (strlen): Likewise. * sysdeps/ia64/strncmp.S (strncmp): Likewise. * sysdeps/ia64/strncpy.S (strncpy): Likewise. * sysdeps/m68k/memchr.S (memchr): Likewise. * sysdeps/m68k/strchr.S (strchr): Likewise. * sysdeps/mips/mips64/memcpy.S (memcpy): Likewise. * sysdeps/mips/mips64/memset.S (memset): Likewise. * sysdeps/mips/memcpy.S (memcpy): Likewise. * sysdeps/mips/memset.S (memset): Likewise. * sysdeps/powerpc/powerpc32/memset.S (memset): Likewise. * sysdeps/powerpc/powerpc32/strchr.S (strchr): Likewise. * sysdeps/powerpc/powerpc32/strcmp.S (strcmp): Likewise. * sysdeps/powerpc/powerpc32/strcpy.S (strcpy): Likewise. * sysdeps/powerpc/powerpc32/strlen.S (strlen): Likewise. * sysdeps/powerpc/powerpc64/memcpy.S (memcpy): Likewise. * sysdeps/powerpc/powerpc64/memset.S (memset): Likewise. * sysdeps/powerpc/powerpc64/strchr.S (strchr): Likewise. * sysdeps/powerpc/powerpc64/strcmp.S (strcmp): Likewise. * sysdeps/powerpc/powerpc64/strcpy.S (strcpy): Likewise. * sysdeps/powerpc/powerpc64/strlen.S (strlen): Likewise. * sysdeps/powerpc/strcat.c (strcat): Likewise. * sysdeps/sparc/sparc32/memchr.S (memchr): Likewise. * sysdeps/sparc/sparc32/memcpy.S (memcpy): Likewise. * sysdeps/sparc/sparc32/memset.S (memset): Likewise. * sysdeps/sparc/sparc32/strcat.S (strcat): Likewise. * sysdeps/sparc/sparc32/strchr.S (strchr, strrchr): Likewise. * sysdeps/sparc/sparc32/strcmp.S (strcmp): Likewise. * sysdeps/sparc/sparc32/strcpy.S (strcpy): Likewise. * sysdeps/sparc/sparc32/strlen.S (strlen): Likewise. * sysdeps/sparc/sparc64/sparcv9b/memcpy.S (memcpy, memmove): Likewise. * sysdeps/sparc/sparc64/memchr.S (memchr): Likewise. * sysdeps/sparc/sparc64/memcpy.S (memcpy, memmove): Likewise. * sysdeps/sparc/sparc64/memset.S (memset): Likewise. * sysdeps/sparc/sparc64/strcat.S (strcat): Likewise. * sysdeps/sparc/sparc64/strchr.S (strchr, strrchr): Likewise. * sysdeps/sparc/sparc64/strcmp.S (strcmp): Likewise. * sysdeps/sparc/sparc64/strcpy.S (strcpy): Likewise. * sysdeps/sparc/sparc64/strcspn.S (strcspn): Likewise. * sysdeps/sparc/sparc64/strlen.S (strlen): Likewise. * sysdeps/sparc/sparc64/strncmp.S (strncmp): Likewise. * sysdeps/sparc/sparc64/strncpy.S (strncpy): Likewise. * sysdeps/sparc/sparc64/strpbrk.S (strpbrk): Likewise. * sysdeps/sparc/sparc64/strspn.S (strspn): Likewise. * sysdeps/sh/memcpy.S (memcpy): Likewise. * sysdeps/sh/memset.S (memset): Likewise. * sysdeps/sh/strlen.S (strlen): Likewise. * sysdeps/s390/s390-32/memchr.S (memchr): Likewise. * sysdeps/s390/s390-32/memcpy.S (memcpy): Likewise. * sysdeps/s390/s390-32/memset.S (memset): Likewise. * sysdeps/s390/s390-32/strcmp.S (strcmp): Likewise. * sysdeps/s390/s390-32/strcpy.S (strcpy): Likewise. * sysdeps/s390/s390-32/strncpy.S (strncpy): Likewise. * sysdeps/s390/s390-64/memchr.S (memchr): Likewise. * sysdeps/s390/s390-64/memcpy.S (memcpy): Likewise. * sysdeps/s390/s390-64/memset.S (memset): Likewise. * sysdeps/s390/s390-64/strcmp.S (strcmp): Likewise. * sysdeps/s390/s390-64/strcpy.S (strcpy): Likewise. * sysdeps/s390/s390-64/strncpy.S (strncpy): Likewise. * sysdeps/x86_64/memcpy.S (memcpy): Likewise. * sysdeps/x86_64/memset.S (memset): Likewise. * sysdeps/x86_64/strcat.S (strcat): Likewise. * sysdeps/x86_64/strchr.S (strchr): Likewise. * sysdeps/x86_64/strcmp.S (strcmp): Likewise. * sysdeps/x86_64/strcpy.S (strcpy): Likewise. * sysdeps/x86_64/strcspn.S (strcspn): Likewise. * sysdeps/x86_64/strlen.S (strlen): Likewise. * sysdeps/x86_64/strspn.S (strspn): Likewise. * string/string-inlines.c: Move... * sysdeps/generic/string-inlines.c: ...here. (__memcpy_g, __strchr_g): Remove. (__NO_INLINE__): Define before including <string.h>, undefine after. Include bits/string.h and bits/string2.h. * sysdeps/i386/i486/string-inlines.c: New file. * sysdeps/i386/string-inlines.c: New file. * sysdeps/i386/i486/Versions: Remove. All GLIBC_2.1.1 symbols moved... * sysdeps/i386/Versions (libc): ...here. 2003-04-29 Ulrich Drepper <drepper@redhat.com>
2002-06-14/castro/street/H-alpha-linux/bin/bison --yacc --name-prefix=__gettext ↵Richard Henderson1-524/+720
--output plural.c plural.y
2001-11-28Update.Ulrich Drepper1-49/+37
2001-03-04 Bruno Haible <bruno@clisp.org> * intl/dcigettext.c (DCIGETTEXT): Increment path_max proportionally. 2001-10-31 Bruno Haible <bruno@clisp.org> * intl/plural.y: Include <stddef.h>, needed for NULL with SunOS 4 cc. 2001-03-21 Bruno Haible <bruno@clisp.org> * intl/dcigettext.c (_nl_state_lock): Mark as #ifdef _LIBC. AIX 3 xlc chokes on empty macro arguments. * intl/plural.y: Add #pragma for alloca on AIX 3. 2001-11-27 Ulrich Drepper <drepper@redhat.com> * intl/dcigettext.c (guess_category_value): Only implement for glibc. Otherwise rely on function _nl_locale_name which isn't present in the glibc sources. 2001-09-24 Bruno Haible <bruno@clisp.org> * intl/loadmsgcat.c (_nl_init_domain_conv): Also enable transliteration when building on a glibc system but outside glibc. 2001-09-22 Bruno Haible <bruno@clisp.org> * intl/plural-eval.c: New file, extracted from dcigettext.c. * intl/dcigettext.c (plural_eval): Remove function, moved to intl/plural-eval.c. (plural_lookup): Call PLURAL_EVAL instead of plural_eval. Include plural-eval.c. 2001-09-22 Bruno Haible <bruno@clisp.org> * intl/plural-exp.c (EXTRACT_PLURAL_EXPRESSION): Reject numbers that don't start with a digit; nplurals must be positive. 2001-09-02 Bruno Haible <bruno@clisp.org> * intl/plural-exp.h: New file, extracted from gettextP.h. * intl/plural-exp.c: New file, extracted from loadmsgcat.c. * intl/gettextP.h (struct expression, struct parse_args, __gettext_free_exp, __gettextparse): Move to plural-exp.h. * intl/loadmsgcat.c: Include plural-exp.h. (PLURAL_PARSE): Move macro to plural-exp.h. (plvar, plone, germanic_plural, INIT_GERMANIC_PLURAL): Move to plural-exp.c. (_nl_load_domain): Move plural handling code to plural-exp.c. Call EXTRACT_PLURAL_EXPRESSION. (_nl_unload_domain): Update. * intl/dcigettext.c: Include plural-exp.h. * intl/plural.y: Include plural-exp.h, not gettextP.h. (FREE_EXPRESSION): Move macro to plural-exp.h. * intl/Makefile (routines): Add plural-exp. (distribute): Add plural-exp.h. 2001-07-28 Bruno Haible <bruno@clisp.org> * intl/l10nflist.c (_nl_normalize_codeset): Cast isalnum, isalpha, isdigit, tolower argument to 'unsigned char'. * intl/loadmsgcat.c (_nl_load_domain): Cast isspace argument to 'unsigned char'. * intl/localealias.c (read_alias_file): Cast isspace argument to 'unsigned char'. 2001-10-20 Bruno Haible <bruno@clisp.org> Assume strchr() exists. (Without it, intl/explodename.c wouldn't link anyway.) * intl/dcigettext.c (strchr): Remove fallback definition; it conflicts with the variable 'index' in plural_lookup. * intl/l10nflist.c (strchr): Likewise. * intl/localealias.c (strchr): Likewise. Assume <stddef.h>, <stdlib.h>, <string.h>, <locale.h> exist. * intl/bindtextdom.c: Likewise. * intl/dcigettext.c: Likewise. * intl/dgettext.c: Likewise. * intl/dngettext.c: Likewise. * intl/explodename.c: Likewise. * intl/finddomain.c: Likewise. * intl/gettext.c: Likewise. * intl/l10nflist.c: Likewise. * intl/loadmsgcat.c: Likewise. * intl/localealias.c: Likewise. * intl/ngettext.c: Likewise. * intl/textdomain.c: Likewise. * intl/gettext.h: Assume <limits.h> exists.
2001-07-06 * COPYING: Fix Y2k bug in sample copyright notices.Andreas Jaeger1-31/+47
* manual/lesser.texi: Renamed from manual/lgpl.texinfo, as fsf.org uses the name "lesser.texi". * manual/Makefile (texis): Follow rename.
2001-03-20Update.Ulrich Drepper1-179/+264
2001-03-17 Bruno Haible <haible@clisp.cons.org> * intl/loadmsgcat.c (_nl_load_domain) [!_LIBC]: Use fstat, not fstat64. 2001-03-17 Bruno Haible <haible@clisp.cons.org> * intl/gettextP.h (struct expression): Add operators lnot, less_than, greater_than, less_or_equal, greater_or_equal. Replace args2/args3 union by a 'nargs' counter and an 'args[]' array. * intl/plural.y: Don't include stdarg.h. (new_exp): Take an array of arguments instead of varargs. (new_exp_0, new_exp_1, new_exp_2, new_exp_3): New functions. ('?' ':'): Make right-associative. (EQUOP2): New token, replaces '=' and '!'. (CMPOP2): New token. (ADDOP2): New token, replaces '+' and '-'. (MULOP2): New token, replaces '*', '/' and '%'. ('!'): New token. (exp): Add rules for CMPOP2 and '!'. Don't call YYABORT. (start): Call YYABORT here. (FREE_EXPRESSION): Update. (yylex): Don't skip "\\n". Recognize comparison and '!' operators. Update for new token symbols. * intl/loadmsgcat.c (plvar, plone, germanic_plural, init_germanic_plural): Update. * intl/dcigettext.c (_nl_find_msg): Optimize for space. (plural_eval): Recognize comparison and '!' operators. Optimize for space. 2001-03-10 Bruno Haible <haible@clisp.cons.org> * intl/loadmsgcat.c (_nl_load_domain): locale_charset() doesn't return NULL any more. 2001-01-05 Bruno Haible <haible@clisp.cons.org> * intl/loadmsgcat.c: Include headers needed for alloca(). (freea): New macro. (_nl_load_domain): Add fallback code for platforms lacking alloca. * intl/localealias.c: (ADD_BLOCK, FREE_BLOCK): Remove macros. (freea): New macro. (read_alias_file): Simplify fallback code for platforms lacking alloca. 2001-01-07 Bruno Haible <haible@clisp.cons.org> * intl/gettextP.h (__gettextdebug): Remove declaration. (__gettext_free_exp, __gettextparse): Convert prototype to K&R C syntax. (gettext_free_exp__, gettextparse__): New non-libc declarations. * intl/plural.y [!_LIBC]: Define gettextparse__, gettext_free_exp__, not __gettextparse, __gettext_free_exp. * intl/loadmsgcat.c [!_LIBC]: Use gettextparse__, not __gettextparse. 2001-02-24 Bruno Haible <haible@clisp.cons.org> * intl/dcigettext.c: Update comment about HAVE_LOCALE_NULL. 2001-01-05 Bruno Haible <haible@clisp.cons.org> * intl/loadmsgcat.c (_nl_load_domain): Add fallback code for platforms lacking strtoul, like SunOS4. 2001-01-05 Bruno Haible <haible@clisp.cons.org> * intl/l10nflist.c (_nl_normalize_codeset): Use tolower, not _tolower. 2001-01-05 Bruno Haible <haible@clisp.cons.org> * intl/bindtextdom.c (set_binding_values): Convert prototype to K&R C syntax. * intl/dcigettext.c (transcmp): Convert to K&R C syntax. * intl/explodename.c (_nl_find_language): Convert to K&R C syntax. * intl/plural.y (__gettext_free_exp, yylex, yyerror): Convert to K&R C syntax. 2001-01-07 Bruno Haible <haible@clisp.cons.org> * intl/gettextP.h (gettext__, dgettext__, dcgettext__, textdomain__, bindtextdomain__, bind_textdomain_codeset__): New declarations, from old libgettext.h. * intl/bindtextdom.c: Include libgnuintl.h instead of libgettext.h. * intl/dcgettext.c: Likewise. * intl/dcigettext.c: Likewise. * intl/dcngettext.c: Likewise. * intl/dngettext.c: Likewise. * intl/finddomain.c: Likewise. * intl/ngettext.c: Likewise. * intl/textdomain.c: Likewise. * intl/dgettext.c: Include libgnuintl.h instead of libgettext.h. Include gettextP.h. * intl/gettext.c: Likewise. Don't include locale.h. 2001-03-17 Bruno Haible <haible@clisp.cons.org> * intl/gettextP.h (ZERO): New macro. (struct binding): Always use ZERO. * intl/bindtextdom.c (offsetof): Provide fallback for platforms that lack it, like SunOS4. (set_binding_values): Use offsetof, not sizeof. * intl/dcigettext.c (offsetof): Provide fallback for platforms that lack it, like SunOS4. (ZERO): Remove macro. (struct transmem_list): Use ZERO. (DCIGETTEXT): Use offsetof, not sizeof. 2001-03-17 Bruno Haible <haible@clisp.cons.org> * intl/gettextP.h: Include <stddef.h>. Include gettext.h, for nls_uint32. * intl/bindtextdom.c: Don't include gettext.h. * intl/dcgettext.c: Likewise. * intl/dcigettext.c: Likewise. * intl/dcngettext.c: Likewise. * intl/dngettext.c: Likewise. * intl/finddomain.c: Likewise. * intl/localealias.c: Likewise. * intl/ngettext.c: Likewise. * intl/plural.y: Likewise. * intl/textdomain.c: Likewise. 2001-03-17 Bruno Haible <haible@clisp.cons.org> * intl/gettext.h: Don't include <stdio.h>. 2001-03-17 Bruno Haible <haible@clisp.cons.org> * intl/Makefile (CPPFLAGS): Set LOCALEDIR instead of GNULOCALEDIR. * intl/dcigettext.c (_nl_default_dirname): Initialize with LOCALEDIR.
2001-01-05Update.Ulrich Drepper1-22/+27
2001-01-04 Ulrich Drepper <drepper@redhat.com> * intl/plural.y (yylex): Minimal improvement in number scanner.
2000-08-21Update.Ulrich Drepper1-22/+19
* argp/argp-help.c: Unify use of function aliases to make more compact PLT. * include/libintl.h: Likewise. * inet/rcmd.c: Likewise. * intl/dcigettext.c: Likewise. * libio/iofputws.c: Likewise. * libio/iofputws_u.c: Likewise. * libio/iogetwline.c: Likewise. * libio/swprintf.c: Likewise. * malloc/malloc.c: Likewise. * nss/digits_dots.c: Likewise. * posix/fnmatch.c: Likewise. * posix/spawn_faction_addclose.c: Likewise. * posix/spawn_faction_adddup2.c: Likewise. * posix/spawn_faction_addopen.c: Likewise. * posix/spawni.c: Likewise. * posix/wordexp.c: Likewise. * posix/spawni.c: Likewise. * resolv/res_hconf.c: Likewise. * resolv/res_init.c: Likewise. * shadow/lckpwdf.c: Likewise. * signal/sighold.c: Likewise. * signal/sigrelse.c: Likewise. * stdio-common/printf-parse.h: Likewise. * stdio-common/printf-prs.c: Likewise. * stdio-common/printf_fp.c: Likewise. * stdio-common/vfprintf.c: Likewise. * stdio-common/vfscanf.c: Likewise. * stdlib/rpmatch.c: Likewise. * sunrpc/create_xid.c: Likewise. * sunrpc/key_call.c: Likewise. * sysdeps/generic/setrlimit64.c: Likewise. * sysdeps/generic/utmp_file.c: Likewise. * sysdeps/generic/vlimit.c: Likewise. * sysdeps/posix/posix_fallocate.c: Likewise. * sysdeps/posix/posix_fallocate64.c: Likewise. * sysdeps/posix/sigpause.c: Likewise. * sysdeps/posix/sigset.c: Likewise. * sysdeps/unix/grantpt.c: Likewise. * sysdeps/unix/bsd/ualarm.c: Likewise. * sysdeps/unix/sysv/linux/dl-origin.c: Likewise. * sysdeps/unix/sysv/linux/getloadavg.c: Likewise. * sysdeps/unix/sysv/linux/ttyname.c: Likewise. * sysdeps/unix/sysv/linux/ulimit.c: Likewise. * time/strftime.c: Likewise. * wcsmbs/wcscoll.c: Likewise. * wcsmbs/wcsxfrm.c: Likewise. * sysdeps/powerpc/fpu_control.h (_FPU_GETCW): Allow gcc to generate postinc/predec instruction.
2000-08-20Update.Ulrich Drepper1-51/+64
2000-08-20 Ulrich Drepper <drepper@redhat.com> * intl/loadmsgcat.c (_nl_unload_domain): Also free conv_tab element. Pretty printing. * intl/plural.y (new_exp): Take number of optional parameters in second parameter. Test for correct number of parameters and free correctly in case of failure. Adjust all callers. (yylex): Allow ';' as terminator character.
2000-01-22Update.Ulrich Drepper1-0/+1218
2000-01-21 Ulrich Drepper <drepper@cygnus.com> * intl/Makefile (routines): Add dcigettext, dcngettext, dngettxt, ngettext, and plural. (distribute): Add plural.y, po2test.sed, and tst-gettext.sh. (test-srcs): Add tst-gettext. (before-compile): Add $(objpfx)msgs.h. Add rules for plural.c and msgs.h generation and running tst-gettext.\ * intl/Versions [GLIBC_2.2]: Add __dcngettext, dcngettext, dngettext, and ngettext. * intl/dcgettext.c: Move most code into dcigettext.c. Add call dcigettext with appropriate parameters. * intl/dcigettext.c: New file. * intl/dcngettext.c: New file. * intl/dngettext.c: New file. * intl/ngettext.c: New file. * intl/gettextP.h (struct expression): Define. (struct loaded_domain): Add plural and nplurals members. Add prototypes for new internal functions. * intl/libintl.h: Declare new functions. Add optimizations for them. * intl/loadinfo.h: Add new parameter to _nl_find_msg declaration. * intl/loadmsgcat.c (_nl_load_domain): Search for plural information in header entry and parse and store the expression. * intl/plural.y: New file. * intl/po2test.sed: New file. * intl/tst-gettext.c: New file. * intl/tst-gettext.sh: New file. * intl/gettext.c: Call __dcgettext directly.