]> granicus.if.org Git - icu/commit
ICU-20467 get XLocaleMatcher ready for drop-in
authorMarkus Scherer <markus.icu@gmail.com>
Sat, 9 Feb 2019 22:20:56 +0000 (14:20 -0800)
committerMarkus Scherer <markus.icu@gmail.com>
Fri, 15 Mar 2019 22:01:01 +0000 (15:01 -0700)
commit5182ad7d98e324e7cbeb04183d5b0ca972bd2f12
tree3e58c3266dfad75399f058ff4ef27ab923e7d8be
parenta3c5d7e0e436968e797175962f253c73798e6405
ICU-20467 get XLocaleMatcher ready for drop-in

Get XLocaleMatcher ready for replacing the LocaleMatcher code.
More simplifications beyond ICU-20330 PR #409, smaller data, some more optimizations.
New API ready to be moved over.

- less work for region partitions distance lookup:
  - encode each array of single-character partition strings as one string
  - look up each desired partition only once, not for each (desired, supported) pair
  - look up the * fallback region distance only for the first mismatch, not for each non-matching pair
- skip region distance lookup if minRegionDistance>=remainingThreshold
- locale distance table: remove subtables that contain only *-* with default script/region distance
- mark intermediate subtag matches via last-character bit 7, not also with a match value
- likely subtags data: prune trailing *-only levels, and skip *-only script levels; likely subtags perf test
- likely subtags: skip_script=1; LSR.indexForRegion(ill-formed)=0 not negative
- likely subtags small optimization: array lookup for first letter of language subtag
- defaultDemotionPerDesiredLocale=distance(en, en-GB)
- favor=script: still reject a script mismatch
- if an explicit default locale is given, prefer that (by LSR), not the first supported locale
- XLocaleMatcher.Builder: copy supported locales into a List not a Set to preserve input indexes; duplicates are harmless
- match by LSR only, not exact locale match; results consistent with no fastpath, simpler, sometimes a little slower
- internal getBestMatch() returns just the suppIndex
- store the best desired locale & index in an LSR iterator
- make an LSR from Locale without ULocale detour
- adjust the XLocaleMatcher API as proposed; remove unused internal methods; clean up LocalePriorityList docs
12 files changed:
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/LSR.java
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/LikelySubtagsBuilder.java
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/LocaleDistance.java
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/LocaleDistanceBuilder.java
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLikelySubtags.java
icu4j/main/classes/core/src/com/ibm/icu/impl/locale/XLocaleMatcher.java
icu4j/main/classes/core/src/com/ibm/icu/util/LocaleMatcher.java
icu4j/main/classes/core/src/com/ibm/icu/util/LocalePriorityList.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/LocaleMatcherTest.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/XLocaleDistanceTest.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/XLocaleMatcherTest.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/data/localeMatcherTest.txt