From: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: andreas.roehler@easy-emacs.de, 16731@debbugs.gnu.org
Date: Thu, 13 Feb 2014 12:10:49 -0500
/* True if C is upper case. */
-INLINE bool uppercasep (int c) { return downcase (c) != c; }
+INLINE bool uppercasep (int c)
+{
+ Lisp_Object val;
+
+ if (downcase (c) != c)
+ return true;
+
+ if (NILP (Vunicode_category_table))
+ return false;
+
+ val = CHAR_TABLE_REF (Vunicode_category_table, c);
+ return INTEGERP (val) && XINT (val) == UNICODE_CATEGORY_Lu;
+}
Doesn't sound too bad. But it does beg the question: why check
(downcase (c) != c) at all, then?