2004-01-28  Bruno Haible  <bruno@clisp.org>

	* gettext-0.14 released.

2004-01-18  Bruno Haible  <bruno@clisp.org>

	* msginit.c (catalogname_for_locale): Add entries for Akan, Avaric,
	Bambara, Cree, Divehi (Maldivian), Éwé, Igbo, Kongo, Kanuri, Ganda,
	Luba-Katanga, Ojibwa, Venda.
	(englishname_of_language): Likewise, and also for Fulah (Fulfulde).

2004-01-09  Bruno Haible  <bruno@clisp.org>

	* format.h (struct formatstring_parser): Add 'translated' argument to
	parse function.
	(get_sysdep_c_format_directives): Renamed from
	get_c99_format_directives. Add 'translated' argument. Change meaning
	of endpos in returned array.
	* format-c.c (struct spec): Rename field c99_directives to
	sysdep_directives, and c99_directives_count to sysdep_directives_count.
	(format_parse): Add 'translated' argument. Handle 'I' flag. Store the
	pointer past the '>' character instead of the pointer to the '>'.
	(format_c_parse, format_objc_parse): Add 'translated' argument.
	(get_sysdep_c_format_directives): Renamed from
	get_c99_format_directives. Add 'translated' argument.
	* format-awk.c (format_parse): Add 'translated' argument.
	* format-csharp.c (format_parse): Likewise.
	* format-elisp.c (format_parse): Likewise.
	* format-gcc-internal.c (format_parse): Likewise.
	* format-java.c (format_parse): Likewise.
	* format-librep.c (format_parse): Likewise.
	* format-lisp.c (format_parse): Likewise.
	* format-pascal.c (format_parse): Likewise.
	* format-perl-brace.c (format_parse): Likewise.
	* format-perl.c (format_parse): Likewise.
	* format-php.c (format_parse): Likewise.
	* format-python.c (format_parse): Likewise.
	* format-qt.c (format_parse): Likewise.
	* format-sh.c (format_parse): Likewise.
	* format-tcl.c (format_parse): Likewise.
	* format-ycp.c (format_parse): Likewise.
	* msgfmt.c (check_pair): Update.
	* msgmerge.c (msgfmt_check_pair_fails): Likewise.
	* read-mo.c (get_sysdep_string): Don't add '<'...'>' around segments
	of length 1.
	(read_mo_file): Treat major revision 1 like major revision 0.
	* write-mo.c (write_table): Update. Use major revision 1 if "I" occurs
	among the sysdep segments.
	* xgettext.c (set_format_flags_from_context, remember_a_message,
	remember_a_message_plural): Update.

2004-01-14  Bruno Haible  <bruno@clisp.org>

	* msginit.c (fill_header): Avoid a NULL pointer access when the header
	has no comment attached to it.
	Reported by Josep Puigdemont <baldrick@terra.es>.

2004-01-09  Bruno Haible  <bruno@clisp.org>

	* msgattrib.c (main): Update year in --version output.
	* msgcat.c (main): Likewise.
	* msgcmp.c (main): Likewise.
	* msgcomm.c (main): Likewise.
	* msgconv.c (main): Likewise.
	* msgen.c (main): Likewise.
	* msgexec.c (main): Likewise.
	* msgfilter.c (main): Likewise.
	* msgfmt.c (main): Likewise.
	* msggrep.c (main): Likewise.
	* msginit.c (main): Likewise.
	* msgmerge.c (main): Likewise.
	* msgunfmt.c (main): Likewise.
	* msguniq.c (main): Likewise.
	* xgettext.c (main): Likewise.

2003-12-29  Bruno Haible  <bruno@clisp.org>

	* xgettext.h: Include stdlib.h, str-list.h.
	(struct refcounted_string_list_ty): New type.
	(add_reference, drop_reference): New functions.
	(savable_comment, savable_comment_add, savable_comment_reset,
	savable_comment_to_xgettext_comment): New declarations.
	* xgettext.c (savable_comment): New variable.
	(savable_comment_add, savable_comment_reset,
	savable_comment_to_xgettext_comment): New functions.
	* x-java.c (struct refcounted_string_list_ty, comment, add_reference,
	drop_reference, x_java_comment_add, x_java_comment_reset,
	x_java_comment_to_xgettext_comment): Remove. Use replacement from
	xgettext.{h,c} instead.
	* x-csharp.c (struct refcounted_string_list_ty, comment, add_reference,
	drop_reference, x_csharp_comment_add, x_csharp_comment_reset,
	x_csharp_comment_to_xgettext_comment): Remove. Use replacement from
	xgettext.{h,c} instead.
	* x-c.c (comment_line_end): Call savable_comment_add instead of
	xgettext_comment_add.
	(struct token_ty): Add 'comment' field.
	(free_token): Free it.
	(phase5_get): Initialize token's 'comment' field.
	(phase6_get): Call savable_comment_reset instead of
	xgettext_comment_reset.
	(phase8a_get): Initialize token's 'comment' field.
	(phase8b_get): Call savable_comment_reset instead of
	xgettext_comment_reset.
	(phase8c_get): In @"...", use the comment of the first token, not of
	the second.
	(struct xgettext_token_ty): Add 'comment' field.
	(x_c_lex): Deal with the token's comment.
	(extract_parenthesized): Call savable_comment_to_xgettext_comment and
	savable_comment_reset. Free the token's comment field.
	* x-python.c (comment_line_end): Call savable_comment_add instead of
	xgettext_comment_add.
	(struct token_ty): Add 'comment' field.
	(phase5_get): Call savable_comment_reset instead of
	xgettext_comment_reset. Initialize token's 'comment' field.
	(extract_parenthesized): Call savable_comment_to_xgettext_comment and
	savable_comment_reset. Free the token's comment field.

2003-12-28  Bruno Haible  <bruno@clisp.org>

	* read-mo.h (read_mo_file): Change 'fn' into 'filename'.
	* read-mo.c (read_mo_file): Likewise.

2003-12-28  Bruno Haible  <bruno@clisp.org>

	* write-resources.h: New file.
	* write-resources.c: New file.
	* msgfmt.cs: New file.
	* msgfmt.c: Include write-resources.h.
	(csharp_resources_mode): New variable.
	(long_options): Add --csharp-resources.
	(main): Handle --csharp-resources. More generic code for detection of
	contradicting modes. Invoke msgdomain_write_csharp_resources.
	(usage): Document --csharp-resources option.
	(msgfmt_set_domain): Update.
	* read-resources.h: New file.
	* read-resources.c: New file.
	* msgunfmt.cs (DumpResource): Add a constructor that dumps a .resources
	file.
	(Main): Invoke it when only one argument is given.
	* msgunfmt.c: Include read-resources.h.
	(csharp_resources_mode): New variable.
	(long_options): Add --csharp-resources.
	(main): Handle --csharp-resources. More generic code for detection of
	contradicting modes. Invoke read_one_file instead of read_mo_file.
	(usage): Document --csharp-resources option.
	(read_one_file): New function.
	* Makefile.am (noinst_HEADERS): Add read-resources.h and
	write-resources.h.
	(msgfmt_SOURCES): Add write-resources.c.
	(msgunfmt_SOURCES): Add read-resources.c.
	(EXTRA_DIST): Add msgfmt.cs.
	(CLEANFILES): Add msgfmt.net.exe.
	(msgfmt.net.exe): New rule.
	(all-csharp-yes): Depend on it.
	(install-exec-csharp-yes): Also install msgfmt.net.exe.
	(uninstall-csharp-yes): Also uninstall msgfmt.net.exe.
	* Makefile.msvc (msgfmt_OBJECTS): Add write-resources.obj.
	(msgunfmt_OBJECTS): Add read-resources.obj.
	(write-resources.obj, read-resources.obj): New rules.
	* Makefile.vms (msgfmt_OBJECTS): Add write-resources.obj.
	(msgunfmt_OBJECTS): Add read-resources.obj.
	(write-resources.obj, read-resources.obj): New rules.
	* FILES: Update.

2003-12-26  Bruno Haible  <bruno@clisp.org>

	Support for C#.
	* write-csharp.h: New file.
	* write-csharp.c: New file.
	* msgfmt.c: Include write-csharp.h.
	(csharp_mode, csharp_resource_name, csharp_locale_name,
	csharp_base_directory): New variables.
	(long_options): Add option --csharp.
	(main): Handle option --csharp. Initialize csharp_resource_name,
	csharp_locale_name, csharp_base_directory. Perform checks for C# mode.
	Invoke msgdomain_write_csharp.
	(usage): Document --csharp option and C# mode.
	(msgfmt_set_domain): Ignore in C# mode.
	* read-csharp.h: New file.
	* read-csharp.c: New file.
	* msgunfmt.cs: New file.
	* msgunfmt.c: Include read-csharp.h.
	(csharp_mode, csharp_resource_name, csharp_locale_name,
	csharp_base_directory): New variables.
	(long_options): Add option --csharp.
	(main): Handle option --csharp. Initialize csharp_resource_name,
	csharp_locale_name, csharp_base_directory. Perform checks for C# mode.
	Invoke msgdomain_read_csharp.
	(usage): Document --csharp option and C# mode.
	* Makefile.am (noinst_HEADERS): Add read-csharp.h, write-csharp.h.
	(CSHARPCOMP, CSHARPCOMPFLAGS): New variables.
	(msgfmt_SOURCES): Add write-csharp.c.
	(msgunfmt_SOURCES): Add read-csharp.c.
	(EXTRA_DIST): Add msgunfmt.cs.
	(CLEANFILES): Add msgunfmt.net.exe.
	(all-csharp-yes, all-csharp-no): New rules.
	(all-local): Depend on them.
	(msgunfmt.net.exe): New rule.
	(install-exec-csharp-yes, install-exec-csharp-no): New rules.
	(install-exec-local): Depend on them.
	(installdirs-csharp): New rule.
	(installdirs-local): Depend on it.
	(uninstall-csharp-yes, uninstall-csharp-no): New rules.
	(uninstall-local): Depend on it.
	* Makefile.msvc (msgfmt_OBJECTS): Add write-csharp.obj.
	(msgunfmt_OBJECTS): Add read-csharp.obj.
	(write-csharp.obj, read-csharp.obj): New rules.
	* Makefile.vms (msgfmt_OBJECTS): Add write-csharp.obj.
	(msgunfmt_OBJECTS): Add read-csharp.obj.
	(write-csharp.obj, read-csharp.obj): New rules.
	* FILES: Update.

2003-12-26  Bruno Haible  <bruno@clisp.org>

	* read-java.c (msgdomain_read_java): Relocate also the GETTEXTJAR
	value.
	* urlget.c (fetch): Likewise.

2003-12-26  Bruno Haible  <bruno@clisp.org>

	* write-java.c (write_java_code): Emit a static method
	'get_msgid_plural_table' instead of a static field 'plural'.
	* gnu/gettext/DumpResource.java (DumpResource.dump): Exploit a
	'get_msgid_plural_table' method if it exists.

2003-12-14  Bruno Haible  <bruno@clisp.org>

	* message.h (format_type): New enum value 'format_csharp'.
	(NFORMATS): Increment.
	* message.c (format_language): Add format_csharp entry.
	(format_language_pretty): Likewise.
	* format.h (formatstring_csharp): New declaration.
	* format-csharp.c: New file.
	* format.c (formatstring_parsers): Add formatstring_csharp.
	* x-csharp.h: New file.
	* x-csharp.c: New file.
	* xgettext.c: Include x-csharp.h.
	(flag_table_csharp): New variable.
	(main): Invoke init_flag_table_csharp, x_csharp_extract_all,
	x_csharp_keyword.
	(usage): Mention C# source language.
	(xgettext_record_flag): Handle format_csharp.
	(language_to_extractor): Add C# rule.
	(extension_to_language): Add C# rule.
	* Makefile.am (noinst_HEADERS): Add x-csharp.h.
	(FORMAT_SOURCE): Add format-csharp.c.
	(xgettext_SOURCES): Add x-csharp.c.
	* Makefile.msvc (OBJECTS): Add format-csharp.obj.
	(xgettext_OBJECTS): Add x-csharp.obj.
	(format-csharp.obj, x-csharp.obj): New rules.
	* Makefile.vms (OBJECTS): Add format-csharp.obj.
	(xgettext_OBJECTS): Add x-csharp.obj.
	(format-csharp.obj, x-csharp.obj): New rules.
	* FILES: Update.

2003-12-28  Bruno Haible  <bruno@clisp.org>

	* msgexec.c (process_string): Pass ignore_sigpipe = false.
	* msgfilter.c (process_string): Likewise.
	* msggrep.c (is_string_selected): Likewise.
	* msginit.c (project_id, project_id_version, get_user_email,
	language_team_address): Likewise.
	* read-java.c (execute_and_read_po_output): Likewise.
	* read-tcl.c (msgdomain_read_tcl): Likewise.
	* urlget.c (execute_it): Pass ignore_sigpipe = true.
	(fetch): Pass ignore_sigpipe = true when fetching the file, = false
	otherwise.

2003-12-14  Bruno Haible  <bruno@clisp.org>

	* x-c.c (SIZEOF): New macro.
	(phase1_ungetc): Verify that the pushback buffer's size is sufficient.
	(phase2_ungetc): Likewise.
	(phase3_ungetc): Likewise.
	(phase5_unget): Likewise.
	(phase6_unget): Likewise.
	* x-java.c (SIZEOF): New macro.
	(phase1_ungetc): Verify that the pushback buffer's size is sufficient.
	(phase2_ungetc): Likewise.
	(phase3_ungetc): Likewise.
	(phase5_unget): Likewise.
	(phase6_unget): Likewise.
	* x-php.c (SIZEOF): New macro.
	(phase1_ungetc): Verify that the pushback buffer's size is sufficient.
	(phase2_ungetc): Likewise.
	(phase3_ungetc): Likewise.
	* x-python.c (SIZEOF): New macro.
	(phase1_ungetc): Verify that the pushback buffer's size is sufficient.
	(phase5_unget): Likewise.
	* x-sh.c (SIZEOF): New macro.
	(phase1_ungetc): Verify that the pushback buffer's size is sufficient.
	(phase2_ungetc): Likewise.
	* x-smalltalk.c (SIZEOF): New macro.
	(phase2_unget): Verify that the pushback buffer's size is sufficient.
	* x-tcl.c (SIZEOF): New macro.
	(phase1_ungetc): Verify that the pushback buffer's size is sufficient.
	(phase2_ungetc): Likewise.
	* x-ycp.c (SIZEOF): New macro.
	(phase2_unget): Verify that the pushback buffer's size is sufficient.

2003-12-14  Bruno Haible  <bruno@clisp.org>

	* x-c.c (phase1_pushback): Reduce size to 2.
	(phase2_pushback): Reduce size to 1.
	(phase3_pushback): Reduce size to 2.
	(phase5_pushback): Reduce size to 1.
	(phase6_pushback): Reduce size to 2.
	* x-java.c (phase2_pushback): Reduce size to 1.
	(phase3_pushback): Reduce size to 2.
	(phase5_pushback): Reduce size to 3.
	(phase6_pushback): Reduce size to 2.
	* x-php.c (phase1_pushback): Reduce size to 2.
	* x-python.c (max): New macro.
	(phase1_pushback): Reduce size to UNINAME_MAX + 3.
	(phase5_pushback): Reduce size to 1.
	* x-sh.c (phase1_pushback): Reduce size to 1.
	(phase2_pushback): Reduce size to 2.
	* x-smalltalk.c (phase2_pushback): Reduce size to 1.
	* x-tcl.c (phase1_pushback): Reduce size to 1.
	(phase2_pushback): Reduce size to 2.

2003-12-12  Bruno Haible  <bruno@clisp.org>

	Assume automake-1.8.
	* Makefile.am (install-exec-local): Renamed from install-exec-am.

2003-11-30  Bruno Haible  <bruno@clisp.org>

	* format-java.c: Include xallocsa.h.
	(message_format_parse): Use xallocsa instead of alloca.
	(choice_format_parse): Likewise.
	* msgl-cat.c: Include xallocsa.h.
	(catenate_msgdomain_list): Use xallocsa instead of alloca.
	* msgl-charset.c: Include xallocsa.h.
	(compare_po_locale_charsets): Use xallocsa instead of alloca.
	* msgl-iconv.c: Include xallocsa.h.
	(iconv_message_list): Use xallocsa instead of alloca.
	* po-charset.c: Include xallocsa.h.
	(po_lex_charset_set): Use xallocsa instead of alloca.
	* read-tcl.c: Include xallocsa.h.
	(msgdomain_read_tcl): Use xallocsa instead of alloca.
	* write-java.c: Include xallocsa.h.
	(compute_hashsize, msgdomain_write_java): Use xallocsa instead of
	alloca.
	* write-mo.c: Include xallocsa.h.
	(write_table): Use xallocsa instead of alloca.
	* write-po.c: Include xallocsa.h.
	(msgdomain_list_print_po): Use xallocsa instead of alloca.
	* write-tcl.c: Include xallocsa.h.
	(msgdomain_write_tcl): Use xallocsa instead of alloca.
	* msggrep.c: Include xallocsa.h.
	(is_message_selected): Use xallocsa instead of alloca.
	* msginit.c: Include xallocsa.h.
	(subst_string): Use xallocsa instead of alloca.
	* msgmerge.c: Include obstack.h.
	(obstack_chunk_alloc, obstack_chunk_free): New macros.
	(message_merge): Use obstack_alloc instead of alloca.
	* xgettext.c: Include xallocsa.h.
	(flag_context_list_table_insert): Use xallocsa instead of alloca.

2003-12-17  Bruno Haible  <bruno@clisp.org>

	* gettext-0.13.1 released.

2003-12-14  Bruno Haible  <bruno@clisp.org>

	* x-sh.c (phase2_getc): Call phase1_ungetc instead of phase2_ungetc:
	The next phase2_getc invocation must return QUOTED('"'), not '"'.

2003-12-14  Bruno Haible  <bruno@clisp.org>

	* x-c.c (phase7_getc): Remove dead code.
	* x-java.c (accumulate_escaped): More precise error message.

2003-12-02  Bruno Haible  <bruno@clisp.org>

	* msginit.c (catalogname_for_locale): Treat sr_CS like sr_YU.

2003-11-30  Bruno Haible  <bruno@clisp.org>

	* gettext-0.13 released.

2003-11-28  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (set_format_flags_from_context): Add casts, to make it
	compile in C++ mode.

2003-11-22  Bruno Haible  <bruno@clisp.org>

	* x-c.c (phase4_getc): Skip leading whitespace in C++ style comments
	as well.
	* x-sh.c (read_word): Skip leading whitespace in comments.
	* x-lisp.c (read_object): Skip leading whitespace in single-line
	comments as well.
	* x-elisp.c (read_object): Skip leading whitespace in comments.
	* x-librep.c (read_object): Skip leading whitespace in single-line
	comments as well.
	* x-java.c (phase4_getc): Skip leading whitespace in C++ style comments
	as well.
	* x-awk.c (phase2_getc): Skip leading whitespace in comments.
	* x-ycp.c (phase2_getc): Skip leading whitespace in single-line
	comments as well.
	* x-tcl.c (read_command): Skip leading whitespace in comments.

2003-11-24  Bruno Haible  <bruno@clisp.org>

	* format-lisp.c (check_params): Use ngettext for one of the messages.
	Reported by Rafał Maszkowski <rzm@icm.edu.pl>.

2003-11-15  Bruno Haible  <bruno@clisp.org>

	* Makefile.am (AM_CPPFLAGS): Renamed from INCLUDES.

2003-11-09  Bruno Haible  <bruno@clisp.org>

	* msginit.c (main): Drop the blank line in --no-translator mode.

2003-11-07  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (remember_a_message): Omit the programmer comments of a
	duplicated msgid only if they are redundant.
	Reported by Christian Neumair <chris@gnome-de.org>.

2003-11-05  Bruno Haible  <bruno@clisp.org>

	* user-email.sh.in: Renamed from user-email.in. Internationalize, use
	localedir and gettext.
	* FILES: Update.

2003-10-23  Bruno Haible  <bruno@clisp.org>

	* read-stringtable.c (read_string, stringtable_parse): Cast
	gram_pos.line_number to 'unsigned long'.
	* x-sh.c (read_word): Case line_number to 'unsigned long'.

2003-10-21  Bruno Haible  <bruno@clisp.org>

	* message.h (message_list_msgids_changed): New declaration.
	* message.c (message_list_msgids_changed): New function.
	* msgl-iconv.c (iconv_message_list): Update the message list's hash
	table if it happens to contain non-ASCII msgids.

2003-10-19  Bruno Haible  <bruno@clisp.org>

	* message.h (format_type): New enum value 'format_qt'.
	(NFORMATS): Increment.
	* message.c (format_language): Add format_qt entry.
	(format_language_pretty): Likewise.
	* format.h (formatstring_qt): New declaration.
	* format-qt.c: New file.
	* format.c (formatstring_parsers): Add formatstring_qt.
	* xgettext.c (recognize_format_qt): New variable.
	(long_options): Add option "--qt".
	(main): Handle --qt option. Determine the extractor only after option
	processing is complete.
	(usage): Document --qt option.
	(xgettext_record_flag): Handle format_qt.
	(language_to_extractor): For C++, return a different extractor when
	--qt was specified.
	* write-qt.h: New file.
	* write-qt.c: New file.
	* msgfmt.c: Include write-qt.h.
	(qt_mode): New variable.
	(long_options): Add option "--qt".
	(main): Handle --qt option. More checks for contradicting options.
	Call msgdomain_write_qt.
	(usage): Mention Qt mode.
        (format_directive_domain): Ignore domain directive if in Qt mode.
	* Makefile.am (noinst_HEADERS): Add write-qt.h.
	(FORMAT_SOURCE): Add format-qt.c.
	(msgfmt_SOURCES): Add write-qt.c.
	* Makefile.msvc (OBJECTS): Add format-qt.obj.
	(msgfmt_OBJECTS): Add write-qt.obj.
	(format-qt.obj, write-qt.obj): New rules.
	* Makefile.vms (OBJECTS): Add format-qt.obj.
	(msgfmt_OBJECTS): Add write-qt.obj.
	(format-qt.obj, write-qt.obj): New rules.
	* FILES: Update.

2003-10-14  Bruno Haible  <bruno@clisp.org>

	Fix compilation errors in C++ mode.
	* msgfilter.c (process_string): Cast the xrealloc expression.
	* xgettext.c (language_to_extractor, extension_to_language): Move the
	typedef after the struct definition.

2003-10-13  Bruno Haible  <bruno@clisp.org>

	Support CR/LF line terminators in C sources even on Unix.
	* x-c.c (phase0_getc, phase0_ungetc): New functions.
	(phase1_getc): Use them instead of calling getc/ungetc directly.
	Reported by Christoph Thielecke <u15119@hs-harz.de>.

2003-10-13  Bruno Haible  <bruno@clisp.org>

	Support and recognize Objective C specific format strings.
	* message.h (enum format_type): New item format_objc.
	(NFORMATS): Increment.
	* message.c (format_language): Add an entry for format_objc.
	(format_language_pretty): Likewise.
	* format.h (formatstring_objc): New declaration.
	* format-c.c (enum format_arg_type): New item FAT_OBJC_OBJECT.
	(format_parse): Add objc_extensions argument. Handle %@ in ObjC mode.
	(format_c_parse, format_objc_parse): New functions.
	(formatstring_c): Use format_c_parse instead of format_parse.
	(formatstring_objc): New variable.
	(get_c99_format_directives): Update.
	* format.c (formatstring_parsers): Add an entry for format_objc.
	* write-mo.c (write_table): Look for system dependent strings also in
	ObjectiveC format strings.
	* x-c.h (SCANNERS_C): Use separate flag_table for ObjectiveC.
	(x_objc_keyword, init_flag_table_objc): New declarations.
	(x_c_any_keywords): Remove declaration.
	* x-c.c (c_keywords): Renamed from keywords.
	(objc_keywords): New variable.
	(add_keyword): Renamed from x_c_keyword. Add keywords table argument.
	(x_c_keyword, x_objc_keyword): New functions.
	(x_c_any_keywords): Remove function.
	(init_keywords): Also initialize ObjectiveC keyword table.
	(init_flag_table_objc): New function.
	(enum token_type_ty): New item token_type_colon.
	(phase5_get): Recognize colon.
	(enum xgettext_token_type_ty): New item xgettext_token_type_colon.
	(x_c_lex): Use keywords table depending on objc_extensions. Handle
	colon.
	(extract_parenthesized): Change the context_iter and inner_context
	after a keyword/symbol followed by a colon was seen.
	* xgettext.c (flag_table_objc): New variable.
	(main): Invoke init_flag_table_objc, x_objc_keyword. Watch out for
	keywords arguments, instead of calling x_c_any_keywords().
	(flag_context_list_table_insert): New function, extracted from
	xgettext_record_flag.
	(xgettext_record_flag): Call it. For format_c, insert the flags also
	in the flag_table_objc. Handle format_objc.
	(remember_a_message): Don't add a heuristic c-format flag to an entry
	that already carries objc-format.
	(remember_a_message_plural): Likewise.

2003-10-18  Bruno Haible  <bruno@clisp.org>

	Support for GNUstep .strings format.
	* read-stringtable.h: New file.
	* read-stringtable.c: New file.
	* read-po-abstract.h (enum input_syntax_ty): New item
	syntax_stringtable.
	(po_callback_comment_dispatcher): Renamed from po_callback_comment.
	(po_callback_comment, po_callback_comment_special): New declarations.
	* read-po-abstract.c: Include read-stringtable.h.
	(po_scan): Add support for syntax_stringtable.
	(po_callback_comment_dispatcher): Renamed from po_callback_comment.
	(po_callback_comment, po_callback_comment_dot): New functions.
	(po_callback_comment_special): New function.
	* read-po.c (read_po): Set mdlp->encoding for syntax_stringtable too.
	* po-gram-gen.y: Update po_callback_comment_dispatcher call.
	* read-properties.c (properties_parse): Likewise.
	* write-stringtable.h: New file.
	* write-stringtable.c: New file.
	* write-po.h (make_format_description_string, significant_format_p):
	New declarations.
	(message_print_syntax_stringtable): New declaration.
	* write-po.c: Include write-stringtable.h.
	(make_format_description_string, significant_format_p): Make
	non-static.
	(use_syntax_stringtable): New variable.
	(message_print_syntax_stringtable): New function.
	(msgdomain_list_print): Add check for plural forms for
	syntax_stringtable too. Add support for writing the .strings format.
	* msgattrib.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* msgcat.c (long_options): Add --stringtable-input/output.
	(main): Handle them. If option --stringtable-output is used, convert to
	UTF-8 and ignore the to_code.
	(usage): Document options --stringtable-input/output.
	* msgcmp.c (long_options): Add --stringtable-input.
	(main): Handle it.
	(usage): Document option --stringtable-input.
	* msgcomm.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* msgconv.c (long_options): Add --stringtable-input/output.
	(main): Handle them. If option --stringtable-output is used, ignore the
	to_code.
	(usage): Document options --stringtable-input/output.
	* msgen.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* msgexec.c: Include limits.h.
	(long_options): Add --stringtable-input.
	(main): Handle it.
	(usage): Document option --stringtable-input.
	* msgfilter.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* msgfmt.c (long_options): Add --stringtable-input.
	(main): Handle it.
	(usage): Document option --stringtable-input.
	* msggrep.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* msginit.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* msgmerge.c (long_options): Add --stringtable-input/output.
	(main): Handle them. In update mode, --stringtable-input implies
	--stringtable-output.
	(usage): Document options --stringtable-input/output.
	* msgunfmt.c (long_options): Add --stringtable-output.
	(main): Handle it.
	(usage): Document option --stringtable-output.
	* msguniq.c (long_options): Add --stringtable-input/output.
	(main): Handle them.
	(usage): Document options --stringtable-input/output.
	* x-stringtable.h: New file.
	* x-po.c: Include x-stringtable.h.
	(extract_stringtable): New function.
	* xgettext.c: Include x-stringtable.h.
	(long_options): Add --stringtable-output.
	(main): Handle it.
	(usage): Document options -L NXStringTable and --stringtable-output.
	(finalize_header): If --stringtable-output was given, set the charset.
	(language_to_extractor): Add support for .strings format.
	(extension_to_language): Likewise.
	* Makefile.am (noinst_HEADERS): Add read-stringtable.h,
	write-stringtable.h, x-stringtable.h.
	(COMMON_SOURCE): Add read-stringtable.c.
	(libgettextsrc_la_SOURCES): Add write-stringtable.c.
	* Makefile.msvc (OBJECTS): Add read-stringtable.obj,
	write-stringtable.obj.
	(read-stringtable.obj, write-stringtable.obj): New rules.
	* Makefile.vms (OBJECTS): Add read-stringtable.obj,
	write-stringtable.obj.
	(read-stringtable.obj, write-stringtable.obj): New rules.
	* FILES: Update.

2003-10-21  Bruno Haible  <bruno@clisp.org>

	* hostname.c (xgethostname): Add support for native Woe32 API.

2003-10-21  Bruno Haible  <bruno@clisp.org>

	* message.c (message_list_search): Avoid casting a pointer to a local
	variable; it violated strict aliasing.

2003-10-21  Bruno Haible  <bruno@clisp.org>

	* write-java.c (mkdir): Redefine on mingw.

2003-10-12  Bruno Haible  <bruno@clisp.org>

	Improved ObjectiveC support.
	* x-c.h (extract_objc): New declaration.
	(SCANNERS_C): For ObjectiveC, use extract_objc.
	* x-c.c (objc_extensions): New variable.
	(enum token_type_ty): New item token_type_objc_special.
	(phase5_get): Recognize '@' for ObjectiveC.
	(phase8b_get, phase8b_unget): New functions. Handle
	token_type_white_space and token_type_eoln here instead of in x_c_lex.
	(phase8c_get, phase8c_unget): New functions.
	(phase8_get): Rely on phase8c, not phase8a. No more need to care about
	token_type_white_space and token_type_eoln.
	(x_c_lex): Drop handling of token_type_white_space and token_type_eoln.
	(extract_whole_file): Renamed from extract_c.
	(extract_c, extract_objc): New functions.

2003-10-20  Bruno Haible  <bruno@clisp.org>

	* x-java.c (phase3_getc): Fix typo: Use phase2_ungetc, not phase2_getc.

2003-10-20  Bruno Haible  <bruno@clisp.org>

	Portability to AIX with cc.
	* xgettext.h (struct flag_context_ty): Define the bitfields of type
	'unsigned int'.

2003-10-20  Bruno Haible  <bruno@clisp.org>

	Portability to Solaris with cc.
	* x-java.c (string_buffer_append): Avoid aggregate initializer
	containing non-constant expressions.
	* xgettext.c (flag_context_list_iterator): Likewise.
	(language_to_extractor): Likewise.

2003-10-11  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (main): Drop suffix ".in" from input file name, if
	present, before looking at the file extension.

2003-10-09  Bruno Haible  <bruno@clisp.org>

	* format-awk.c: Include xalloc.h instead of xmalloc.h.
	* format-c.c: Likewise.
	* format-elisp.c: Likewise.
	* format-gcc-internal.c: Likewise.
	* format-java.c: Likewise.
	* format-librep.c: Likewise.
	* format-lisp.c: Likewise.
	* format-pascal.c: Likewise.
	* format-perl.c: Likewise.
	* format-perl-brace.c: Likewise.
	* format-php.c: Likewise.
	* format-python.c: Likewise.
	* format-sh.c: Likewise.
	* format-tcl.c: Likewise.
	* format-ycp.c: Likewise.
	* gettext-po.c: Likewise.
	* hostname.c: Likewise.
	* message.c: Likewise.
	* msgexec.c: Likewise.
	* msgfilter.c: Likewise.
	* msgfmt.c: Likewise.
	* msggrep.c: Likewise.
	* msginit.c: Likewise.
	* msgl-cat.c: Likewise.
	* msgl-english.c: Likewise.
	* msgl-iconv.c: Likewise.
	* msgmerge.c: Likewise.
	* open-po.c: Likewise.
	* po-gram-gen.y: Likewise.
	* po-hash-gen.y: Likewise.
	* po-lex.c: Likewise.
	* read-mo.c: Likewise.
	* read-po-abstract.c: Likewise.
	* read-po.c: Likewise.
	* read-properties.c: Likewise.
	* str-list.c: Likewise.
	* write-java.c: Likewise.
	* write-mo.c: Likewise.
	* write-po.c: Likewise.
	* write-properties.c: Likewise.
	* write-tcl.c: Likewise.
	* x-awk.c: Likewise.
	* x-c.c: Likewise.
	* x-elisp.c: Likewise.
	* x-glade.c: Likewise.
	* x-java.c: Likewise.
	* x-librep.c: Likewise.
	* x-lisp.c: Likewise.
	* x-perl.c: Likewise.
	* x-php.c: Likewise.
	* x-po.c: Likewise.
	* x-python.c: Likewise.
	* x-rst.c: Likewise.
	* x-sh.c: Likewise.
	* x-smalltalk.c: Likewise.
	* x-tcl.c: Likewise.
	* x-ycp.c: Likewise.
	* xgettext.c: Likewise.

2003-10-07  Bruno Haible  <bruno@clisp.org>

	More reliable subprocess cleanup.
	* msgexec.c (process_string): Pass slave_process = true to
	create_pipe_out() and wait_subprocess().
	* msgfilter.c (process_string): Pass slave_process = true to
	create_pipe_bidi() and wait_subprocess().
	* msggrep.c (is_string_selected): Pass slave_process = true to
	create_pipe_out() and wait_subprocess().
	* msginit.c (project_id, project_id_version, get_user_email,
	language_team_address): Pass slave_process = true to create_pipe_in()
	and wait_subprocess().
	* read-java.c (execute_and_read_po_output): Likewise.
	* read-tcl.c (msgdomain_read_tcl): Likewise.
	* urlget.c (execute_it, fetch): Pass slave_process = true to execute().

2003-10-05  Bruno Haible  <bruno@clisp.org>

	* write-java.c: Include fatal-signal.h, not signal.h.
	(uninstall_handlers): Remove function.
	(cleanup): Remove signal argument. Don't execute the signal's default
	action; leave that to the caller.
	(install_handlers, init_signal_set, block, unblock): Remove functions.
	(msgdomain_write_java): Invoke at_fatal_signal instead of
	install_handlers/uninstall_handlers. Invoke [un]block_fatal_signals
	instead of [un]block.

2003-10-05  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (substring_match): Remove variable.
	(long_options): Remove --keyword-substring option.
	(main): Remove handling of --keyword-substring option.

2003-10-05  Bruno Haible  <bruno@clisp.org>

	* message.h (enum is_format): New item yes_according_to_context.
	* message.c (possible_format_p): Handle also yes_according_to_context.
	* write-po.c (make_format_description_string): Likewise.

	* xgettext.h (struct flag_context_ty): New type.
	(null_context, passthrough_context): New declarations.
	(inherited_context): New declaration.
	(struct flag_context_list_ty): New type.
	(struct flag_context_list_iterator_ty): New type.
	(null_context_list_iterator, passthrough_context_list_iterator): New
	declarations.
	(flag_context_list_iterator): New declaration.
	(flag_context_list_iterator_advance): New declaration.
	(flag_context_list_table_ty): New type.
	(flag_context_list_table_lookup): New declaration.
	(xgettext_record_flag): New declaration.
	(remember_a_message, remember_a_message_plural): Add context argument.
	* xgettext.c: Include alloca.h.
	(flag_table_c, flag_table_gcc_internal, flag_table_sh,
	flag_table_python, flag_table_lisp, flag_table_elisp,
	flag_table_librep, flag_table_java, flag_table_awk, flag_table_ycp,
	flag_table_tcl, flag_table_perl, flag_table_php): New variables.
	(long_options): Add option --flag.
	(extractor_func): Add argument flag_table.
	(struct extractor_ty): New type.
	(main): Use type 'extractor_ty' instead of 'extractor_func'.
	Invoke init_flag_table_c(), init_flag_table_gcc_internal(),
	init_flag_table_sh(), init_flag_table_python(), init_flag_table_lisp(),
	init_flag_table_elisp(), init_flag_table_librep(),
	init_flag_table_java(), init_flag_table_awk(), init_flag_table_ycp(),
	init_flag_table_tcl(), init_flag_table_perl(), init_flag_table_php().
	Implement option --flag.
	(usage): Rename a section to "Language specific options". Document
	the languages to which --extract-all, --keyword, --trigraphs are
	applicable. Document option --flag.
	(null_context): New variable.
	(passthrough_context): New variable.
	(inherited_context): New function.
	(null_context_list_iterator): New variable.
	(passthrough_context_circular_list, passthrough_context_list_iterator):
	New variables.
	(flag_context_list_iterator): New function.
	(flag_context_list_iterator_advance): New function.
	(flag_context_list_table_lookup): New function.
	(xgettext_record_flag): New function.
	(extract_from_file): Change argument type to 'extractor_ty' instead of
	'extractor_func'. Set current_formatstring_parser{1,2} before invoking
	the extractor.
	(set_format_flags_from_context): New function.
	(remember_a_message): Add context argument. Set some *-format flag if
	the context specifies it.
	(remember_a_message_plural): Likewise.
	(language_to_extractor): Change return type to 'extractor_ty' instead
	of 'extractor_func'.

	* x-awk.h (SCANNERS_AWK): Refer to flag_table_awk.
	(extract_awk): Add argument flag_table.
	(init_flag_table_awk): New declaration.
	* x-awk.c (init_flag_table_awk): New function.
	(enum token_type_ty): New enum item token_type_semicolon.
	(x_awk_lex): Recognize semicolon.
	(flag_context_list_table): New variable.
	(extract_parenthesized): Add arguments outer_context, context_iter.
	Implement context handling depending on symbol before '('. Also
	recognize argument lists that start without '(', but only up to the
	next semicolon.
	(extract_awk): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-c.h (SCANNERS_C): Refer to flag_table_c, flag_table_gcc_internal.
	(extract_c): Add argument flag_table.
	(init_flag_table_c): New declaration.
	(init_flag_table_gcc_internal): New declaration.
	* x-c.c (init_flag_table_c): New function.
	(init_flag_table_gcc_internal): New function.
	(enum xgettext_token_type_ty): New item xgettext_token_type_other.
	(x_c_lex): For token_type_name, put the string into the resulting
	token instead of freeing it. Return token type
	xgettext_token_type_other instead of xgettext_token_type_symbol in
	some cases.
	(flag_context_list_table): New variable.
	(extract_parenthesized): Add arguments outer_context, context_iter.
	Implement context handling depending on symbol before '('.
	(extract_c): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-elisp.h (SCANNERS_ELISP): Refer to flag_table_elisp.
	(extract_elisp): Add argument flag_table.
	(init_flag_table_elisp): New declaration.
	* x-elisp.c (init_flag_table_elisp): New function.
	(flag_context_list_table): New variable.
	(read_object): Add argument outer_context. Implement context handling
	depending on first symbol after '('.
	(extract_elisp): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-glade.h (SCANNERS_GLADE): Update.
	(extract_glade): Add argument flag_table.
	* x-glade.c (start_element_handler, end_element_handler): Pass null
	context to remember_a_message.
	(extract_glade): Add argument flag_table.

	* x-java.h (SCANNERS_JAVA): Refer to flag_table_java.
	(extract_java): Add argument flag_table.
	(init_flag_table_java): New declaration.
	* x-java.c (init_flag_table_java): New function.
	(flag_context_list_table): New variable.
	(extract_parenthesized): Add arguments outer_context, context_iter.
	Implement context handling depending on symbol before '('.
	(extract_java): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-librep.h (SCANNERS_ELISP): Refer to flag_table_librep.
	(extract_librep): Add argument flag_table.
	(init_flag_table_librep): New declaration.
	* x-librep.c (init_flag_table_librep): New function.
	(flag_context_list_table): New variable.
	(read_object): Add argument outer_context. Implement context handling
	depending on first symbol after '('.
	(extract_librep): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-lisp.h (SCANNERS_LISP): Refer to flag_table_lisp.
	(extract_lisp): Add argument flag_table.
	(init_flag_table_lisp): New declaration.
	* x-lisp.c (init_flag_table_lisp): New function.
	(flag_context_list_table): New variable.
	(read_object): Add argument outer_context. Implement context handling
	depending on first symbol after '('.
	(extract_lisp): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-perl.h (SCANNERS_PERL): Refer to flag_table_perl.
	(extract_perl): Add argument flag_table.
	(init_flag_table_perl): New declaration.
	* x-perl.c (init_flag_table_java): New function.
	(flag_context_list_table): New variable.
	(extract_variable): Update. Implement context handling depending on
	symbol before '{'...'}'.
	(interpolate_keywords): Implement context handling depending on symbol
	before '->' or '{'...'}'.
	(extract_balanced): Add arguments outer_context, context_iter.
	Implement context handling depending on symbol before '('. Also
	recognize argument lists that start without '('.
	(extract_perl): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-php.h (SCANNERS_PHP): Refer to flag_table_php.
	(extract_php): Add argument flag_table.
	(init_flag_table_php): New declaration.
	* x-php.c (init_flag_table_php): New function.
	(flag_context_list_table): New variable.
	(extract_parenthesized): Add arguments outer_context, context_iter.
	Implement context handling depending on symbol before '('.
	(extract_php): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-po.h (SCANNERS_PO): Update.
	(extract_po): Add argument flag_table.
	* x-properties.h (SCANNERS_PROPERTIES): Update.
	(extract_properties): Add argument flag_table.
	* x-po.c (extract_po): Add argument flag_table.
	(extract_properties): Add argument flag_table.

	* x-python.h (SCANNERS_PYTHON): Refer to flag_table_python.
	(extract_python): Add argument flag_table.
	(init_flag_table_python): New declaration.
	* x-python.c (init_flag_table_python): New function.
	(flag_context_list_table): New variable.
	(extract_parenthesized): Add arguments outer_context, context_iter.
	Implement context handling depending on symbol before '('.
	(extract_python): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-rst.h (SCANNERS_RST): Update.
	(extract_rst): Add argument flag_table.
	* x-rst.c (extract_rst): Add argument flag_table.

	* x-sh.h (SCANNERS_SH): Refer to flag_table_sh.
	(extract_sh): Add argument flag_table.
	(init_flag_table_sh): New declaration.
	* x-sh.c (init_flag_table_sh): New function.
	(flag_context_list_table): New variable.
	(read_word): Add context argument.
	(read_command): Add outer_context argument. Implement context handling
	depending on first symbol of command.
	(read_command_list): Add outer_context argument.
	(extract_sh): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-smalltalk.h (SCANNERS_SMALLTALK): Update.
	(extract_smalltalk): Add argument flag_table.
	* x-smalltalk.c (extract_smalltalk): Add argument flag_table.

	* x-tcl.h (SCANNERS_TCL): Refer to flag_table_tcl.
	(extract_tcl): Add argument flag_table.
	(init_flag_table_tcl): New declaration.
	* x-tcl.c (init_flag_table_tcl): New function.
	(flag_context_list_table): New variable.
	(accumulate_word): Add context argument.
	(read_word): Add context argument.
	(read_command): Add outer_context argument. Implement context handling
	depending on first symbol of command.
	(read_command_list): Add outer_context argument.
	(extract_tcl): Add argument flag_table. Initialize
	flag_context_list_table.

	* x-ycp.h (SCANNERS_YCP): Refer to flag_table_ycp.
	(extract_ycp): Add argument flag_table.
	(init_flag_table_ycp): New declaration.
	* x-ycp.c (init_flag_table_ycp): New function.
	(flag_context_list_table): New variable.
	(extract_parenthesized): New function, split off from extract_ycp.
	Implement context handling depending on symbol before '('.
	(extract_ycp): Add argument flag_table. Initialize
	flag_context_list_table. Call extract_parenthesized to do the work.

	* po-lex.c (mbfile_getc, control_sequence): Remove explicit marking of
	strings as c-format, now done by xgettext.

2003-09-23  Bruno Haible  <bruno@clisp.org>

	* x-awk.c (extract_parenthesized): Remove optimization of the
	extract_all case.
	* x-c.c (extract_parenthesized): Likewise.
	* x-elisp.c (read_object): Likewise.
	* x-librep.c (read_object): Likewise.
	* x-lisp.c (read_object): Likewise.
	* x-perl.c (x_perl_prelex, extract_balanced): Likewise.
	* x-php.c (extract_parenthesized): Likewise.
	* x-python.c (extract_parenthesized): Likewise.
	* x-sh.c (read_command): Likewise.

2003-10-08  Bruno Haible  <bruno@clisp.org>

	* msgmerge.c (main): Make option -N work.
	Reported by Liu Garfield <jackliu9999@hotmail.com>.

2003-10-04  Bruno Haible  <bruno@clisp.org>

	New Java backend.
	* x-java.c: New file.
	* x-java.l: Remove file.
	* Makefile.am (xgettext_SOURCES): Add x-java.c, remove x-java.l.
	(x-java.c): Remove rule.
	* FILES: Update.

2003-09-22  Bruno Haible  <bruno@clisp.org>

	* x-glade.c (start_element_handler): Implement extract_all behaviour.

2003-10-04  Bruno Haible  <bruno@clisp.org>

	* x-glade.c (do_extract_glade): Initialize stack_depth.
	* x-perl.c (extract_perl): Initialize linesize and linepos.

	* x-python.c (phase2_getc): Set last_comment_line.
	(phase5_get): Set last_non_comment_line.

2003-10-04  Bruno Haible  <bruno@clisp.org>

	* x-glade.c: Don't include msgl-ascii.h and msgl-iconv.h.
	* x-python.c: Likewise.
	* x-tcl.c: Likewise.

2003-10-06  Guido Flohr  <guido@imperia.net>
            Bruno Haible  <bruno@clisp.org>

	* x-perl.c (enum symbol_type_ty): New enum.
	(struct token_ty): Rename field string_type to sub_type and change its
	type to 'int'.
	(extract_quotelike_pass3, interpolate_keywords): Update.
	(x_perl_prelex): Set sub_type also for symbol tokens.
	(x_perl_lex): Special handling of prototype argument lists.
	Reported by Crispin Flowerday <cflowerday@zeus.com>.

2003-09-22  Bruno Haible  <bruno@clisp.org>

	* x-sh.c (read_word): Warn about $"...".

2003-09-18  Bruno Haible  <bruno@clisp.org>

	* gettext-po.h (po_file_domain_header, po_header_field,
	po_message_is_obsolete, po_message_is_fuzzy, po_message_is_format): New
	declarations.
	* gettext-po.c (po_file_domain_header, po_header_field,
	po_message_is_obsolete, po_message_is_fuzzy, po_message_is_format): New
	functions.
	* Makefile.am (LTV_CURRENT, LTV_REVISION, LTV_AGE): Bump to 1:0:1.

2003-09-14  Bruno Haible  <bruno@clisp.org>

	* plural-count.c: Include plural-count.h.
	* x-po.c: Include x-properties.h.
	* x-java.l (append_strings): Change argument type to 'const char *'.

2003-09-14  Bruno Haible  <bruno@clisp.org>

	* msgfmt.c (check_plural_eval): Mark some strings as c-format.
	(msgfmt_add_message): Make static.
	* po-lex.c (mbfile_getc, control_sequence): Mark some strings as
	c-format.

2003-09-18  Bruno Haible  <bruno@clisp.org>

	* FILES: Update.

2003-09-14  Bruno Haible  <bruno@clisp.org>

	More reliable checking for read errors.
	* po-lex.c (mbfile_getc): Diagnose read errors also in the middle of
	multibyte characters.
	(lex_getc): Diagnose read errors also right after backslash.
	* x-rst.c (extract_rst): Diagnose read errors also inside ConstName
	and immediately after #.

2003-09-14  Bruno Haible  <bruno@clisp.org>

	* write-mo.c: Include fwriterror.h.
	(msgdomain_write_mo): Use fwriteerror, to get right errno value in
	error message about write error.
	* write-po.c: Include fwriterror.h.
	(msgdomain_list_print): Use fwriteerror, to get right errno value in
	error message about write error.
	* write-java.c: Include fwriterror.h.
	(msgdomain_write_java): Use fwriteerror, to get right errno value in
	error message about write error.
	* write-tcl.c: Include fwriterror.h.
	(msgdomain_write_tcl): Use fwriteerror, to get right errno value in
	error message about write error.

2003-09-18  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (from_current_source_encoding): Use multiline_error,
	for a prettier error message.

	* x-perl.c (extract_quotelike_pass1): Store counter_delim instead of
	EOF as delimiter, to avoid error during from_current_source_encoding.
	Reported by Crispin Flowerday <cflowerday@zeus.com>.

2003-09-13  Bruno Haible  <bruno@clisp.org>

	* format-sh.c (INVALID_SHELL_SYNTAX,
	INVALID_CONTEXT_DEPENDENT_VARIABLE): New macros.
	(format_parse): Reject constructs like ${variable-default} and $?.

2003-09-13  Bruno Haible  <bruno@clisp.org>

	Fix behaviour of "<program> --help > /dev/full".
	* hostname.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgattrib.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgcat.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgcmp.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgcomm.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgconv.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgen.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgexec.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgfilter.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgfmt.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msggrep.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msginit.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgmerge.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msgunfmt.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* msguniq.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* urlget.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* xgettext.c: Include closeout.h.
	(main): Register close_stdout for execution at program exit.
	* write-po.c (msgdomain_list_print): Don't fclose (stdout) here.

2003-09-11  Bruno Haible  <bruno@clisp.org>

	* po-lex.c (mbfile_getc): Handle unexpected return value of
	u8_mbtouc(). Reported by Jochen Hein <jochen@jochen.org>.

2003-09-09  Bruno Haible  <bruno@clisp.org>

	* read-properties.c (phase4_getuc): Cast line_number to 'unsigned long'
	before outputting it.

2003-09-09  Bruno Haible  <bruno@clisp.org>

	* po-lex.c: Test HAVE_DECL_GETC_UNLOCKED instead of HAVE_GETC_UNLOCKED.
	* write-po.c: Test HAVE_DECL_PUTC_UNLOCKED instead of
	HAVE_PUTC_UNLOCKED.

2003-09-09  Guido Flohr  <guido@imperia.net>

	* x-perl.c (extract_quotelike_pass3): Change \l handling to no longer
	eat up non-uppercase characters; likewise for \u. Also make \l and \u
	work on characters written using hex or octal escape sequence. Fix \Q
	handling. With option --extract-all, avoid "invalid variable
	interpolation" warnings.
	(x_perl_prelex): With option --extract-all, keep variables inside
	double-quoted strings untouched.

2003-09-03  Bruno Haible  <bruno@clisp.org>

	* x-sh.h: New file.
	* x-sh.c: New file.
	* xgettext.c: Include x-sh.h.
	(main): Call x_sh_extract_all, x_sh_keyword.
	(usage): Mention Shell language.
	(language_to_extractor): Add Shell rule.
	(extension_to_language): Add Shell rule.
	* Makefile.am (noinst_HEADERS): Add x-sh.h.
	(xgettext_SOURCES): Add x-sh.c.
	* Makefile.msvc (xgettext_OBJECTS): Add x-sh.obj.
	(x-sh.obj): New rule.
	* Makefile.vms (xgettext_OBJECTS): Add x-sh.obj.
	(x-sh.obj): New rule.

2003-08-31  Bruno Haible  <bruno@clisp.org>

	* format-sh.c: New file.
	* message.h (format_sh): New enum value.
	(NFORMATS): Increment.
	* format.h (formatstring_sh): New declaration.
	* format.c (formatstring_parsers): Add entry for sh.
	* message.c (format_language, format_language_pretty): Likewise.
	* Makefile.am (FORMAT_SOURCE): Add format-sh.c.
	* Makefile.msvc (OBJECTS): Add format-sh.obj.
	(format-sh.obj): New rule.
	* Makefile.vms (OBJECTS): Add format-sh.obj.
	(format-sh.obj): New rule.

2003-08-31  Bruno Haible  <bruno@clisp.org>

	* format-gcc-internal.c (isdigit): Remove unused macro.
	* format-perl-brace.c (isdigit): Likewise.

2003-09-01  Guido Flohr  <guido@imperia.net>

	* x-perl.c (extract_balanced): Access the global last_token.
	Initialize last_token and prefer_division_over_regexp here. 
	(extract_perl): Not here.

2003-08-29  Bruno Haible  <bruno@clisp.org>

	* x-perl.c: Include getline.h.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	* Makefile.msvc (format.obj, msgmerge.obj, xgettext.obj, msgattrib.obj,
	msgcat.obj, msgcomm.obj, msgconv.obj, msgen.obj, msgfilter.obj,
	msggrep.obj, msguniq.obj): Compile these in C++ mode. This works around
	the "non-constant initializer" error that we get for addresses of
	variables in DLLs in C mode.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	* msgfilter.c (process_message): Cast xrealloc() result.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	* msgfilter.c: On Windows, include <io.h> instead of <unistd.h>.
	* msggrep.c: Likewise.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	* plural-count.h: New file.
	* plural-count.c: New file, extracted from msgmerge.c.
	* msgmerge.c: Include plural-count.h instead of plural-exp.h.
	(match_domain): Use function get_plural_count().
	* Makefile.am (noinst_HEADERS): Add plural-count.h.
	(msgmerge_SOURCES): Add plural-count.c.
	* Makefile.msvc (msgmerge_OBJECTS): Add plural-count.obj.
	(plural-count.obj): New rule.
	* Makefile.vms (msgmerge_OBJECTS): Add plural-count.obj.
	(plural-count.obj): New rule.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	Support for building DLLs on Windows.
	* format.h (formatstring_c, formatstring_python, formatstring_lisp,
	formatstring_elisp, formatstring_librep, formatstring_smalltalk,
	formatstring_java, formatstring_awk, formatstring_pascal,
	formatstring_ycp, formatstring_tcl, formatstring_perl,
	formatstring_perl_brace, formatstring_php, formatstring_gcc_internal,
	formatstring_parsers): Add DLL_VARIABLE attribute.
	* message.h (format_language, format_language_pretty): Likewise.
	* msgl-cat.h (more_than, less_than, use_first, msgcomm_mode,
	omit_header): Likewise.
	* plural-table.h (plural_table, plural_table_size): Likewise.
	* po-charset.h (po_charset_ascii, po_charset_utf8, po_lex_charset,
	po_lex_iconv, po_lex_weird_cjk): Likewise.
	* po-lex.h (gram_pos, gram_pos_column, gram_max_allowed_errors,
	pass_obsolete_entries): Likewise.
	* read-po.h (line_comment, allow_duplicates, input_syntax): Likewise.
	* write-mo.h (alignment, no_hash_table): Likewise.
	* Makefile.am (po-gram-gen2.h): Likewise.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	* Makefile.msvc (gettext-po.obj, gettextpo.lib, gettextpo.res): New
	rules.
	(all): Depend on gettextpo.lib.
	(install, installdirs, uninstall): Install/uninstall gettext-po.h,
	gettextpo.dll and gettextpo.lib.
	* Makefile.vms (gettext-po.obj, gettextpo.olb): New rules.
	(all): Depend on gettextpo.olb.
	(install, installdirs, uninstall): Install/uninstall gettext-po.h,
	gettextpo.olb.

2003-08-24  Bruno Haible  <bruno@clisp.org>

	* dir-list.h: Make this file includable in C++ mode: add extern "C".
	* file-list.h: Likewise.
	* format.h: Likewise.
	* message.h: Likewise.
	* msgl-ascii.h: Likewise.
	* msgl-cat.h: Likewise.
	* msgl-charset.h: Likewise.
	* msgl-english.h: Likewise.
	* msgl-equal.h: Likewise.
	* msgl-iconv.h: Likewise.
	* open-po.h: Likewise.
	* po-charset.h: Likewise.
	* po-lex.h: Likewise.
	* po-time.h: Likewise.
	* read-po-abstract.h: Likewise.
	* str-list.h: Likewise.
	* write-po.h: Likewise.
	* xgettext.h: Likewise.
	* read-po.h: Likewise.
	(this): Redefine to a different symbol.
	* xgettext.c: Add extern "C" around all "x-*.h" includes.

2003-08-22  Bruno Haible  <bruno@clisp.org>

	* format-awk.c: Include error-progname.h instead of progname.h.
	* format-c.c: Likewise.
	* format-elisp.c: Likewise.
	* format-gcc-internal.c: Likewise.
	* format-java.c: Likewise.
	* format-librep.c: Likewise.
	* format-lisp.c: Likewise.
	* format-pascal.c: Likewise.
	* format-perl.c: Likewise.
	* format-perl-brace.c: Likewise.
	* format-php.c: Likewise.
	* format-python.c: Likewise.
	* format-tcl.c: Likewise.
	* format-ycp.c: Likewise.
	* po-lex.h: Likewise.
	* read-properties.c: Likewise.
	* write-po.c: Likewise.
	* x-awk.c: Likewise.
	* x-c.c: Likewise.
	* x-perl.c: Likewise.
	* x-python.c: Likewise.
	* x-rst.c: Likewise.
	* hostname.c: Include error-progname.h.
	* msgattrib.c: Likewise.
	* msgcat.c: Likewise.
	* msgcmp.c: Likewise.
	* msgcomm.c: Likewise.
	* msgconv.c: Likewise.
	* msgen.c: Likewise.
	* msgexec.c: Likewise.
	* msgfilter.c: Likewise.
	* msgfmt.c: Likewise.
	* msggrep.c: Likewise.
	* msginit.c: Likewise.
	* msgmerge.c: Likewise.
	* msgunfmt.c: Likewise.
	* msguniq.c: Likewise.
	* urlget.c: Likewise.
	* xgettext.c: Likewise.
	* po-lex.c: Include error-progname.h and pos.h.

2003-08-15  Bruno Haible  <bruno@clisp.org>

	* msginit.c (catalogname_for_locale): Add entries for Aragonese,
	Haitian, Sichuan Yi, Limburgish.
	(englishname_of_language): Likewise.

2003-08-08  Bruno Haible  <bruno@clisp.org>

	* format-gcc-internal.c: New file.
	* message.h (format_gcc_internal): New enum value.
	(NFORMATS): Increment.
	* format.h (formatstring_gcc_internal): New declaration.
	* format.c (formatstring_parsers): Add entry for gcc_internal.
	* message.c (format_language, format_language_pretty): Likewise.
	* x-c.h (SCANNERS_C): Add an entry for GCC-source.
	* xgettext.c (usage): Mention GCC-source language.
	* Makefile.am (FORMAT_SOURCE): Add format-gcc-internal.c.
	* Makefile.msvc (OBJECTS): Add format-gcc-internal.obj.
	(format-gcc-internal.obj): New rule.
	* Makefile.vms (OBJECTS): Add format-gcc-internal.obj.
	(format-gcc-internal.obj): New rule.

2003-08-04  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (extract_quotelike_pass3): Fix \x handling.
	Reported by Guido Flohr.

2003-07-05  Bruno Haible  <bruno@clisp.org>

	* format-perl-brace.c: Renamed from format-perl-bracket.c. Recognize
	braces instead of brackets.
	* format.h (formatstring_perl_brace): Renamed from
	formatstring_perl_bracket.
	* format.c (formatstring_parsers): Add formatstring_perl_brace, remove
	formatstring_perl_bracket.
	* message.h (enum format_type): Add format_perl_brace, remove
	format_perl_bracket.
	* message.c (format_language, format_language_pretty): Update.
	* x-perl.h (SCANNERS_PERL): Update.
	* Makefile.am (FORMAT_SOURCE): Add format-perl-brace.c, remove
	format-perl-bracket.c.
	* Makefile.msvc (OBJECTS): Add format-perl-brace.obj, remove
	format-perl-bracket.obj.
	(format-perl-brace.obj): Renamed from format-perl-bracket.obj.
	* Makefile.vms (OBJECTS): Add format-perl-brace.obj, remove
	format-perl-bracket.obj.
	(format-perl-brace.obj): Renamed from format-perl-bracket.obj.

2003-07-03  Bruno Haible  <bruno@clisp.org>

	Support for PHP >= 4.2.0.
	* x-php.c (init_keywords): Add ngettext, dngettext, dcngettext to the
	built-in keywords.
	Reported by A. Sopicki <a.sopicki@gmx.de>.

2003-06-27  Bruno Haible  <bruno@clisp.org>

	* xgettext.h (from_current_source_encoding): New declaraction.
	* xgettext.c (from_current_source_encoding): New function.
	(CONVERT_STRING): Use it.
	* x-perl.c: Include po-charset.h.
	(get_here_document): Convert each line to UTF-8.
	(phase2_getc): Convert each comment to UTF-8. Tell xgettext_comment_add
	to not convert it.
	(extract_quotelike_pass1_utf8): New function.
	(extract_quotelike): Use extract_quotelike_pass1_utf8.
	(extract_triple_quotelike): Likewise.
	(extract_variable): Tell remember_a_message to not convert the string.
	(interpolate_keywords): Likewise.
	(extract_balanced): Tell remember_a_message, remember_a_message_plural
	to not convert the string.

2003-06-23  Guido Flohr  <guido@imperia.net>

	* x-perl.c (extract_quotelike_pass3): Fix handling of doubled
	backslashes in single-quoted strings.

2003-06-23  Bruno Haible  <bruno@clisp.org>

	* format-perl-bracket.c (format_check): Allow additional bracketed
	items in the msgstr.

2003-06-22  Bruno Haible  <bruno@clisp.org>

	* write-properties.c: Don't include exit.h and gettext.h.

2003-06-22  Bruno Haible  <bruno@clisp.org>

	* x-php.c (phase3_ungetc): Comment out unused function.

2003-06-21  Bruno Haible  <bruno@clisp.org>

	* format-perl.c: Complete rewrite.
	* format-perl-bracket.c: New file.
	* message.h (format_perl_bracket): New enum value.
	(NFORMATS): Increment.
	* format.h (formatstring_perl_bracket): New declaration.
	* format.c (formatstring_parsers): Add entry for perl_bracket.
	* message.c (format_language, format_language_pretty): Likewise.
	* x-perl.h (SCANNERS_PERL): Use formatstring_perl and
	formatstring_perl_bracket.
	* Makefile.am (FORMAT_SOURCE): Add format-perl-bracket.c.
	* Makefile.msvc (OBJECTS): Add format-perl.obj,format-perl-bracket.obj.
	(xgettext_OBJECTS): Add x-perl.obj.
	(format-perl.obj, format-perl-bracket.obj, x-perl.obj): New rules.
	* Makefile.vms (OBJECTS): Add format-perl.obj, format-perl-bracket.obj.
	(xgettext_OBJECTS): Add x-perl.obj.
	(format-perl.obj, format-perl-bracket.obj, x-perl.obj): New rules.

	* x-perl.c (extract_quotelike_pass3): Don't give an invalid
	interpolation error for a backslashed dollar sign.

2003-06-21  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (extract_quotelike_pass3): Fix handling of double backslash.

2003-06-19  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (enum string_type_ty): Remove trailing comma.
	(interpolate_keywords::enum parser_state): Likewise.
	(extract_quotelike_pass3): Cast first argument of u8_uctomb().

2003-06-15  Bruno Haible  <bruno@clisp.org>

	* x-awk.c: Reorder definitions.
	* x-c.c: Reorder definitions.
	* x-perl.c: Reorder definitions.
	* x-php.c: Reorder definitions.
	* x-python.c: Reorder definitions.
	* x-smalltalk.c: Reorder definitions.
	* x-ycp.c: Reorder definitions.

2003-06-15  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (struct stack_entry): Remove type.
	(struct stack): Remove type.
	(struct token_stack_ty): New type.
	(token_stack): Change type to 'struct token_stack_ty'.
	(token_stack_dump): Renamed from stack_dump. Update.
	(token_stack_push): Renamed from stack_unshift. Rewritten.
	(token_stack_pop): Renamed from stack_shift. Rewritten.
	(token_stack_peek): Renamed from stack_head. Rewritten.
	(token_stack_free): Renamed from stack_free. Rewritten.
	(x_perl_lex, x_perl_unlex, extract_perl): Update.

2003-06-15  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (DEBUG_MEMORY): Remove macro.
	(remember_a_message_debug, remember_a_message_plural_debug,
	xmalloc_debug, xrealloc_debug, xrealloc_static_debug, xstrdup_debug,
	free_debug): Remove functions.
	(xrealloc_static): Remove macro. Use xrealloc instead.

2003-06-15  Bruno Haible  <bruno@clisp.org>

	* x-awk.c (phase2_getc, x_awk_lex): Increase bufmax proportionally.
	* x-c.c (comment_add, comment_line_end, phase5_get, phase6_get):
	Likewise.
	* x-elisp.c (comment_add, comment_line_end): Likewise.
	* x-librep.c (comment_add, comment_line_end): Likewise.
	* x-lisp.c (comment_add, comment_line_end): Likewise.
	* x-php.c (comment_add, comment_line_end, x_php_lex): Likewise.
	* x-python.c (comment_add, comment_line_end, phase5_get): Likewise.
	* x-rst.c (extract_rst): Likewise.
	* x-smalltalk.c (comment_add, comment_line_end, phase2_get): Likewise.
	* x-tcl.c (comment_add, comment_line_end): Likewise.
	* x-ycp.c (phase2_getc, x_ycp_lex): Likewise.

2003-06-15  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (current_formatstring_parser1,
	current_formatstring_parser2): New variables, replacing
	current_formatstring_parser.
	(remember_a_message, remember_a_message_plural): Try both
	formatstring parsers.
	(language_to_extractor): Allow two formatstring parsers per language,
	not just one.
	* x-perl.h (SCANNERS_PERL): Add formatstring_c as secondary format
	string parser.
	* x-awk.h (SCANNERS_AWK): Update.
	* x-c.h (SCANNERS_C): Update.
	* x-elisp.h (SCANNERS_ELISP): Update.
	* x-glade.h (SCANNERS_GLADE): Update.
	* x-java.h (SCANNERS_JAVA): Update.
	* x-librep.h (SCANNERS_LIBREP): Update.
	* x-lisp.h (SCANNERS_LISP): Update.
	* x-php.h (SCANNERS_PHP): Update.
	* x-po.h (SCANNERS_PO): Update.
	* x-properties.h (SCANNERS_PROPERTIES): Update.
	* x-python.h (SCANNERS_PYTHON): Update.
	* x-rst.h (SCANNERS_RST): Update.
	* x-smalltalk.h (SCANNERS_SMALLTALK): Update.
	* x-tcl.h (SCANNERS_TCL): Update.
	* x-ycp.h (SCANNERS_YCP): Update.

2003-06-15  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (case_whitespace): New macro.
	(is_whitespace): New function.
	(interpolate_keywords): Add lineno argument. Track newlines to update
	lineno while processing the string. Use is_whitespace.
	(extract_triple_quotelike): Update. Use is_whitespace.
	(extract_variable): Simplify: add final NUL byte only when done. Use
	is_whitespace.
	(x_perl_prelex): Use is_whitespace. After reading a here document, use
	line_number+1, not line_number. Fix buffer overrun in <<XYZ handling.
	(collect_message): Use is_whitespace.
	(extract_balanced): Call free_token at the end of the loop, not at the
	beginning.

2003-06-14  Bruno Haible  <bruno@clisp.org>

	* x-perl.c (enum token_type_ty): Reorder, so as to simplify the
	function free_token().
	(struct token_ty): Fix comments.
	(token2string): Add const.
	(token_stack): Make static.
	(*_debug, stack_dump): Remove all fflushs.
	(linebuf, linesize, linepos, linebuf_size, last_token, here_eaten,
	end_of_file): Make static.
	(last_string, last_string_finished): Remove unused variables.
	(phase1_getc, get_here_document, skip_pod): Test getline() result
	for being < 0, not == EOF.
	(phase1_ungetc): Signal internal error through abort(), not exit().
	(get_here_document): Tweak. Increase bufmax proportionally.
	(phase2_getc): Increase bufmax proportionally.
	(prefer_division_over_regexp): Fix comment.
	(extract_hex, extract_oct): Add const. Simplify.
	(extract_quotelike): Add a safety check.
	(extract_quotelike_pass1): Increase bufmax proportionally. Fix
	insufficient memory allocation at "bufpos + len >= bufmax".
	(extract_quotelike_pass3): Increase bufmax proportionally. Make crs
	const. After \x{ABC} position crs after the closing brace. Simplify \c
	code. Reduce memory allocation when \N{ABC} is seen. Fix bug in \l and
	\u. Fix error message when $ or @ is seen.
	(extract_variable): Increase bufmax proportionally.
	(interpolate_keywords): Likewise. Convert c's value to unsigned char.
	(x_perl_prelex): Increase bufmax proportionally. Compute 4th argument
	to extract_triple_quotelike completely.
	(extract_perl): Initialize token_stack correctly.

2003-06-13  Bruno Haible  <bruno@clisp.org>

	* msgexec.c (process_string): Pass null_stderr=false.
	* msgfilter.c (process_string): Likewise.
	* msggrep.c (is_string_selected): Likewise.
	* read-java.c (execute_and_read_po_output): Likewise.
	* read-tcl.c (msgdomain_read_tcl): Likewise.
	* msginit.c (project_id, project_id_version, get_user_email,
	language_team_address): Return a default value if the subprocess
	fails, instead of exiting.

2003-06-12  Bruno Haible  <bruno@clisp.org>

	* Makefile.am (noinst_HEADERS): Add x-perl.h.
	(FORMAT_SOURCE): Add format-perl.c.
	(xgettext_SOURCES): Add x-perl.c.
	* message.h (enum format_type): Mention perl between tcl and php.
	* message.c (format_language, format_language_pretty): Likewise.
	* format.h (formatstring_perl): Likewise.
	* format.c (formatstring_parsers): Likewise.
	* format-perl.c: Use GNU coding style. Prefer xmalloc over xcalloc.
	* x-perl.h: Assume ANSI C.
	* x-perl.c: Assume ANSI C. Use GNU coding style. Prefer xmalloc over
	xcalloc.
	(token_buf): Remove unused variable.
	(xcalloc_debug, stack_push, stack_pop): Remove unused functions.
	* xgettext.c: Mention perl between tcl and php.

2003-06-11  Guido Flohr  <guido@imperia.net>

	* message.h (enum format_type): New enum value 'format_perl'.
	(NFORMATS): Increment.
	* message.c (format_language, format_language_pretty): Add entry
	for perl.
	* format.h (formatstring_perl): New declaration.
	* format-perl.c: New file.
	* format.c (formatstring_parsers): Add entry for perl.
	* x-perl.h: New file.
	* x-perl.c: New file.
	* xgettext.c: Include x-perl.h.
	(main): Call x_perl_extract_all, x_perl_keyword.
	(usage): Mention Perl language.
	(language_to_extractor): Add Perl rule.
	(extension_to_language): Add Perl rule.

2003-06-08  Bruno Haible  <bruno@clisp.org>

	* Makefile.vms (LDADD): Take options from .opt files.
	(libiconv.opt): New rule.
	(msgcmp.exe, msgfmt.exe, msgmerge.exe, msgunfmt.exe, xgettext.exe,
	msgattrib.exe, msgcat.exe, msgcomm.exe, msgconv.exe, msgen.exe,
	msgexec.exe, msgfilter.exe, msggrep.exe, msginit.exe, msguniq.exe):
	Depend on it.
	* plural-eval.c: Include "eval-plural.h" without a path, rely on the
	Makefile's -I options instead.
	* read-properties.c (conv_from_java): Change type of q to
	'unsigned char *'.
	Reported by Jouk Jansen <joukj@hrem.stm.tudelft.nl>.

2003-05-27  Bruno Haible  <bruno@clisp.org>

	* plural-table.c (plural_table): Correct entry for Slovak.
	Reported by Marcel Telka <marcel@telka.sk>.

2003-05-24  Bruno Haible  <bruno@clisp.org>

	* x-glade.h (EXTENSIONS_GLADE): Also recognize the .glade2 extension.
	* x-glade.c (start_element_handler): Also extract strings according to
	Glade 2 conventions.

2003-05-22  Bruno Haible  <bruno@clisp.org>

	* gettext-0.12.1 released.

2003-05-21  Bruno Haible  <bruno@clisp.org>

	* msggrep.c (main) [Solaris]: Fix syntax error.
	Reported by Valery Beaud <valery.beaud@art.alcatel.fr>.

2003-05-21  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (output_syntax): New variable.
	(main): Set it.
	(finalize_header): If --properties-output was given, set the charset.

2003-05-18  Bruno Haible  <bruno@clisp.org>

	* Makefile.msvc (DEBUGFLAGS): New variable.
	(gettextsrc.lib): Use it.
	(msgcmp.exe, msgfmt.exe, msgmerge.exe, msgunfmt.exe, xgettext.exe,
	msgattrib.exe, msgcat.exe, msgcomm.exe, msgconv.exe, msgen.exe,
	msgexec.exe, msgfilter.exe, msggrep.exe, msginit.exe, msguniq.exe):
	Use it, and MFLAGS too.

2003-05-17  Bruno Haible  <bruno@clisp.org>

	* gettext-0.12 released.

2003-05-17  Bruno Haible  <bruno@clisp.org>

	* Makefile.msvc (msgcmp.exe, msgfmt.exe, msgmerge.exe, msgunfmt.exe,
	msgattrib.exe, msgcat.exe, msgcomm.exe, msgconv.exe, msgen.exe,
	msgexec.exe, msgfilter.exe, msggrep.exe, msginit.exe, msguniq.exe):
	Link with iconv.lib, needed by intl.lib.

2003-05-12  Bruno Haible  <bruno@clisp.org>

	* msginit.c (F_OK): Provide a fallback value.
	Reported by Perry Rapp.

2003-05-10  Bruno Haible  <bruno@clisp.org>

	* msgl-iconv.c (iconv_string): Don't return -1 just because the string
	is longer than 4 KB.
	Reported by Denis Barbier <barbier@linuxfr.org>.

2003-05-04  Bruno Haible  <bruno@clisp.org>

	* po-lex.h (po_gram_error): Don't use ISO C 99 feature on DEC C.
	* po-lex.c (po_gram_error): LIkewise.

2003-05-03  Bruno Haible  <bruno@clisp.org>

	* msgfilter.c: Include <sys/select.h> also on EMX.
	Reported by Andreas Buening <andreas.buening@nexgo.de>.

2003-04-26  Bruno Haible  <bruno@clisp.org>

	* message.h (msgdomain_list_ty): Add field 'encoding'.
	* message.c (msgdomain_list_alloc): Initialize it.
	* read-properties.h: New file.
	* read-properties.c: New file.
	* read-po-abstract.h (abstract_po_reader_class_ty): In
	directive_message field, add force_fuzzy argument.
	(po_scan_start, po_scan_end): Remove declarations.
	(input_syntax_ty): New type.
	(po_callback_message): Add force_fuzzy argument.
	* read-po-abstract.c (call_directive_message, po_callback_message):
	Add force_fuzzy argument.
	(po_scan_start, po_scan_end): Make static.
	(po_scan): Add support for syntax_properties. Move
	error_message_count handling to here.
	(po_callback_message): Move po_lex_charset_set invocation away.
	* read-po.h (default_po_reader_class_ty): In add_message field, add
	force_fuzzy argument.
	(default_directive_message, default_add_message): Add force_fuzzy
	argument.
	(inout_syntax): New declaration.
	* read-po.c (call_add_message): Add force_fuzzy argument.
	(default_directive_message, default_add_message): Likewise.
	(input_syntax): New variable.
	(read_po): Pass input_syntax to po_scan(). Set mdlp->encoding if
	possible.
	* po-gram-gen.y: Pass force_fuzzy = false.
	(do_callback_message): New function. Move po_lex_charset_set
	invocation to here.
	* po-lex.c (lex_end): Move error_message_count handling away.
	* write-properties.h: New file.
	* write-properties.c: New file.
	* write-po.h (message_print_syntax_properties): New declaration.
	* write-po.c (use_syntax_properties): New variable.
	(message_print_syntax_properties): New function.
	(msgdomain_list_print_po): New function, extracted from
	msgdomain_list_print.
	(msgdomain_list_print): Add check for plural forms. Add support for
	writing the .properties format.
	(extract_po): Renamed from extract. 
	* write-java.h (msgdomain_write_java): Add canon_encoding argument.
	* write-java.c (msgdomain_write_java): Likewise.
	* write-tcl.h (msgdomain_write_tcl): Likewise.
	* write-tcl.c (msgdomain_write_tcl): Likewise.
	* msgl-cat.c (catenate_msgdomain_list): Use mdlp->encoding if there
	is no header entry. Set total_mdlp->encoding if possible.
	* msgl-iconv.c (iconv_msgdomain_list): Use mdlp->encoding if there
	is no header entry. Set mdlp->encoding.
	* msgattrib.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msgcat.c (long_options): Add --properties-input/output.
	(main): Handle them. If option -p is used, convert to UTF-8 and
	ignore the to_code.
	(usage): Document options -P and -p.
	* msgcomm.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msgconv.c (long_options): Add --properties-input/output.
	(main): Handle them. If option -p is used, ignore the to_code.
	(usage): Document options -P and -p.
	* msgen.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msgfilter.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msggrep.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msginit.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msgmerge.c (long_options): Add --properties-input/output.
	(main): Handle them. In update mode, --properties-input implies
	--properties-output.
	(usage): Document options -P and -p.
	(merge): Set result->encoding if possible.
	* msguniq.c (long_options): Add --properties-input/output.
	(main): Handle them.
	(usage): Document options -P and -p.
	* msgcmp.c (long_options): Add --properties-input.
	(main): Handle it.
	(usage): Document option -P.
	* msgexec.c (long_options): Add --properties-input.
	(main): Handle it.
	(usage): Document option -P.
	* msgfmt.c (long_options): Add --properties-input.
	(main): Handle it. Pass the known canon_encoding to
	msgdomain_write_java and msgdomain_write_tcl.
	(usage): Document option -P.
	(msgfmt_add_message): Add force_fuzzy argument.
	(read_po_file_msgfmt): Pass input_syntax to po_scan().
	* msgunfmt.c (long_options): Add --properties-output.
	(main): Handle it.
	(usage): Document option -p.
	* x-properties.h: New file.
	* x-po.c (extract_add_message): Add force_fuzzy argument.
	(extract): Renamed from extract_po. Pass input_syntax to po_scan().
	(extract_po): New function.
	(extract_properties): New function.
	* xgettext.h: Include read-po.h.
	* xgettext.c (long_options): Add --properties-output.
	(main): Handle it.
	(usage): Document options -L JavaProperties and --properties-output.
	(exclude_directive_message): Add force_fuzzy argument.
	(read_exclusion_file): Pass input_syntax to po_scan().
	(table): Add support for .properties format.
	* Makefile.am (noinst_HEADERS): Add read-properties.h,
	write-properties.h, x-properties.h.
	(COMMON_SOURCE): Add read-properties.c.
	(libgettextsrc_la_SOURCES): Add write-properties.c.
	* Makefile.msvc (OBJECTS): Add read-properties.obj,
	write-properties.obj.
	(read-properties.obj, write-properties.obj): New rules.
	* Makefile.vms (OBJECTS): Add read-properties.obj,
	write-properties.obj.
	(read-properties.obj, write-properties.obj): New rules.
	* FILES: Update.

2003-04-21  Bruno Haible  <bruno@clisp.org>

	* read-po-abstract.h (po_scan_file): Remove declaration.
	* read-po-abstract.c (po_scan_file): Remove function.
	* read-po.c (read_po_file): Call read_po.
	* msgfmt.c (read_po_file_msgfmt): Call open_po_file. Invoke po_scan
	instead of po_scan_file.
	* xgettext.c (read_exclusion_file): Call open_po_file. Invoke po_scan
	instead of po_scan_file.

2003-04-20  Bruno Haible  <bruno@clisp.org>

	* open-po.h (open_po_file): Add argument 'exit_on_error'.
	* open-po.c (try_open_po_file): Renamed from open_po_file.
	(open_po_file): New function.
	* po-lex.h (lex_end): Change return type to void.
	(lex_open, lex_close): Remove declarations.
	* po-lex.c (lex_end): Change return type to void.
	(lex_open, lex_close): Remove functions.
	* read-po-abstract.c (po_scan_file): Inline lex_open and lex_close.
	Reuse po_scan code.

2003-04-14  Bruno Haible  <bruno@clisp.org>

	* hostname.c (usage): Split strings: use one string per option
	description.
	* msgattrib.c (usage): Likewise.
	* msgcat.c (usage): Likewise.
	* msgcmp.c (usage): Likewise.
	* msgcomm.c (usage): Likewise.
	* msgconv.c (usage): Likewise.
	* msgen.c (usage): Likewise.
	* msgexec.c (usage): Likewise.
	* msgfilter.c (usage): Likewise.
	* msgfmt.c (usage): Likewise.
	* msggrep.c (usage): Likewise.
	* msginit.c (usage): Likewise.
	* msgmerge.c (usage): Likewise.
	* msgunfmt.c (usage): Likewise.
	* msguniq.c (usage): Likewise.
	* urlget.c (usage): Likewise.
	* xgettext.c (usage): Likewise.

2003-04-13  Bruno Haible  <bruno@clisp.org>

	Unify three PO file parsers.
	* read-po-abstract.h: Renamed from po.h.
	(abstract_po_reader_class_ty): Renamed from po_method_ty.
	(abstract_po_reader_ty): Renamed from po_ty.
	(ABSTRACT_PO_READER_TY): Renamed from PO_BASE_TY.
	(po_reader_alloc): Renamed from po_alloc.
	(po_reader_free): Renamed from po_free.
	* read-po-abstract.c: Renamed from po.c.
	(po_reader_alloc): Renamed from po_alloc.
	(po_reader_free): Renamed from po_free.
	(call_parse_brief): Renamed from po_parse_brief.
	(call_parse_debrief): Renamed from po_parse_debrief.
	(call_directive_domain): Renamed from po_directive_domain.
	(call_directive_message): Renamed from po_directive_message.
	(call_comment): Renamed from po_comment.
	(call_comment_dot): Renamed from po_comment_dot.
	(call_comment_filepos): Renamed from po_comment_filepos.
	(call_comment_special): Renamed from po_comment_special.
	* read-po.h: Include read-po-abstract.h.
	(default_po_reader_class_ty, default_po_reader_ty): New types.
	(ABSTRACT_PO_READER_TY): New macro.
	(default_constructor, default_destructor, default_parse_brief,
	default_parse_debrief, default_directive_domain,
	default_directive_message, default_comment, default_comment_dot,
	default_comment_filepos, default_comment_special, default_set_domain,
	default_add_message): New declarations.
	(default_po_reader_alloc): New declaration.
	* read-po.c (default_po_reader_ty): Renamed from readall_class_ty.
	Add fields handle_comments, handle_filepos_comments,
	allow_domain_directives, allow_duplicates,
	allow_duplicates_if_same_msgstr.
	(call_set_domain, call_add_message, call_frob_new_message): New
	functions.
	(default_constructor): Renamed from readall_constructor. Don't set
	this->mdlp and this->mlp.
	(default_destructor): Renamed from readall_destructor.
	(default_parse_brief): Renamed from readall_parse_brief.
	(default_parse_debrief): New function.
	(default_copy_comment_state, default_reset_comment_state): New
	functions.
	(default_directive_domain): Renamed from readall_directive_domain.
	Call set_domain method.
	(default_directive_message): Renamed from readall_directive_message.
	Call add_message method.
	(default_comment): Renamed from readall_comment.
	(default_comment_dot): Renamed from readall_comment_dot.
	(default_comment_filepos): Renamed from readall_comment_filepos.
	(default_comment_special): Renamed from readall_comment_special.
	(default_set_domain, default_add_message): New functions.
	(default_methods): Renamed from readall_methods.
	(default_po_reader_alloc): New function.
	(read_po, read_po_file): Update.
	* msgfmt.c: Include read-po.h instead of po.h.
	(msgfmt_po_reader_ty): Renamed from msgfmt_class_ty. Inherit
	from default_po_reader_ty.
	(main): Drop po_lex_pass_comments call, done by default_parse_brief.
	(msgfmt_constructor): Renamed from format_constructor. Call superclass
	function.
	(msgfmt_parse_debrief): Renamed from format_debrief. Call superclass
	function.
	(format_directive_domain): Remove function.
	(msgfmt_set_domain): New function.
	(format_directive_message): Remove function.
	(msgfmt_add_message, msgfmt_frob_new_message): New functions.
	(msgfmt_comment_special): Renamed from format_comment_special.
	(msgfmt_methods): Renamed from format_methods.
	(read_po_file_msgfmt): Renamed from read_po_file.
	* x-po.c: Include read-po.h instead of po.h.
	(extract_class_ty, extract_constructor, extract_directive_domain,
	extract_directive_message, extract_parse_brief, extract_comment,
	extract_comment_dot, extract_comment_filepos, extract_comment_special):
	Remove functions.
	(extract_add_message): New function.
	(extract_methods): Update.
	(extract_po): Update.
	* xgettext.c: Include read-po-abstract.h instead of po.h.
	(exclude_directive_domain, exclude_directive_message, exclude_methods,
	read_exclusion_file): Update.
	* msgcmp.c: Don't include po.h.
	* msgmerge.c: Likewise.
	* po-gram-gen.y: Include read-po-abstract.h instead of po.h.
	* po-hash-gen.y: Likewise.
	(po_parse_comment_filepos): Renamed from po_hash.
	* po-hash.h (po_parse_comment_filepos): Renamed from po_hash.
	* Makefile.am (noinst_HEADERS): Remove po.h, add read-po-abstract.h.
	(COMMON_SOURCE): Remove po.c, add read-po-abstract.c.
	* Makefile.msvc (OBJECTS): Remove po.obj, add read-po-abstract.obj.
	(read-po-abstract.obj): Renamed from po.obj.
	* Makefile.vms (OBJECTS): Remove po.obj, add read-po-abstract.obj.
	(read-po-abstract.obj): Renamed from po.obj.

2003-04-13  Bruno Haible  <bruno@clisp.org>

	* read-po.c (readall_directive_message): Separate accumulation and
	reset.
	* x-po.c (extract_directive_message): Likewise.

2003-04-13  Bruno Haible  <bruno@clisp.org>

	* write-po.h (message_print_comment, message_print_comment_dot,
	message_print_comment_filepos, message_print_comment_flags): New
	declarations.
	* write-po.c: Reorder functions.
	(message_print_comment, message_print_comment_dot,
	message_print_comment_filepos, message_print_comment_flags): New
	functions, extracted from message_print.
	(message_print): Use them.
	(message_print_obsolete): Use message_print_comment.

2003-04-22  Bruno Haible  <bruno@clisp.org>

	* plural-table.c (plural_table): Add an entry about Faroese.
	Reported by Jacob Sparre Andersen <sparre@crs4.it>.

2003-04-13  Bruno Haible  <bruno@clisp.org>

	* po.h (po_scan_start, po_scan_end): New declarations.
	* po.c: Reorder functions.
	(po_scan_start, po_scan_end): New functions.
	(po_scan, po_scan_file): Use them.

2003-04-12  Bruno Haible  <bruno@clisp.org>

	* Makefile.vms: New variables ABIFLAGS, DEFS. Avoid rules with no
	lines. Don't use the force target. Correct wildcard syntax.
	Suggested by Jouk Jansen <joukj@hrem.stm.tudelft.nl>.

2003-04-13  Bruno Haible  <bruno@clisp.org>

	* xgettext.c (construct_header): Remove spurious comma.

2003-03-30  Bruno Haible  <bruno@clisp.org>

	* Makefile.vms: New file.
	* Makefile.am (EXTRA_DIST): Add Makefile.vms.
	(x-java.c): Prepend a few VMS specific lines.
	* po-lex.c (mbfile_getc): Change element type of scatchbuf to
	'unsigned char'.
	* write-java.c (string_hashcode, write_java_string): Cast argument of
	u8_mbtouc.
	* write-tcl.c (write_tcl_string): Likewise.
	* x-python.c (phase7_getuc): Cast argument of unicode_name_character.
	* msgfilter.c (write): #undef before redefining it. Needed for VMS.
	(select): Likewise.

2003-03-30  Bruno Haible  <bruno@clisp.org>

	* Makefile.am (noinst_HEADERS): Add po-gram-gen2.h.
	(BUILT_SOURCES): Add po-gram-gen2.h.
	(DISTCLEANFILES): Remove po-gram-gen2.h.
	(po-gram-gen2.h): Simplify rule.

2003-03-17  Bruno Haible  <bruno@clisp.org>

	Native Woe32/MSVC support.
	* Makefile.msvc: New file.
	* Makefile.am (EXTRA_DIST): Add it.
	* msgfilter.c: Include <sys/time.h> only if it exists.
	(process_string): Mark as NYI on Woe32.
	* msgfmt.c (sigjmp_buf, sigsetjmp, siglongjmp): Provide fallback
	definitions for Woe32.
	* msginit.c: Include <fcntl.h>, for F_OK. Include <pwd.h> only if it
	exists.
	(get_user_pwd, get_user_fullname): Adapt for when <pwd.h> is missing.
	(project_id, project_id_version, get_user_email,
	language_team_address): Use DEV_NULL instead of "/dev/null".
	* msggrep.c (is_string_selected): Likewise.
	* read-java.c (execute_and_read_po_output): Likewise.
	* read-tcl.c (msgdomain_read_tcl): Likewise.
	* write-mo.c: Include <sys/param.h> only if it exists.

2003-03-28  Bruno Haible  <bruno@clisp.org>

	* msgmerge.c (main): Use copy_file_preserving instead of copy_file.

2003-03-16  Bruno Haible  <bruno@clisp.org>

	* str-list.h (string_list_join): Comment out.
	* str-list.c (string_list_join): Comment out.

2003-03-10  Bruno Haible  <bruno@clisp.org>

	* msggrep.c (no_pass): Mention option -C.
	(usage): Document option -C completely.
	Reported by Martin Quinson <Martin.Quinson@tuxfamily.org>.

2003-02-28  Bruno Haible  <bruno@clisp.org>

	Support for relocatable installation.
	* msgattrib.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgcat.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgcmp.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgcomm.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgconv.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgen.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgexec.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgfilter.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgfmt.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msggrep.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msginit.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	(project_id, project_id_version, get_user_email): Relocate LIBDIR
	value.
	(language_team_address): Relocate LIBDIR and PROJECTSDIR values.
	* msgmerge.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msgunfmt.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* msguniq.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* xgettext.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value.
	* read-java.c: Include relocatable.h.
	(msgdomain_read_java): Relocate GETTEXTJEXEDIR value.
	* read-tcl.c: Include relocatable.h.
	(msgdomain_read_tcl): Relocate GETTEXTDATADIR value.
	* hostname.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value. Update copyright year.
	* urlget.c: Include relocatable.h.
	(main): Relocate LOCALEDIR value. Update copyright year.
	(fetch): Relocate GETTEXTJEXEDIR value.
	* user-email.in: Relocate $libdir.
	* Makefile.am (aliaspath): New variable.
	(DEFS): Define LOCALE_ALIAS_PATH.
	(msginit_SOURCES): Add .../localealias.c.
	(msginit_LDADD): Remove .../localealias.lo.
	(msgcmp_CFLAGS, msgfmt_CFLAGS, msgmerge_CFLAGS, msgunfmt_CFLAGS,
	xgettext_CFLAGS, msgattrib_CFLAGS, msgcat_CFLAGS, msgcomm_CFLAGS,
	msgconv_CFLAGS, msgen_CFLAGS, msgexec_CFLAGS, msgfilter_CFLAGS,
	msggrep_CFLAGS, msginit_CFLAGS, msguniq_CFLAGS, hostname_CFLAGS,
	urlget_CFLAGS): New variables.
	(msgcmp_LDFLAGS, msgfmt_LDFLAGS, msgmerge_LDFLAGS, msgunfmt_LDFLAGS,
	xgettext_LDFLAGS, msgattrib_LDFLAGS, msgcat_LDFLAGS, msgcomm_LDFLAGS,
	msgconv_LDFLAGS, msgen_LDFLAGS, msgexec_LDFLAGS, msgfilter_LDFLAGS,
	msggrep_LDFLAGS, msginit_LDFLAGS, msguniq_LDFLAGS, hostname_LDFLAGS,
	urlget_LDFLAGS): New variables.
	(install-exec-java-yes): Don't ignore INSTALL_PROGRAM_ENV.
	(RELOCATABLE_LIBRARY_PATH, RELOCATABLE_SRC_DIR, RELOCATABLE_BUILD_DIR,
	RELOCATABLE_CONFIG_H_DIR): New variables.

2003-03-13  Bruno Haible  <bruno@clisp.org>

	* msggrep.c (main): On Solaris, prefer /usr/xpg4/bin/grep to
	/usr/bin/grep. Needed for Solaris 2.8 and 2.9.
	Reported by Sven Utcke <utcke@informatik.uni-hamburg.de>.

2003-03-03  Bruno Haible  <bruno@clisp.org>

	* msgen.c (usage): Don't say that the entries are marked fuzzy.
	Reported by Karl Eichwalder <ke@suse.de>.

2003-02-23  Bruno Haible  <bruno@clisp.org>

	Improve error messages for invalid format strings.
	* format-invalid.h: New file.
	* format.h (struct formatstring_parser): Add invalid_reason argument
	to 'parse' field.
	* format-awk.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* format-c.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(INVALID_C99_MACRO): New macro.
	(format_parse): Add invalid_reason argument.
	(get_c99_format_directives): Update.
	* format-elisp.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* format-java.c: Include xerror.h, format-invalid.h.
	(message_format_parse, choice_format_parse, format_parse): Add
	invalid_reason argument.
	(choice_format_parse): Return false if a choice contains an empty
	number part.
	* format-librep.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* format-lisp.c: Include xerror.h, format-invalid.h.
	(check_params, nocheck_params): Add directives, invalid_reason
	arguments.
	(parse_upto, format_parse): Add invalid_reason argument.
	* format-pascal.c: Include xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* format-php.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* format-python.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(INVALID_MIXES_NAMED_UNNAMED): New macro.
	(format_parse): Add invalid_reason argument.
	* format-tcl.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* format-ycp.c: Include c-ctype.h, xerror.h, format-invalid.h.
	(format_parse): Add invalid_reason argument.
	* msgfmt.c (check_pair): Output invalid_reason returned for msgstr.
	* msgmerge.c (msgfmt_check_pair_fails): Update.
	* xgettext.c (remember_a_message, remember_a_message_plural): Update.
	* Makefile.am (FORMAT_SOURCE): Add format-invalid.h.

2003-02-22  Bruno Haible  <bruno@clisp.org>

	* x-python.c (init_keywords): Add u*gettext variants and plural
	handling functions added in Python 2.3.

2003-02-22  Bruno Haible  <bruno@clisp.org>

	* Makefile.am (installdirs): Remove dependency, redundant with
	automake >= 1.6.

2003-02-20  Bruno Haible  <bruno@clisp.org>

	* Makefile.am (libgettextpo_la_DEPENDENCIES): New variable.
	Reported by Jim Meyering <jim@meyering.net>.

2003-02-19  Bruno Haible  <bruno@clisp.org>

	* Makefile.am (xgettext_LDADD): Mention $(LIBUNINAME) before
	libgettextsrc.la, not after it. Needed avoid link error on OSF/1 4.0:
	libtool produces a link command line that contains "-lc" where a
	shared library was used, and on OSF/1 4.0 "-lc" must not be used
	before objects that use integer division.

2003-02-18  Bruno Haible  <bruno@clisp.org>

	* message.c (msgdomain_list_free): Uncomment this function.
	* Makefile.am (libgettextpo_la_LDFLAGS): Add ../lib/libgettextlib.la.
	Needed for Solaris 2.7.

2003-02-16  Bruno Haible  <bruno@clisp.org>

	* msgmerge.c (message_merge): Add support for Report-Msgid-Bugs-To
	field.
	* xgettext.c (msgid_bugs_address): New variable.
	(long_options): Add option --msgid-bugs-address.
	(main): Handle option --msgid-bugs-address.
	(usage): Document option --msgid-bugs-address.
	(construct_header): Add 'Report-Msgid-Bugs-To:' field. Warn if
	msgid_bugs_address is empty.

2003-02-15  Bruno Haible  <bruno@clisp.org>

	* user-email.in: Add support for GNOME evolution, OpenOffice and
	StarOffice with nonstandard installation directory.

2003-02-15  Bruno Haible  <bruno@clisp.org>

	* msgattrib.c (main): Update year in --version output.
	* msgcat.c (main): Likewise.
	* msgcmp.c (main): Likewise.
	* msgcomm.c (main): Likewise.
	* msgconv.c (main): Likewise.
	* msgen.c (main): Likewise.
	* msgexec.c (main): Likewise.
	* msgfilter.c (main): Likewise.
	* msgfmt.c (main): Likewise.
	* msgunfmt.c (main): Likewise.
	* msguniq.c (main): Likewise.
	* xgettext.c (main): Likewise.

2003-02-12  Bruno Haible  <bruno@clisp.org>

	Big restructuring.
	* gettext.c: Remove file.
	* ngettext.c: Remove file.
	* Makefile.am (bin_PROGRAMS): Remove gettext, ngettext.
	(EXTRA_DIST): Add ChangeLog.0.
	(pkgdatadir): Define using 'gettext' instead of @PACKAGE@.
	(pkglibdir): Likewise.
	(INCLUDES): Refer to intl in gettext-runtime directory.
	(gettext_SOURCES, ngettext_SOURCES, gettext_LDADD, ngettext_LDADD):
	Remove variables.
	(install-exec-local, installdirs-local, uninstall-local,
	install-exec-java-yes, installdirs-java-yes, uninstall-java-yes): Use
	$(pkglibdir) instead of $(libdir)/$(PACKAGE).
	* plural.c: Update for changed directory structure.
	* user-email.in: Use 'gettext' instead of @PACKAGE@.


See ChangeLog.0 for earlier changes.
