From 3f51d2b779e30be00a871163101b261428a0421a Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 23 Apr 2025 11:22:55 +0900 Subject: [PATCH 1/2] Add Encoding::UNICODE_VERSION constant --- enc/unicode.c | 2 -- encoding.c | 11 +++++++++++ inits.c | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/enc/unicode.c b/enc/unicode.c index 18fba02476af66..cbfc6cdf589681 100644 --- a/enc/unicode.c +++ b/enc/unicode.c @@ -801,7 +801,6 @@ onigenc_unicode_case_map(OnigCaseFoldType* flagP, return (int )(to - to_start); } -#if 0 const char onigenc_unicode_version_string[] = #ifdef ONIG_UNICODE_VERSION_STRING ONIG_UNICODE_VERSION_STRING @@ -817,4 +816,3 @@ const int onigenc_unicode_version_number[3] = { 0 #endif }; -#endif diff --git a/encoding.c b/encoding.c index e6b49ef14557b2..e2aaadb5b98603 100644 --- a/encoding.c +++ b/encoding.c @@ -1953,6 +1953,17 @@ Init_Encoding(void) rb_marshal_define_compat(rb_cEncoding, Qnil, 0, enc_m_loader); } +void +Init_unicode_version(void) +{ + extern const char onigenc_unicode_version_string[]; + + VALUE str = rb_usascii_str_new_static(onigenc_unicode_version_string, + strlen(onigenc_unicode_version_string)); + OBJ_FREEZE(str); + rb_define_const(rb_cEncoding, "UNICODE_VERSION", str); +} + void Init_encodings(void) { diff --git a/inits.c b/inits.c index 94cec780ad60f5..79683185df3779 100644 --- a/inits.c +++ b/inits.c @@ -75,6 +75,7 @@ rb_call_inits(void) CALL(ast); CALL(shape); CALL(Prism); + CALL(unicode_version); // enable builtin loading CALL(builtin); From d05a8fd766c3be4332dfd2660d990e615d58c393 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 23 Apr 2025 12:58:09 +0900 Subject: [PATCH 2/2] Check Unicode version of the normalization table --- lib/unicode_normalize/tables.rb | 3 +++ template/unicode_norm_gen.tmpl | 3 +++ 2 files changed, 6 insertions(+) diff --git a/lib/unicode_normalize/tables.rb b/lib/unicode_normalize/tables.rb index 98b6ab01c9b377..b5b708defd4b01 100644 --- a/lib/unicode_normalize/tables.rb +++ b/lib/unicode_normalize/tables.rb @@ -1,6 +1,9 @@ # coding: us-ascii # frozen_string_literal: true +Encoding::UNICODE_VERSION == "16.0.0" or + raise "Unicode version mismatch: 16.0.0 expected but #{Encoding::UNICODE_VERSION}" + # automatically generated by template/unicode_norm_gen.tmpl module UnicodeNormalize # :nodoc: diff --git a/template/unicode_norm_gen.tmpl b/template/unicode_norm_gen.tmpl index c115e6eef925d3..17505f100e9f8e 100644 --- a/template/unicode_norm_gen.tmpl +++ b/template/unicode_norm_gen.tmpl @@ -166,6 +166,9 @@ end # frozen_string_literal: true %# > +Encoding::UNICODE_VERSION == <%= unicode_version.dump %><%=%> or + raise "Unicode version mismatch: <%= unicode_version %> expected but #{Encoding::UNICODE_VERSION}" + # automatically generated by template/unicode_norm_gen.tmpl module UnicodeNormalize # :nodoc: