Browse Source

Add Quotation_Mark support from PropList.txt.

master
Reece H. Dunn 8 years ago
parent
commit
ec1a17b229
2 changed files with 98 additions and 6 deletions
  1. 8
    6
      src/include/ucd/ucd.h
  2. 90
    0
      src/proplist.c

+ 8
- 6
src/include/ucd/ucd.h View File

@@ -329,12 +329,13 @@ ucd_script ucd_lookup_script(codepoint_t c);
*/
typedef enum ucd_property_
{
UCD_PROPERTY_WHITE_SPACE = 0x0001, /**< @brief White_Space */
UCD_PROPERTY_NO_BREAK = 0x0002, /**< @brief <noBreak> */
UCD_PROPERTY_BIDI_CONTROL = 0x0004, /**< @brief Bidi_Control */
UCD_PROPERTY_JOIN_CONTROL = 0x0008, /**< @brief Join_Control */
UCD_PROPERTY_DASH = 0x0010, /**< @brief Dash */
UCD_PROPERTY_HYPHEN = 0x0020, /**< @brief Hyphen */
UCD_PROPERTY_WHITE_SPACE = 0x00000001, /**< @brief White_Space */
UCD_PROPERTY_NO_BREAK = 0x00000002, /**< @brief <noBreak> */
UCD_PROPERTY_BIDI_CONTROL = 0x00000004, /**< @brief Bidi_Control */
UCD_PROPERTY_JOIN_CONTROL = 0x00000008, /**< @brief Join_Control */
UCD_PROPERTY_DASH = 0x00000010, /**< @brief Dash */
UCD_PROPERTY_HYPHEN = 0x00000020, /**< @brief Hyphen */
UCD_PROPERTY_QUOTATION_MARK = 0x00000020, /**< @brief Quotation_Mark */
} ucd_property;

/** @brief Return the properties of the specified codepoint.
@@ -800,6 +801,7 @@ namespace ucd
Join_Control = UCD_PROPERTY_JOIN_CONTROL, /**< @brief Join_Control */
Dash = UCD_PROPERTY_DASH, /**< @brief Dash */
Hyphen = UCD_PROPERTY_HYPHEN, /**< @brief Hyphen */
Quotation_Mark = UCD_PROPERTY_QUOTATION_MARK, /**< @brief Quotation_Mark */
};

/** @brief Return the properties of the specified codepoint.

+ 90
- 0
src/proplist.c View File

@@ -92,10 +92,67 @@ static int properties_Pd(codepoint_t c)
return 0;
}

static int properties_Pe(codepoint_t c)
{
switch (c & 0xFFFFFF00)
{
case 0x3000:
if (c == 0x300D) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x300F) return UCD_PROPERTY_QUOTATION_MARK;
if (c >= 0x301E && c <= 0x301F) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0xFE00:
if (c == 0xFE42) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0xFE44) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0xFF00:
if (c == 0xFF63) return UCD_PROPERTY_QUOTATION_MARK;
break;
}
return 0;
}

static int properties_Pf(codepoint_t c)
{
switch (c & 0xFFFFFF00)
{
case 0x0000:
if (c == 0x00BB) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0x2000:
if (c == 0x2019) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x201D) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x203A) return UCD_PROPERTY_QUOTATION_MARK;
break;
}
return 0;
}

static int properties_Pi(codepoint_t c)
{
switch (c & 0xFFFFFF00)
{
case 0x0000:
if (c == 0x00AB) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0x2000:
if (c == 0x2018) return UCD_PROPERTY_QUOTATION_MARK;
if (c >= 0x201B && c <= 0x201C) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x201F) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x2039) return UCD_PROPERTY_QUOTATION_MARK;
break;
}
return 0;
}

static int properties_Po(codepoint_t c)
{
switch (c & 0xFFFFFF00)
{
case 0x0000:
if (c == 0x0022) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x0027) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0x0F00:
if (c == 0x0F0C) return UCD_PROPERTY_NO_BREAK;
break;
@@ -106,12 +163,41 @@ static int properties_Po(codepoint_t c)
if (c == 0x30FB) return UCD_PROPERTY_HYPHEN;
break;
case 0xFF00:
if (c == 0xFF02) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0xFF07) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0xFF65) return UCD_PROPERTY_HYPHEN;
break;
}
return 0;
}

static int properties_Ps(codepoint_t c)
{
switch (c & 0xFFFFFF00)
{
case 0x2000:
if (c == 0x201A) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x201E) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0x2E00:
if (c == 0x2E42) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0x3000:
if (c == 0x300C) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x300E) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0x301D) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0xFE00:
if (c == 0xFE41) return UCD_PROPERTY_QUOTATION_MARK;
if (c == 0xFE43) return UCD_PROPERTY_QUOTATION_MARK;
break;
case 0xFF00:
if (c == 0xFF62) return UCD_PROPERTY_QUOTATION_MARK;
break;
}
return 0;
}

static int properties_Sm(codepoint_t c)
{
switch (c & 0xFFFFFF00)
@@ -146,7 +232,11 @@ ucd_property ucd_properties(codepoint_t c, ucd_category category)
case UCD_CATEGORY_Cc: return properties_Cc(c);
case UCD_CATEGORY_Cf: return properties_Cf(c);
case UCD_CATEGORY_Pd: return properties_Pd(c);
case UCD_CATEGORY_Pe: return properties_Pe(c);
case UCD_CATEGORY_Pf: return properties_Pf(c);
case UCD_CATEGORY_Pi: return properties_Pi(c);
case UCD_CATEGORY_Po: return properties_Po(c);
case UCD_CATEGORY_Ps: return properties_Ps(c);
case UCD_CATEGORY_Sm: return properties_Sm(c);
case UCD_CATEGORY_Zl: return UCD_PROPERTY_WHITE_SPACE;
case UCD_CATEGORY_Zp: return UCD_PROPERTY_WHITE_SPACE;

Loading…
Cancel
Save