- Components
icu_datetime
- Make
CldrCalendar
trait sealed except with experimental feature (unicode-org#4392)
- Make
icu_calendar
- New
DateTime::local_unix_epoch()
convenience constructor (unicode-org#4479)
- New
icu_datetime
FormattedDateTime
andFormattedZonedDateTime
now implementClone
andCopy
(unicode-org#4476)
icu_properties
- Add
Aran
script code (unicode-org#4426)
- Add
icu_segmenter
- Fix Unicode 15.0 line breaking (unicode-org#4389)
- Data model and providers
icu_datagen
- Datagen shows elapsed time for keys that are slow to generate (unicode-org#4469)
- Datagen performance improvement by caching supported locales (unicode-org#4470)
- Never use fallback for baked segmentation data (unicode-org#4510)
icu_provider
- (Small breakage)
DataPayload::new_owned()
is no longerconst
, this was a mistake (unicode-org#4456)
- (Small breakage)
icu_provider_blob
- Blob v2 no longer allocates (unicode-org#4383)
- FFI:
- All languages
- Correctly handle invalid UTF8 (unicode-org#4353)
- Correctly handle chars (unicode-org#4349)
- JS
- Fixed a bug where slice length is computed incorrectly (rust-diplomat/diplomat#372)
- Changed file extensions for better compatibility with nodejs modules (rust-diplomat/diplomat#387)
- C++
- Fixed a bug where a result header defines a struct that shadows the class' name (rust-diplomat/diplomat#394)
- Add
explicit
keyword to internal constructors (rust-diplomat/diplomat#386)
- All languages
- Utilities
calendrical_calculations
:- Add Keviyah/Four Gates based optimized calculations module for the Hebrew calendar.
yoke
- Remove
StableDeref
bound fromYoke<Y, Option<C>>
methods (unicode-org#4457) - Added
CartableOptionPointer
and function to convert fromYoke<Y, Option<C>>
(https://github.com/unicode-org/icu4x/pull/4449)\
- Remove
zerotrie
- Add
as_borrowed_slice
andAsRef
impl (unicode-org#4381) - Add
ZeroTrieSimpleAsciiCursor
for manual iteration (unicode-org#4383)
- Add
-
General
- MSRV is now 1.67
-
Components
- Compiled data updated to CLDR 44 and ICU 74 (unicode-org#4245)
icu_calendar
- Expose if a date is in a leap year (unicode-org#4273)
icu_locid
- Canonicalize transform extensions to lowercase (unicode-org#4134)
icu_plurals
- Experimental
PluralRulesWithRanges
for selecting the plural category for ranges (unicode-org#3012)
- Experimental
icu_properties
- Support Indic_Syllabic_Category in icu_properties. (unicode-org#4176)
- Add enum constants for new Unicode 15.1 Line_Break properties. (unicode-org#4132)
icu_segmenter
- Fix Unicode 15.0 sentence segmentation (unicode-org#4213)
icu_unicodeset_parse
- Add support to parse UAX#29 properties (unicode-org#4175)
-
Data model and providers
icu_provider
- Implement Any/BufferProvider for some smart pointers (unicode-org#4255)
icu_provider_blob
- New V2 serialization schema (unicode-org#4207)
icu_datagen
- New CLI option
--format=blob2
(unicode-org#4207) - CLDR 44 compatibility fixes (unicode-org#4134, unicode-org#4156, unicode-org#4158)
- Fix
supported_locales
for collator keys (unicode-org#4169) - CLI: Fix behavior of
--segmenter-lstm-root
such that it does not overrideicuexportdata-root
(unicode-org#4277) - Make datagen work without
CARGO_PKG_RUST_VERSION
environment variable (unicode-org#4292)
- New CLI option
-
Utilities
databake
- Add implementations for
HashSet
,HashMap
,BTreeSet
,BTreeMap
(unicode-org#4268, unicode-org#4274, unicode-org#4295) - Improvements to
databake::test_bake!()
(unicode-org#4182)
- Add implementations for
fixed_decimal
- Experimental rounding increment support (unicode-org#4219, unicode-org#4246)
litemap
- Implement
databake::Bake
onLiteMap
(unicode-org#4275)
- Implement
tinystr
- Better Debug impl for UnvalidatedTinyAsciiStr (unicode-org#4189)
zerovec
- Fix indexing bug in
ZeroMap2d::insert
(unicode-org#4160)
- Fix indexing bug in
Some crates received additional 1.3.x patch releases:
- Fix #4165, locale "vi" not working in Collator:
- Fix #4232, some locale data being improperly deduplicated:
1.3.2 was released to clean up the range dependency on zerovec
deliberately introduced in 1.3.0. It includes all previous 1.3.x changes
A subset of crates received a 1.3.1 patch release, to incorporate documentation fixes (unicode-org#4096, unicode-org#4097, unicode-org#4099, unicode-org#4101). These crates were: icu_calendar
, icu_casemap
, icu_datetime
, icu_locid_transform
, icu_provider
.
- General
- All updated crates:
- License updated to the new Unicode license
- MSRV is now 1.66
- Components now have the option to use
compiled_data
, an efficient default set of data baked in to the component. This is now recommended over using a data provider unless you have specific needs driving it.
- All updated crates:
- Data model and providers
icu_provider
:- Make
DataPayload
constructible from&'static M::Yokeable
(unicode-org#3467) - Add
ExportableDataPayload::eq_dyn
(unicode-org#3639) - Better docs (unicode-org#3740, unicode-org#3742)
- Moving fallback options into
icu_provider
(unicode-org#3651) - Add
DataPayload::dynamic_cast_mut
(unicode-org#3952) - (experimental) Add
AuxiliaryKey
toDataLocale
(unicode-org#3872)
- Make
icu_datagen
:- Completely revamped API (unicode-org#3705, unicode-org#3861, unicode-org#3951, unicode-org#4008, unicode-org#4041, unicode-org#3669)
- The old API is still available behind the
legacy_api
default Cargo feature
- The old API is still available behind the
- Updated baked data output to be usable by
compiled_data
(unicode-org#3449, unicode-org#3493, unicode-org#3549, unicode-org#3500, unicode-org#3847) - Add recommended locale set and expand regions in datagen (unicode-org#3586)
- Make datagen faster by caching more things (unicode-org#3625)
- Consume CLDR-JSON resources keyed with default script (unicode-org#3772, unicode-org#3786)
- (cli) Warn for
--locales all
(unicode-org#3691)
- Completely revamped API (unicode-org#3705, unicode-org#3861, unicode-org#3951, unicode-org#4008, unicode-org#4041, unicode-org#3669)
icu_provider_adapters
:- Deprecated
LocaleFallbacker
, use throughicu_locid_transform
- Deprecated
icu_provider_blob
:- Returning
ExtraneousLocale
inBlobDataProvider
(unicode-org#3562) - Fix empty keys in
BlobDataProvider
(unicode-org#3551)
- Returning
icu_provider_fs
:- Correct error types for
icu_provider_fs
(unicode-org#3682)
- Correct error types for
icu_testdata
:- This crate has been superseded by
compiled_data
and is now deprecated. - Data for new components will not be added, and it will not be updated for ICU4X 2.0.
- This crate has been superseded by
- Components:
- Cross component:
- All component crates now have a default
compiled_data
feature that enables constructors that do not require data providers, instead using data compiled into the library
- All component crates now have a default
icu_calendar
- Support for new non-Gregorian calendars: Persian (Solar Hijri), ROC, Hebrew, Chinese, Korean (Dangi), and Islamic (civil, observational, tabular, and Umm al-Qura). Lunar calendars are not yet fully optimized.
- Add
Ord
andPartialOrd
toicu_calendar
types (unicode-org#3468) - Add cyclic year to
FormattableYear
(unicode-org#3581)
icu_casemap
- Newly stabilized crate
icu_collator
- No additional changes
icu_collections
- Fixed JSON serialization of unpaired surrogates (unicode-org#3892)
icu_datetime
- Formatting for the new calendars added in
icu_calendar
- Includes preview formatting for Chinese and Korean with cyclic years and leap months
- Hardening of edge cases surrounding the
Calendar
trait TimeZoneFormatter::load_*_format
functions:- Those with a provider argument gain an equivalent
TimeZoneFormatter::load_*_format
gated bycompiled_data
- Those without a provider argument renamed to
TimeZoneFormatter::include_*_format
with deprecation warning
- Those with a provider argument gain an equivalent
- Formatting for the new calendars added in
icu_decimal
- No additional changes
icu_list
- No additional changes
icu_locid
- Declarative macros are now re-exported from their own modules; old exports are deprecated; for example,
use icu::locid::extensions::unicode::value
now works, instead ofuse icu::locid::extensions_unicode_value
- Declarative macros are now re-exported from their own modules; old exports are deprecated; for example,
icu_locid_transform
- New home of
LocaleFallbacker
andfallback
module previously found inicu_provider_adapters
- New
LocaleDirectionality
to access the right-to-left status of locales
- New home of
icu_normalizer
- No additional changes
icu_plurals
- No additional changes
icu_properties
- Compiled data functions added to
sets
andmaps
withoutload_
prefix:icu::properties::sets::basic_emoji()
- Compiled data functions added to
icu_segmenter
- Algorithmic bug fixes such as unicode-org#3392
icu_timezone
- New
IanaToBcp47Mapper
for converting between IANA time zone names and BCP-47 time zone names (unicode-org#2909)
- New
- Cross component:
- Utils:
calendrical_calculations
: New crate: 0.1.0crlify
: 1.0.2 -> 1.0.3databake
anddatabake_derive
: 1.0.5 -> 1.0.6::
paths changed (unicode-org#3450)
deduplicating_array
: 0.1.4 -> 0.1.5fixed_decimal
: 0.5.3 -> 0.5.4- Fix rounding bug (unicode-org#3644)
- Reexport some types to be more consistent with ICU4X naming (unicode-org#3945)
litemap
: 0.7.0 -> 0.7.1- Add const litemap getter functions for common types (unicode-org#3416)
icu_pattern
: 0.1.4 -> 0.1.5tinystr
: 0.7.1 -> 0.7.2- Add
UnvalidatedTinyAsciiStr
(unicode-org#3406) - Make compatible with
T: Bake
onZeroVec
(unicode-org#3451)
- Add
tzif
: 0.2.1 -> 0.2.2writeable
: 0.5.2 -> 0.5.3yoke
andyoke_derive
: 0.7.1 -> 0.7.2- Make
impl<...> Debug for Yoke<...>
implementation sound (unicode-org#3686) - Add
KindaSortaDangling
internal type to make Yoke safe under strong protection (unicode-org#3735)
- Make
zerofrom
andzerofrom_derive
: 0.1.2 -> 0.1.3- Expand
ZeroFrom
to cover cases where attrs can borrow (unicode-org#3770) - Expand
ZeroFrom
impl on unsized &T (unicode-org#3467)
- Expand
zerovec
andzerovec_derive
: 0.9.4 -> (0.9.6)- Add
ZeroTrie
, an efficient string-to-int collection (unicode-org#2722) - Handle incorrect
VarZeroVec
bytes representation (unicode-org#3883) - Better soundness under stacked borrows (unicode-org#3513, unicode-org#3524, unicode-org#3515, unicode-org#3509)
- Deserialization for
VarZeroVec<VarZeroSlice>
, take 2 (unicode-org#3649) - Fix
MultiFieldsULE
(unicode-org#3642) - Add initial
zeroslice!
andzerovec!
macros unicode-org#3453, Updatezerovec!
/zeroslice!
macro syntax to nested arrays (unicode-org#3611) - Add support for custom varule fields in #[make_varule] (unicode-org#3580)
- Add
UnvalidatedChar
(unicode-org#3444) get_copied_by
API (unicode-org#3351)
- Add
zerovec
andzerovec_derive
: 0.9.6 -> 0.10.0:- Adding
T: Bake
bound onZeroVec
'sBake
(unicode-org#3451)
- Adding
- FFI:
- Feature support
- Case mapping exports:
ICU4XCaseMapper
ICU4XCaseMapCloser
ICU4XTitlecaseMapper
ICU4XTrailingCase
- Other new exports:
ICU4XCodePointSetBuilder
ICU4XLocaleDirection
ICU4XLocaleDirectionality
ICU4XLocaleFallbackSupplement
ICU4XIanaToBcp47Mapper
- Enum variants added for calendar types and errors
- Case mapping exports:
- C++
- Don't use
std::move
for inline arguments (rust-diplomat/diplomat#336)
- Don't use
- Feature support
- Experimental:
bies
- No additional changes
icu_compactdecimal
- Convenience functions for formatting
f64
andFixedDecimal
(unicode-org#3699)
- Convenience functions for formatting
displaynames
- New
VariantDisplayNames
for accessing display names of locale variant subtags (unicode-org#3461) LocaleDisplayNamesFormatter
now supports full UTS 35 language identifier formatting (unicode-org#3587)
- New
harfbuzz
- No additional changes
ixdtf
- No additional changes
relativetime
- No additional changes
transliterate
: New crate: 0.1.0unicodeset_parse
: New crate: 0.1.0zerotrie
: New crate: 0.1.0
Note: A subset of crates received patch releases in the 1.2 stream.
-
databake
: 0.1.5- Fixed #3356, adding
allow
for clippy false-positives
- Fixed #3356, adding
-
icu_capi
1.2.1- Fixed #3344,
buffer_provider
feature accidentally pulling in extra crates
- Fixed #3344,
-
icu_capi
1.2.2- Use
intptr_t
instead ofssize_t
for portability (diplomat #326)
- Use
-
icu_datagen
1.2.1- Fixed #3339, incorrect Cargo features
-
icu_datagen
1.2.3 -
icu_datagen
1.2.4- Remove dependency on
clap
's"cargo"
feature to better support non-Cargo users (#3388)
- Remove dependency on
-
icu_datagen
1.2.5- Remove runtime dependency on segmenter data pulled from the cargo cache (#3391)
-
icu_locid_transform
1.2.1- Fixed #3332, missing
+?Sized
bound
- Fixed #3332, missing
-
icu_segmenter
1.2.1- Fixed #3341, incorrect results on some strings with mixed scripts
-
icu_provider
1.2.1- Do not autoenable
postcard/use-std
(#3376)
- Do not autoenable
-
icu_datetime
1.2.1- Remove superfluous
JapaneseEraV1
provider bounds onTypedZonedDateTimeFormatter
#3379
- Remove superfluous
- General
- All updated crates:
- Add missing
Debug
impls (#3206) - Update Rust edition to 2021 (#3075)
- Internal clippy fixes
- Unless otherwise specified, all crate updates are to version 1.2.
- Out-of-cycle releases do not get their own changelog entries, so some entries may span multiple patch or pre-1.0 minor versions.
- Add missing
- All updated crates:
- Data model and providers
icu_provider
:- Add support for silencing expected
DataError
s (#3262) - Removing
dhat
dependency (#3138) - Make trait
DataMarker: 'static
(#3137)
- Add support for silencing expected
icu_datagen
: (includes patch updates 1.1.1 and 1.1.2)- (lib) Add
Out::Baked
andBakedOptions
; deprecateOut::Module
(#3130) - (cli) Bump clap to 4.0, move to using derive (#3149)
- Pare down datagen deps (#3160)
- Support changes from CLDR 43 (#3182, #3201, #3204, #3205)
- Add support for complemented range iterators (#3198)
- Using byte string literals in databake (#3040)\
- Datagen support for all new component features
- (performance) Less
ZeroMap
mutation in datagen (#3098)
- (lib) Add
icu_provider_adapters
: No other changesicu_provider_blob
: No other changesicu_provider_fs
:- Remove sha2 dep (#3160)
icu_provider_macros
: No other changes
- Components:
- Cross component: No additional cross-component changes
icu_calendar
- Document the bounds of
IsoSecond
,Minute
andHour
(#3156)
- Document the bounds of
icu_collator
: No other changesicu_collections
:- Add
to_u32
for TrieValue (#3222) - Add
CPT::try_alloc_map_value
(#3207) - Add support for coalescing range iterators (#3198)
- Allow inversion lists to be built from ranges that include
char::MAX
(#3203)
- Add
icu_datetime
: No other changesicu_decimal
- Add
From<GroupingStrategy>
forFixedDecimalFormatterOptions
(#3045)
- Add
icu_list
ListJoinerPattern::from_parts_unchecked()
is nowfrom_parts()
and panics when necessary (#3052)
icu_locid
- Reduce size of internal
ShortVec
abstraction (#3200) - Use
Box
in place ofVec
inShortVec
(#3220)
- Reduce size of internal
icu_locid_transform
- The default set of likely subtags is now only the subset of languages that have a basic or greater CLDR coverage level; the full set is much larger in CLDR 43 and can be accessed via new constructors (#3148, #3158, #3197)
icu_normalizer
: No other changesicu_plurals
: No other changesicu_properties
- Add ability to obtain enumerated property value names from enum values (#3222, #3276)
- Add ability to obtain enumerated property values from their names (#3103, #3152)
- Add support for runtime-selected property lookup (#3169)
- Add support for complemented range iterators (#3198)
- Support data for Bidi properties with combined data structure (#3026, #3258)
icu_segmenter
- Graduated from experimental
- Add "auto" feature, enable "lstm" feature, establish new data key structure, improve error handling, and revise word and line segmenter constructors (#3010, #3267, #3270)
- Rename
icu_segmenter
enums (#3285) - Allow access to rule status via word_type in WordSegmenter and over FFI (#3139, #3275)
- Upgrade segmenter to Unicode 15.0.0 (#3273)
- Return a line break at index 0 (#3289)
- Improve the LSTM code and data model to be zero copy, improve error handling, be future-proof, and vectorize more operations (#3210, #3217, #3233, #3250, #3254, #3264, #3291)
- Remove ndarray dependency (#3192)
- Silencing expected
DataError
s (#3262) - Fix SB10 rule (#3126)
- Polished docs and examples
icu_timezone
: No other changes
- Utils:
crlify
: No change (still at 1.0.1)databake
: 1.1.3 -> 1.1.4- Using byte string literals in databake (#3040)
deduplicating_array
: 0.1.3 -> 0.1.4fixed_decimal
: 0.5.2 -> 0.5.3litemap
: 0.6.1 -> 0.7.0- Move FromIterator impl to new
StoreFromIterable
trait, allowing constructingLiteMap
s with different backing stores (#3220)
- Move FromIterator impl to new
pattern
: 0.1.3 -> 0.1.4tinystr
: No change (still at 0.7.1)tzif
: No change (still at 0.2.1)writeable
: 0.5.1 -> 0.5.2yoke
: 0.7.0 -> 0.7.1yoke-derive
: 0.7.0 -> 0.7.1zerofrom
: 0.1.1 -> 0.1.2zerofrom-derive
: 0.1.1 -> 0.1.2zerovec
: 0.9.2 -> 0.9.4- Add initial ZeroHashMap (#2579)
- Add
ZeroSlice::get_as_array()
(#3192) - Add range dep of yoke to zerovec (#3089)
zerovec-derive
: 0.9.2 -> 0.9.4- Add
#[zerovec::derive(Hash)]
(#2579) - Avoid using derive on autogenerated packed types (#3069)
- Add
- FFI:
- Feature support
- Property value-to-name mappings (#3196)
UnicodeSets
(including exemplar chars) (#3177)- Runtime-selected property lookup (#3169)
- Property lookup ranges and GeneralCategoryGroup (#3230)
- LocaleExpander: Add extended and non-extended constructors (#3197)
- Fill in
BreakIterator
API (#3275) - Bidi reorder_visual (#3183)
- (experimental) Strongly typed display names API (#3190, #3188)
- Add feature slicing to
icu_capi
(#3216) - Better FFI provider ownership (#3140)
- Feature support
- Experimental:
bies
: 0.2.0 -> 0.2.1icu_casemap
: 0.7.1 -> 0.7.2icu_compactdecimal
: 0.1.0 -> 0.2.0- Support configurable grouping separators in CompactDecimalFormatter (#3045)
icu_displaynames
: 0.8.0 -> 0.10.0- Add ScriptDisplayNames (#3317)
- Add LanguageDisplayNames with support for variants (#3058, #3113)
- Add stronger typing (#3190)
icu_harfbuzz
: New experimental port: Harfbuzz integration for ICU4X (v0.1.0)icu_relativetime
: 0.1.0 -> 0.1.1
-
icu_calendar
- Fix bug in
simple_week_of()
around unit size (#2951) - Fix math in calendar (#2714)
- Add
div_rem_euclid
and use it in icu_calendar (#2704) - Fix Time::from_minute_with_remainder_days to handle negatives (#2643) (#2702)
- doc improvements
- Fix bug in
-
icu_casemap
- doc improvements
-
icu_collator
- doc improvements
-
icu_collections
- Add APIs for returning exemplar characters data (#2812)
- Readable JSON inversion lists (#2855)
- Add
UnicodeSet
that supports strings (#2796) - Add documentation on
CodePointTrie
details and perf considerations (#2717)
-
icu_codepointtrie_builder
- internal improvements
-
icu_datetime
- internal and doc improvements
-
icu_decimal
- internal and doc improvements
-
icu_displaynames
- DisplayNames fixes (#2918)
- Rename
Territory
->Region
for display names component (#2895) - Transformer code for
Language
display names (#2871) - Adding a function to get display name for a region. (#2816)
- Transformer code for display names component. (#2635)
- doc improvements
-
icu_list
- Untangling list provider from logic and fixing big endian safety bug (#2994)
- Not allocating
Writeable
s for regex evaluation (#2991) - doc improvements
-
icu_locid
- Reject duplicated extensions (#2893)
- More borrowing in locid's
write_to_string
(#2693) - doc improvements
-
icu_locid_transform
- Clean up dependency specifications so
serde
isn't pulled in by default (#2696) - doc improvements
- Clean up dependency specifications so
-
icu_normalizer
- internal and doc improvements
-
icu_plurals
- doc improvements
-
icu_properties
- Add APIs for returning exemplar characters data (#2812)
- Add API and testdata for
Basic_Emoji
property (#2802) - Add
UnicodeSet
that supports strings (#2796) - Update
Script
property value enums (#2787) - doc improvements
-
icu_segmenter
- Make metacrate features more specific (#2932)
- Remove
serde
dependency from segmenter withlstm
feature. (#2904) - Simplify construction of grapheme cluster break iterators (#2870)
- Store grapheme cluster payload instead of grapheme cluster segmenter. (#2864)
#[no_std]
for LSTM segmenter (#2845)- icu_segmenter: enforce
clippy::indexing_slicing
. (#2325) - Use
GraphemeClusterSegmenter
inDictionarySegmenter
andLstmSegmenter
(#2716) - Rename
*BreakSegmenter
to*Segmenter
(#2707) - Remove unnecessary language check for East Asian language (SA property) (#2705)
- internal and doc improvements
-
icu_timezone
- Adds a bytes parsing API for
GMTOffset
forCustomTimeZone
and FFI (#2943, #2955) - doc improvements
- Adds a bytes parsing API for
-
icu_provider_adapters
- Add more
inner_mut
functions inicu_provider_adapters
(#2987) - Fix error propagation in
MultiForkByErrorProvider
(#2986) - Add mutation methods to
MultiForkByErrorProvider
(#2972)
- Add more
-
icu_provider_blob
- internal and doc improvements
-
icu_provider
- Setting correct
DataError
for.as_deserializing()
,.as_downcasting()
(#2993) - doc improvements
- Setting correct
-
icu_datagen
- Removing experimental feature from datagen (#3005)
- Fixing Spanish list regex (#2989)
- Datagen CLI improvements (#2950)
- Some reexports for datagen (#2958)
- Databake improvements (#2906)
- Exclude certain collations by default and add option to include them (#2789)
- Allowing no keys in datagen CLI (#2731)
- Fixing baked datagen for no keys and keys with no data (#2698)
- Internal and doc improvements
-
icu_provider_fs
- internal and doc improvements
-
icu_testdata
- stabilized metadata
- doc improvements
- CLDR 42 and ICU 72 data
-
bies
- Bumped
writeable
version
- Bumped
-
databake
- Doc improvements
-
fixed_decimal
- Treat strings starting with a decimal point as valid in
FixedDecimal::from_str()
(#2937) - The actual formatting part of compact decimal formatting (#2898)
- Allow noncompact
CompactDecimal
(#2889) CompactDecimal
andScientificDecimal
(#2847)- doc improvements
- Treat strings starting with a decimal point as valid in
-
icu_pattern
- internal improvements
-
litemap
- internal and doc improvements
-
tinystr
- Add
std
feature andError
impl forTinyStrError
(#3009) - internal and doc improvements
- Add
-
tzif
- internal and doc improvements
-
writeable
- Using
core
integer log when available (#3015) usize
andisize
implementation- internal and doc improvements
- Using
-
yoke
- Add
prove_covariance_manually
guard forCoerceUnsized
(#2936) - Allow
clippy::forget_copy
inderive(Yokeable)
impl (#2775) - Fix soundness issue in
Yoke::attach_to_cart()
around implied bounds #2949
- Add
-
zerovec
ZeroMap2d
cursors
- Made case level setting actually take effect (#2892)
- General
- Update license to Unicode-DFS-2016 (#2303)
- Major improvements to documentation, bechmarks, and examples
- Various performance and codesize improvements
- FFI for all non-experimental components
- Data model and providers
- Polished baked data provider (#2098, #2126, #2147)
- Data key extraction from binary (#1950)
- Add
LocaleFallbacker
with locale fallback algorithm (#2036, #2115, #2186, #2567) - Making
DataProvider: Sync + Send
(#1853) - Update to Postcard 1.0 (#2037, #2091, #2438)
- De-duplication in
BlobDataProvider
(#2062) - Move
map_project
to closures (#2185) - Renaming of many traits and functions in
icu_provider
(#2207, #2222, #2223) - Passing
DataLocale
by reference (#2224) - Fix feature specification in provider/fs (#2527)
- Rename
DataKey
methods and returnDataKeyPath
(#2565) - Add some useful data provider impls; refactor
AnyPayloadProvider
(#2564) - Removing
StaticDataProvider
(#2582) - Removing
InvariantDataProvider
(#2159) - Renaming load_payload, load_resource (#2222)
- Renaming
DataOptions
toDataLocale
(#2223) - Use an abstract predicate function in
ForkByKeyProvider
(#2249) - Add
UnvalidatedStr
and use it inLocaleFallbackParentsV1
(#2502) - Add some useful data provider impls; refactor
AnyPayloadProvider
(#2564)
- Components:
- Cross component:
Format
toFormatter
rename (#2184)- Uniform constructor style across all components, see #2573 (#2293, #2305, #2309, #2316, #2318, #2326, #2327, #2329, #2330, #2332, #2333, #2334)
- Remove
format_to_write
s (#2528) - Make error enums more consistent (#2649)
- More Copy arguments (#2654)
calendar
- Emit month codes from calendars (#2053)
- Add
Date::new_from_codes()
; fix up per-calendar constructor functions (#2255) - Fix iso-to-fixed conversion (#1898)
- Ethiopic calendars (#1831, #1902)
- Replace hour/minute/second constructors
new_unchecked()
with getternumber()
(#1922) - Improve and rename
types::Year
/types::Month
(#2157) - Add
japanext
calendar (#2181) - Replace unbounded arithmetic for calendar numeric types with bounded arithmetic. (#2273)
- Make
Japanext
its own calendar type (#2311) - Pick default calendar based off of locale in
AnyCalendar
- Make
offset_date
handle wraparounds for months (#2373) - Hide duration stuff, rename
IncludedInAnyCalendar
(#2426) week_of
refactoring (#2462)- Fix arithmetic in Indian calendar (#2479)
- Infallible
from_minutes_since_local_unix_epoch()
(#2646)
collator
- New component (#1706)
- Validate the length of last_primaries (#1916)
- Use a higher numeric value for
Strength::Identical
(#1942) - Move and unescape collator and normalizer tests (#1943)
- Tweak CollationMetadataV1 documentation and dead code (#1914)
- GIGO fix-ups for the normalizer and the collator (#1931)
- split_first_u16/split_first_u24 -> split_first (#2459)
- Create options bag for CollatorOptions (#2475)
- Clean up FFFD magic numbers in Collator with REPLACEMENT_CHAR (#2496)
- Add traditional spanish and plumbing to make it work (#2497)
collections
- New component (#2294, #2323, #2328, #2336)
- Rename
CodePointSet
toCodePointInversionList
(#2230) - Allow
CodePointTrie
to determineerror_value
at runtime from data (#2301) - Use GIGO with debug assertion in Char16Trie (#2537)
datetime
- Formatting for
AnyCalendar
s (#1987, #2146) - Renaming
DateTimeFormatter
(etc) toTypedDateTimeFormatter
andAnyDateTimeFormatter
toDateTimeFormatter
(#2298) - DateFormatter cleanups (#2304)
- Remove Calendar type parameter from
TimeFormat
(#2282) - Class Hierarchy for
DateTimeFormat
(split intoDateFormat
,TimeFormat
, etc) (#2133) - Making
time_granularity
public (#1867) - Add fractional seconds support to components bag (#1873)
- Use
FixedDecimalFormat
inDateTimeFormat
(#1952) - Include module name to disambiguate Pattern (#1889)
- Use month codes in formatting (#2071)
- Split date and time data keys. (#2093)
- Move
Formatted[Zoned]DateTime
over to preextracting the date time input info (#2138, #2205) - Remove
MockZonedDateTime
(#2231) - Add an offset_fallback field in
TimeZoneFormatV1
(#2253) - Remove
HourCycle
from the public Lengths API (#2331) - Move mock datetime parsing code to test modules (#2436)
- Stop returning error on mismatched locale and type calendar (#2477)
- Change default length to medium (#2596)
- Make expect_pattern GIGO (#2650)
- Formatting for
decimal
- Don't panic on invalid grouping sizes (#2042)
- Remove signum and sign display options (#2070)
- Add numbering system support (#2246)
list
- ListStyle -> ListLength and add _with_length (#2628)
locid
- Add
remove()
for vertical fallback (#1992) - Update
Locale
andLanguageIdentifier
comparison functions tostrict_cmp()
andnormalizing_eq()
(#2020) normalizing_eq()
,strict_cmp()
for LSRV subtags (#2048)- Add
strict_cmp_iter()
(#2111, #2114) - Removing auto-derived Ord impl for Locale/LangId (#2142)
- Enable
locale
macro to support single unicode key value pair extension (#2382) - Reducing
locid_id
API surface (#2484) private::Key
andother::Key
to::Subtag
(#2632)
- Add
locid_transform
- Rename from
icu::locale_canonicalizer
(#2381) LocaleCanonicalizer
/LocaleExpander
refactor (#2338)
- Rename from
normalizer
- Promoted from experimental (#2058)
- Add ComposingNormalizer for NFC, NFKC, and UTS 46 (#2039)
- GIGO fix-ups for the normalizer and the collator (#1931)
- Add support for NFKD and the decomposed counterpart of UTS 46 without ignored and disallowed (#1967)
- Simplify Hangul composition (#2200)
- Make sink-writing normalization methods non-experimental (#2201)
- Uses tries instead of inversion lists for normalization data (#2235)
- Consolidate the two auxiliary tries to the main NFD trie (#2371)
- Use
char
instead ofU24
in normalizer data (#2481) - Make NFKD and UTS 46 data store only the difference form NFD (#1984)
plurals
- Rename
select()
tocategory_for()
forPluralRules
(#2287) - Use From instead of TryFrom for signed integers (#2593)
from_tr35_string
->get_for_cldr_string
(#2633)- Make PluralOperands fields private, add static constructor (#2598)
- Rename
properties
- Better properties return values (#2112, #1990, #2277, #2555)
- Move properties data over to an (extensible) enum (#2140)
- Renaming unicode property data struct names (#2198)
timezone
- New component, split from
datetime
(#2265) - Add time period metazone to
TimeZonesProvider
(#1961) - Convert metazone period from string to i32 (#2085)
- Improvements to
MetaZoneCalculator
(#2274) - Add
TimeVariant
wrapper (#2289) - TimeVariant -> ZoneVariant with a few more docs (#2427)
- Assorted TimeZone fixes (#2478)
- New component, split from
- Cross component:
- Utils:
crlify
: No updatesdatabake
:- Moved over from
crabbake
(#2068) - Some databake improvements (#2150)
- Using static
LiteMap
s in databake (#2264)
- Moved over from
deduplicating_array
: No updatesfixed_decimal
:- Switch FixedDecimal to a trivaluate sign (#2025)
- Remove negate (#2060)
- Improve integer operations (#1924)
- Add
FixedDecimal::concatenate_right()
(#1953) - Implement
ceil()
,floor()
andtruncate()
functions (#1923) - Define "magnitude" and introduce "position" concept (#1981)
- Support for rounding modes (#2000, #2100, #2104, #2261)
- Make
multiply_pow10)_
be infallible (#2285)
litemap
:- Remove
serde_json
dep from zeromap/litemap and align features (#1939) LiteMap
of&'a [(K, V)]
(#2242)- Enable
ShortVec
as a backend forLiteMap
(#2356)
- Remove
pattern
: No updatestinystr
:- Make
Option<TinyAsciiStr>
be the same size asTinyAsciiStr
(#2430)
- Make
tzif
:- New crate (#2019)
- Parse POSIX time-zone strings using Combine (#1973)
- Parse TZif binary files using Combine (#1999)
writeable
:- Rename
write_len
(#2529)
- Rename
yoke
:- Deprecate yoke's
badly
methods (#1930) - Rename
Yoke::project()
functions to::map_project()
(#1955) - Remove stable_deref_trait/alloc from yoke's default feature set (#2094)
- Move
map_project()
to closures (#2185)
- Deprecate yoke's
zerofrom
: No updateszerovec
:- Make
VarZeroVec
format configurable (#2306) - Add
FlexZeroVec
(#1790) - Add
NicheBytes
trait andNichedOptionULE
(#2501) - Turn ZeroVec into a struct for optimization (#2599, #2622)
- Improve performance of VarZeroVec::deserialize and add provider benches (#2603)
- Add array impl for
ZeroMapKV
(#1875) - Remove lifetime from
ZeroVecLike
(#1901) ZeroVecLike
cleanup (#2024)- Remove
serde_json
dep from zeromap/litemap and align features (#1939) - Make various ZeroVec methods
const
(#1976) - Refactor ZeroMap2d and add get_by functions (#1876)
- Add more zerovec impls for
usize
andFlexZeroVec
(#2023) - Change charULE from 4 bytes to 3 bytes (#2015)
- More impls in zerovec crate (#2054)
- Add binary search and other utilities to
FlexZeroVec
(#2284) - Remove
KeyError
and renameget()
toget_2d()
(#2279) EncodeAsVarULE
forCow
(#2376)- Add
ExactSizeIterator
forFlexZeroVec::iter_*()
(#2580) - Add permutation to ZVL containers (#2605)
- Make
- FFI:
- All non-experimental components now covered by FFI
- Add FFI error strategy (#2045)
- Configurable DataProvider FFI (#2526)
- Experimental:
bies
:casemapping
:segmenter
:- Expose
RuleBreakIterator
as a public interface (#2408) - Merge
segmenter_lstm
with segmenter (#2087) - Use
CodePointTrie
in Segmenter (#1839) - Move language detection to language.rs (#1689)
- Simplify function in rule_segmenter (#1880)
- Use dictionary segmenter for word. (#1936)
- Remove std dependency from segmenter_lstm. (#2064)
- Add Lao and Khmer LSTM models (#2120)
- Use multiple dictionaries for line/word segmenter. (#2209)
- Add a feature option not to use unicode-segmentation (#2212)
- Remove two char types in line segmenter and polish utf8 iterator naming (#2269)
- Expose
- General data model
- Non-exhaustive errors for locid, calendar, decimal, plurals (#1792, #1793)
- Rename "serialize" feature to "serde" (#1797)
- Turn all errors into Copy types (#1657)
- Components
calendar
:- Coptic, Indian and Ethiopian calendars (#1660, #1715, #1779)
- Calendar arithmetic (#1614)
datetime
:- Formatting for fractional seconds (#1813, #1801)
- Support for day of week in month ('F') (#1770)
- Custom fallbacking for TimeZoneFormatter (#1591)
- Support for week-of-month (#1468)
- Bug fix to get_best_available_format_pattern skeleton matching logic (#1549)
decimal
: No updateslocale_canonicalizer
:- ZeroCopy support (#1760, #1777)
locid
:- Simplified language representation (#1695)
- Region, Script and Variant subtags ULE (#1696)
plurals
:- Update data model to use
ZeroVec
(#1240)
- Update data model to use
properties
:- Bidi support (#1716, #1784)
- Utilities
codepointtrie
:- Use 0 for error value for Rust out-of-bounds for primitive trie value types (#1804)
crlify
: New util for line ending conversionsdeduplicating_array
: No updatesfixed_decimal
:- Improvements to FixedDecimal f64 APIs (#1718)
litemap
:- Pluggable LiteMap backends (#1769)
pattern
: No updatesuniset
: No updateswriteable
: No updatesyoke
: No updateszerofrom
: No updateszerovec
:- ZeroVec derive improvements (#1780)
- Support non-Ord values in ZeroMap (#1743)
- Add OptionULE and OptionVarULE (#1736)
- Rename ZeroVec::from_slice and add new method for const-constructed ZeroSlice (#1728)
- Treat ZeroMap sort order as an optional invariant (#1727)
- Add ZeroMap::get_copied_by (#1722)
- Generalize PairULE to support longer tuples (#1721)
- Add more AsULE impls for primitives (#1672)
- Add cast methods to ZeroVec and ZeroSlice (#1651)
- Add RawBytesULE::slice_from_byte_slice (#1648)
- Create façades for ZeroVec types, hide internal code organization modules (#1629)
- Add zerovec::skip_kv and zerovec::skip_ord attributes, as well as generalized attribute handling framework (#1613)
- Rename as_unaligned to to_unaligned (#1619)
- FFI:
- Updating to Diplomat 0.3
- Making testdata an optional FFI dep (#1820)
- Split out capi targets: make separate freertos, staticlib, and cdylib crates as targets (#1747)
- Experimental:
crabbake
: Initial version of baked data provider (#1825)segmenter
:- Support production-ready data provider for segmenters (#1652)
- Implement dictionary based segmenter for line segmenter. (#1644)
- Wire DataProvider into UAX29 segmenters (#1627)
- Move UAX#14 defines to line.toml (#1568)
- Add segmenter factories to generate UAX29 iterators (#1602)
- General data model
DataPayload
no longer needs a lifetime (#1297, #1279)- Re-write DataKey (#1511)
- Rewrite ErasedDataProvider as AnyProvider (#1495)
- Add EitherProvider and rename IterableDataProviderCore to IterableProvider (#1455)
- Change DataRequest to be borrowed in BufferProvider (#1416)
- Replace SerdeDeDataProvider with BufferProvider (#1369, #1384)
- Components
calendar
:- Julian, Japanese, and Buddhist calendars (#1351, #1394, #1305)
DateTimeFormat
integration (#1339)- Bugfix around arithmetic (#1352)
datetime
:- Week-of-year support (#1206)
DateTimeFormat::resolve_components()
(#1362)- Era formatting (#1346)
TimeZoneFormatterConfig
(#1256)- New data model for organizing calendar data (#1300)
- Bugfix around missing localized strings in time zone data (#1405)
decimal
: No updateslocale_canonicalizer
:- Bugfix in maximization (#1171)
- Update data model to use
LiteMap
(#1275)
locid
: No updatesplurals
:- Update data model to use
ZeroVec
(#1240)
- Update data model to use
properties
:- Rename resource key category for properties (#1406)
- Rename enums for
General_Category
(#1355) - Implement the
Canonical_Combining_Class
property (#1347) - Implement
Script_Extensions
property (#1353) - Add
General_Category
predicate functions (#1310) - Implement
Grapheme_Cluster_Break
,Word_Break
, andSentence_Break
Unicode properties (#1233)
- Utilities
codepointtrie
: No changesdeduplicating_array
: New utility for efficient serialized representation of data with duplicatesfixed_decimal
:- Padding and truncation APIs (#1482, #1507, #1195)
- Add double-to-decimal via ryū (#1217)
- Handle exponents in
FixedDecimal::from_str()
(#1265)
litemap
:- Add
LiteMap::get_indexed()
andLiteMap::find_index()
- Handle serialization of tuples (etc) in litemaps (#1306)
- Add
pattern
: No updatesuniset
: No updateswriteable
:- Adding parts functionality to
Writeable
(#1438) - Change
Writeable::writeable_to_string
to return a Cow (#1452) - Implementing
Writeable
for all integers (#1408) - Making
writeable::LengthHint
a range (#1400) - Simplifying
assert_writeable_parts_eq
andassert_writeable_eq
(#1522, #1399)
- Adding parts functionality to
yoke
:- Remove
Yokeable::Output
fromZeroCopyFrom
trait (#1499) - Add
EitherCart
(#1484) - Remove
attach_to_option_cart()
(#1348) - Homogenize yoke generic impls to always work with
Yokeable
, addOwnedYokeable
(#1302)
- Remove
zerovec
:- Move over to a model where the vector types deref to
ZeroSlice
andVarZeroSlice
(#1418, #1371) - Simplify
ZeroVec
/VarZeroVec
error handling, consolidateULEError
type (#1389) - Simplify
ZeroMapKV
(#1334) - Add
ZeroMap2d
, a two-dimensional zero-copy map (#1432) - Add borrowed-only version of
ZeroMap
(#1238) - Add various helper functions to zerovec (#1430)
- Rename
PlainOldULE
toRawBytesULE
(#1413) - Improve
EncodeAsVarULE
(#1385) - Add
EncodeAsVarULE
forZeroVec
(#1274, #1407) - Various trait impls (#1332, #1330, #1328, #1287)
- Document ULE alignment guarantee; update all impls with checklists (#1294)
- Fix
PairULE
validation function (#1266)
- Move over to a model where the vector types deref to
- FFI:
- Updating to the latest Diplomat
- Add FFI for constructing Data Structs, including decimal data structs (#1497)
- Add padding/truncation to FFI (#1501)
- Add FFI for constructing fixed decimals from float (#1483)
- Properties FFI (#1269)
- Experimental:
- New ListFormatter experiment
- More progress on segmentation experiment
- Updated to CLDR 40 (#1216)
- Functional Unicode property APIs and data; moved to new crate
icu_properties
(#148) DateTimeFormat
optimization: memory usage cut by two-thirds and perf improved by 40% (#519)BlobDataProvider
allowing for dynamic, asynchronous data loading (#1084)- Major upgrades to the
zerovec
utility crate and new benchmarks forZeroMap
(#1082, #1087) - Initial support for time zones in
DateTimeFormat
components bag (#845) - Bug fixes in
LocaleCanicalizer
(#1189, etc.) - Week of month/year arithmetic (#918)
- Major improvements on code size across FFI (#962)
- Iterations on ICU4X Segmenter (#1045, #1165, etc.)
- Experimental
ListFormatter
(#1053) - ICU4X now requires Rust 1.56 (#1201)
- Static data provider without filesystem dependency (#78)
- Infrastructure around zero-copy deserialization, including
ZeroVec
andYoke
(#652, #667) - Most ICU4X components support
no_std
(#812) - Hour cycle preferences are used by DateTimeFormat (#671)
- Skeleton matching supports additional field widths (#584)
- Add canonicalize method to LocaleCanonicalizer (#747)
- Added range iterator on UnicodeSet (#836)
- Add PluralRules::categories() function (#789)
- Consolidated data generation tool into new binary
icu4x-datagen
- Updated CLDR to 39 (#640)
- Initial release of:
icu_decimal
(#590)icu_locale_canonicalizer
(#417)
DateTimeFormat
gets support for- day periods (#435)
- time zones (#418)
- components bag (#481)
UnicodeSet
gets preliminary support for L3a subset (#478)PluralRules
supportE
operand (#407)- New utilities:
Writeable
ZeroVec
LiteMap
FixedDecimal
Pattern
- Early prototype of C API -
icu_capi
- Initial release of ICU4X.
- Initial release of:
icu
icu_locid
icu_plurals
icu_datetime
icu_uniset
icu_provider
icu_provider_fs
icu_provider_cldr
icu_testdata
icu4x_ecma402
fixed_decimal