| * `data/espeak-ng` data files for eSpeak NG extended data. | * `data/espeak-ng` data files for eSpeak NG extended data. | ||||
| * espeak-ng PropList property lookup as part of the `ucd_property` API. | * espeak-ng PropList property lookup as part of the `ucd_property` API. | ||||
| ## (In Development) | |||||
| * Make the ispunct ctype compatibility implementation conformant. | |||||
| ## 10.0.0 - 2017-06-25 | ## 10.0.0 - 2017-06-25 | ||||
| * Add `iswblank` and `iswxdigit` compatibility. | * Add `iswblank` and `iswxdigit` compatibility. |
| The project uses and supports the following sources of Unicode codepoint data: | The project uses and supports the following sources of Unicode codepoint data: | ||||
| * [Unicode Character Database](http://www.unicode.org/Public/9.0.0/ucd/) 9.0.0 | |||||
| * [Unicode Emoji](http://www.unicode.org/Public/emoji/4.0/) 4.0 (UTR #51) | |||||
| * [Unicode Character Database](http://www.unicode.org/Public/10.0.0/ucd/) 10.0.0 | |||||
| * [Unicode Emoji](http://www.unicode.org/Public/emoji/5.0/) 5.0 (UTR #51) | |||||
| * [ConScript Unicode Registry](http://www.evertype.com/standards/csur/) | * [ConScript Unicode Registry](http://www.evertype.com/standards/csur/) | ||||
| ## Build Dependencies | ## Build Dependencies |
| /* ctype-style APIs. | /* ctype-style APIs. | ||||
| * | * | ||||
| * Copyright (C) 2012-2017 Reece H. Dunn | |||||
| * Copyright (C) 2012-2018 Reece H. Dunn | |||||
| * | * | ||||
| * This file is part of ucd-tools. | * This file is part of ucd-tools. | ||||
| * | * | ||||
| int ucd_ispunct(codepoint_t c) | int ucd_ispunct(codepoint_t c) | ||||
| { | { | ||||
| switch (ucd_lookup_category(c)) | |||||
| { | |||||
| case UCD_CATEGORY_Pc: | |||||
| case UCD_CATEGORY_Pd: | |||||
| case UCD_CATEGORY_Pe: | |||||
| case UCD_CATEGORY_Pf: | |||||
| case UCD_CATEGORY_Pi: | |||||
| case UCD_CATEGORY_Po: | |||||
| case UCD_CATEGORY_Ps: | |||||
| return 1; | |||||
| default: | |||||
| return 0; | |||||
| } | |||||
| return ucd_isgraph(c) && !ucd_isalnum(c); | |||||
| } | } | ||||
| int ucd_isspace(codepoint_t c) | int ucd_isspace(codepoint_t c) |
| return 0 | return 0 | ||||
| def ispunct(data): | def ispunct(data): | ||||
| if data.get('GeneralCategory', 'Cn')[0] in 'P': | |||||
| return 1 | |||||
| else: | |||||
| return 0 | |||||
| return 1 if isgraph(data) and not isalnum(data) else 0 | |||||
| def isprint(data): | def isprint(data): | ||||
| if data.get('GeneralCategory', 'Cn')[0] in 'LMNPSZ': # not in 'CI' | if data.get('GeneralCategory', 'Cn')[0] in 'LMNPSZ': # not in 'CI' |