mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-06 20:00:46 -08:00
casing: don’t assume letters are *either* upper- or lower-case (bug#24603)
A compatibility digraph characters, such as Dž, are neither upper- nor lower-case. At the moment however, those are reported as upper-case¹ despite the fact that they change when upper-cased. Stop checking if a character is upper-case before trying to up-case it so that title-case characters are handled correctly. This fixes one of the issues mentioned in bug#24603. ¹ Because they change when converted to lower-case. Notice an asymmetry in that for a character to be considered lower-case it must not be upper-case (plus the usual condition of changing when upper-cased). * src/buffer.h (upcase1): Delete. (upcase): Change to upcase character unconditionally just like downcase does it. This is what upcase1 was. * src/casefiddle.c (casify_object, casify_region): Use upcase instead of upcase1 and don’t check !uppercasep(x) before calling upcase. * src/keyboard.c (read_key_sequence): Don’t check if uppercase(x), just downcase(x) and see if it changed. * test/src/casefiddle-tests.el (casefiddle-tests--characters, casefiddle-tests-casing): Update test cases which are now passing.
This commit is contained in:
parent
5ec3a58462
commit
6220faeb4e
5 changed files with 42 additions and 37 deletions
|
|
@ -64,13 +64,9 @@ casify_object (enum case_action flag, Lisp_Object obj)
|
|||
multibyte = 1;
|
||||
if (! multibyte)
|
||||
MAKE_CHAR_MULTIBYTE (c1);
|
||||
c = downcase (c1);
|
||||
if (inword)
|
||||
XSETFASTINT (obj, c | flags);
|
||||
else if (c == (XFASTINT (obj) & ~flagbits))
|
||||
c = flag == CASE_DOWN ? downcase (c1) : upcase (c1);
|
||||
if (c != c1)
|
||||
{
|
||||
if (! inword)
|
||||
c = upcase1 (c1);
|
||||
if (! multibyte)
|
||||
MAKE_CHAR_UNIBYTE (c);
|
||||
XSETFASTINT (obj, c | flags);
|
||||
|
|
@ -95,7 +91,7 @@ casify_object (enum case_action flag, Lisp_Object obj)
|
|||
c = downcase (c);
|
||||
else if (!uppercasep (c)
|
||||
&& (!inword || flag != CASE_CAPITALIZE_UP))
|
||||
c = upcase1 (c1);
|
||||
c = upcase (c1);
|
||||
if ((int) flag >= (int) CASE_CAPITALIZE)
|
||||
inword = (SYNTAX (c) == Sword);
|
||||
if (c != c1)
|
||||
|
|
@ -127,9 +123,8 @@ casify_object (enum case_action flag, Lisp_Object obj)
|
|||
c = STRING_CHAR_AND_LENGTH (SDATA (obj) + i_byte, len);
|
||||
if (inword && flag != CASE_CAPITALIZE_UP)
|
||||
c = downcase (c);
|
||||
else if (!uppercasep (c)
|
||||
&& (!inword || flag != CASE_CAPITALIZE_UP))
|
||||
c = upcase1 (c);
|
||||
else if (!inword || flag != CASE_CAPITALIZE_UP)
|
||||
c = upcase (c);
|
||||
if ((int) flag >= (int) CASE_CAPITALIZE)
|
||||
inword = (SYNTAX (c) == Sword);
|
||||
o += CHAR_STRING (c, o);
|
||||
|
|
@ -236,9 +231,8 @@ casify_region (enum case_action flag, Lisp_Object b, Lisp_Object e)
|
|||
c2 = c;
|
||||
if (inword && flag != CASE_CAPITALIZE_UP)
|
||||
c = downcase (c);
|
||||
else if (!uppercasep (c)
|
||||
&& (!inword || flag != CASE_CAPITALIZE_UP))
|
||||
c = upcase1 (c);
|
||||
else if (!inword || flag != CASE_CAPITALIZE_UP)
|
||||
c = upcase (c);
|
||||
if ((int) flag >= (int) CASE_CAPITALIZE)
|
||||
inword = ((SYNTAX (c) == Sword)
|
||||
&& (inword || !syntax_prefix_flag_p (c)));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue