unicode.c: moved addtional GCB ranges

* enc/unicode.c: moved additional Grapheme Cluster Break ranges
  which depend on the Unicode version.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65087 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2018-10-15 13:48:20 +00:00
parent 179045acaf
commit e07c5baf66
2 changed files with 60 additions and 44 deletions

View File

@ -786,6 +786,57 @@ SpecialsCopy:
return (int )(to - to_start); return (int )(to - to_start);
} }
const OnigCodePoint
onigenc_unicode_GCB_ranges_GAZ[] = {
#if ONIG_UNICODE_VERSION_MAJOR < 10
13,
0x1F308, 0x1F308,
0x1F33E, 0x1F33E,
0x1F373, 0x1F373,
0x1F393, 0x1F393,
0x1F3A4, 0x1F3A4,
0x1F3A8, 0x1F3A8,
0x1F3EB, 0x1F3EB,
0x1F3ED, 0x1F3ED,
0x1F4BB, 0x1F4BC,
0x1F527, 0x1F527,
0x1F52C, 0x1F52C,
0x1F680, 0x1F680,
0x1F692, 0x1F692,
#else
0,
#endif
};
const OnigCodePoint
onigenc_unicode_GCB_ranges_E_Base[] = {
#if ONIG_UNICODE_VERSION_MAJOR < 10
8,
0x1F3C2, 0x1F3C2,
0x1F3C7, 0x1F3C7,
0x1F3CC, 0x1F3CC,
#else
3,
#endif
0x1F3F3, 0x1F3F3,
0x1F441, 0x1F441,
0x1F46F, 0x1F46F,
#if ONIG_UNICODE_VERSION_MAJOR < 10
0x1F574, 0x1F574,
0x1F6CC, 0x1F6CC,
#endif
};
const OnigCodePoint
onigenc_unicode_GCB_ranges_Emoji[] = {
4,
0x2640, 0x2640,
0x2642, 0x2642,
0x2695, 0x2696,
0x2708, 0x2708,
};
#if 0
const char onigenc_unicode_version_string[] = const char onigenc_unicode_version_string[] =
#ifdef ONIG_UNICODE_VERSION_STRING #ifdef ONIG_UNICODE_VERSION_STRING
ONIG_UNICODE_VERSION_STRING ONIG_UNICODE_VERSION_STRING
@ -801,3 +852,4 @@ const int onigenc_unicode_version_number[3] = {
0 0
#endif #endif
}; };
#endif

View File

@ -35,7 +35,6 @@
#define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS #define CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS
extern const int onigenc_unicode_version_number[3];
const OnigSyntaxType OnigSyntaxRuby = { const OnigSyntaxType OnigSyntaxRuby = {
(( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY | (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
@ -5707,6 +5706,10 @@ propname2ctype(ScanEnv* env, const char* propname)
return ctype; return ctype;
} }
extern const OnigCodePoint onigenc_unicode_GCB_ranges_GAZ[];
extern const OnigCodePoint onigenc_unicode_GCB_ranges_E_Base[];
extern const OnigCodePoint onigenc_unicode_GCB_ranges_Emoji[];
static int static int
node_extended_grapheme_cluster(Node** np, ScanEnv* env) node_extended_grapheme_cluster(Node** np, ScanEnv* env)
{ {
@ -6068,23 +6071,8 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
np1 = node_new_cclass(); np1 = node_new_cclass();
if (IS_NULL(np1)) goto err; if (IS_NULL(np1)) goto err;
cc = NCCLASS(np1); cc = NCCLASS(np1);
if (onigenc_unicode_version_number[0] < 10) { {
static const OnigCodePoint ranges[] = { const OnigCodePoint *ranges = onigenc_unicode_GCB_ranges_GAZ;
13,
0x1F308, 0x1F308,
0x1F33E, 0x1F33E,
0x1F373, 0x1F373,
0x1F393, 0x1F393,
0x1F3A4, 0x1F3A4,
0x1F3A8, 0x1F3A8,
0x1F3EB, 0x1F3EB,
0x1F3ED, 0x1F3ED,
0x1F4BB, 0x1F4BC,
0x1F527, 0x1F527,
0x1F52C, 0x1F52C,
0x1F680, 0x1F680,
0x1F692, 0x1F692,
};
r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges); r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges);
if (r != 0) goto err; if (r != 0) goto err;
} }
@ -6123,13 +6111,7 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
if (IS_NULL(np1)) goto err; if (IS_NULL(np1)) goto err;
cc = NCCLASS(np1); cc = NCCLASS(np1);
{ {
static const OnigCodePoint ranges[] = { const OnigCodePoint *ranges = onigenc_unicode_GCB_ranges_Emoji;
4,
0x2640, 0x2640,
0x2642, 0x2642,
0x2695, 0x2696,
0x2708, 0x2708,
};
r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges); r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges);
if (r != 0) goto err; if (r != 0) goto err;
} }
@ -6210,25 +6192,7 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env)
if (IS_NULL(np1)) goto err; if (IS_NULL(np1)) goto err;
cc = NCCLASS(np1); cc = NCCLASS(np1);
{ {
static const OnigCodePoint ranges9[] = { const OnigCodePoint *ranges = onigenc_unicode_GCB_ranges_E_Base;
8,
0x1F3C2, 0x1F3C2,
0x1F3C7, 0x1F3C7,
0x1F3CC, 0x1F3CC,
0x1F3F3, 0x1F3F3,
0x1F441, 0x1F441,
0x1F46F, 0x1F46F,
0x1F574, 0x1F574,
0x1F6CC, 0x1F6CC,
};
static const OnigCodePoint ranges10[] = {
3,
0x1F3F3, 0x1F3F3,
0x1F441, 0x1F441,
0x1F46F, 0x1F46F,
};
const OnigCodePoint *ranges =
(onigenc_unicode_version_number[0] < 10) ? ranges9 : ranges10;
r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges); r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges);
if (r != 0) goto err; if (r != 0) goto err;
} }