@@ -2,7 +2,7 @@ | |||
## 9.0.0.1 - (In Progress) | |||
* Add `iswblank` compatibility. | |||
* Add `iswblank` and `iswxdigit` compatibility. | |||
## 9.0.0 - 2016-12-28 | |||
@@ -92,21 +92,20 @@ C library provides a set of APIs that are compatible with `wctype.h`. | |||
The following character classification functions are provided: | |||
| C API | C++ API | | |||
|---------------|----------------| | |||
| `ucd_isalnum` | `ucd::isalnum` | | |||
| `ucd_isalpha` | `ucd::isalpha` | | |||
| `ucd_isblank` | `ucd::isblank` | | |||
| `ucd_iscntrl` | `ucd::iscntrl` | | |||
| `ucd_isdigit` | `ucd::isdigit` | | |||
| `ucd_isgraph` | `ucd::isgraph` | | |||
| `ucd_islower` | `ucd::islower` | | |||
| `ucd_isprint` | `ucd::isprint` | | |||
| `ucd_ispunct` | `ucd::ispunct` | | |||
| `ucd_isspace` | `ucd::isspace` | | |||
| `ucd_isupper` | `ucd::isupper` | | |||
__NOTE:__ An equivalent for `isxdigit` is not provided. | |||
| C API | C++ API | | |||
|----------------|-----------------| | |||
| `ucd_isalnum` | `ucd::isalnum` | | |||
| `ucd_isalpha` | `ucd::isalpha` | | |||
| `ucd_isblank` | `ucd::isblank` | | |||
| `ucd_iscntrl` | `ucd::iscntrl` | | |||
| `ucd_isdigit` | `ucd::isdigit` | | |||
| `ucd_isgraph` | `ucd::isgraph` | | |||
| `ucd_islower` | `ucd::islower` | | |||
| `ucd_isprint` | `ucd::isprint` | | |||
| `ucd_ispunct` | `ucd::ispunct` | | |||
| `ucd_isspace` | `ucd::isspace` | | |||
| `ucd_isupper` | `ucd::isupper` | | |||
| `ucd_isxdigit` | `ucd::isxdigit` | | |||
## Build Dependencies | |||
@@ -169,3 +169,10 @@ int ucd_isupper(codepoint_t c) | |||
{ | |||
return ucd_lookup_category(c) == UCD_CATEGORY_Lu; | |||
} | |||
int ucd_isxdigit(codepoint_t c) | |||
{ | |||
return (c >= 0x30 && c <= 0x39) // [0-9] | |||
|| (c >= 0x41 && c <= 0x46) // [A-Z] | |||
|| (c >= 0x61 && c <= 0x66); // [a-z] | |||
} |
@@ -402,6 +402,13 @@ int ucd_isspace(codepoint_t c); | |||
*/ | |||
int ucd_isupper(codepoint_t c); | |||
/** @brief Is the codepoint in the 'xdigit' class? | |||
* | |||
* @param c The Unicode codepoint to check. | |||
* @return Non-zero if the codepoint is in the 'xdigit' class, zero otherwise. | |||
*/ | |||
int ucd_isxdigit(codepoint_t c); | |||
/** @brief Convert the Unicode codepoint to upper-case. | |||
* | |||
* This function only uses the simple case mapping present in the | |||
@@ -873,6 +880,16 @@ namespace ucd | |||
return ucd_isupper(c); | |||
} | |||
/** @brief Is the codepoint in the 'xdigit' class? | |||
* | |||
* @param c The Unicode codepoint to check. | |||
* @return Non-zero if the codepoint is in the 'xdigit' class, zero otherwise. | |||
*/ | |||
inline int isxdigit(codepoint_t c) | |||
{ | |||
return ucd_isxdigit(c); | |||
} | |||
/** @brief Convert the Unicode codepoint to upper-case. | |||
* | |||
* This function only uses the simple case mapping present in the |
@@ -141,6 +141,9 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) | |||
case 'u': // upper case | |||
fputc(iswupper(c) ? '1' : '0', out); | |||
break; | |||
case 'x': // xdigit | |||
fputc(iswxdigit(c) ? '1' : '0', out); | |||
break; | |||
} | |||
} | |||
@@ -138,6 +138,9 @@ void uprintf_is(FILE *out, codepoint_t c, char mode) | |||
case 'u': // upper case | |||
fputc(ucd_isupper(c) ? '1' : '0', out); | |||
break; | |||
case 'x': // xdigit | |||
fputc(ucd_isxdigit(c) ? '1' : '0', out); | |||
break; | |||
} | |||
} | |||
@@ -138,6 +138,9 @@ void uprintf_is(FILE *out, ucd::codepoint_t c, char mode) | |||
case 'u': // upper case | |||
fputc(ucd::isupper(c) ? '1' : '0', out); | |||
break; | |||
case 'x': // xdigit | |||
fputc(ucd::isxdigit(c) ? '1' : '0', out); | |||
break; | |||
} | |||
} | |||