2003-11-30 Bruno Haible * gettext-0.13 released. 2003-11-28 Bruno Haible * xgettext.c (set_format_flags_from_context): Add casts, to make it compile in C++ mode. 2003-11-22 Bruno Haible * 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 * format-lisp.c (check_params): Use ngettext for one of the messages. Reported by RafaƂ Maszkowski . 2003-11-15 Bruno Haible * Makefile.am (AM_CPPFLAGS): Renamed from INCLUDES. 2003-11-09 Bruno Haible * msginit.c (main): Drop the blank line in --no-translator mode. 2003-11-07 Bruno Haible * xgettext.c (remember_a_message): Omit the programmer comments of a duplicated msgid only if they are redundant. Reported by Christian Neumair . 2003-11-05 Bruno Haible * user-email.sh.in: Renamed from user-email.in. Internationalize, use localedir and gettext. * FILES: Update. 2003-10-23 Bruno Haible * 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 * 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 * 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 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 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 . 2003-10-13 Bruno Haible 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 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 * hostname.c (xgethostname): Add support for native Woe32 API. 2003-10-21 Bruno Haible * message.c (message_list_search): Avoid casting a pointer to a local variable; it violated strict aliasing. 2003-10-21 Bruno Haible * write-java.c (mkdir): Redefine on mingw. 2003-10-12 Bruno Haible 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 * x-java.c (phase3_getc): Fix typo: Use phase2_ungetc, not phase2_getc. 2003-10-20 Bruno Haible Portability to AIX with cc. * xgettext.h (struct flag_context_ty): Define the bitfields of type 'unsigned int'. 2003-10-20 Bruno Haible 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 * xgettext.c (main): Drop suffix ".in" from input file name, if present, before looking at the file extension. 2003-10-09 Bruno Haible * 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 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 * 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 * xgettext.c (substring_match): Remove variable. (long_options): Remove --keyword-substring option. (main): Remove handling of --keyword-substring option. 2003-10-05 Bruno Haible * 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 * 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 * msgmerge.c (main): Make option -N work. Reported by Liu Garfield . 2003-10-04 Bruno Haible 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 * x-glade.c (start_element_handler): Implement extract_all behaviour. 2003-10-04 Bruno Haible * 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 * 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 Bruno Haible * 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 . 2003-09-22 Bruno Haible * x-sh.c (read_word): Warn about $"...". 2003-09-18 Bruno Haible * 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 * 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 * 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 * FILES: Update. 2003-09-14 Bruno Haible 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 * 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 * 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 . 2003-09-13 Bruno Haible * 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 Fix behaviour of " --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 * po-lex.c (mbfile_getc): Handle unexpected return value of u8_mbtouc(). Reported by Jochen Hein . 2003-09-09 Bruno Haible * read-properties.c (phase4_getuc): Cast line_number to 'unsigned long' before outputting it. 2003-09-09 Bruno Haible * 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 * 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 * 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 * 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 * format-gcc-internal.c (isdigit): Remove unused macro. * format-perl-brace.c (isdigit): Likewise. 2003-09-01 Guido Flohr * 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 * x-perl.c: Include getline.h. 2003-08-24 Bruno Haible * 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 * msgfilter.c (process_message): Cast xrealloc() result. 2003-08-24 Bruno Haible * msgfilter.c: On Windows, include instead of . * msggrep.c: Likewise. 2003-08-24 Bruno Haible * 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 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 * 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 * 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 * 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 * msginit.c (catalogname_for_locale): Add entries for Aragonese, Haitian, Sichuan Yi, Limburgish. (englishname_of_language): Likewise. 2003-08-08 Bruno Haible * 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 * x-perl.c (extract_quotelike_pass3): Fix \x handling. Reported by Guido Flohr. 2003-07-05 Bruno Haible * 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 Support for PHP >= 4.2.0. * x-php.c (init_keywords): Add ngettext, dngettext, dcngettext to the built-in keywords. Reported by A. Sopicki . 2003-06-27 Bruno Haible * 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 * x-perl.c (extract_quotelike_pass3): Fix handling of doubled backslashes in single-quoted strings. 2003-06-23 Bruno Haible * format-perl-bracket.c (format_check): Allow additional bracketed items in the msgstr. 2003-06-22 Bruno Haible * write-properties.c: Don't include exit.h and gettext.h. 2003-06-22 Bruno Haible * x-php.c (phase3_ungetc): Comment out unused function. 2003-06-21 Bruno Haible * 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 * x-perl.c (extract_quotelike_pass3): Fix handling of double backslash. 2003-06-19 Bruno Haible * 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 * 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 * 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 * 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 * 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 * 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 * 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 < * 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 * 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 * 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 * 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 * 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 . 2003-05-27 Bruno Haible * plural-table.c (plural_table): Correct entry for Slovak. Reported by Marcel Telka . 2003-05-24 Bruno Haible * 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 * gettext-0.12.1 released. 2003-05-21 Bruno Haible * msggrep.c (main) [Solaris]: Fix syntax error. Reported by Valery Beaud . 2003-05-21 Bruno Haible * xgettext.c (output_syntax): New variable. (main): Set it. (finalize_header): If --properties-output was given, set the charset. 2003-05-18 Bruno Haible * 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 * gettext-0.12 released. 2003-05-17 Bruno Haible * 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 * msginit.c (F_OK): Provide a fallback value. Reported by Perry Rapp. 2003-05-10 Bruno Haible * msgl-iconv.c (iconv_string): Don't return -1 just because the string is longer than 4 KB. Reported by Denis Barbier . 2003-05-04 Bruno Haible * 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 * msgfilter.c: Include also on EMX. Reported by Andreas Buening . 2003-04-26 Bruno Haible * 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 * 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 * 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 * 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 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 * read-po.c (readall_directive_message): Separate accumulation and reset. * x-po.c (extract_directive_message): Likewise. 2003-04-13 Bruno Haible * 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 * plural-table.c (plural_table): Add an entry about Faroese. Reported by Jacob Sparre Andersen . 2003-04-13 Bruno Haible * 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 * Makefile.vms: New variables ABIFLAGS, DEFS. Avoid rules with no lines. Don't use the force target. Correct wildcard syntax. Suggested by Jouk Jansen . 2003-04-13 Bruno Haible * xgettext.c (construct_header): Remove spurious comma. 2003-03-30 Bruno Haible * 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 * 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 Native Woe32/MSVC support. * Makefile.msvc: New file. * Makefile.am (EXTRA_DIST): Add it. * msgfilter.c: Include 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 , for F_OK. Include only if it exists. (get_user_pwd, get_user_fullname): Adapt for when 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 only if it exists. 2003-03-28 Bruno Haible * msgmerge.c (main): Use copy_file_preserving instead of copy_file. 2003-03-16 Bruno Haible * str-list.h (string_list_join): Comment out. * str-list.c (string_list_join): Comment out. 2003-03-10 Bruno Haible * msggrep.c (no_pass): Mention option -C. (usage): Document option -C completely. Reported by Martin Quinson . 2003-02-28 Bruno Haible 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 * 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 . 2003-03-03 Bruno Haible * msgen.c (usage): Don't say that the entries are marked fuzzy. Reported by Karl Eichwalder . 2003-02-23 Bruno Haible 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 * x-python.c (init_keywords): Add u*gettext variants and plural handling functions added in Python 2.3. 2003-02-22 Bruno Haible * Makefile.am (installdirs): Remove dependency, redundant with automake >= 1.6. 2003-02-20 Bruno Haible * Makefile.am (libgettextpo_la_DEPENDENCIES): New variable. Reported by Jim Meyering . 2003-02-19 Bruno Haible * 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 * 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 * 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 * user-email.in: Add support for GNOME evolution, OpenOffice and StarOffice with nonstandard installation directory. 2003-02-15 Bruno Haible * 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 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.