ucd_script ucd_lookup_script(codepoint_t c); | ucd_script ucd_lookup_script(codepoint_t c); | ||||
/** @brief Properties | /** @brief Properties | ||||
*/ | |||||
*/ | |||||
typedef enum ucd_property_ | typedef enum ucd_property_ | ||||
{ | { | ||||
UCD_PROPERTY_WHITE_SPACE = 0x00000001, /**< @brief White_Space PropList */ | UCD_PROPERTY_WHITE_SPACE = 0x00000001, /**< @brief White_Space PropList */ | ||||
UCD_PROPERTY_QUOTATION_MARK = 0x00000040, /**< @brief Quotation_Mark PropList */ | UCD_PROPERTY_QUOTATION_MARK = 0x00000040, /**< @brief Quotation_Mark PropList */ | ||||
UCD_PROPERTY_TERMINAL_PUNCTUATION = 0x00000080, /**< @brief Terminal_Punctuation PropList */ | UCD_PROPERTY_TERMINAL_PUNCTUATION = 0x00000080, /**< @brief Terminal_Punctuation PropList */ | ||||
UCD_PROPERTY_OTHER_MATH = 0x00000100, /**< @brief Other_Math PropList */ | UCD_PROPERTY_OTHER_MATH = 0x00000100, /**< @brief Other_Math PropList */ | ||||
UCD_PROPERTY_HEX_DIGIT = 0x00000200, /**< @brief Hex_Digit PropList */ | |||||
} ucd_property; | } ucd_property; | ||||
/** @brief Return the properties of the specified codepoint. | /** @brief Return the properties of the specified codepoint. | ||||
} | } | ||||
/** @brief Properties | /** @brief Properties | ||||
*/ | |||||
*/ | |||||
enum property | enum property | ||||
{ | { | ||||
White_Space = UCD_PROPERTY_WHITE_SPACE, /**< @brief White_Space PropList */ | White_Space = UCD_PROPERTY_WHITE_SPACE, /**< @brief White_Space PropList */ | ||||
Quotation_Mark = UCD_PROPERTY_QUOTATION_MARK, /**< @brief Quotation_Mark PropList */ | Quotation_Mark = UCD_PROPERTY_QUOTATION_MARK, /**< @brief Quotation_Mark PropList */ | ||||
Terminal_Punctuation = UCD_PROPERTY_TERMINAL_PUNCTUATION, /**< @brief Terminal_Punctuation PropList */ | Terminal_Punctuation = UCD_PROPERTY_TERMINAL_PUNCTUATION, /**< @brief Terminal_Punctuation PropList */ | ||||
Other_Math = UCD_PROPERTY_OTHER_MATH, /**< @brief Other_Math 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. | /** @brief Return the properties of the specified codepoint. |
{ | { | ||||
switch (c & 0xFFFFFF00) | switch (c & 0xFFFFFF00) | ||||
{ | { | ||||
case 0x0000: | |||||
if (c >= 0x0061 && c <= 0x0066) return UCD_PROPERTY_HEX_DIGIT; | |||||
break; | |||||
case 0x0300: | case 0x0300: | ||||
if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | ||||
if (c == 0x03D5) return UCD_PROPERTY_OTHER_MATH; | if (c == 0x03D5) return UCD_PROPERTY_OTHER_MATH; | ||||
if (c >= 0x03F0 && c <= 0x03F1) 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 | if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | ||||
break; | break; | ||||
case 0xFF00: | |||||
if (c >= 0xFF41 && c <= 0xFF46) return UCD_PROPERTY_HEX_DIGIT; | |||||
break; | |||||
case 0x2100: | case 0x2100: | ||||
if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | if (c >= 0x210A && c <= 0x2113) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | ||||
if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | if (c >= 0x212F && c <= 0x2131) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | ||||
{ | { | ||||
switch (c & 0xFFFFFF00) | switch (c & 0xFFFFFF00) | ||||
{ | { | ||||
case 0x0000: | |||||
if (c >= 0x0041 && c <= 0x0046) return UCD_PROPERTY_HEX_DIGIT; | |||||
break; | |||||
case 0x0300: | case 0x0300: | ||||
if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | if (c >= 0x03D0 && c <= 0x03D2) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | ||||
if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | if (c >= 0x03F4 && c <= 0x03F5) return UCD_PROPERTY_OTHER_MATH; // Ll|Lu | ||||
break; | break; | ||||
case 0xFF00: | |||||
if (c >= 0xFF21 && c <= 0xFF26) return UCD_PROPERTY_HEX_DIGIT; | |||||
break; | |||||
case 0x2100: | case 0x2100: | ||||
if (c == 0x2102) return UCD_PROPERTY_OTHER_MATH; | if (c == 0x2102) return UCD_PROPERTY_OTHER_MATH; | ||||
if (c == 0x2107) return UCD_PROPERTY_OTHER_MATH; | if (c == 0x2107) return UCD_PROPERTY_OTHER_MATH; | ||||
{ | { | ||||
switch (c & 0xFFFFFF00) | 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: | case 0x01D700: | ||||
if (c >= 0x01D7CE && c <= 0x01D7FF) return UCD_PROPERTY_OTHER_MATH; | if (c >= 0x01D7CE && c <= 0x01D7FF) return UCD_PROPERTY_OTHER_MATH; | ||||
break; | break; |
props += 64 * data.get('Quotation_Mark', 0) | props += 64 * data.get('Quotation_Mark', 0) | ||||
props += 128 * data.get('Terminal_Punctuation', 0) | props += 128 * data.get('Terminal_Punctuation', 0) | ||||
props += 256 * data.get('Other_Math', 0) | props += 256 * data.get('Other_Math', 0) | ||||
props += 512 * data.get('Hex_Digit', 0) | |||||
return props | return props | ||||
if __name__ == '__main__': | if __name__ == '__main__': |