diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2021-03-22 19:02:06 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2021-03-22 19:02:06 (GMT) |
commit | a4ecbee86766b35d25d41d1a178806e1688485df (patch) | |
tree | 0cb08f45ced6dd4ed97188972c5a718c94219d46 /src/caseconvert.py | |
parent | fa1897b1889f7bf74de68f1ac99cf3be343a7551 (diff) | |
download | Doxygen-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.py | 56 |
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 +'''); |