diff options
author | Nobuyoshi Nakada <[email protected]> | 2019-06-29 10:10:17 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2019-06-29 10:10:17 +0900 |
commit | 2f6cc15cdb3d64135b29cfd5ee376a5a03ebbee7 (patch) | |
tree | 22d125e2a76b2a4383433092cff0daf69653e2ae /regparse.c | |
parent | 8aecc90974ab1ac87056f77e2cb3406c5c041504 (diff) |
Fixed String#grapheme_clusters with wide encodings
* string.c (get_reg_grapheme_cluster): make regexp from properly
encoded sources fro wide-char encodings. [Bug #15965]
* regparse.c (node_extended_grapheme_cluster): suppress false
duplicated range warning for the time being.
Diffstat (limited to 'regparse.c')
-rw-r--r-- | regparse.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/regparse.c b/regparse.c index 5e51e39502..574a07e05d 100644 --- a/regparse.c +++ b/regparse.c @@ -5961,6 +5961,10 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env) if (ONIGENC_MBC_MINLEN(env->enc) > 1) { /* UTF-16/UTF-32 */ BBuf *inverted_buf = NULL; + /* TODO: fix false warning */ + const int dup_not_warned = env->warnings_flag | ~ONIG_SYN_WARN_CC_DUP; + env->warnings_flag |= ONIG_SYN_WARN_CC_DUP; + /* Start with a positive buffer and invert at the end. * Otherwise, adding single-character ranges work the wrong way. */ R_ERR(add_property_to_cc(cc, "Grapheme_Cluster_Break=Control", 0, env)); @@ -5968,6 +5972,8 @@ node_extended_grapheme_cluster(Node** np, ScanEnv* env) R_ERR(add_code_range(&(cc->mbuf), env, 0x000D, 0x000D)); /* LF */ R_ERR(not_code_range_buf(env->enc, cc->mbuf, &inverted_buf, env)); cc->mbuf = inverted_buf; /* TODO: check what to do with buffer before inversion */ + + env->warnings_flag &= dup_not_warned; /* TODO: fix false warning */ } else { R_ERR(add_property_to_cc(cc, "Grapheme_Cluster_Break=Control", 1, env)); |