summaryrefslogtreecommitdiffstats
path: root/src/caseconvert.py
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2021-03-22 19:02:06 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2021-03-22 19:02:06 (GMT)
commita4ecbee86766b35d25d41d1a178806e1688485df (patch)
tree0cb08f45ced6dd4ed97188972c5a718c94219d46 /src/caseconvert.py
parentfa1897b1889f7bf74de68f1ac99cf3be343a7551 (diff)
downloadDoxygen-a4ecbee86766b35d25d41d1a178806e1688485df.zip
Doxygen-a4ecbee86766b35d25d41d1a178806e1688485df.tar.gz
Doxygen-a4ecbee86766b35d25d41d1a178806e1688485df.tar.bz2
issue #8375: Lowercase search does not find non-ASCII uppercase pages and vice versa
Diffstat (limited to 'src/caseconvert.py')
-rw-r--r--src/caseconvert.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/caseconvert.py b/src/caseconvert.py
new file mode 100644
index 0000000..0b0b57b
--- /dev/null
+++ b/src/caseconvert.py
@@ -0,0 +1,56 @@
+# python3 script to generate caseconvert.h.
+# It uses difference in lower() and upper() on a character to make a mapping
+# that maps a given unicode point to either a lower or upper case UTF-8 character.
+# this also include multi-byte characters.
+
+import codecs
+
+toupper = {}
+tolower = {}
+
+def writeMapping(file,mapping):
+ for k,v in sorted(mapping.items()):
+ file.write(u" case %s /* %s */: return u8\"%s\" /* %s */;\n" %
+ (hex(ord(k[0])),k,v,",".join("0x{:02x}".format(ord(c)) for c in v)))
+
+# create mappings of characters whose upper and lower case differs
+for codeValue in range(0,0x1FFFF):
+ s = chr(codeValue)
+ sl = s.lower()
+ su = s.upper()
+ if ord(s[0])!=ord(sl[0]):
+ tolower[s]=sl
+ if ord(s[0])!=ord(su[0]):
+ toupper[s]=su
+
+file = codecs.open("caseconvert.h", "w", "utf-8")
+file.write(r'''/** This file is generated by python3 caseconvert.py. DO NOT EDIT! */
+
+#ifndef CASECONVERT_H
+#define CASECONVERT_H
+
+#include <cstdint>
+#include <string>
+
+inline const char *convertUnicodeToUpper(uint32_t code)
+{
+ switch(code)
+ {
+''');
+writeMapping(file,toupper);
+file.write(r''' default: return nullptr;
+ }
+}
+
+inline const char *convertUnicodeToLower(uint32_t code)
+{
+ switch(code)
+ {
+''');
+writeMapping(file,tolower);
+file.write(r''' default: return nullptr;
+ }
+}
+
+#endif
+''');