From a69b99a81b2f06506a045b869a613436398f55c6 Mon Sep 17 00:00:00 2001 From: "Reece H. Dunn" Date: Tue, 11 Apr 2017 23:21:51 +0100 Subject: [PATCH] Add Hex_Digit support from PropList.txt. --- src/include/ucd/ucd.h | 6 ++++-- src/proplist.c | 18 ++++++++++++++++++ tools/printdata.py | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/include/ucd/ucd.h b/src/include/ucd/ucd.h index e4250327..e92d57de 100644 --- a/src/include/ucd/ucd.h +++ b/src/include/ucd/ucd.h @@ -326,7 +326,7 @@ const char *ucd_get_script_string(ucd_script s); ucd_script ucd_lookup_script(codepoint_t c); /** @brief Properties - */ + */ typedef enum ucd_property_ { UCD_PROPERTY_WHITE_SPACE = 0x00000001, /**< @brief White_Space PropList */ @@ -338,6 +338,7 @@ typedef enum ucd_property_ UCD_PROPERTY_QUOTATION_MARK = 0x00000040, /**< @brief Quotation_Mark PropList */ UCD_PROPERTY_TERMINAL_PUNCTUATION = 0x00000080, /**< @brief Terminal_Punctuation PropList */ UCD_PROPERTY_OTHER_MATH = 0x00000100, /**< @brief Other_Math PropList */ + UCD_PROPERTY_HEX_DIGIT = 0x00000200, /**< @brief Hex_Digit PropList */ } ucd_property; /** @brief Return the properties of the specified codepoint. @@ -794,7 +795,7 @@ namespace ucd } /** @brief Properties - */ + */ enum property { White_Space = UCD_PROPERTY_WHITE_SPACE, /**< @brief White_Space PropList */ @@ -806,6 +807,7 @@ namespace ucd Quotation_Mark = UCD_PROPERTY_QUOTATION_MARK, /**< @brief Quotation_Mark PropList */ Terminal_Punctuation = UCD_PROPERTY_TERMINAL_PUNCTUATION, /**< @brief Terminal_Punctuation PropList */ Other_Math = UCD_PROPERTY_OTHER_MATH, /**< @brief Other_Math PropList */ + Hex_Digit = UCD_PROPERTY_HEX_DIGIT, /**< @brief Hex_Digit PropList */ }; /** @brief Return the properties of the specified codepoint. diff --git a/src/proplist.c b/src/proplist.c index 8547dc51..f6a33a77 100644 --- a/src/proplist.c +++ b/src/proplist.c @@ -52,12 +52,18 @@ static int properties_Ll(codepoint_t c) { switch (c & 0xFFFFFF00) { + case 0x0000: + if (c >= 0x0061 && c <= 0x0066) return UCD_PROPERTY_HEX_DIGIT; + break; case 0x0300: if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu if (c == 0x03D5) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x03F0 && c <= 0x03F1) return UCD_PROPERTY_OTHER_MATH; if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu break; + case 0xFF00: + if (c >= 0xFF41 && c <= 0xFF46) return UCD_PROPERTY_HEX_DIGIT; + break; case 0x2100: if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu @@ -115,10 +121,16 @@ static int properties_Lu(codepoint_t c) { switch (c & 0xFFFFFF00) { + case 0x0000: + if (c >= 0x0041 && c <= 0x0046) return UCD_PROPERTY_HEX_DIGIT; + break; case 0x0300: if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu break; + case 0xFF00: + if (c >= 0xFF21 && c <= 0xFF26) return UCD_PROPERTY_HEX_DIGIT; + break; case 0x2100: if (c == 0x2102) return UCD_PROPERTY_OTHER_MATH; if (c == 0x2107) return UCD_PROPERTY_OTHER_MATH; @@ -188,6 +200,12 @@ static int properties_Nd(codepoint_t c) { switch (c & 0xFFFFFF00) { + case 0x0000: + if (c >= 0x0030 && c <= 0x0039) return UCD_PROPERTY_HEX_DIGIT; + break; + case 0xFF00: + if (c >= 0xFF10 && c <= 0xFF19) return UCD_PROPERTY_HEX_DIGIT; + break; case 0x01D700: if (c >= 0x01D7CE && c <= 0x01D7FF) return UCD_PROPERTY_OTHER_MATH; break; diff --git a/tools/printdata.py b/tools/printdata.py index 7e8ded21..81bc5ec4 100755 --- a/tools/printdata.py +++ b/tools/printdata.py @@ -130,6 +130,7 @@ def properties(data): props += 64 * data.get('Quotation_Mark', 0) props += 128 * data.get('Terminal_Punctuation', 0) props += 256 * data.get('Other_Math', 0) + props += 512 * data.get('Hex_Digit', 0) return props if __name__ == '__main__':