From: "Drew Adams" <drew.adams@oracle.com>
To: "'martin rudalics'" <rudalics@gmx.at>, "'Eli Zaretskii'" <eliz@gnu.org>
Cc: perin@panix.com, 13041@debbugs.gnu.org, perin@acm.org
Subject: bug#13041: 24.2; diacritic-fold-search
Date: Tue, 4 Dec 2012 12:12:57 -0800 [thread overview]
Message-ID: <3E2D742BA0FC44B7A61665D85AAC3712@us.oracle.com> (raw)
In-Reply-To: <50BE38F3.3030907@gmx.at>
> The function [Martin] came up with goes as below.
> (defun decomposed-string-lessp (string1 string2)
> "Return t if STRING1 is decomposition-less than STRING2."
> ...
I know nothing about character composition and have not tested this with
anything but a few western accents. But this seems like good stuff.
1. Assuming this or similar is added to Emacs (please do). Please consider
modifying it to respect `case-fold-search'. These modified lines do that.
(setq prop1 (get-char-code-property
(if case-fold-search
(downcase (elt string1 index1))
(elt string1 index1))
'decomposition))
[Same thing for prop2 with string2 and index2.]
(let ((value (compare-strings compat1 0 nil
compat2 0 nil case-fold-search)))
2. In addition, consider updating `string-lessp' to be sensitive to a variable
such as this:
(defvar ignore-diacritics nil
"Non-nil means ignore diacritics for string comparisons.")
With that, an alternative to hard-coding a call to `decomposed-string-lessp' is
to bind `ignore-diacritics' and use `string-lessp'.
A similar change could be made for `compare-strings': reflect the value of
`ignore-diacritics'. Or since that function has made the choice to pass
case-sensitivity as a parameter instead of respecting `case-fold-search', pass
another parameter for diacritic sensitivity.
3. More general than #2 would be a function like this, which is sensitive to
both `ignore-diacritics' and `case-fold-search' (this assumes the change
suggested above in #1 for `decomposed-string-lessp').
(defun my-string-lessp (s1 s2)
"..."
(if ignore-diacritics
(decomposed-string-lessp s1 s2)
(when case-fold-search (setq s1 (upcase s1)
s2 (upcase s2)))
(string-lessp s1 s2)))
Dunno a good name for this. It's too late to let `string-lessp' itself act like
this - that would break stuff.
4. Even better than hard-coding `case-fold-search' in `my-string-less-p' and
`decomposed-string-lessp' would be to have those functions be sensitive to a
variable such as this:
(defvar string-case-variable 'case-fold-search
"Value is a case-sensitivity variable such as `case-fold-search'.
The values of that variable must be like those for `case-fold-search':
nil means case-sensitive, non-nil means case-insensitive.")
Code could then bind `string-case-variable' to, say, `(not
completion-ignore-case)' or to any other case-sensitivity controlling sexp, when
appropriate.
This would have the advantages offered by passing an explicit case-sensitivity
parameter, as in `compare-strings', but also the advantages of dynamic scope:
binding `string-case-var' to affect all comparisons within scope.
Comparers such as `(my-)string-lessp' are often used as arguments to
higher-order functions that treat them as (only) binary predicates, i.e.,
predicates where any additional parameters specifying case or diacritic
sensitivity are ignored.
next prev parent reply other threads:[~2012-12-04 20:12 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-30 18:22 bug#13041: 24.2; diacritic-fold-search Lewis Perin
2012-11-30 18:51 ` Juri Linkov
2012-11-30 21:07 ` Lewis Perin
2012-12-01 0:27 ` Juri Linkov
2012-12-01 0:47 ` Drew Adams
2012-12-01 0:49 ` Drew Adams
2012-12-01 1:20 ` Lew Perin
2012-12-01 6:50 ` Drew Adams
2012-12-01 8:32 ` Eli Zaretskii
2012-12-01 9:09 ` Eli Zaretskii
2012-12-01 16:38 ` Drew Adams
2012-12-02 0:27 ` Juri Linkov
2012-12-02 17:45 ` martin rudalics
2012-12-02 18:02 ` Eli Zaretskii
2012-12-03 10:16 ` martin rudalics
2012-12-03 16:47 ` Eli Zaretskii
2012-12-03 17:42 ` martin rudalics
2012-12-03 17:59 ` Eli Zaretskii
2012-12-04 17:54 ` martin rudalics
2012-12-04 19:28 ` Eli Zaretskii
2012-12-05 9:41 ` martin rudalics
2012-12-05 16:37 ` Eli Zaretskii
2012-12-06 10:31 ` martin rudalics
2012-12-06 17:48 ` Eli Zaretskii
2012-12-05 23:05 ` Juri Linkov
2012-12-06 10:32 ` martin rudalics
2012-12-04 20:12 ` Drew Adams [this message]
2012-12-04 23:15 ` Drew Adams
2012-12-05 6:50 ` Drew Adams
2012-12-05 9:42 ` martin rudalics
2012-12-05 15:38 ` Drew Adams
2012-12-06 9:25 ` Kenichi Handa
2012-12-06 10:34 ` martin rudalics
2012-12-06 17:50 ` Eli Zaretskii
2012-12-07 0:58 ` Juri Linkov
2012-12-07 6:33 ` Eli Zaretskii
2012-12-07 10:37 ` martin rudalics
2012-12-07 23:55 ` Juri Linkov
2012-12-08 8:20 ` Eli Zaretskii
2012-12-08 11:35 ` martin rudalics
2012-12-08 12:40 ` Eli Zaretskii
2012-12-08 11:21 ` martin rudalics
2012-12-08 23:07 ` Juri Linkov
2012-12-09 0:04 ` Drew Adams
2012-12-09 17:52 ` martin rudalics
2012-12-09 18:06 ` Drew Adams
2012-12-11 7:19 ` Eli Zaretskii
2012-12-08 23:54 ` Stefan Monnier
2012-12-09 0:14 ` Drew Adams
2012-12-09 15:42 ` Stefan Monnier
2012-12-09 18:00 ` Drew Adams
2012-12-09 0:35 ` Juri Linkov
2012-12-09 11:35 ` Stephen Berman
2012-12-09 17:52 ` martin rudalics
2012-12-09 15:45 ` Stefan Monnier
2012-12-10 7:57 ` Juri Linkov
2012-12-10 8:20 ` Eli Zaretskii
2012-12-05 9:42 ` martin rudalics
2012-12-05 9:42 ` martin rudalics
2012-12-05 15:38 ` Drew Adams
2012-12-05 15:51 ` Lewis Perin
2012-12-05 16:20 ` Drew Adams
2012-12-05 17:16 ` Drew Adams
2012-12-05 18:00 ` Drew Adams
2012-12-05 18:27 ` Eli Zaretskii
2012-12-06 10:31 ` martin rudalics
2012-12-06 15:59 ` Drew Adams
2012-12-06 10:28 ` martin rudalics
2012-12-06 17:53 ` Eli Zaretskii
2012-12-05 23:04 ` Juri Linkov
2012-12-06 10:31 ` martin rudalics
2012-12-07 0:52 ` Juri Linkov
2012-12-02 21:39 ` Juri Linkov
2012-12-03 10:16 ` martin rudalics
2012-12-04 0:17 ` Juri Linkov
2012-12-04 3:41 ` Eli Zaretskii
2012-12-02 18:16 ` Eli Zaretskii
2012-12-02 21:31 ` Juri Linkov
2012-12-05 19:17 ` Drew Adams
2012-12-05 21:19 ` Eli Zaretskii
2012-11-30 19:31 ` Stefan Monnier
2016-08-31 14:45 ` Michael Albinus
[not found] ` <22473.57245.883865.68491@panix5.panix.com>
2016-09-03 7:06 ` Michael Albinus
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3E2D742BA0FC44B7A61665D85AAC3712@us.oracle.com \
--to=drew.adams@oracle.com \
--cc=13041@debbugs.gnu.org \
--cc=eliz@gnu.org \
--cc=perin@acm.org \
--cc=perin@panix.com \
--cc=rudalics@gmx.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.