@@ -3,6 +3,7 @@ | |||
## 9.0.0.1 - (In Progress) | |||
* Add `iswblank` and `iswxdigit` compatibility. | |||
* Improve ctype compatibility. | |||
## 9.0.0 - 2016-12-28 | |||
@@ -97,7 +97,8 @@ int ucd_isgraph(codepoint_t c) | |||
int ucd_islower(codepoint_t c) | |||
{ | |||
return ucd_lookup_category(c) == UCD_CATEGORY_Ll; | |||
return ucd_lookup_category(c) == UCD_CATEGORY_Ll | |||
|| ucd_toupper(c) != c; | |||
} | |||
int ucd_isprint(codepoint_t c) | |||
@@ -159,7 +160,8 @@ int ucd_isspace(codepoint_t c) | |||
int ucd_isupper(codepoint_t c) | |||
{ | |||
return ucd_lookup_category(c) == UCD_CATEGORY_Lu; | |||
return ucd_lookup_category(c) == UCD_CATEGORY_Lu | |||
|| ucd_tolower(c) != c; | |||
} | |||
int ucd_isxdigit(codepoint_t c) |
@@ -248,7 +248,7 @@ int main(int argc, char **argv) | |||
else | |||
{ | |||
for (codepoint_t c = 0; c <= 0x10FFFF; ++c) | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %is\n"); | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %is %iu %il\n"); | |||
} | |||
return 0; | |||
} |
@@ -243,7 +243,7 @@ int main(int argc, char **argv) | |||
else | |||
{ | |||
for (codepoint_t c = 0; c <= 0x10FFFF; ++c) | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %is\n"); | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %is %iu %il\n"); | |||
} | |||
return 0; | |||
} |
@@ -243,7 +243,7 @@ int main(int argc, char **argv) | |||
else | |||
{ | |||
for (ucd::codepoint_t c = 0; c <= 0x10FFFF; ++c) | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %is\n"); | |||
uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %is %iu %il\n"); | |||
} | |||
return 0; | |||
} |
@@ -24,6 +24,8 @@ import ucd | |||
ucd_rootdir = sys.argv[1] | |||
csur_rootdir = 'data/csur' | |||
null = ucd.CodePoint('0000') | |||
unicode_chars = {} | |||
for data in ucd.parse_ucd_data(ucd_rootdir, 'UnicodeData'): | |||
for codepoint in data['CodePoint']: | |||
@@ -44,7 +46,22 @@ if '--with-csur' in sys.argv: | |||
def isspace(data): | |||
return data.get('White_Space', 0) | |||
null = ucd.CodePoint('0000') | |||
def isupper(data): | |||
if data.get('LowerCase', null) != null: | |||
return 1 | |||
elif data.get('GeneralCategory', 'Cn') == 'Lu': | |||
return 1 | |||
else: | |||
return 0 | |||
def islower(data): | |||
if data.get('UpperCase', null) != null: | |||
return 1 | |||
elif data.get('GeneralCategory', 'Cn') == 'Ll': | |||
return 1 | |||
else: | |||
return 0 | |||
if __name__ == '__main__': | |||
for codepoint in ucd.CodeRange('000000..10FFFF'): | |||
try: | |||
@@ -58,8 +75,9 @@ if __name__ == '__main__': | |||
if title == null: title = codepoint | |||
if upper == null: upper = codepoint | |||
if lower == null: lower = codepoint | |||
print('%s %s %s %s %s %s %s %s' % ( | |||
print('%s %s %s %s %s %s %s %s %s %s' % ( | |||
codepoint, script, | |||
data.get('GeneralCategory', 'Cn')[0], data.get('GeneralCategory', 'Cn'), | |||
upper, lower, title, | |||
isspace(data))) | |||
isspace(data), | |||
isupper(data), islower(data))) |