diff --git a/src/ctype.c b/src/ctype.c index d9818f90..9edd8bfa 100644 --- a/src/ctype.c +++ b/src/ctype.c @@ -58,6 +58,13 @@ int ucd_isblank(codepoint_t c) switch (ucd_lookup_category(c)) { case UCD_CATEGORY_Zs: + switch (c) // Exclude characters with the DispositionType + { + case 0x00A0: // U+00A0 : NO-BREAK SPACE + case 0x2007: // U+2007 : FIGURE SPACE + case 0x202F: // U+202F : NARROW NO-BREAK SPACE + return 0; + } return 1; case UCD_CATEGORY_Cc: return c == 0x09; // U+0009 : CHARACTER TABULATION diff --git a/tests/printcdata.c b/tests/printcdata.c index 12b52570..8580ac62 100644 --- a/tests/printcdata.c +++ b/tests/printcdata.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 %id %ix %is %iu %il\n"); + uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %id %ix %is %ib %iu %il\n"); } return 0; } diff --git a/tests/printucddata.c b/tests/printucddata.c index 7b24580a..62aaab8d 100644 --- a/tests/printucddata.c +++ b/tests/printucddata.c @@ -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 %id %ix %is %iu %il\n"); + uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %id %ix %is %ib %iu %il\n"); } return 0; } diff --git a/tests/printucddata_cpp.cpp b/tests/printucddata_cpp.cpp index cfbb29be..e5542b61 100644 --- a/tests/printucddata_cpp.cpp +++ b/tests/printucddata_cpp.cpp @@ -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 %id %ix %is %iu %il\n"); + uprintf(stdout, c, format ? format : "%pH %s %C %c %UH %LH %TH %id %ix %is %ib %iu %il\n"); } return 0; } diff --git a/tools/printdata.py b/tools/printdata.py index 7c173add..ebe61e92 100755 --- a/tools/printdata.py +++ b/tools/printdata.py @@ -56,6 +56,13 @@ def isspace(data): else: return 0 +def isblank(data): # word separator + if data.get('GeneralCategory', 'Cn') == 'Zs' or data['CodePoint'].char() == '\t': + dt = data.get('DecompositionType', '') + return 1 if dt == None or not dt.startswith('') else 0 + else: + return 0 + def isupper(data): if data.get('LowerCase', null) != null: return 1 @@ -85,10 +92,10 @@ 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 %s %s %s %s' % ( + print('%s %s %s %s %s %s %s %s %s %s %s %s %s' % ( codepoint, script, data.get('GeneralCategory', 'Cn')[0], data.get('GeneralCategory', 'Cn'), upper, lower, title, isdigit(data), isxdigit(data), - isspace(data), + isspace(data), isblank(data), isupper(data), islower(data)))