diff options
author | Eli Zaretskii <eliz@gnu.org> | 2014-08-29 22:18:06 +0300 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2014-08-29 22:18:06 +0300 |
commit | 21ba51de76390907ca86b1e7715f472dd740fbc3 (patch) | |
tree | 0b3418f0563a5da979cacf6894120840b56b8456 /src/fns.c | |
parent | 2ae366c73e27dc695b6bc1cd03d93f48b3db76d4 (diff) | |
download | emacs-21ba51de76390907ca86b1e7715f472dd740fbc3.tar.gz |
Implement case-insensitive and Unicode-compliant collation on MS-Windows.
src/fns.c (Fstring_collate_lessp, Fstring_collate_equalp): Doc fix.
src/w32proc.c (w32_compare_strings): Accept additional argument
IGNORE_CASE. Set up the flags for CompareStringW to ignore case
if requested. If w32-collate-ignore-punctuation is non-nil, add
NORM_IGNORESYMBOLS to the flags.
(LINGUISTIC_IGNORECASE): Define if not already defined.
(syms_of_ntproc) <Vw32_collate_ignore_punctuation>: New variable.
src/sysdep.c (str_collate) [WINDOWSNT]: Adapt to the interface
change.
src/w32.h: Adjust prototype of w32_compare_strings.
etc/NEWS: Mention w32-collate-ignore-punctuation.
Fixes: debbugs:18051
Diffstat (limited to 'src/fns.c')
-rw-r--r-- | src/fns.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/fns.c b/src/fns.c index 3cca40df50f..f838599230b 100644 --- a/src/fns.c +++ b/src/fns.c @@ -350,7 +350,7 @@ Symbols are also allowed; their print names are used instead. This function obeys the conventions for collation order in your locale settings. For example, punctuation and whitespace characters -are considered less significant for sorting: +might be considered less significant for sorting: \(sort '\("11" "12" "1 1" "1 2" "1.1" "1.2") 'string-collate-lessp) => \("11" "1 1" "1.1" "12" "1 2" "1.2") @@ -358,11 +358,15 @@ are considered less significant for sorting: The optional argument LOCALE, a string, overrides the setting of your current locale identifier for collation. The value is system dependent; a LOCALE \"en_US.UTF-8\" is applicable on POSIX systems, -while it would be \"English_USA.1252\" on MS Windows systems. +while it would be, e.g., \"enu_USA.1252\" on MS-Windows systems. If IGNORE-CASE is non-nil, characters are converted to lower-case before comparing them. +To emulate Unicode-compliant collation on MS-Windows systems, +bind `w32-collate-ignore-punctuation' to a non-nil value, since +the codeset part of the locale cannot be \"UTF-8\" on MS-Windows. + If your system does not support a locale environment, this function behaves like `string-lessp'. */) (Lisp_Object s1, Lisp_Object s2, Lisp_Object locale, Lisp_Object ignore_case) @@ -391,8 +395,8 @@ Symbols are also allowed; their print names are used instead. This function obeys the conventions for collation order in your locale settings. For example, characters with different coding points but -the same meaning are considered as equal, like different grave accent -unicode characters: +the same meaning might be considered as equal, like different grave +accent Unicode characters: \(string-collate-equalp \(string ?\\uFF40) \(string ?\\u1FEF)) => t @@ -400,13 +404,20 @@ unicode characters: The optional argument LOCALE, a string, overrides the setting of your current locale identifier for collation. The value is system dependent; a LOCALE \"en_US.UTF-8\" is applicable on POSIX systems, -while it would be \"English_USA.1252\" on MS Windows systems. +while it would be \"enu_USA.1252\" on MS Windows systems. If IGNORE-CASE is non-nil, characters are converted to lower-case before comparing them. +To emulate Unicode-compliant collation on MS-Windows systems, +bind `w32-collate-ignore-punctuation' to a non-nil value, since +the codeset part of the locale cannot be \"UTF-8\" on MS-Windows. + If your system does not support a locale environment, this function -behaves like `string-equal'. */) +behaves like `string-equal'. + +Do NOT use this function to compare file names for equality, only +for sorting them. */) (Lisp_Object s1, Lisp_Object s2, Lisp_Object locale, Lisp_Object ignore_case) { #if defined __STDC_ISO_10646__ || defined WINDOWSNT |