Browse Source

Add Hex_Digit support from PropList.txt.

master
Reece H. Dunn 8 years ago
parent
commit
a69b99a81b
3 changed files with 23 additions and 2 deletions
  1. 4
    2
      src/include/ucd/ucd.h
  2. 18
    0
      src/proplist.c
  3. 1
    0
      tools/printdata.py

+ 4
- 2
src/include/ucd/ucd.h View File

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.

+ 18
- 0
src/proplist.c View File

{ {
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;

+ 1
- 0
tools/printdata.py View File

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__':

Loading…
Cancel
Save