Mercurial > hg > xemacs-beta
comparison man/internals/internals.texi @ 3003:fcf2f05d0c7a
[xemacs-hg @ 2005-10-20 12:37:42 by malcolmp]
Alias --enable configure options to --with. Update internals.texi to reflect
changes.
author | malcolmp |
---|---|
date | Thu, 20 Oct 2005 12:38:04 +0000 |
parents | 4d269e525e21 |
children | 23046b62bf91 |
comparison
equal
deleted
inserted
replaced
3002:c64d760b2487 | 3003:fcf2f05d0c7a |
---|---|
468 * Introduction to Multilingual Issues #4:: | 468 * Introduction to Multilingual Issues #4:: |
469 * Character Sets:: | 469 * Character Sets:: |
470 * Encodings:: | 470 * Encodings:: |
471 * Internal Mule Encodings:: | 471 * Internal Mule Encodings:: |
472 * Byte/Character Types; Buffer Positions; Other Typedefs:: | 472 * Byte/Character Types; Buffer Positions; Other Typedefs:: |
473 * Internal Text API's:: | 473 * Internal Text APIs:: |
474 * Coding for Mule:: | 474 * Coding for Mule:: |
475 * CCL:: | 475 * CCL:: |
476 * Microsoft Windows-Related Multilingual Issues:: | 476 * Microsoft Windows-Related Multilingual Issues:: |
477 * Modules for Internationalization:: | 477 * Modules for Internationalization:: |
478 | 478 |
493 * Buffer Positions:: | 493 * Buffer Positions:: |
494 * Other Typedefs:: | 494 * Other Typedefs:: |
495 * Usage of the Various Representations:: | 495 * Usage of the Various Representations:: |
496 * Working With the Various Representations:: | 496 * Working With the Various Representations:: |
497 | 497 |
498 Internal Text API's | 498 Internal Text APIs |
499 | 499 |
500 * Basic internal-format API's:: | 500 * Basic internal-format APIs:: |
501 * The DFC API:: | 501 * The DFC API:: |
502 * The Eistring API:: | 502 * The Eistring API:: |
503 | 503 |
504 Coding for Mule | 504 Coding for Mule |
505 | 505 |
4497 | 4497 |
4498 @itemize | 4498 @itemize |
4499 @item | 4499 @item |
4500 Selectively enabling debugging, error checking, and tracing. | 4500 Selectively enabling debugging, error checking, and tracing. |
4501 @item | 4501 @item |
4502 Specifying options by either @code{--with} or @code{--enable}. | |
4503 @item | |
4502 Complex options, which are set-valued (@i{i.e.}, unordered; ordered | 4504 Complex options, which are set-valued (@i{i.e.}, unordered; ordered |
4503 lists of options, for example ``take the first available from the | 4505 lists of options, for example ``take the first available from the |
4504 list,'' are neither used currently nor given special support). | 4506 list,'' are neither used currently nor given special support). |
4505 @end itemize | 4507 @end itemize |
4506 | 4508 |
4570 @item XE_SHLIB_STUFF | 4572 @item XE_SHLIB_STUFF |
4571 Generate the appropriate shared library support black magic. This is | 4573 Generate the appropriate shared library support black magic. This is |
4572 implemented in the file @file{aclocal.m4}. | 4574 implemented in the file @file{aclocal.m4}. |
4573 @end table | 4575 @end table |
4574 | 4576 |
4577 @heading XEmacs merged option support | |
4578 | |
4579 Autoconf 2.59 divides the @file{configure} options into those that | |
4580 specify features (@samp{--enable}) and those that specify external | |
4581 libraries (@samp{--with}). Many XEmacs options to not fall neatly into | |
4582 either of these catagories and so as a matter of policy all options can | |
4583 be specified by either method. | |
4584 | |
4585 These merged options are declared with the @code{XE_MERGED_ARG} macro. | |
4586 The arguments to the option are the same as @code{AC_ARG_WITH} and | |
4587 @code{AC_ARG_ENABLE} and code that worked with either of these macros | |
4588 will worked unchanged with @code{XE_MERGED_ARG}. The option value is | |
4589 stored in both @code{with_FEATURE} and @code{enable_FEATURE} shell | |
4590 variables. | |
4591 | |
4592 @table @code | |
4593 @item XE_MERGED_ARG(package, help-string, action-if-true, action-if-false) | |
4594 Declare an option that can be selected by either @samp{--enable} or | |
4595 @samp{--with}. The value of the option is stored in both | |
4596 @code{with_FEATURE} and @code{enable_FEATURE}. | |
4597 | |
4598 @end table | |
4599 | |
4575 @heading XEmacs keyword option support | 4600 @heading XEmacs keyword option support |
4576 | 4601 |
4577 A @dfn{keyword} option is one that accepts one of a number of | 4602 A @dfn{keyword} option is one that accepts one of a number of |
4578 pre-defined values (if support for sets of values is needed, x1see | 4603 pre-defined values (if support for sets of values is needed, x1see |
4579 ``complex options'' below). For example, | 4604 ``complex options'' below). For example, |
4580 @samp{--with-mail-locking=flock}. | 4605 @samp{--with-mail-locking=flock}. |
4581 | 4606 |
4582 Keyword options are defined with expanded forms of | 4607 Keyword options are defined with an expanded form of |
4583 @samp{AC_ARG_[WITH|ENABLE]} called @samp{XE_KEYWORD_ARG_[WITH|ENABLE]}, | 4608 @samp{XE_MERGED_ARG} called @samp{XE_KEYWORD_ARG}, which taks 5 |
4584 both taking 5 parameters. The first 4 parameters of these macros are | 4609 parameters. The first 4 parameters are the same as original macro with |
4585 the same as original macros with the exception that all four parameters | 4610 the exception that all of these four parameters are @strong{required}. |
4586 are @strong{required}. The @var{action-if-true} code is run after the | 4611 The @var{action-if-true} code is run after the argument list has been |
4587 argument list has been parsed. | 4612 parsed. |
4588 | 4613 |
4589 The 5th parameter is a list of supported keywords. The whole list must | 4614 The 5th parameter is a list of supported keywords. The whole list must |
4590 be quoted but the individual keywords should not. Here is how the | 4615 be quoted but the individual keywords should not. Here is how the |
4591 @samp{mail-locking} flag is defined: | 4616 @samp{mail-locking} flag is defined: |
4592 | 4617 |
4593 @example | 4618 @example |
4594 XE_KEYWORD_ARG_WITH([mail-locking], | 4619 XE_KEYWORD_ARG([mail-locking], |
4595 AC_HELP_STRING([--with-mail-locking],[Specify the locking to be | 4620 AC_HELP_STRING([--with-mail-locking],[Specify the locking to be |
4596 used by movemail to prevent concurrent updates | 4621 used by movemail to prevent concurrent updates |
4597 of mail spool files. Valid types are `lockf', | 4622 of mail spool files. Valid types are `lockf', |
4598 `flock', `dot', `locking' or `mmdf'.]), | 4623 `flock', `dot', `locking' or `mmdf'.]), |
4599 [], | 4624 [], |
4613 Macros labeled @dfn{internal} are not expected to be used by | 4638 Macros labeled @dfn{internal} are not expected to be used by |
4614 @file{configure.ac} programmers; they are part of the implementation of | 4639 @file{configure.ac} programmers; they are part of the implementation of |
4615 higher-level features. | 4640 higher-level features. |
4616 | 4641 |
4617 @table @code | 4642 @table @code |
4618 @item XE_KEYWORD_ARG_WITH(package, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....]) | 4643 @item XE_KEYWORD_ARG(package, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....]) |
4619 Expanded version of @code{AC_ARG_WITH} for keyword options. All the | 4644 Expanded version of @code{XE_MERGED_ARG} for keyword options. All the |
4620 parameters are required. The last argument is a comma-separated list of | |
4621 supported keywords, @file{m4}-quoted with @samp{[]}. | |
4622 | |
4623 @item XE_KEYWORD_ARG_ENABLE(feature, help-string, action-if-true, action-if-false, [keyword1, keyword2, ....]) | |
4624 Expanded version of @code{AC_ARG_ENABLE} for keyword options. All the | |
4625 parameters are required. The last argument is a comma-separated list of | 4645 parameters are required. The last argument is a comma-separated list of |
4626 supported keywords, @file{m4}-quoted with @samp{[]}. | 4646 supported keywords, @file{m4}-quoted with @samp{[]}. |
4627 | 4647 |
4628 @item XE_PARSE_KEYWORD_OPTION(prefix, cmdline-flag) | 4648 @item XE_PARSE_KEYWORD_OPTION(prefix, cmdline-flag) |
4629 Internal macro to parse the option values. If an undeclared option is | 4649 Internal macro to parse the option values. If an undeclared option is |
4639 | 4659 |
4640 A @dfn{complex option} is one that takes a number of related values, as | 4660 A @dfn{complex option} is one that takes a number of related values, as |
4641 a set. For example, we might use @code{--with-sound=native,nas} to play | 4661 a set. For example, we might use @code{--with-sound=native,nas} to play |
4642 sounds using the native libraries and via NAS. | 4662 sounds using the native libraries and via NAS. |
4643 | 4663 |
4644 Complex options are defined with expanded forms of | 4664 Complex options are defined with an expanded form of |
4645 @samp{AC_ARG_[WITH|ENABLE]} called @samp{XE_COMPLEX_ARG_[WITH|ENABLE]}, | 4665 @samp{XE_MERGED_ARG} called @samp{XE_COMPLEX_ARG}, taking 5 parameters. |
4646 both taking 5 parameters. The first 4 parameters of these macros are | 4666 The first 4 parameters are the same as original macro with the exception |
4647 the same as original macros with the exception that all four parameters | 4667 that all four parameters are @strong{required}. The |
4648 are @strong{required}. The @var{action-if-true} code is run after the | 4668 @var{action-if-true} code is run after the argument list has been |
4649 argument list has been parsed. | 4669 parsed. |
4650 | 4670 |
4651 The 5th parameter is a list of @code{XE_COMPLEX_OPTION} macro calls that | 4671 The 5th parameter is a list of @code{XE_COMPLEX_OPTION} macro calls that |
4652 define the valid components and their default values. The list must be | 4672 define the valid components and their default values. The list must be |
4653 quoted but the individual macro calls should not. Here is how the | 4673 quoted but the individual macro calls should not. Here is how the |
4654 @samp{sound} flag is defined: | 4674 @samp{sound} flag is defined: |
4655 | 4675 |
4656 @example | 4676 @example |
4657 XE_COMPLEX_ARG_ENABLE([sound], | 4677 XE_COMPLEX_ARG([sound], |
4658 AC_HELP_STRING([--enable-sound],[Compile with sound support. | 4678 AC_HELP_STRING([--enable-sound],[Compile with sound support. |
4659 Valid types are `native', `nas' and `esd'. | 4679 Valid types are `native', `nas' and `esd'. |
4660 Prefix a type with 'no' to disable. | 4680 Prefix a type with 'no' to disable. |
4661 The first type can be `none' or `all'. `none' means | 4681 The first type can be `none' or `all'. `none' means |
4662 `nonative,nonas,noesd'. `all' means `native,nas,esd'. | 4682 `nonative,nonas,noesd'. `all' means `native,nas,esd'. |
4721 | 4741 |
4722 This was originally written for the Xft option, and doesn't read so well | 4742 This was originally written for the Xft option, and doesn't read so well |
4723 for options based on alternative libraries like sound. Hackers beware: | 4743 for options based on alternative libraries like sound. Hackers beware: |
4724 the API may be enhanced to deal with this in the future. | 4744 the API may be enhanced to deal with this in the future. |
4725 | 4745 |
4726 @item XE_COMPLEX_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....]) | 4746 @item XE_COMPLEX_ARG(PACKAGE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....]) |
4727 Extended version of @code{AC_ARG_WITH} for complex options. All the | 4747 Extended version of @code{XE_MERGED_ARG} for complex options. All the |
4728 parameters are required. | |
4729 | |
4730 @item XE_COMPLEX_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE, ACTION-IF-FALSE, [XE_COMPLEX_OPTION(a,yes), ....]) | |
4731 Expanded version of @code{AC_ARG_ENABLE} for complex options. All the | |
4732 parameters are required. | 4748 parameters are required. |
4733 | 4749 |
4734 @item XE_EXPAND_COMPLEX_OPTION(prefix, component, yesno) | 4750 @item XE_EXPAND_COMPLEX_OPTION(prefix, component, yesno) |
4735 Internal macro create the option's shell variable containing the default | 4751 Internal macro create the option's shell variable containing the default |
4736 value and to note the values in an option list. | 4752 value and to note the values in an option list. |
5814 @enumerate | 5830 @enumerate |
5815 @item | 5831 @item |
5816 When there's a reasonable possibility you will actually need all 32 or | 5832 When there's a reasonable possibility you will actually need all 32 or |
5817 64 bits to store the quantity. | 5833 64 bits to store the quantity. |
5818 @item | 5834 @item |
5819 When calling existing API's that require unsigned types. In this case, | 5835 When calling existing APIs that require unsigned types. In this case, |
5820 you should still do all manipulation using signed types, and do the | 5836 you should still do all manipulation using signed types, and do the |
5821 conversion at the very threshold of the API call. | 5837 conversion at the very threshold of the API call. |
5822 @item | 5838 @item |
5823 In existing code that you don't want to modify because you don't | 5839 In existing code that you don't want to modify because you don't |
5824 maintain it. | 5840 maintain it. |
10166 integrated. | 10182 integrated. |
10167 | 10183 |
10168 @emph{NOTE}: The information at the top of the source file | 10184 @emph{NOTE}: The information at the top of the source file |
10169 @file{text.c} is more complete than the following, and there is also a | 10185 @file{text.c} is more complete than the following, and there is also a |
10170 list of all other places to look for text/I18N-related info. Also look in | 10186 list of all other places to look for text/I18N-related info. Also look in |
10171 @file{text.h} for info about the DFC and Eistring API's. | 10187 @file{text.h} for info about the DFC and Eistring APIs. |
10172 | 10188 |
10173 Recall that there are two primary ways that text is represented in | 10189 Recall that there are two primary ways that text is represented in |
10174 XEmacs. The @dfn{buffer} representation sees the text as a series of | 10190 XEmacs. The @dfn{buffer} representation sees the text as a series of |
10175 bytes (Ibytes), with a variable number of bytes used per character. | 10191 bytes (Ibytes), with a variable number of bytes used per character. |
10176 The @dfn{character} representation sees the text as a series of integers | 10192 The @dfn{character} representation sees the text as a series of integers |
10189 * Introduction to Multilingual Issues #4:: | 10205 * Introduction to Multilingual Issues #4:: |
10190 * Character Sets:: | 10206 * Character Sets:: |
10191 * Encodings:: | 10207 * Encodings:: |
10192 * Internal Mule Encodings:: | 10208 * Internal Mule Encodings:: |
10193 * Byte/Character Types; Buffer Positions; Other Typedefs:: | 10209 * Byte/Character Types; Buffer Positions; Other Typedefs:: |
10194 * Internal Text API's:: | 10210 * Internal Text APIs:: |
10195 * Coding for Mule:: | 10211 * Coding for Mule:: |
10196 * CCL:: | 10212 * CCL:: |
10197 * Microsoft Windows-Related Multilingual Issues:: | 10213 * Microsoft Windows-Related Multilingual Issues:: |
10198 * Modules for Internationalization:: | 10214 * Modules for Internationalization:: |
10199 @end menu | 10215 @end menu |
11159 whether that code can be used, knows that ``field 3'' in a character | 11175 whether that code can be used, knows that ``field 3'' in a character |
11160 always corresponds to the last byte in the textual representation of the | 11176 always corresponds to the last byte in the textual representation of the |
11161 character. (This is important because the Boyer-Moore algorithm works by | 11177 character. (This is important because the Boyer-Moore algorithm works by |
11162 looking at the last byte of the search string and &&#### finish this. | 11178 looking at the last byte of the search string and &&#### finish this. |
11163 | 11179 |
11164 @node Byte/Character Types; Buffer Positions; Other Typedefs, Internal Text API's, Internal Mule Encodings, Multilingual Support | 11180 @node Byte/Character Types; Buffer Positions; Other Typedefs, Internal Text APIs, Internal Mule Encodings, Multilingual Support |
11165 @section Byte/Character Types; Buffer Positions; Other Typedefs | 11181 @section Byte/Character Types; Buffer Positions; Other Typedefs |
11166 @cindex byte/character types; buffer positions; other typedefs | 11182 @cindex byte/character types; buffer positions; other typedefs |
11167 @cindex byte/character types | 11183 @cindex byte/character types |
11168 @cindex character types | 11184 @cindex character types |
11169 @cindex buffer positions | 11185 @cindex buffer positions |
11209 @end itemize | 11225 @end itemize |
11210 | 11226 |
11211 Types (b), (c), (f) and (h) are defined as @code{char}, while the others are | 11227 Types (b), (c), (f) and (h) are defined as @code{char}, while the others are |
11212 @code{unsigned char}. This is for maximum safety (signed characters are | 11228 @code{unsigned char}. This is for maximum safety (signed characters are |
11213 dangerous to work with) while maintaining as much compatibility with | 11229 dangerous to work with) while maintaining as much compatibility with |
11214 external API's and string constants as possible. | 11230 external APIs and string constants as possible. |
11215 | 11231 |
11216 We also provide versions of the above types defined with different | 11232 We also provide versions of the above types defined with different |
11217 underlying C types, for API compatibility. These use the following | 11233 underlying C types, for API compatibility. These use the following |
11218 prefixes: | 11234 prefixes: |
11219 | 11235 |
11224 @end example | 11240 @end example |
11225 | 11241 |
11226 (Formerly I had a comment saying that type (e) "should be replaced with | 11242 (Formerly I had a comment saying that type (e) "should be replaced with |
11227 void *". However, there are in fact many places where an unsigned char | 11243 void *". However, there are in fact many places where an unsigned char |
11228 * might be used -- e.g. for ease in pointer computation, since void * | 11244 * might be used -- e.g. for ease in pointer computation, since void * |
11229 doesn't allow this, and for compatibility with external API's.) | 11245 doesn't allow this, and for compatibility with external APIs.) |
11230 | 11246 |
11231 Note that these typedefs are purely for documentation purposes; from | 11247 Note that these typedefs are purely for documentation purposes; from |
11232 the C code's perspective, they are exactly equivalent to @code{char *}, | 11248 the C code's perspective, they are exactly equivalent to @code{char *}, |
11233 @code{unsigned char *}, etc., so you can freely use them with library | 11249 @code{unsigned char *}, etc., so you can freely use them with library |
11234 functions declared as such. | 11250 functions declared as such. |
11530 We write things this way because it's very important the | 11546 We write things this way because it's very important the |
11531 MAX_BYTEBPOS_GAP_SIZE_3 is a multiple of 3. (As it happens, | 11547 MAX_BYTEBPOS_GAP_SIZE_3 is a multiple of 3. (As it happens, |
11532 65535 is a multiple of 3, but this may not always be the | 11548 65535 is a multiple of 3, but this may not always be the |
11533 case. #### unfinished | 11549 case. #### unfinished |
11534 | 11550 |
11535 @node Internal Text API's, Coding for Mule, Byte/Character Types; Buffer Positions; Other Typedefs, Multilingual Support | 11551 @node Internal Text APIs, Coding for Mule, Byte/Character Types; Buffer Positions; Other Typedefs, Multilingual Support |
11536 @section Internal Text API's | 11552 @section Internal Text APIs |
11537 @cindex internal text API's | 11553 @cindex internal text APIs |
11538 @cindex text API's, internal | 11554 @cindex text APIs, internal |
11539 @cindex API's, text, internal | 11555 @cindex APIs, text, internal |
11540 | 11556 |
11541 @strong{NOTE}: The most current documentation for these API's is in | 11557 @strong{NOTE}: The most current documentation for these APIs is in |
11542 @file{text.h}. In case of error, assume that file is correct and this | 11558 @file{text.h}. In case of error, assume that file is correct and this |
11543 one wrong. | 11559 one wrong. |
11544 | 11560 |
11545 @menu | 11561 @menu |
11546 * Basic internal-format API's:: | 11562 * Basic internal-format APIs:: |
11547 * The DFC API:: | 11563 * The DFC API:: |
11548 * The Eistring API:: | 11564 * The Eistring API:: |
11549 @end menu | 11565 @end menu |
11550 | 11566 |
11551 @node Basic internal-format API's, The DFC API, Internal Text API's, Internal Text API's | 11567 @node Basic internal-format APIs, The DFC API, Internal Text APIs, Internal Text APIs |
11552 @subsection Basic internal-format API's | 11568 @subsection Basic internal-format APIs |
11553 @cindex basic internal-format API's | 11569 @cindex basic internal-format APIs |
11554 @cindex internal-format API's, basic | 11570 @cindex internal-format APIs, basic |
11555 @cindex API's, basic internal-format | 11571 @cindex APIs, basic internal-format |
11556 | 11572 |
11557 These are simple functions and macros to convert between text | 11573 These are simple functions and macros to convert between text |
11558 representation and characters, move forward and back in text, etc. | 11574 representation and characters, move forward and back in text, etc. |
11559 | 11575 |
11560 #### Finish the rest of this. | 11576 #### Finish the rest of this. |
11579 Note also that we try to consistently distinguish between an "Ichar" and | 11595 Note also that we try to consistently distinguish between an "Ichar" and |
11580 a Lisp character. Stuff working with Lisp characters often just says | 11596 a Lisp character. Stuff working with Lisp characters often just says |
11581 "char", so we consistently use "Ichar" when that's what we're working | 11597 "char", so we consistently use "Ichar" when that's what we're working |
11582 with. | 11598 with. |
11583 | 11599 |
11584 @node The DFC API, The Eistring API, Basic internal-format API's, Internal Text API's | 11600 @node The DFC API, The Eistring API, Basic internal-format APIs, Internal Text APIs |
11585 @subsection The DFC API | 11601 @subsection The DFC API |
11586 @cindex DFC API | 11602 @cindex DFC API |
11587 @cindex API, DFC | 11603 @cindex API, DFC |
11588 | 11604 |
11589 This is for conversion between internal and external text. Note that | 11605 This is for conversion between internal and external text. Note that |
11802 new ones, and I've had a beta put out with this on and it appeared to | 11818 new ones, and I've had a beta put out with this on and it appeared to |
11803 this appears to cause no problems -- so we should consider | 11819 this appears to cause no problems -- so we should consider |
11804 switching, and feel no compunctions about writing further such function- | 11820 switching, and feel no compunctions about writing further such function- |
11805 like @code{alloca()} routines in lieu of statement-like ones. --ben | 11821 like @code{alloca()} routines in lieu of statement-like ones. --ben |
11806 | 11822 |
11807 @node The Eistring API, , The DFC API, Internal Text API's | 11823 @node The Eistring API, , The DFC API, Internal Text APIs |
11808 @subsection The Eistring API | 11824 @subsection The Eistring API |
11809 @cindex Eistring API | 11825 @cindex Eistring API |
11810 @cindex API, Eistring | 11826 @cindex API, Eistring |
11811 | 11827 |
11812 (This API is currently under-used) When doing simple things with | 11828 (This API is currently under-used) When doing simple things with |
11813 internal text, the basic internal-format API's are enough. But to do | 11829 internal text, the basic internal-format APIs are enough. But to do |
11814 things like delete or replace a substring, concatenate various strings, | 11830 things like delete or replace a substring, concatenate various strings, |
11815 etc. is difficult to do cleanly because of the allocation issues. | 11831 etc. is difficult to do cleanly because of the allocation issues. |
11816 The Eistring API is designed to deal with this, and provides a clean | 11832 The Eistring API is designed to deal with this, and provides a clean |
11817 way of modifying and building up internal text. (Note that the former | 11833 way of modifying and building up internal text. (Note that the former |
11818 lack of this API has meant that some code uses Lisp strings to do | 11834 lack of this API has meant that some code uses Lisp strings to do |
12266 Convert all characters in the Eistring to lowercase. | 12282 Convert all characters in the Eistring to lowercase. |
12267 void eiupr (Eistring *eistr); | 12283 void eiupr (Eistring *eistr); |
12268 Convert all characters in the Eistring to uppercase. | 12284 Convert all characters in the Eistring to uppercase. |
12269 @end example | 12285 @end example |
12270 | 12286 |
12271 @node Coding for Mule, CCL, Internal Text API's, Multilingual Support | 12287 @node Coding for Mule, CCL, Internal Text APIs, Multilingual Support |
12272 @section Coding for Mule | 12288 @section Coding for Mule |
12273 @cindex coding for Mule | 12289 @cindex coding for Mule |
12274 @cindex Mule, coding for | 12290 @cindex Mule, coding for |
12275 | 12291 |
12276 Although Mule support is not compiled by default in XEmacs, many people | 12292 Although Mule support is not compiled by default in XEmacs, many people |
12663 @end table | 12679 @end table |
12664 | 12680 |
12665 A source type of @code{C_STRING} or a sink type of | 12681 A source type of @code{C_STRING} or a sink type of |
12666 @code{C_STRING_ALLOCA} or @code{C_STRING_MALLOC} is appropriate where | 12682 @code{C_STRING_ALLOCA} or @code{C_STRING_MALLOC} is appropriate where |
12667 the external API is not '\0'-byte-clean -- i.e. it expects strings to be | 12683 the external API is not '\0'-byte-clean -- i.e. it expects strings to be |
12668 terminated with a null byte. For external API's that are in fact | 12684 terminated with a null byte. For external APIs that are in fact |
12669 '\0'-byte-clean, we should of course not use these. | 12685 '\0'-byte-clean, we should of course not use these. |
12670 | 12686 |
12671 The sinks to be specified must be lvalues, unless they are the lisp | 12687 The sinks to be specified must be lvalues, unless they are the lisp |
12672 object types @code{LISP_LSTREAM} or @code{LISP_BUFFER}. | 12688 object types @code{LISP_LSTREAM} or @code{LISP_BUFFER}. |
12673 | 12689 |
13371 writing code that will handle this properly. This means using | 13387 writing code that will handle this properly. This means using |
13372 Qmswindows_tstr as the external conversion format, calling the appropriate | 13388 Qmswindows_tstr as the external conversion format, calling the appropriate |
13373 qxe...() Unicode-split version of library functions, and doing other things | 13389 qxe...() Unicode-split version of library functions, and doing other things |
13374 in certain cases, e.g. when a qxe() function is not present. | 13390 in certain cases, e.g. when a qxe() function is not present. |
13375 | 13391 |
13376 Unicode support also requires that the various Windows API's be | 13392 Unicode support also requires that the various Windows APIs be |
13377 "Unicode-encapsulated", so that they automatically call the ANSI or | 13393 "Unicode-encapsulated", so that they automatically call the ANSI or |
13378 Unicode version of the API call appropriately and handle the size | 13394 Unicode version of the API call appropriately and handle the size |
13379 differences in structures. What this means is: | 13395 differences in structures. What this means is: |
13380 | 13396 |
13381 @itemize @bullet | 13397 @itemize @bullet |
13382 @item | 13398 @item |
13383 first, note that Windows already provides a sort of encapsulation | 13399 first, note that Windows already provides a sort of encapsulation |
13384 of all API's that deal with text. All such API's are underlyingly | 13400 of all APIs that deal with text. All such APIs are underlyingly |
13385 provided in two versions, with an A or W suffix (ANSI or "wide" | 13401 provided in two versions, with an A or W suffix (ANSI or "wide" |
13386 i.e. Unicode), and the compile-time constant UNICODE controls which is | 13402 i.e. Unicode), and the compile-time constant UNICODE controls which is |
13387 selected by the unsuffixed API. Same thing happens with structures, and | 13403 selected by the unsuffixed API. Same thing happens with structures, and |
13388 also with types, where the generic types have names beginning with T -- | 13404 also with types, where the generic types have names beginning with T -- |
13389 TCHAR, LPTSTR, etc.. Unfortunately, this is compile-time only, not | 13405 TCHAR, LPTSTR, etc.. Unfortunately, this is compile-time only, not |
13609 | 13625 |
13610 @itemize @bullet | 13626 @itemize @bullet |
13611 @item | 13627 @item |
13612 wsetargv.obj uses routines that were buggily left out of MSVCRT; anyway, | 13628 wsetargv.obj uses routines that were buggily left out of MSVCRT; anyway, |
13613 from looking at the source, it does NOT correctly work under Win 9x as | 13629 from looking at the source, it does NOT correctly work under Win 9x as |
13614 it blindly calls the Unicode version of Unicode-split API's such as | 13630 it blindly calls the Unicode version of Unicode-split APIs such as |
13615 FindFirstFile) | 13631 FindFirstFile) |
13616 | 13632 |
13617 @item | 13633 @item |
13618 the w*() file routines are @strong{NOT} supported -- or at least, they blindly | 13634 the w*() file routines are @strong{NOT} supported -- or at least, they blindly |
13619 call the ...W() versions of the Win32 API calls. | 13635 call the ...W() versions of the Win32 API calls. |
18953 started and I'll be doing more work to make this real. | 18969 started and I'll be doing more work to make this real. |
18954 | 18970 |
18955 IV. GUTTER ETC. | 18971 IV. GUTTER ETC. |
18956 | 18972 |
18957 This stuff needs to be "stable" and generally free from bugs. Any | 18973 This stuff needs to be "stable" and generally free from bugs. Any |
18958 API's we create need to be well-reviewed or marked clearly as | 18974 APIs we create need to be well-reviewed or marked clearly as |
18959 experimental. | 18975 experimental. |
18960 | 18976 |
18961 V. PORTABLE DUMPER | 18977 V. PORTABLE DUMPER |
18962 | 18978 |
18963 Last bits need to be cleaned up. This should be made the "default" for | 18979 Last bits need to be cleaned up. This should be made the "default" for |
19508 | 19524 |
19509 Author: @uref{mailto:ben@@xemacs.org,Ben Wing} | 19525 Author: @uref{mailto:ben@@xemacs.org,Ben Wing} |
19510 | 19526 |
19511 NOTE: These changes are partly motivated by the various user-interface | 19527 NOTE: These changes are partly motivated by the various user-interface |
19512 changes elsewhere in this document, and partly for Mule support. In | 19528 changes elsewhere in this document, and partly for Mule support. In |
19513 general the various API's in this document would benefit greatly from | 19529 general the various APIs in this document would benefit greatly from |
19514 built-in keywords. | 19530 built-in keywords. |
19515 | 19531 |
19516 I would like to make keyword parameters an integral part of Elisp. The | 19532 I would like to make keyword parameters an integral part of Elisp. The |
19517 idea here is that you use the @code{&key} identifier in the | 19533 idea here is that you use the @code{&key} identifier in the |
19518 parameter list of a function and all of the following parameters | 19534 parameter list of a function and all of the following parameters |
21907 both bytes in the range 33-126 (for 94 or 94x94) or 32-127 (for 96 | 21923 both bytes in the range 33-126 (for 94 or 94x94) or 32-127 (for 96 |
21908 or 96x96), unless an offset is given, which will be subtracted from | 21924 or 96x96), unless an offset is given, which will be subtracted from |
21909 each byte. (Most common values are 128, for codepoints given with | 21925 each byte. (Most common values are 128, for codepoints given with |
21910 the high bit set, or -32, for codepoints given as 1-94 or 0-95.) | 21926 the high bit set, or -32, for codepoints given as 1-94 or 0-95.) |
21911 | 21927 |
21912 Other API's: | 21928 Other APIs: |
21913 | 21929 |
21914 @example | 21930 @example |
21915 (write-unicode-mapping file charset) | 21931 (write-unicode-mapping file charset) |
21916 @end example | 21932 @end example |
21917 | 21933 |