icu4x 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/ext/icu4x/src/locale.rs +48 -2
- data/lib/icu4x/version.rb +1 -1
- data/lib/icu4x/yard_docs.rb +68 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7871f9d79af05cf7edf90ca57fc7351b6cf8d027b5017606369748825265d359
|
|
4
|
+
data.tar.gz: e47cf84063cf0d7b8841d22c8776937cabb2fab7324a0dcb3e9129e5cec2df61
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9b7d7683237505c31d148451262825f40458ab916717949f7a6e1c6f76397eb94f898eda81a00d5131efee1ef904623d2b128b38a366ef39f8804c90fda48daa
|
|
7
|
+
data.tar.gz: 1ec09d4d5f4a4529aa4ac6a2747d1c16f3c5b66fbc60e3b28fcb8bafd5e0c4ba43b41a4fde5cdc5cd5e14f7bc2edb8cd0793ca86fe2b4052787929baa5e469be
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.8.0] - 2026-01-10
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `ICU4X::Locale#maximize!` and `#maximize` methods to expand locale using Likely Subtags algorithm (UTS #35)
|
|
8
|
+
- `ICU4X::Locale#minimize!` and `#minimize` methods to remove redundant subtags
|
|
9
|
+
|
|
3
10
|
## [0.7.0] - 2026-01-09
|
|
4
11
|
|
|
5
12
|
### Added
|
data/ext/icu4x/src/locale.rs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
use crate::helpers;
|
|
2
|
-
use icu_locale::Locale as IcuLocale;
|
|
3
|
-
use magnus::{Error, RHash, RModule, Ruby, function, method, prelude
|
|
2
|
+
use icu_locale::{Locale as IcuLocale, LocaleExpander, TransformResult};
|
|
3
|
+
use magnus::{Error, RHash, RModule, Ruby, function, method, prelude::*, typed_data::Obj};
|
|
4
4
|
use std::cell::RefCell;
|
|
5
5
|
|
|
6
6
|
/// Ruby wrapper for ICU4X Locale
|
|
@@ -162,6 +162,48 @@ impl Locale {
|
|
|
162
162
|
fn eq(&self, other: &Locale) -> bool {
|
|
163
163
|
*self.inner.borrow() == *other.inner.borrow()
|
|
164
164
|
}
|
|
165
|
+
|
|
166
|
+
/// Maximize the locale in place (Add Likely Subtags algorithm, UTS #35)
|
|
167
|
+
/// Returns self if modified, nil if unchanged
|
|
168
|
+
fn maximize_bang(rb_self: Obj<Self>) -> Option<Obj<Self>> {
|
|
169
|
+
let expander = LocaleExpander::new_common();
|
|
170
|
+
let mut locale = rb_self.inner.borrow_mut();
|
|
171
|
+
match expander.maximize(&mut locale.id) {
|
|
172
|
+
TransformResult::Modified => Some(rb_self),
|
|
173
|
+
TransformResult::Unmodified => None,
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/// Maximize the locale, returning a new Locale object
|
|
178
|
+
fn maximize(&self) -> Self {
|
|
179
|
+
let expander = LocaleExpander::new_common();
|
|
180
|
+
let mut new_id = self.inner.borrow().id.clone();
|
|
181
|
+
expander.maximize(&mut new_id);
|
|
182
|
+
Self {
|
|
183
|
+
inner: RefCell::new(IcuLocale::from(new_id)),
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/// Minimize the locale in place (Remove Likely Subtags algorithm, UTS #35)
|
|
188
|
+
/// Returns self if modified, nil if unchanged
|
|
189
|
+
fn minimize_bang(rb_self: Obj<Self>) -> Option<Obj<Self>> {
|
|
190
|
+
let expander = LocaleExpander::new_common();
|
|
191
|
+
let mut locale = rb_self.inner.borrow_mut();
|
|
192
|
+
match expander.minimize(&mut locale.id) {
|
|
193
|
+
TransformResult::Modified => Some(rb_self),
|
|
194
|
+
TransformResult::Unmodified => None,
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/// Minimize the locale, returning a new Locale object
|
|
199
|
+
fn minimize(&self) -> Self {
|
|
200
|
+
let expander = LocaleExpander::new_common();
|
|
201
|
+
let mut new_id = self.inner.borrow().id.clone();
|
|
202
|
+
expander.minimize(&mut new_id);
|
|
203
|
+
Self {
|
|
204
|
+
inner: RefCell::new(IcuLocale::from(new_id)),
|
|
205
|
+
}
|
|
206
|
+
}
|
|
165
207
|
}
|
|
166
208
|
|
|
167
209
|
pub fn init(ruby: &Ruby, module: &RModule) -> Result<(), Error> {
|
|
@@ -174,5 +216,9 @@ pub fn init(ruby: &Ruby, module: &RModule) -> Result<(), Error> {
|
|
|
174
216
|
class.define_method("extensions", method!(Locale::extensions, 0))?;
|
|
175
217
|
class.define_method("to_s", method!(Locale::to_s, 0))?;
|
|
176
218
|
class.define_method("==", method!(Locale::eq, 1))?;
|
|
219
|
+
class.define_method("maximize!", method!(Locale::maximize_bang, 0))?;
|
|
220
|
+
class.define_method("maximize", method!(Locale::maximize, 0))?;
|
|
221
|
+
class.define_method("minimize!", method!(Locale::minimize_bang, 0))?;
|
|
222
|
+
class.define_method("minimize", method!(Locale::minimize, 0))?;
|
|
177
223
|
Ok(())
|
|
178
224
|
}
|
data/lib/icu4x/version.rb
CHANGED
data/lib/icu4x/yard_docs.rb
CHANGED
|
@@ -274,6 +274,74 @@
|
|
|
274
274
|
# # @return [Integer] hash code
|
|
275
275
|
# #
|
|
276
276
|
# def hash; end
|
|
277
|
+
#
|
|
278
|
+
# # Maximizes the locale in place using the Add Likely Subtags algorithm (UTS #35).
|
|
279
|
+
# #
|
|
280
|
+
# # Adds likely script and region subtags based on the language.
|
|
281
|
+
# # This is useful for language negotiation.
|
|
282
|
+
# #
|
|
283
|
+
# # @return [self, nil] self if the locale was modified, nil if already maximized
|
|
284
|
+
# #
|
|
285
|
+
# # @example
|
|
286
|
+
# # locale = ICU4X::Locale.parse("en")
|
|
287
|
+
# # locale.maximize! #=> locale
|
|
288
|
+
# # locale.to_s #=> "en-Latn-US"
|
|
289
|
+
# #
|
|
290
|
+
# # @example Already maximized
|
|
291
|
+
# # locale = ICU4X::Locale.parse("en-Latn-US")
|
|
292
|
+
# # locale.maximize! #=> nil
|
|
293
|
+
# #
|
|
294
|
+
# # @see https://unicode.org/reports/tr35/#Likely_Subtags
|
|
295
|
+
# #
|
|
296
|
+
# def maximize!; end
|
|
297
|
+
#
|
|
298
|
+
# # Returns a new locale with likely subtags added.
|
|
299
|
+
# #
|
|
300
|
+
# # Non-destructive version of {#maximize!}. The original locale is unchanged.
|
|
301
|
+
# #
|
|
302
|
+
# # @return [Locale] a new locale with likely subtags added
|
|
303
|
+
# #
|
|
304
|
+
# # @example
|
|
305
|
+
# # locale = ICU4X::Locale.parse("zh")
|
|
306
|
+
# # expanded = locale.maximize
|
|
307
|
+
# # locale.to_s #=> "zh" (unchanged)
|
|
308
|
+
# # expanded.to_s #=> "zh-Hans-CN"
|
|
309
|
+
# #
|
|
310
|
+
# def maximize; end
|
|
311
|
+
#
|
|
312
|
+
# # Minimizes the locale in place using the Remove Likely Subtags algorithm (UTS #35).
|
|
313
|
+
# #
|
|
314
|
+
# # Removes redundant script and region subtags that can be inferred.
|
|
315
|
+
# # This is useful for language negotiation.
|
|
316
|
+
# #
|
|
317
|
+
# # @return [self, nil] self if the locale was modified, nil if already minimal
|
|
318
|
+
# #
|
|
319
|
+
# # @example
|
|
320
|
+
# # locale = ICU4X::Locale.parse("ja-Jpan-JP")
|
|
321
|
+
# # locale.minimize! #=> locale
|
|
322
|
+
# # locale.to_s #=> "ja"
|
|
323
|
+
# #
|
|
324
|
+
# # @example Already minimal
|
|
325
|
+
# # locale = ICU4X::Locale.parse("en")
|
|
326
|
+
# # locale.minimize! #=> nil
|
|
327
|
+
# #
|
|
328
|
+
# # @see https://unicode.org/reports/tr35/#Likely_Subtags
|
|
329
|
+
# #
|
|
330
|
+
# def minimize!; end
|
|
331
|
+
#
|
|
332
|
+
# # Returns a new locale with redundant subtags removed.
|
|
333
|
+
# #
|
|
334
|
+
# # Non-destructive version of {#minimize!}. The original locale is unchanged.
|
|
335
|
+
# #
|
|
336
|
+
# # @return [Locale] a new locale with redundant subtags removed
|
|
337
|
+
# #
|
|
338
|
+
# # @example
|
|
339
|
+
# # locale = ICU4X::Locale.parse("zh-Hans-CN")
|
|
340
|
+
# # minimal = locale.minimize
|
|
341
|
+
# # locale.to_s #=> "zh-Hans-CN" (unchanged)
|
|
342
|
+
# # minimal.to_s #=> "zh"
|
|
343
|
+
# #
|
|
344
|
+
# def minimize; end
|
|
277
345
|
# end
|
|
278
346
|
#
|
|
279
347
|
# # Provides locale-aware plural rules for cardinal and ordinal numbers.
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: icu4x
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OZAWA Sakuro
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-01-
|
|
11
|
+
date: 2026-01-10 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dry-configurable
|