summaryrefslogtreecommitdiff
path: root/regparse.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2019-06-29 10:10:17 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-06-29 10:10:17 +0900
commit2f6cc15cdb3d64135b29cfd5ee376a5a03ebbee7 (patch)
tree22d125e2a76b2a4383433092cff0daf69653e2ae /regparse.c
parent8aecc90974ab1ac87056f77e2cb3406c5c041504 (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.c6
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));