Mercurial > hg > xemacs-beta
view man/lispref/internationalization.texi @ 4690:257b468bf2ca
Move the #'query-coding-region implementation to C.
This is necessary because there is no reasonable way to access the
corresponding mswindows-multibyte functionality from Lisp, and we need such
functionality if we're going to have a reliable and portable
#'query-coding-region implementation. However, this change doesn't yet
provide #'query-coding-region for the mswindow-multibyte coding systems,
there should be no functional differences between an XEmacs with this change
and one without it.
src/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
Move the #'query-coding-region implementation to C.
This is necessary because there is no reasonable way to access the
corresponding mswindows-multibyte functionality from Lisp, and we
need such functionality if we're going to have a reliable and
portable #'query-coding-region implementation. However, this
change doesn't yet provide #'query-coding-region for the
mswindow-multibyte coding systems, there should be no functional
differences between an XEmacs with this change and one without it.
* mule-coding.c (struct fixed_width_coding_system):
Add a new coding system type, fixed_width, and implement it. It
uses the CCL infrastructure but has a much simpler creation API,
and its own query_method, formerly in lisp/mule/mule-coding.el.
* unicode.c:
Move the Unicode query method implementation here from
unicode.el.
* lisp.h: Declare Fmake_coding_system_internal, Fcopy_range_table
here.
* intl-win32.c (complex_vars_of_intl_win32):
Use Fmake_coding_system_internal, not Fmake_coding_system.
* general-slots.h: Add Qsucceeded, Qunencodable, Qinvalid_sequence
here.
* file-coding.h (enum coding_system_variant):
Add fixed_width_coding_system here.
(struct coding_system_methods):
Add query_method and query_lstream_method to the coding system
methods.
Provide flags for the query methods.
Declare the default query method; initialise it correctly in
INITIALIZE_CODING_SYSTEM_TYPE.
* file-coding.c (default_query_method):
New function, the default query method for coding systems that do
not set it. Moved from coding.el.
(make_coding_system_1):
Accept new elements in PROPS in #'make-coding-system; aliases, a
list of aliases; safe-chars and safe-charsets (these were
previously accepted but not saved); and category.
(Fmake_coding_system_internal):
New function, what used to be #'make-coding-system--on Mule
builds, we've now moved some of the functionality of this to
Lisp.
(Fcoding_system_canonical_name_p):
Move this earlier in the file, since it's now called from within
make_coding_system_1.
(Fquery_coding_region):
Move the implementation of this here, from coding.el.
(complex_vars_of_file_coding):
Call Fmake_coding_system_internal, not Fmake_coding_system;
specify safe-charsets properties when we're a mule build.
* extents.h (mouse_highlight_priority, Fset_extent_priority,
Fset_extent_face, Fmap_extents):
Make these available to other C files.
lisp/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
Move the #'query-coding-region implementation to C.
* coding.el:
Consolidate code that depends on the presence or absence of Mule
at the end of this file.
(default-query-coding-region, query-coding-region):
Move these functions to C.
(default-query-coding-region-safe-charset-skip-chars-map):
Remove this variable, the corresponding C variable is
Vdefault_query_coding_region_chartab_cache in file-coding.c.
(query-coding-string): Update docstring to reflect actual multiple
values, be more careful about not modifying a range table that
we're currently mapping over.
(encode-coding-char): Make the implementation of this simpler.
(featurep 'mule): Autoload #'make-coding-system from
mule/make-coding-system.el if we're a mule build; provide an
appropriate compiler macro.
Do various non-mule compatibility things if we're not a mule
build.
* update-elc.el (additional-dump-dependencies):
Add mule/make-coding-system as a dump time dependency if we're a
mule build.
* unicode.el (ccl-encode-to-ucs-2):
(decode-char):
(encode-char):
Move these earlier in the file, for the sake of some byte compile
warnings.
(unicode-query-coding-region):
Move this to unicode.c
* mule/make-coding-system.el:
New file, not dumped. Contains the functionality to rework the
arguments necessary for fixed-width coding systems, and contains
the implementation of #'make-coding-system, which now calls
#'make-coding-system-internal.
* mule/vietnamese.el (viscii):
* mule/latin.el (iso-8859-2):
(windows-1250):
(iso-8859-3):
(iso-8859-4):
(iso-8859-14):
(iso-8859-15):
(iso-8859-16):
(iso-8859-9):
(macintosh):
(windows-1252):
* mule/hebrew.el (iso-8859-8):
* mule/greek.el (iso-8859-7):
(windows-1253):
* mule/cyrillic.el (iso-8859-5):
(koi8-r):
(koi8-u):
(windows-1251):
(alternativnyj):
(koi8-ru):
(koi8-t):
(koi8-c):
(koi8-o):
* mule/arabic.el (iso-8859-6):
(windows-1256):
Move all these coding systems to being of type fixed-width, not of
type CCL. This allows the distinct query-coding-region for them to
be in C, something which will eventually allow us to implement
query-coding-region for the mswindows-multibyte coding systems.
* mule/general-late.el (posix-charset-to-coding-system-hash):
Document why we're pre-emptively persuading the byte compiler that
the ELC for this file needs to be written using escape-quoted.
Call #'set-unicode-query-skip-chars-args, now the Unicode
query-coding-region implementation is in C.
* mule/thai-xtis.el (tis-620):
Don't bother checking whether we're XEmacs or not here.
* mule/mule-coding.el:
Move the eight bit fixed-width functionality from this file to
make-coding-system.el.
tests/ChangeLog addition:
2009-09-19 Aidan Kehoe <kehoea@parhasard.net>
* automated/mule-tests.el:
Check a coding system's type, not an 8-bit-fixed property, for
whether that coding system should be treated as a fixed-width
coding system.
* automated/query-coding-tests.el:
Don't test the query coding functionality for mswindows-multibyte
coding systems, it's not yet implemented.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sat, 19 Sep 2009 22:53:13 +0100 |
parents | 576fb035e263 |
children | 03ab78e48ef6 |
line wrap: on
line source
@c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c See the file lispref.texi for copying conditions. @setfilename ../../info/internationalization.info @node Internationalization, MULE, PostgreSQL Support, top @chapter Internationalization @menu * I18N Levels 1 and 2:: Support for different time, date, and currency formats. * I18N Level 3:: Support for localized messages. * I18N Level 4:: Support for Asian languages. @end menu @node I18N Levels 1 and 2 @section I18N Levels 1 and 2 XEmacs is now compliant with I18N levels 1 and 2. Specifically, this means that it is 8-bit clean and correctly handles time and date functions. XEmacs will correctly display the entire ISO-Latin 1 character set. The compose key may now be used to create any character in the ISO-Latin 1 character set not directly available via the keyboard.. In order for the compose key to work it is necessary to load the file @file{x-compose.el}. At any time while composing a character, @code{C-h} will display all valid completions and the character which would be produced. @node I18N Level 3 @section I18N Level 3 @menu * Level 3 Basics:: * Level 3 Primitives:: * Dynamic Messaging:: * Domain Specification:: * Documentation String Extraction:: @end menu @node Level 3 Basics @subsection Level 3 Basics XEmacs now provides alpha-level functionality for I18N Level 3. This means that everything necessary for full messaging is available, but not every file has been converted. The two message files which have been created are @file{src/emacs.po} and @file{lisp/packages/mh-e.po}. Both files need to be converted using @code{msgfmt}, and the resulting @file{.mo} files placed in some locale's @code{LC_MESSAGES} directory. The test ``translations'' in these files are the original messages prefixed by @code{TRNSLT_}. The domain for a variable is stored on the variable's property list under the property name @var{variable-domain}. The function @code{documentation-property} uses this information when translating a variable's documentation. @node Level 3 Primitives @subsection Level 3 Primitives @defun gettext string This function looks up @var{string} in the default message domain and returns its translation. If @code{I18N3} was not enabled when XEmacs was compiled, it just returns @var{string}. @end defun @defun dgettext domain string This function looks up @var{string} in the specified message domain and returns its translation. If @code{I18N3} was not enabled when XEmacs was compiled, it just returns @var{string}. @end defun @defun bind-text-domain domain pathname This function associates a pathname with a message domain. Here's how the path to message file is constructed under SunOS 5.x: @example @code{@{pathname@}/@{LANG@}/LC_MESSAGES/@{domain@}.mo} @end example If @code{I18N3} was not enabled when XEmacs was compiled, this function does nothing. @end defun @defspec domain string This function specifies the text domain used for translating documentation strings and interactive prompts of a function. For example, write: @example (defun foo (arg) "Doc string" (domain "emacs-foo") @dots{}) @end example to specify @code{emacs-foo} as the text domain of the function @code{foo}. The ``call'' to @code{domain} is actually a declaration rather than a function; when actually called, @code{domain} just returns @code{nil}. @end defspec @defun domain-of function This function returns the text domain of @var{function}; it returns @code{nil} if it is the default domain. If @code{I18N3} was not enabled when XEmacs was compiled, it always returns @code{nil}. @end defun @node Dynamic Messaging @subsection Dynamic Messaging The @code{format} function has been extended to permit you to change the order of parameter insertion. For example, the conversion format @code{%1$s} inserts parameter one as a string, while @code{%2$s} inserts parameter two. This is useful when creating translations which require you to change the word order. @node Domain Specification @subsection Domain Specification The default message domain of XEmacs is `emacs'. For add-on packages, it is best to use a different domain. For example, let us say we want to convert the ``gorilla'' package to use the domain `emacs-gorilla'. To translate the message ``What gorilla?'', use @code{dgettext} as follows: @example (dgettext "emacs-gorilla" "What gorilla?") @end example A function (or macro) which has a documentation string or an interactive prompt needs to be associated with the domain in order for the documentation or prompt to be translated. This is done with the @code{domain} special form as follows: @page @example (defun scratch (location) "Scratch the specified location." (domain "emacs-gorilla") (interactive "sScratch: ") @dots{} ) @end example It is most efficient to specify the domain in the first line of the function body, before the @code{interactive} form. For variables and constants which have documentation strings, specify the domain after the documentation. @defspec defvar symbol [value [doc-string [domain]]] Example: @example (defvar weight 250 "Weight of gorilla, in pounds." "emacs-gorilla") @end example @end defspec @defspec defconst symbol [value [doc-string [domain]]] Example: @example (defconst limbs 4 "Number of limbs" "emacs-gorilla") @end example @end defspec @defun autoload function filename &optional docstring interactive type This function defines @var{function} to autoload from @var{filename} Example: @example (autoload 'explore "jungle" "Explore the jungle." nil nil "emacs-gorilla") @end example @end defun @node Documentation String Extraction @subsection Documentation String Extraction The utility @file{etc/make-po} scans the file @code{DOC} to extract documentation strings and creates a message file @code{doc.po}. This file may then be inserted within @code{emacs.po}. Currently, @code{make-po} is hard-coded to read from @code{DOC} and write to @code{doc.po}. In order to extract documentation strings from an add-on package, first run @code{make-docfile} on the package to produce the @code{DOC} file. Then run @code{make-po -p} with the @code{-p} argument to indicate that we are extracting documentation for an add-on package. (The @code{-p} argument is a kludge to make up for a subtle difference between pre-loaded documentation and add-on documentation: For add-on packages, the final carriage returns in the strings produced by @code{make-docfile} must be ignored.) @node I18N Level 4 @section I18N Level 4 The Asian-language support in XEmacs is called ``MULE''. @xref{MULE}.