Compare commits

...
Author SHA1 Message Date
Yoshito Umaoka 89bae57bd0 ICU-13412 Merging the change #13458 Widen logKnownIssue time range for Chinese calendar limit test (r40660) to maint-60.
X-SVN-Rev: 40662
2017-10-31 15:14:15 +00:00
Yoshito Umaoka 132e98ae52 ICU-13412 Merging the additional fix (spelling correciton) for #12770 host time zone with smylink (r40659) to maint-60.
X-SVN-Rev: 40661
2017-10-31 07:10:00 +00:00
Yoshito Umaoka 5b4d513f19 ICU-13412 Merging ICU4C/ICU4J readme updates (r40655 + r40657) to maint-60.
X-SVN-Rev: 40658
2017-10-30 21:57:49 +00:00
Yoshito Umaoka 6f179fa5cf ICU-13412 Merging the fix for #13454 Persian calendar int overflow (r40654) to maint-60.
X-SVN-Rev: 40656
2017-10-30 17:22:42 +00:00
Yoshito Umaoka 6fdef53820 ICU-13412 Updated ICU4J version strings to 60.1.
X-SVN-Rev: 40653
2017-10-27 05:35:22 +00:00
Yoshito Umaoka 2cbcd3d940 ICU-13412 Merging the fix for #13455 rbbi_cache.cpp compile error on MSVC/Debug (r40644) to maint-60.
X-SVN-Rev: 40652
2017-10-26 23:49:40 +00:00
Yoshito Umaoka 1623af4b25 ICU-13412 Merging the fix for #13466 ICU4C SimpleDateFormat fractional seconds parsing issue with Chakma locale (r40647) to maint-60.
X-SVN-Rev: 40651
2017-10-26 23:45:57 +00:00
Yoshito Umaoka 741f37529e ICU-13412 Merging the fix for #13445 ICU4J TestTimeRoundTrip failure with Persian locale (r40642) to maint-60.
X-SVN-Rev: 40650
2017-10-26 23:42:16 +00:00
Yoshito Umaoka 678b6ed5f7 ICU-13412 Merging #13415 Misc. ICU4C platform support fixes (r40614 + r40624 + r40426 + r40629 + r40631 + r40632 + r40641) to maint-60.
X-SVN-Rev: 40649
2017-10-26 23:34:18 +00:00
Yoshito Umaoka f3ead29e7f ICU-13412 Merging the fix for #13309 DecimalFormat to accept only horizontal spaces (r40646) to maint-60.
X-SVN-Rev: 40648
2017-10-26 23:18:21 +00:00
Yoshito Umaoka 88e15c44b3 ICU-13412 Merging the fix for #13411 number_rounding.cpp compile error with MSVC (r40630 + r40635 + r40636) to maint-60.
X-SVN-Rev: 40639
2017-10-25 21:19:58 +00:00
Yoshito Umaoka bfd9f23af1 ICU-13412 Merging the fix for #13192 C++11: string literal to char* (r40627 + r40628) to maint-60.
X-SVN-Rev: 40638
2017-10-25 20:57:05 +00:00
Yoshito Umaoka 670aa3081f ICU-13141 Merging tzdata2017c updates (r40634) to maint-60.
X-SVN-Rev: 40637
2017-10-25 20:38:04 +00:00
Yoshito Umaoka c4551d7a4a ICU-13412 Merging the fix for #13405 charset converter issue with no data (r40619) to maint-60.
X-SVN-Rev: 40623
2017-10-13 22:57:20 +00:00
Yoshito Umaoka 87ac62044f ICU-13412 Merging the fix for #13418 fix docs typo for toTitleCase() (r40617) to maint-60.
X-SVN-Rev: 40622
2017-10-13 22:41:14 +00:00
Yoshito Umaoka 37814ec330 ICU-13412 Merging the fix for #13419 CLDR 32 data update (r40616) to maint-60.
X-SVN-Rev: 40621
2017-10-13 22:10:11 +00:00
Yoshito Umaoka c8d19ff590 ICU-13412 Merging the fix for #13394 null check with uloc_getKeywordValue (r40615) to maint-60.
X-SVN-Rev: 40620
2017-10-13 21:46:55 +00:00
74 changed files with 480 additions and 216 deletions
+4 -4
View File
@@ -23,7 +23,7 @@
milestone - if the release note is a milestone release
-->
<body class="rc">
<body>
<!-- <body> -->
<p class="only-draft"><b>Note:</b> This is a draft readme.</p>
@@ -32,7 +32,7 @@
International Components for Unicode<br/>
<span class="only-rc">Release Candidate</span>
<span class="only-milestone">(Milestone Release)</span>
<abbr title="International Components for Unicode">ICU</abbr> 60rc ReadMe
<abbr title="International Components for Unicode">ICU</abbr> 60.1 ReadMe
</h1>
<!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
@@ -44,7 +44,7 @@
<p class="note only-rc">This is a release candidate version of ICU4C.
It is not recommended for production use.</p>
<p>Last updated: 2017-Oct-05<br/>
<p>Last updated: 2017-Oct-29<br/>
Copyright &copy; 2016 and later: Unicode, Inc. and others. License &amp; terms of use:
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
Copyright &copy; 1997-2016 International Business Machines Corporation and others.
@@ -234,7 +234,7 @@
<h2><a name="News" href="#News" id="News">What Is New In This Release?</a></h2>
<p>See the <a href="http://site.icu-project.org/download/60">ICU 60 download page</a>
(in progress) for an overview of this release, important changes, new features, bug fixes, known issues,
for an overview of this release, important changes, new features, bug fixes, known issues,
changes to supported platforms and build environments,
and migration issues for existing applications migrating from previous ICU releases.</p>
+1
View File
@@ -1383,6 +1383,7 @@ CjkBreakEngine::divideUpDictionaryRange( UText *inText,
prevCPPos = cpPos;
prevUTextPos = utextPos;
}
(void)prevCPPos; // suppress compiler warnings about unused variable
// inString goes out of scope
// inputMap goes out of scope
+2
View File
@@ -821,6 +821,8 @@ uloc_getDisplayKeywordValue( const char* locale,
/* get the keyword value */
keywordValue[0]=0;
keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status);
if (*status == U_STRING_NOT_TERMINATED_WARNING)
*status = U_BUFFER_OVERFLOW_ERROR;
/*
* if the keyword is equal to currency .. then to get the display name
+2 -1
View File
@@ -636,8 +636,9 @@ LocaleDisplayNamesImpl::localeDisplayName(const Locale& locale,
char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY
const char* key;
while ((key = e->next((int32_t *)0, status)) != NULL) {
value[0] = 0;
locale.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status);
if (U_FAILURE(status)) {
if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
return result;
}
keyDisplayName(key, temp, TRUE);
+4 -4
View File
@@ -676,8 +676,8 @@ extern U_IMPORT char *U_TZNAME[];
#if !UCONFIG_NO_FILE_IO && ((U_PLATFORM_IS_DARWIN_BASED && (U_PLATFORM != U_PF_IPHONE || defined(U_TIMEZONE))) || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD || U_PLATFORM == U_PF_SOLARIS)
/* These platforms are likely to use Olson timezone IDs. */
/* common targets of the symbolic link at TZDEFAULT are:
* "/usr/share/zoneinfo/<olsonID>" default, older Linus distros, macOS to 10.12
* "../usr/share/zoneinfo/<olsonID>" newer Linux distros: Red Hat Enterprise Linux 7, Ubuntu, SuSe Linux
* "/usr/share/zoneinfo/<olsonID>" default, older Linux distros, macOS to 10.12
* "../usr/share/zoneinfo/<olsonID>" newer Linux distros: Red Hat Enterprise Linux 7, Ubuntu 16, SuSe Linux 12
* "/usr/share/lib/zoneinfo/<olsonID>" Solaris
* "../usr/share/lib/zoneinfo/<olsonID>" Solaris
* "/var/db/timezone/zoneinfo/<olsonID>" macOS 10.13
@@ -1235,7 +1235,7 @@ UInitOnce gTimeZoneFilesInitOnce = U_INITONCE_INITIALIZER;
static CharString *gTimeZoneFilesDirectory = NULL;
#if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
static char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */
static const char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */
static bool gCorrectedPOSIXLocaleHeapAllocated = false;
#endif
@@ -1258,7 +1258,7 @@ static UBool U_CALLCONV putil_cleanup(void)
#if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) {
uprv_free(gCorrectedPOSIXLocale);
uprv_free(const_cast<char *>(gCorrectedPOSIXLocale));
gCorrectedPOSIXLocale = NULL;
gCorrectedPOSIXLocaleHeapAllocated = false;
}
+1
View File
@@ -15,6 +15,7 @@
#include "brkeng.h"
#include "cmemory.h"
#include "rbbidata.h"
#include "rbbirb.h"
#include "uassert.h"
#include "uvectr32.h"
+1
View File
@@ -315,6 +315,7 @@ _CompoundTextClose(UConverter *converter) {
}
uprv_free(converter->extraInfo);
converter->extraInfo = NULL;
}
}
+1
View File
@@ -2230,6 +2230,7 @@ ucurr_countCurrencies(const char* locale,
UErrorCode localStatus = U_ZERO_ERROR;
char id[ULOC_FULLNAME_CAPACITY];
uloc_getKeywordValue(locale, "currency", id, ULOC_FULLNAME_CAPACITY, &localStatus);
// get country or country_variant in `id'
/*uint32_t variantType =*/ idForLocale(locale, id, sizeof(id), ec);
+1 -1
View File
@@ -207,7 +207,7 @@
* @internal
*/
#ifndef UPRV_INCOMPLETE_CPP11_SUPPORT
# define UPRV_INCOMPLETE_CPP11_SUPPORT (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390)
# define UPRV_INCOMPLETE_CPP11_SUPPORT (U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390 || U_PLATFORM == U_PF_SOLARIS )
#endif
/**
+1 -1
View File
@@ -2504,5 +2504,5 @@ fi{
one{"{0} {1}"}
other{"{0} {1}"}
}
Version{"2.1.37.1"}
Version{"2.1.37.67"}
}
+1 -1
View File
@@ -1117,7 +1117,7 @@ fi{
Variants%secondary{
FONUPA{"suomalais-ugrilainen tarkekirjoitus"}
}
Version{"2.1.37.1"}
Version{"2.1.37.67"}
characterLabelPattern{
all{"{0} – kaikki"}
category-list{"{0}: {1}"}
+11 -11
View File
@@ -190,7 +190,7 @@ fi{
symbols{
decimal{","}
exponential{"E"}
group{" "}
group{" "}
infinity{"∞"}
list{";"}
minusSign{"−"}
@@ -214,7 +214,7 @@ fi{
minimumGroupingDigits{"1"}
native{"latn"}
}
Version{"2.1.37.1"}
Version{"2.1.37.67"}
calendar{
buddhist{
DateTimePatterns{
@@ -675,9 +675,9 @@ fi{
Ehm{"E h.mm a"}
Ehms{"E h.mm.ss a"}
Gy{"y G"}
GyMMM{"LLLL y G"}
GyMMMEd{"E d.M.y G"}
GyMMMd{"d.M.y G"}
GyMMM{"LLL y G"}
GyMMMEd{"E d. MMM y G"}
GyMMMd{"d. MMM y G"}
H{"H"}
Hm{"H.mm"}
Hms{"H.mm.ss"}
@@ -685,14 +685,14 @@ fi{
Hmv{"H.mm v"}
M{"L"}
MEd{"E d.M."}
MMM{"LLLL"}
MMMEd{"ccc d.M."}
MMM{"LLL"}
MMMEd{"ccc d. MMM"}
MMMMW{
one{"LLLL'n' W. 'viikko'"}
other{"LLLL'n' W. 'viikko'"}
}
MMMMd{"d. MMMM"}
MMMd{"d.M."}
MMMd{"d. MMM"}
Md{"d.M."}
d{"d"}
h{"h a"}
@@ -705,11 +705,11 @@ fi{
yM{"L.y"}
yMEd{"E d.M.y"}
yMM{"M.y"}
yMMM{"M.y"}
yMMMEd{"E d.M.y"}
yMMM{"LLL y"}
yMMMEd{"E d. MMM y"}
yMMMM{"LLLL y"}
yMMMMccccd{"cccc d. MMMM y"}
yMMMd{"d.M.y"}
yMMMd{"d. MMM y"}
yMd{"d.M.y"}
yQQQ{"QQQ y"}
yQQQQ{"QQQQ y"}
+17 -2
View File
@@ -912,6 +912,11 @@ metaZones:table(nofallback){
{
"Africa_Eastern",
"2000-01-15 10:00",
"2017-10-31 21:00",
}
{
"Africa_Central",
"2017-10-31 21:00",
"9999-12-31 23:59",
}
}
@@ -1078,11 +1083,16 @@ metaZones:table(nofallback){
{
"Africa_Central",
"1990-03-20 22:00",
"1994-04-02 22:00",
"1994-03-20 22:00",
}
{
"Africa_Western",
"1994-04-02 22:00",
"1994-03-20 22:00",
"2017-09-03 01:00",
}
{
"Africa_Central",
"2017-09-03 01:00",
"9999-12-31 23:59",
}
}
@@ -1637,6 +1647,11 @@ metaZones:table(nofallback){
{
"Atlantic",
"2015-11-01 06:00",
"2018-03-11 07:00",
}
{
"America_Eastern",
"2018-03-11 07:00",
"9999-12-31 23:59",
}
}
+55 -58
View File
@@ -3,17 +3,17 @@
// License & terms of use: http://www.unicode.org/copyright.html#License
//---------------------------------------------------------
// Build tool: tz2icu
// Build date: Mon Mar 20 17:49:58 2017
// Build date: Tue Oct 24 17:35:27 2017
// tz database: ftp://ftp.iana.org/tz/
// tz version: 2017b
// ICU version: 59.1
// tz version: 2017c
// ICU version: 60.1
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<
//---------------------------------------------------------
zoneinfo64:table(nofallback) {
TZVersion { "2017b" }
TZVersion { "2017c" }
Zones:array {
/* ACT */ :int { 354 } //Z#0
/* AET */ :int { 366 } //Z#1
@@ -100,13 +100,16 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "010203020302" }
links:intvector { 30, 44, 45 }
} //Z#30
/* Africa/Juba */ :int { 33 } //Z#31
/* Africa/Juba */ :table {
trans:intvector { -1230775588, 10360800, 24786000, 41810400, 56322000, 73432800, 87944400, 104882400, 119480400, 136332000, 151016400, 167781600, 182552400, 199231200, 214174800, 230680800, 245710800, 262735200, 277246800, 294184800, 308782800, 325634400, 340405200, 357084000, 371941200, 388533600, 403477200, 419983200, 435013200, 452037600, 466635600, 483487200, 498171600, 947930400 }
typeOffsets:intvector { 7588, 0, 7200, 0, 7200, 3600, 10800, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020103" }
} //Z#31
/* Africa/Kampala */ :int { 48 } //Z#32
/* Africa/Khartoum */ :table {
trans:intvector { -1230775808, 10360800, 24786000, 41810400, 56322000, 73432800, 87944400, 104882400, 119480400, 136332000, 151016400, 167781600, 182552400, 199231200, 214174800, 230680800, 245710800, 262735200, 277246800, 294184800, 308782800, 325634400, 340405200, 357084000, 371941200, 388533600, 403477200, 419983200, 435013200, 452037600, 466635600, 483487200, 498171600, 947930400 }
trans:intvector { -1230775808, 10360800, 24786000, 41810400, 56322000, 73432800, 87944400, 104882400, 119480400, 136332000, 151016400, 167781600, 182552400, 199231200, 214174800, 230680800, 245710800, 262735200, 277246800, 294184800, 308782800, 325634400, 340405200, 357084000, 371941200, 388533600, 403477200, 419983200, 435013200, 452037600, 466635600, 483487200, 498171600, 947930400, 1509483600 }
typeOffsets:intvector { 7808, 0, 7200, 0, 7200, 3600, 10800, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020103" }
links:intvector { 31, 33 }
typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010301" }
} //Z#33
/* Africa/Kigali */ :int { 43 } //Z#34
/* Africa/Kinshasa */ :int { 36 } //Z#35
@@ -167,17 +170,14 @@ zoneinfo64:table(nofallback) {
} //Z#57
/* Africa/Windhoek */ :table {
transPre32:intvector { -1, 1836796792 }
trans:intvector { -2109288600, -860976000, -845254800, 765324000, 778640400, 796780800, 810090000 }
trans:intvector { -2109288600, -860976000, -845254800, 764200800, 778640400, 796780800, 810090000, 828835200, 841539600, 860284800, 873594000, 891734400, 905043600, 923184000, 936493200, 954633600, 967942800, 986083200, 999392400, 1018137600, 1030842000, 1049587200, 1062896400, 1081036800, 1094346000, 1112486400, 1125795600, 1143936000, 1157245200, 1175385600, 1188694800, 1207440000, 1220749200, 1238889600, 1252198800, 1270339200, 1283648400, 1301788800, 1315098000, 1333238400, 1346547600, 1365292800, 1377997200, 1396742400, 1410051600, 1428192000, 1441501200, 1459641600, 1472950800, 1491091200, 1504400400 }
typeOffsets:intvector { 4104, 0, 3600, 0, 3600, 3600, 5400, 0, 7200, 0, 7200, 3600 }
typeMap:bin { "0304050401020102" }
finalRule { "Namibia" }
finalRaw:int { 3600 }
finalYear:int { 1996 }
typeMap:bin { "03040504010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020104" }
} //Z#58
/* America/Adak */ :table {
transPre32:intvector { -1, 1069611295, -1, 2106022494 }
transPre32:intvector { -1, 1069743569, -1, 2106022494 }
trans:intvector { -880196400, -765374400, -21466800, -5745600, 9982800, 25704000, 41432400, 57758400, 73486800, 89208000, 104936400, 120657600, 126709200, 152107200, 162392400, 183556800, 199285200, 215611200, 230734800, 247060800, 262789200, 278510400, 294238800, 309960000, 325688400, 341409600, 357138000, 372859200, 388587600, 404913600, 420037200, 436363200, 452088000, 467809200, 483537600, 499258800, 514987200, 530708400, 544622400, 562158000, 576072000, 594212400, 607521600, 625662000, 638971200, 657111600, 671025600, 688561200, 702475200, 720010800, 733924800, 752065200, 765374400, 783514800, 796824000, 814964400, 828878400, 846414000, 860328000, 877863600, 891777600, 909313200, 923227200, 941367600, 954676800, 972817200, 986126400, 1004266800, 1018180800, 1035716400, 1049630400, 1067166000, 1081080000, 1099220400, 1112529600, 1130670000, 1143979200, 1162119600, 1173614400, 1194174000 }
typeOffsets:intvector { 44001, 0, -42398, 0, -39600, 0, -39600, 3600, -36000, 0, -36000, 3600 }
typeOffsets:intvector { 44002, 0, -42398, 0, -39600, 0, -39600, 3600, -36000, 0, -36000, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "US" }
finalRaw:int { -36000 }
@@ -185,7 +185,7 @@ zoneinfo64:table(nofallback) {
links:intvector { 59, 80, 615 }
} //Z#59
/* America/Anchorage */ :table {
transPre32:intvector { -1, 1069604872, -1, 2106016072 }
transPre32:intvector { -1, 1069743569, -1, 2106016072 }
trans:intvector { -880200000, -765378000, -21470400, -5749200, 9979200, 25700400, 41428800, 57754800, 73483200, 89204400, 104932800, 120654000, 126705600, 152103600, 162388800, 183553200, 199281600, 215607600, 230731200, 247057200, 262785600, 278506800, 294235200, 309956400, 325684800, 341406000, 357134400, 372855600, 388584000, 404910000, 420033600, 436359600, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 50424, 0, -36000, 0, -36000, 3600, -35976, 0, -32400, 0, -32400, 3600 }
typeMap:bin { "03010201020102010201020102010201020102010201020102010201020102010204050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
@@ -461,9 +461,9 @@ zoneinfo64:table(nofallback) {
links:intvector { 109, 204, 543, 623 }
} //Z#109
/* America/Detroit */ :table {
trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, -80499600, -68666400, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
trans:intvector { -2051202469, -1724083200, -880218000, -765396000, -684349200, -671047200, 104914800, 120636000, 126687600, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 }
typeOffsets:intvector { -19931, 0, -21600, 0, -18000, 0, -18000, 3600 }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2008 }
@@ -529,9 +529,12 @@ zoneinfo64:table(nofallback) {
} //Z#121
/* America/Grand_Turk */ :table {
transPre32:intvector { -1, 1770462768 }
trans:intvector { -1827687169, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000, 1205046000, 1225605600, 1236495600, 1257055200, 1268550000, 1289109600, 1299999600, 1320559200, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600 }
trans:intvector { -1827687169, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000, 1205046000, 1225605600, 1236495600, 1257055200, 1268550000, 1289109600, 1299999600, 1320559200, 1331449200, 1352008800, 1362898800, 1383458400, 1394348400, 1414908000, 1425798000, 1446357600, 1520751600, 1541311200 }
typeOffsets:intvector { -17072, 0, -18431, 0, -18000, 0, -18000, 3600, -14400, 0 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020304" }
typeMap:bin { "010203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203040302" }
finalRule { "US" }
finalRaw:int { -18000 }
finalYear:int { 2019 }
} //Z#122
/* America/Grenada */ :int { 186 } //Z#123
/* America/Guadeloupe */ :int { 186 } //Z#124
@@ -674,7 +677,7 @@ zoneinfo64:table(nofallback) {
} //Z#142
/* America/Jujuy */ :int { 68 } //Z#143
/* America/Juneau */ :table {
transPre32:intvector { -1, 1069601157, -1, 2106012357 }
transPre32:intvector { -1, 1069743569, -1, 2106012357 }
trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341402400, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 54139, 0, -32400, 0, -32400, 3600, -32261, 0, -28800, 0, -28800, 3600 }
typeMap:bin { "03040504050405040504050405040504050405040504050405040204050405040501020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" }
@@ -785,7 +788,7 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2003 }
} //Z#163
/* America/Metlakatla */ :table {
transPre32:intvector { -1, 1069600474, -1, 2106011674 }
transPre32:intvector { -1, 1069743569, -1, 2106011674 }
trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 1446372000, 1457866800, 1478426400 }
typeOffsets:intvector { 54822, 0, -32400, 0, -32400, 3600, -31578, 0, -28800, 0, -28800, 3600 }
typeMap:bin { "03040504050405040504050405040504050405040504050405040504050405040504010201" }
@@ -862,9 +865,9 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
} //Z#174
/* America/Nome */ :table {
transPre32:intvector { -1, 1069608595, -1, 2106019794 }
transPre32:intvector { -1, 1069743569, -1, 2106019794 }
trans:intvector { -880196400, -765374400, -21466800, -5745600, 9982800, 25704000, 41432400, 57758400, 73486800, 89208000, 104936400, 120657600, 126709200, 152107200, 162392400, 183556800, 199285200, 215611200, 230734800, 247060800, 262789200, 278510400, 294238800, 309960000, 325688400, 341409600, 357138000, 372859200, 388587600, 404913600, 420037200, 436363200, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 46701, 0, -39698, 0, -39600, 0, -39600, 3600, -32400, 0, -32400, 3600 }
typeOffsets:intvector { 46702, 0, -39698, 0, -39600, 0, -39600, 3600, -32400, 0, -32400, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020304050405040504050405040504050405040504050405040504050405040504050405040504050405040504050405040504" }
finalRule { "US" }
finalRaw:int { -32400 }
@@ -1056,7 +1059,7 @@ zoneinfo64:table(nofallback) {
} //Z#203
/* America/Shiprock */ :int { 109 } //Z#204
/* America/Sitka */ :table {
transPre32:intvector { -1, 1069601369, -1, 2106012569 }
transPre32:intvector { -1, 1069743569, -1, 2106012569 }
trans:intvector { -880207200, -765385200, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 152096400, 162381600, 183546000, 199274400, 215600400, 230724000, 247050000, 262778400, 278499600, 294228000, 309949200, 325677600, 341398800, 357127200, 372848400, 388576800, 404902800, 420026400, 436352400, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 53927, 0, -32473, 0, -32400, 0, -32400, 3600, -28800, 0, -28800, 3600 }
typeMap:bin { "01040504050405040504050405040504050405040504050405040504050405040502030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
@@ -1157,7 +1160,7 @@ zoneinfo64:table(nofallback) {
links:intvector { 222, 384 }
} //Z#222
/* America/Yakutat */ :table {
transPre32:intvector { -1, 1069602431, -1, 2106013631 }
transPre32:intvector { -1, 1069743569, -1, 2106013631 }
trans:intvector { -880203600, -765381600, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 152100000, 162385200, 183549600, 199278000, 215604000, 230727600, 247053600, 262782000, 278503200, 294231600, 309952800, 325681200, 341402400, 357130800, 372852000, 388580400, 404906400, 420030000, 436356000, 452084400, 467805600, 483534000, 499255200, 514983600, 530704800, 544618800, 562154400, 576068400, 594208800, 607518000, 625658400, 638967600, 657108000, 671022000, 688557600, 702471600, 720007200, 733921200, 752061600, 765370800, 783511200, 796820400, 814960800, 828874800, 846410400, 860324400, 877860000, 891774000, 909309600, 923223600, 941364000, 954673200, 972813600, 986122800, 1004263200, 1018177200, 1035712800, 1049626800, 1067162400, 1081076400, 1099216800, 1112526000, 1130666400, 1143975600, 1162116000, 1173610800, 1194170400 }
typeOffsets:intvector { 52865, 0, -33535, 0, -32400, 0, -32400, 3600 }
typeMap:bin { "01020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302030203020302" }
@@ -1365,9 +1368,12 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "010304030403040304030403040304030403040304030201" }
} //Z#266
/* Asia/Famagusta */ :table {
trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000 }
trans:intvector { -1518920148, 166572000, 182293200, 200959200, 213829200, 228866400, 243982800, 260316000, 276123600, 291765600, 307486800, 323820000, 338936400, 354664800, 370386000, 386114400, 401835600, 417564000, 433285200, 449013600, 465339600, 481068000, 496789200, 512517600, 528238800, 543967200, 559688400, 575416800, 591138000, 606866400, 622587600, 638316000, 654642000, 670370400, 686091600, 701820000, 717541200, 733269600, 748990800, 764719200, 780440400, 796168800, 811890000, 828223200, 843944400, 859672800, 875394000, 891122400, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1473282000, 1509238800, 1521939600, 1540688400 }
typeOffsets:intvector { 8148, 0, 7200, 0, 7200, 3600, 10800, 0 }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203" }
typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010203010201" }
finalRule { "EUAsia" }
finalRaw:int { 7200 }
finalYear:int { 2019 }
} //Z#267
/* Asia/Gaza */ :table {
transPre32:intvector { -1, 2109557424 }
@@ -1462,10 +1468,10 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403050605060506050605060506050605070503" }
} //Z#285
/* Asia/Kolkata */ :table {
transPre32:intvector { -1, 1454805288 }
trans:intvector { -891582800, -872058600, -862637400, -764145000 }
typeOffsets:intvector { 21208, 0, 19800, 0, 19800, 3600, 21200, 0, 23400, 0 }
typeMap:bin { "0304010201" }
transPre32:intvector { -1, 649730088, -1, 1139272496 }
trans:intvector { -2019705670, -891581400, -872058600, -862637400, -764145000 }
typeOffsets:intvector { 21208, 0, 19270, 0, 19800, 0, 19800, 3600, 21200, 0 }
typeMap:bin { "04010203020302" }
links:intvector { 255, 286, 512 }
} //Z#286
/* Asia/Krasnoyarsk */ :table {
@@ -1680,8 +1686,8 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "0103040304030403040304030403040304030403040302010304030403040304030403040304030403040304030403040304030403040304030403040304030503" }
} //Z#332
/* Asia/Yangon */ :table {
trans:intvector { -1577946280, -873268200, -778410000 }
typeOffsets:intvector { 23080, 0, 23400, 0, 32400, 0 }
trans:intvector { -1577946287, -873268200, -778410000 }
typeOffsets:intvector { 23087, 0, 23400, 0, 32400, 0 }
typeMap:bin { "010201" }
links:intvector { 307, 333 }
} //Z#333
@@ -2134,7 +2140,7 @@ zoneinfo64:table(nofallback) {
} //Z#451
/* Europe/Dublin */ :table {
transPre32:intvector { -1, 1473317596 }
trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733359600, -719445600, -699490800, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
trans:intvector { -1691962479, -1680471279, -1664143200, -1650146400, -1633903200, -1617487200, -1601848800, -1586037600, -1570399200, -1552168800, -1538344800, -1522533600, -1507500000, -1490565600, -1473631200, -1460930400, -1442786400, -1428876000, -1410732000, -1396216800, -1379282400, -1364767200, -1348437600, -1333317600, -1315778400, -1301263200, -1284328800, -1269813600, -1253484000, -1238364000, -1221429600, -1206914400, -1189980000, -1175464800, -1159135200, -1143410400, -1126476000, -1111960800, -1095631200, -1080511200, -1063576800, -1049061600, -1032127200, -1017612000, -1001282400, -986162400, -969228000, -950479200, -942012000, -733356000, -719445600, -699487200, -684972000, -668037600, -654732000, -636588000, -622072800, -605743200, -590623200, -574293600, -558568800, -542239200, -527119200, -512604000, -496274400, -481154400, -464220000, -449704800, -432165600, -417650400, -401320800, -386200800, -369266400, -354751200, -337816800, -323301600, -306972000, -291852000, -276732000, -257983200, -245282400, -226533600, -213228000, -195084000, -182383200, -163634400, -150933600, -132184800, -119484000, -100735200, -88034400, -68680800, -59004000, -37242000, 57722400, 69818400, 89172000, 101268000, 120621600, 132717600, 152071200, 164167200, 183520800, 196221600, 214970400, 227671200, 246420000, 259120800, 278474400, 290570400, 309924000, 322020000, 341373600, 354675600, 372819600, 386125200, 404269200, 417574800, 435718800, 449024400, 467773200, 481078800, 499222800, 512528400, 530672400, 543978000, 562122000, 575427600, 593571600, 606877200, 625626000, 638326800, 657075600, 670381200, 688525200, 701830800, 719974800, 733280400, 751424400, 764730000, 782874000, 796179600, 814323600, 828234000, 846378000 }
typeOffsets:intvector { -1500, 0, -1521, 0, -1521, 3600, 0, 0, 0, 3600, 3600, 0 }
typeMap:bin { "0102030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030405030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403" }
finalRule { "EU" }
@@ -2537,7 +2543,7 @@ zoneinfo64:table(nofallback) {
finalYear:int { 2008 }
} //Z#549
/* Pacific/Apia */ :table {
transPre32:intvector { -1, 1439229312 }
transPre32:intvector { -1, 1849542912 }
trans:intvector { -1861878784, -631110600, 1285498800, 1301752800, 1316872800, 1325239200, 1333202400, 1348927200 }
typeOffsets:intvector { 45184, 0, -41400, 0, -41216, 0, -39600, 0, -39600, 3600, 46800, 0, 46800, 3600 }
typeMap:bin { "020103040304060506" }
@@ -2701,7 +2707,7 @@ zoneinfo64:table(nofallback) {
typeMap:bin { "01020102010201" }
} //Z#576
/* Pacific/Pago_Pago */ :table {
transPre32:intvector { -1, 1439229064 }
transPre32:intvector { -1, 1849542664 }
trans:intvector { -1861879032 }
typeOffsets:intvector { 45432, 0, -40968, 0, -39600, 0 }
typeMap:bin { "0102" }
@@ -2750,12 +2756,9 @@ zoneinfo64:table(nofallback) {
} //Z#587
/* Pacific/Tongatapu */ :table {
transPre32:intvector { -1, 2117470136 }
trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800, 1509800400 }
trans:intvector { -915193200, 939214800, 953384400, 973342800, 980596800, 1004792400, 1012046400, 1478350800, 1484398800 }
typeOffsets:intvector { 44360, 0, 44400, 0, 46800, 0, 46800, 3600 }
typeMap:bin { "0102030203020302030203" }
finalRule { "Tonga" }
finalRaw:int { 46800 }
finalYear:int { 2018 }
typeMap:bin { "01020302030203020302" }
} //Z#588
/* Pacific/Truk */ :int { 554 } //Z#589
/* Pacific/Wake */ :table {
@@ -3104,7 +3107,7 @@ zoneinfo64:table(nofallback) {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 3600
} //_#11
Fiji:intvector {
10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600
10, 1, -1, 7200, 0, 0, 14, -1, 10800, 0, 3600
} //_#12
Haiti:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
@@ -3133,39 +3136,33 @@ zoneinfo64:table(nofallback) {
NZ:intvector {
8, -30, -1, 7200, 1, 3, 1, -1, 7200, 1, 3600
} //_#21
Namibia:intvector {
8, 1, -1, 7200, 0, 3, 1, -1, 7200, 0, 3600
} //_#22
Palestine:intvector {
2, -31, -7, 3600, 0, 9, -31, -7, 3600, 0, 3600
} //_#23
} //_#22
Para:intvector {
9, 1, -1, 0, 0, 2, 22, -1, 0, 0, 3600
} //_#24
} //_#23
Syria:intvector {
2, -31, -6, 0, 0, 9, -31, -6, 0, 0, 3600
} //_#25
} //_#24
SystemV:intvector {
3, -30, -1, 7200, 0, 9, -31, -1, 7200, 0, 3600
} //_#26
} //_#25
Thule:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
} //_#27
Tonga:intvector {
10, 1, -1, 7200, 0, 0, 15, -1, 10800, 0, 3600
} //_#28
} //_#26
Troll:intvector {
2, -31, -1, 3600, 2, 9, -31, -1, 3600, 2, 7200
} //_#29
} //_#27
US:intvector {
2, 8, -1, 7200, 0, 10, 1, -1, 7200, 0, 3600
} //_#30
} //_#28
WS:intvector {
8, -30, -1, 10800, 0, 3, 1, -1, 14400, 0, 3600
} //_#31
} //_#29
Zion:intvector {
2, 23, -6, 7200, 0, 9, -31, -1, 7200, 0, 3600
} //_#32
} //_#30
}
Regions:array {
"AU", //Z#0 ACT
+1 -1
View File
@@ -311,5 +311,5 @@ fi{
MK{"EJT Makedonia"}
TL{"Timor-Leste"}
}
Version{"2.1.37.1"}
Version{"2.1.37.67"}
}
+1 -1
View File
@@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi{
Version{"2.1.37.1"}
Version{"2.1.37.67"}
durationUnits{
hm{"h.mm"}
hms{"h.mm.ss"}
+1 -1
View File
@@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
fi{
Version{"2.1.37.1"}
Version{"2.1.37.67"}
zoneStrings{
"Africa:Abidjan"{
ec{"Abidjan"}
+5
View File
@@ -27,6 +27,11 @@ int32_t ClockMath::floorDivide(int32_t numerator, int32_t denominator) {
numerator / denominator : ((numerator + 1) / denominator) - 1;
}
int64_t ClockMath::floorDivide(int64_t numerator, int64_t denominator) {
return (numerator >= 0) ?
numerator / denominator : ((numerator + 1) / denominator) - 1;
}
int32_t ClockMath::floorDivide(double numerator, int32_t denominator,
int32_t& remainder) {
double quotient;
+11
View File
@@ -40,6 +40,17 @@ class ClockMath {
*/
static int32_t floorDivide(int32_t numerator, int32_t denominator);
/**
* Divide two integers, returning the floor of the quotient.
* Unlike the built-in division, this is mathematically
* well-behaved. E.g., <code>-1/4</code> => 0 but
* <code>floorDivide(-1,4)</code> => -1.
* @param numerator the numerator
* @param denominator a divisor which must be != 0
* @return the floor of the quotient
*/
static int64_t floorDivide(int64_t numerator, int64_t denominator);
/**
* Divide two numbers, returning the floor of the quotient.
* Unlike the built-in division, this is mathematically
+2 -1
View File
@@ -8,8 +8,9 @@
#include "number_affixutils.h"
#include "unicode/utf16.h"
using namespace icu::number::impl;
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
int32_t AffixUtils::estimateLength(const CharSequence &patternString, UErrorCode &status) {
AffixPatternState state = STATE_BASE;
+2
View File
@@ -49,6 +49,8 @@ struct AffixTag {
// Exported as U_I18N_API because it is a base class for other exported types
class U_I18N_API SymbolProvider {
public:
virtual ~SymbolProvider() = default;
// TODO: Could this be more efficient if it returned by reference?
virtual UnicodeString getSymbol(AffixPatternType type) const = 0;
};
+3 -1
View File
@@ -13,8 +13,9 @@
#include "charstr.h"
#include "uresimp.h"
using namespace icu::number::impl;
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
@@ -316,6 +317,7 @@ void CompactHandler::processQuantity(DecimalQuantity &quantity, MicroProps &micr
}
// FIXME: Deal with numDigits == 0 (Awaiting a test case)
(void)numDigits;
// We already performed rounding. Do not perform it again.
micros.rounding = Rounder::constructPassThrough();
+2 -1
View File
@@ -16,8 +16,9 @@
#include "number_roundingutils.h"
#include "unicode/plurrule.h"
using namespace icu::number::impl;
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
@@ -7,6 +7,8 @@
#include "number_decimfmtprops.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
DecimalFormatProperties::DecimalFormatProperties() {
+3 -2
View File
@@ -16,8 +16,6 @@
#include "number_types.h"
U_NAMESPACE_BEGIN
namespace number {
namespace impl {
// Export an explicit template instantiation of the LocalPointer that is used as a
// data member of CurrencyPluralInfoWrapper.
@@ -29,6 +27,9 @@ template class U_I18N_API LocalPointerBase<CurrencyPluralInfo>;
template class U_I18N_API LocalPointer<CurrencyPluralInfo>;
#endif
namespace number {
namespace impl {
// TODO: Figure out a nicer way to deal with CurrencyPluralInfo.
// Exported as U_I18N_API because it is a public member field of exported DecimalFormatProperties
struct U_I18N_API CurrencyPluralInfoWrapper {
+31 -11
View File
@@ -247,33 +247,33 @@ LocalizedNumberFormatter::~LocalizedNumberFormatter() {
}
FormattedNumber LocalizedNumberFormatter::formatInt(int64_t value, UErrorCode &status) const {
if (U_FAILURE(status)) { return FormattedNumber(); }
if (U_FAILURE(status)) { return FormattedNumber(U_ILLEGAL_ARGUMENT_ERROR); }
auto results = new NumberFormatterResults();
if (results == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return FormattedNumber();
return FormattedNumber(status);
}
results->quantity.setToLong(value);
return formatImpl(results, status);
}
FormattedNumber LocalizedNumberFormatter::formatDouble(double value, UErrorCode &status) const {
if (U_FAILURE(status)) { return FormattedNumber(); }
if (U_FAILURE(status)) { return FormattedNumber(U_ILLEGAL_ARGUMENT_ERROR); }
auto results = new NumberFormatterResults();
if (results == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return FormattedNumber();
return FormattedNumber(status);
}
results->quantity.setToDouble(value);
return formatImpl(results, status);
}
FormattedNumber LocalizedNumberFormatter::formatDecimal(StringPiece value, UErrorCode &status) const {
if (U_FAILURE(status)) { return FormattedNumber(); }
if (U_FAILURE(status)) { return FormattedNumber(U_ILLEGAL_ARGUMENT_ERROR); }
auto results = new NumberFormatterResults();
if (results == nullptr) {
status = U_MEMORY_ALLOCATION_ERROR;
return FormattedNumber();
return FormattedNumber(status);
}
results->quantity.setToDecNumber(value);
return formatImpl(results, status);
@@ -317,28 +317,48 @@ LocalizedNumberFormatter::formatImpl(impl::NumberFormatterResults *results, UErr
NumberFormatterImpl::applyStatic(fMacros, results->quantity, results->string, status);
}
return FormattedNumber(results);
// Do not save the results object if we encountered a failure.
if (U_SUCCESS(status)) {
return FormattedNumber(results);
} else {
delete results;
return FormattedNumber(status);
}
}
UnicodeString FormattedNumber::toString() const {
if (fResults == nullptr) { return {}; }
if (fResults == nullptr) {
// TODO: http://bugs.icu-project.org/trac/ticket/13437
return {};
}
return fResults->string.toUnicodeString();
}
Appendable &FormattedNumber::appendTo(Appendable &appendable) {
if (fResults == nullptr) { return appendable; }
if (fResults == nullptr) {
// TODO: http://bugs.icu-project.org/trac/ticket/13437
return appendable;
}
appendable.appendString(fResults->string.chars(), fResults->string.length());
return appendable;
}
void FormattedNumber::populateFieldPosition(FieldPosition &fieldPosition, UErrorCode &status) {
if (fResults == nullptr) { return; }
if (U_FAILURE(status)) { return; }
if (fResults == nullptr) {
status = fErrorCode;
return;
}
fResults->string.populateFieldPosition(fieldPosition, 0, status);
}
void
FormattedNumber::populateFieldPositionIterator(FieldPositionIterator &iterator, UErrorCode &status) {
if (fResults == nullptr) { return; }
if (U_FAILURE(status)) { return; }
if (fResults == nullptr) {
status = fErrorCode;
return;
}
fResults->string.populateFieldPositionIterator(iterator, status);
}
+1
View File
@@ -19,6 +19,7 @@
#include "number_compact.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
+2
View File
@@ -8,7 +8,9 @@
#include "unicode/numberformatter.h"
#include "number_patternstring.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
Grouper Grouper::defaults() {
return {-2, -2, false};
+3 -2
View File
@@ -9,6 +9,7 @@
#include "number_types.h"
#include "number_decimalquantity.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
@@ -21,7 +22,7 @@ IntegerWidth IntegerWidth::zeroFillTo(int32_t minInt) {
if (minInt >= 0 && minInt <= kMaxIntFracSig) {
return {static_cast<int8_t>(minInt), -1};
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -30,7 +31,7 @@ IntegerWidth IntegerWidth::truncateAt(int32_t maxInt) {
if (maxInt >= 0 && maxInt <= kMaxIntFracSig) {
return {fUnion.minMaxInt.fMinInt, static_cast<int8_t>(maxInt)};
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
+1
View File
@@ -14,6 +14,7 @@
#include "cstring.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
+1
View File
@@ -11,6 +11,7 @@
#include "number_modifiers.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
+2 -1
View File
@@ -8,6 +8,7 @@
#include "unicode/numberformatter.h"
#include "number_types.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
@@ -59,7 +60,7 @@ ScientificNotation::withMinExponentDigits(int32_t minExponentDigits) const {
NotationUnion union_ = {settings};
return {NTN_SCIENTIFIC, union_};
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
+3 -1
View File
@@ -9,6 +9,8 @@
#include "number_types.h"
#include "number_stringbuilder.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
@@ -41,7 +43,7 @@ Padder Padder::codePoints(UChar32 cp, int32_t targetWidth, UNumberFormatPadPosit
if (targetWidth >= 0) {
return {cp, targetWidth, position};
} else {
return {U_NUMBER_PADDING_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_PADDING_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -12,6 +12,7 @@
#include "unicode/unistr.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
MutablePatternModifier::MutablePatternModifier(bool isStrong) : fStrong(isStrong) {}
+8 -7
View File
@@ -15,11 +15,6 @@
#include "number_utils.h"
U_NAMESPACE_BEGIN
namespace number {
namespace impl {
// Forward declaration
class MutablePatternModifier;
// Export an explicit template instantiation of the LocalPointer that is used as a
// data member of ParameterizedModifier.
@@ -27,10 +22,16 @@ class MutablePatternModifier;
#if defined (_MSC_VER)
// Ignore warning 4661 as LocalPointerBase does not use operator== or operator!=
#pragma warning(suppress: 4661)
template class U_I18N_API LocalPointerBase<ParameterizedModifier>;
template class U_I18N_API LocalPointer<ParameterizedModifier>;
template class U_I18N_API LocalPointerBase<number::impl::ParameterizedModifier>;
template class U_I18N_API LocalPointer<number::impl::ParameterizedModifier>;
#endif
namespace number {
namespace impl {
// Forward declaration
class MutablePatternModifier;
// Exported as U_I18N_API because it is needed for the unit test PatternModifierTest
class U_I18N_API ImmutablePatternModifier : public MicroPropsGenerator, public UMemory {
public:
@@ -11,6 +11,7 @@
#include "number_utils.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
void PatternParser::parseToPatternInfo(const UnicodeString& patternString, ParsedPatternInfo& patternInfo, UErrorCode &status) {
+13 -12
View File
@@ -10,6 +10,7 @@
#include "number_types.h"
#include "number_decimalquantity.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
@@ -57,7 +58,7 @@ FractionRounder Rounder::fixedFraction(int32_t minMaxFractionPlaces) {
if (minMaxFractionPlaces >= 0 && minMaxFractionPlaces <= kMaxIntFracSig) {
return constructFraction(minMaxFractionPlaces, minMaxFractionPlaces);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -65,7 +66,7 @@ FractionRounder Rounder::minFraction(int32_t minFractionPlaces) {
if (minFractionPlaces >= 0 && minFractionPlaces <= kMaxIntFracSig) {
return constructFraction(minFractionPlaces, -1);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -73,7 +74,7 @@ FractionRounder Rounder::maxFraction(int32_t maxFractionPlaces) {
if (maxFractionPlaces >= 0 && maxFractionPlaces <= kMaxIntFracSig) {
return constructFraction(0, maxFractionPlaces);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -82,7 +83,7 @@ FractionRounder Rounder::minMaxFraction(int32_t minFractionPlaces, int32_t maxFr
minFractionPlaces <= maxFractionPlaces) {
return constructFraction(minFractionPlaces, maxFractionPlaces);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -90,7 +91,7 @@ Rounder Rounder::fixedDigits(int32_t minMaxSignificantDigits) {
if (minMaxSignificantDigits >= 0 && minMaxSignificantDigits <= kMaxIntFracSig) {
return constructSignificant(minMaxSignificantDigits, minMaxSignificantDigits);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -98,7 +99,7 @@ Rounder Rounder::minDigits(int32_t minSignificantDigits) {
if (minSignificantDigits >= 0 && minSignificantDigits <= kMaxIntFracSig) {
return constructSignificant(minSignificantDigits, -1);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -106,7 +107,7 @@ Rounder Rounder::maxDigits(int32_t maxSignificantDigits) {
if (maxSignificantDigits >= 0 && maxSignificantDigits <= kMaxIntFracSig) {
return constructSignificant(0, maxSignificantDigits);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -115,7 +116,7 @@ Rounder Rounder::minMaxDigits(int32_t minSignificantDigits, int32_t maxSignifica
minSignificantDigits <= maxSignificantDigits) {
return constructSignificant(minSignificantDigits, maxSignificantDigits);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -123,7 +124,7 @@ IncrementRounder Rounder::increment(double roundingIncrement) {
if (roundingIncrement > 0.0) {
return constructIncrement(roundingIncrement, 0);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -141,7 +142,7 @@ Rounder FractionRounder::withMinDigits(int32_t minSignificantDigits) const {
if (minSignificantDigits >= 0 && minSignificantDigits <= kMaxIntFracSig) {
return constructFractionSignificant(*this, minSignificantDigits, -1);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -150,7 +151,7 @@ Rounder FractionRounder::withMaxDigits(int32_t maxSignificantDigits) const {
if (maxSignificantDigits >= 0 && maxSignificantDigits <= kMaxIntFracSig) {
return constructFractionSignificant(*this, -1, maxSignificantDigits);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
@@ -184,7 +185,7 @@ Rounder IncrementRounder::withMinFraction(int32_t minFrac) const {
if (minFrac >= 0 && minFrac <= kMaxIntFracSig) {
return constructIncrement(fUnion.increment.fIncrement, minFrac);
} else {
return {U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR};
return {U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR};
}
}
+2
View File
@@ -11,6 +11,8 @@
#include "number_stringbuilder.h"
#include "unicode/unum.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
// NOTE: The object lifecycle of ScientificModifier and ScientificHandler differ greatly in Java and C++.
@@ -10,6 +10,7 @@
#include "uvectr32.h"
using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
namespace {
+2 -2
View File
@@ -43,8 +43,8 @@ static constexpr char16_t kFallbackPaddingString[] = u" ";
static constexpr char16_t kDefaultCurrency[] = u"XXX";
// FIXME: New error codes:
static constexpr UErrorCode U_NUMBER_DIGIT_WIDTH_OUT_OF_RANGE_ERROR = U_ILLEGAL_ARGUMENT_ERROR;
static constexpr UErrorCode U_NUMBER_PADDING_WIDTH_OUT_OF_RANGE_ERROR = U_ILLEGAL_ARGUMENT_ERROR;
static constexpr UErrorCode U_NUMBER_DIGIT_WIDTH_OUTOFBOUNDS_ERROR = U_ILLEGAL_ARGUMENT_ERROR;
static constexpr UErrorCode U_NUMBER_PADDING_WIDTH_OUTOFBOUNDS_ERROR = U_ILLEGAL_ARGUMENT_ERROR;
// Forward declarations:
+1 -1
View File
@@ -213,7 +213,7 @@ void PersianCalendar::handleComputeFields(int32_t julianDay, UErrorCode &/*statu
int32_t year, month, dayOfMonth, dayOfYear;
int32_t daysSinceEpoch = julianDay - PERSIAN_EPOCH;
year = 1 + ClockMath::floorDivide(33 * daysSinceEpoch + 3, 12053);
year = 1 + (int32_t)ClockMath::floorDivide(33 * (int64_t)daysSinceEpoch + 3, (int64_t)12053);
int32_t farvardin1 = 365 * (year - 1) + ClockMath::floorDivide(8 * year + 21, 33);
dayOfYear = (daysSinceEpoch - farvardin1); // 0-based
+21 -1
View File
@@ -789,7 +789,9 @@ AndConstraint::isFulfilled(const IFixedDecimal &number) {
// An empty AndConstraint, created by a rule with a keyword but no following expression.
return TRUE;
}
double n = number.getPluralOperand(digitsType); // pulls n | i | v | f value for the number.
PluralOperand operand = tokenTypeToPluralOperand(digitsType);
double n = number.getPluralOperand(operand); // pulls n | i | v | f value for the number.
// Will always be positive.
// May be non-integer (n option only)
do {
@@ -1405,6 +1407,24 @@ PluralKeywordEnumeration::count(UErrorCode& /*status*/) const {
PluralKeywordEnumeration::~PluralKeywordEnumeration() {
}
PluralOperand tokenTypeToPluralOperand(tokenType tt) {
switch(tt) {
case tVariableN:
return PLURAL_OPERAND_N;
case tVariableI:
return PLURAL_OPERAND_I;
case tVariableF:
return PLURAL_OPERAND_F;
case tVariableV:
return PLURAL_OPERAND_V;
case tVariableT:
return PLURAL_OPERAND_T;
default:
U_ASSERT(FALSE); // unexpected.
return PLURAL_OPERAND_N;
}
}
IFixedDecimal::~IFixedDecimal() = default;
FixedDecimal::FixedDecimal(const VisibleDigits &digits) {
+6 -19
View File
@@ -221,6 +221,12 @@ enum PluralOperand {
PLURAL_OPERAND_J
};
/**
* Converts from the tokenType enum to PluralOperand. Asserts that the given
* tokenType can be mapped to a PluralOperand.
*/
PluralOperand tokenTypeToPluralOperand(tokenType tt);
/**
* An interface to FixedDecimal, allowing for other implementations.
* @internal
@@ -235,25 +241,6 @@ class U_I18N_API IFixedDecimal {
*/
virtual double getPluralOperand(PluralOperand operand) const = 0;
/** Converts from the tokenType enum to PluralOperand. */
virtual double getPluralOperand(tokenType tt) const {
switch(tt) {
case tVariableN:
return getPluralOperand(PLURAL_OPERAND_N);
case tVariableI:
return getPluralOperand(PLURAL_OPERAND_I);
case tVariableF:
return getPluralOperand(PLURAL_OPERAND_F);
case tVariableV:
return getPluralOperand(PLURAL_OPERAND_V);
case tVariableT:
return getPluralOperand(PLURAL_OPERAND_T);
default:
U_ASSERT(FALSE); // unexpected.
return 0.0;
}
}
virtual bool isNaN() const = 0;
virtual bool isInfinite() const = 0;
+14 -1
View File
@@ -3202,7 +3202,7 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC
case UDAT_FRACTIONAL_SECOND_FIELD:
// Fractional seconds left-justify
i = pos.getIndex() - start;
i = countDigits(text, start, pos.getIndex());
if (i < 3) {
while (i < 3) {
value *= 10;
@@ -3728,6 +3728,19 @@ void SimpleDateFormat::parseInt(const UnicodeString& text,
}
}
int32_t SimpleDateFormat::countDigits(const UnicodeString& text, int32_t start, int32_t end) const {
int32_t numDigits = 0;
int32_t idx = start;
while (idx < end) {
UChar32 cp = text.char32At(idx);
if (u_isdigit(cp)) {
numDigits++;
}
idx += U16_LENGTH(cp);
}
return numDigits;
}
//----------------------------------------------------------------------
void SimpleDateFormat::translatePattern(const UnicodeString& originalPattern,
+2 -2
View File
@@ -1869,8 +1869,8 @@ TimeZoneFormat::parseOffsetFieldsWithPattern(const UnicodeString& text, int32_t
// leading space characters might be truncated. If the first pattern text
// starts with such character (e.g. Bidi control), then we need to
// skip the leading space charcters.
if (!PatternProps::isWhiteSpace(text.char32At(idx))) {
for (;;) {
if (idx < text.length() && !PatternProps::isWhiteSpace(text.char32At(idx))) {
while (len > 0) {
UChar32 ch;
int32_t chLen;
U16_GET(patStr, 0, 0, len, ch)
+9 -2
View File
@@ -465,8 +465,15 @@ ucol_prepareShortStringOpen( const char *definition,
UResourceBundle *collElem = NULL;
char keyBuffer[256];
// if there is a keyword, we pick it up and try to get elements
if(!uloc_getKeywordValue(buffer, "collation", keyBuffer, 256, status)) {
// no keyword. we try to find the default setting, which will give us the keyword value
int32_t keyLen = uloc_getKeywordValue(buffer, "collation", keyBuffer, sizeof(keyBuffer), status);
// Treat too long a value as no keyword.
if(keyLen >= (int32_t)sizeof(keyBuffer)) {
keyLen = 0;
*status = U_ZERO_ERROR;
}
if(keyLen == 0) {
// no keyword
// we try to find the default setting, which will give us the keyword value
UResourceBundle *defaultColl = ures_getByKeyWithFallback(collations, "default", NULL, status);
if(U_SUCCESS(*status)) {
int32_t defaultKeyLen = 0;
+9 -5
View File
@@ -1853,8 +1853,8 @@ class U_I18N_API LocalizedNumberFormatter
* <p>
* This function is very hot, being called in every call to the number formatting pipeline.
*
* @param fq
* The quantity to be formatted.
* @param results
* The results object. This method takes ownership.
* @return The formatted number result.
*/
FormattedNumber formatImpl(impl::NumberFormatterResults *results, UErrorCode &status) const;
@@ -1941,10 +1941,14 @@ class U_I18N_API FormattedNumber : public UMemory {
// Can't use LocalPointer because NumberFormatterResults is forward-declared
const impl::NumberFormatterResults *fResults;
// Default constructor for error states
FormattedNumber() : fResults(nullptr) {}
// Error code for the terminal methods
UErrorCode fErrorCode;
explicit FormattedNumber(impl::NumberFormatterResults *results) : fResults(results) {}
explicit FormattedNumber(impl::NumberFormatterResults *results)
: fResults(results), fErrorCode(U_ZERO_ERROR) {};
explicit FormattedNumber(UErrorCode errorCode)
: fResults(nullptr), fErrorCode(errorCode) {};
// To give LocalizedNumberFormatter format methods access to this class's constructor:
friend class LocalizedNumberFormatter;
+10
View File
@@ -1433,6 +1433,16 @@ private:
int32_t checkIntSuffix(const UnicodeString& text, int32_t start,
int32_t patLoc, UBool isNegative) const;
/**
* Counts number of digit code points in the specified text.
*
* @param text input text
* @param start start index, inclusive
* @param end end index, exclusive
* @return number of digits found in the text in the specified range.
*/
int32_t countDigits(const UnicodeString& text, int32_t start, int32_t end) const;
/**
* Translate a pattern, mapping each character in the from string to the
* corresponding character in the to string. Return an error if the original
+2 -2
View File
@@ -417,7 +417,7 @@ CalendarLimitTest::doLimitsTest(Calendar& cal,
}
if (maxActual < maxLow || maxActual > maxHigh) {
if ( uprv_strcmp(cal.getType(), "chinese") == 0 &&
testMillis >= 2842992000000.0 && testMillis <= 2906668800000.0 &&
testMillis >= 1802044800000.0 &&
logKnownIssue("12620", "chinese calendar failures for some actualMax tests")) {
logln((UnicodeString)"KnownFail: [" + cal.getType() + "] " +
ymdToString(cal, ymd) +
@@ -444,7 +444,7 @@ CalendarLimitTest::doLimitsTest(Calendar& cal,
", allowed=(" + minLow + ".." + minHigh + ")..(" +
maxLow + ".." + maxHigh + ")");
} else if ( uprv_strcmp(cal.getType(), "chinese") == 0 &&
testMillis >= 2842992000000.0 && testMillis <= 2906668800000.0 &&
testMillis >= 1832544000000.0 &&
logKnownIssue("12620", "chinese calendar failures for some actualMax tests")) {
logln((UnicodeString)"KnownFail: [" + cal.getType() + "] " +
ymdToString(cal, ymd) +
+33 -1
View File
@@ -12,6 +12,7 @@
#include "calregts.h"
#include "unicode/calendar.h"
#include "unicode/gregocal.h"
#include "unicode/simpletz.h"
#include "unicode/smpdtfmt.h"
@@ -91,6 +92,7 @@ CalendarRegressionTest::runIndexedTest( int32_t index, UBool exec, const char* &
CASE(49,Test9019);
CASE(50,TestT9452);
CASE(51,TestT11632);
CASE(52,TestPersianCalOverflow);
default: name = ""; break;
}
}
@@ -2985,6 +2987,36 @@ void CalendarRegressionTest::TestT11632(void) {
assertEquals("correct datetime displayed for hour value", UnicodeString("1970-01-13T12:00:00"), dstr);
}
}
}
}
/**
* @bug ticket 13454
*/
void CalendarRegressionTest::TestPersianCalOverflow(void) {
const char* localeID = "bs_Cyrl@calendar=persian";
UErrorCode status = U_ZERO_ERROR;
Calendar* cal = Calendar::createInstance(Locale(localeID), status);
if(U_FAILURE(status)) {
dataerrln("FAIL: Calendar::createInstance for localeID %s: %s", localeID, u_errorName(status));
} else {
int32_t maxMonth = cal->getMaximum(UCAL_MONTH);
int32_t maxDayOfMonth = cal->getMaximum(UCAL_DATE);
int32_t jd, month, dayOfMonth;
for (jd = 67023580; jd <= 67023584; jd++) { // year 178171, int32_t overflow if jd >= 67023582
status = U_ZERO_ERROR;
cal->clear();
cal->set(UCAL_JULIAN_DAY, jd);
month = cal->get(UCAL_MONTH, status);
dayOfMonth = cal->get(UCAL_DATE, status);
if ( U_FAILURE(status) ) {
errln("FAIL: Calendar->get MONTH/DATE for localeID %s, julianDay %d, status %s\n", localeID, jd, u_errorName(status));
} else if (month > maxMonth || dayOfMonth > maxDayOfMonth) {
errln("FAIL: localeID %s, julianDay %d; maxMonth %d, got month %d; maxDayOfMonth %d, got dayOfMonth %d\n",
localeID, jd, maxMonth, month, maxDayOfMonth, dayOfMonth);
}
}
delete cal;
}
}
#endif /* #if !UCONFIG_NO_FORMATTING */
+1
View File
@@ -78,6 +78,7 @@ public:
void Test9019(void);
void TestT9452(void);
void TestT11632(void);
void TestPersianCalOverflow(void);
void printdate(GregorianCalendar *cal, const char *string);
void dowTest(UBool lenient) ;
+4 -4
View File
@@ -143,11 +143,11 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
// fi // 3 fi
UnicodeString("1.1999"), // 00: yM (fixed expected result per ticket:6626:)
UnicodeString("1.1999"), // 01: yMMM
UnicodeString("tammi 1999"), // 01: yMMM
UnicodeString("13.1.1999"), // 02: yMd
UnicodeString("13.1.1999"), // 03: yMMMd
UnicodeString("13. tammik. 1999"), // 03: yMMMd
UnicodeString("13.1."), // 04: Md
UnicodeString("13.1."), // 05: MMMd
UnicodeString("13. tammik."), // 05: MMMd
UnicodeString("13. tammikuuta"), // 06: MMMMd
UnicodeString("1. nelj. 1999"), // 07: yQQQ
UnicodeString("11.58 ip."), // 08: hhmm
@@ -155,7 +155,7 @@ void IntlTestDateTimePatternGeneratorAPI::testAPI(/*char *par*/)
UnicodeString("23.58"), // 10: jjmm
UnicodeString("58.59"), // 11: mmss
UnicodeString("tammikuu 1999"), // 12: yyyyMMMM
UnicodeString("ke 13.1."), // 13: MMMEd -> EEE d. MMM
UnicodeString("ke 13. tammik."), // 13: MMMEd -> EEE d. MMM
UnicodeString("ke 13."), // 14: Ed -> ccc d.
UnicodeString("23.58.59,123"), // 15: jmmssSSS -> "H.mm.ss,SSS"
UnicodeString("23.58"), // 16: JJmm
+10 -3
View File
@@ -1422,12 +1422,19 @@ void NumberFormatterApiTest::errors() {
-1));
{
UErrorCode status = U_ZERO_ERROR;
lnf.formatInt(1, status);
UErrorCode status1 = U_ZERO_ERROR;
UErrorCode status2 = U_ZERO_ERROR;
FormattedNumber fn = lnf.formatInt(1, status1);
assertEquals(
"Should fail with U_ILLEGAL_ARGUMENT_ERROR since rounder is not legal",
U_ILLEGAL_ARGUMENT_ERROR,
status);
status1);
FieldPosition fp;
fn.populateFieldPosition(fp, status2);
assertEquals(
"Should fail with U_ILLEGAL_ARGUMENT_ERROR on terminal method",
U_ILLEGAL_ARGUMENT_ERROR,
status2);
}
{
+3 -3
View File
@@ -425,19 +425,19 @@ UBool NumberFormatTestDataDriven::isParsePass(
return TRUE; // TRUE because failure handling is in the test suite
}
if (tuple.output == "NaN") {
if (!std::isnan(result.getDouble())) {
if (!uprv_isNaN(result.getDouble())) {
appendErrorMessage.append("Expected NaN, but got: " + resultStr);
return FALSE;
}
return TRUE;
} else if (tuple.output == "Inf") {
if (!std::isinf(result.getDouble()) || result.getDouble() < 0) {
if (!uprv_isInfinite(result.getDouble()) || result.getDouble() < 0) {
appendErrorMessage.append("Expected Inf, but got: " + resultStr);
return FALSE;
}
return TRUE;
} else if (tuple.output == "-Inf") {
if (!std::isinf(result.getDouble()) || result.getDouble() > 0) {
if (!uprv_isInfinite(result.getDouble()) || result.getDouble() > 0) {
appendErrorMessage.append("Expected -Inf, but got: " + resultStr);
return FALSE;
}
+4
View File
@@ -1003,6 +1003,9 @@ void StringCaseTest::TestCopyMoveEdits() {
assertEquals("b remains: many edits, length delta", 250, b.lengthDelta());
TestUtility::checkEqualEdits(*this, u"c = b", b, c, errorCode);
// std::move trouble on these platforms.
// See https://ssl.icu-project.org/trac/ticket/13393
#if !UPRV_INCOMPLETE_CPP11_SUPPORT && !(U_PLATFORM == U_PF_AIX || U_PLATFORM == U_PF_OS390)
// move constructor empties object with heap array
Edits d(std::move(a));
assertEquals("d: move-constructed many edits, length delta", 250, d.lengthDelta());
@@ -1029,6 +1032,7 @@ void StringCaseTest::TestCopyMoveEdits() {
assertSuccess("iter.next()", errorCode);
assertTrue("iter.hasChange()", iter.hasChange());
assertEquals("iter.newLength()", 1, iter.newLength());
#endif
}
void StringCaseTest::TestEditsFindFwdBwd() {
+3 -2
View File
@@ -484,7 +484,7 @@ TimeZoneFormatTest::TestTimeRoundTrip(void) {
Locale("ko_KR"), Locale("nb_NO"), Locale("nl_NL"), Locale("nn_NO"), Locale("pl_PL"),
Locale("pt"), Locale("pt_BR"), Locale("pt_PT"), Locale("ru_RU"), Locale("sv_SE"),
Locale("th_TH"), Locale("tr_TR"), Locale("zh"), Locale("zh_Hans"), Locale("zh_Hans_CN"),
Locale("zh_Hant"), Locale("zh_Hant_TW")
Locale("zh_Hant"), Locale("zh_Hant_TW"), Locale("fa"), Locale("ccp")
};
if (bTestAll) {
@@ -601,7 +601,8 @@ void TimeZoneFormatTest::RunTimeRoundTripTests(int32_t threadNumber) {
}
}
if (*tzid == "Pacific/Apia" && uprv_strcmp(PATTERNS[patidx], "vvvv") == 0
if ((*tzid == "Pacific/Apia" || *tzid == "Pacific/Midway" || *tzid == "Pacific/Pago_Pago")
&& uprv_strcmp(PATTERNS[patidx], "vvvv") == 0
&& logKnownIssue("11052", "Ambiguous zone name - Samoa Time")) {
continue;
}
+4
View File
@@ -74,6 +74,10 @@ tzorig: $(TZCODE) $(TZDATA)
cp $(srcdir)/zdump.c $(TZORIG)/zdump.c
-mv $(TZORIG)/factory $(TZORIG)/factory.orig
cat $(TZORIG)/factory.orig $(srcdir)/icuzones > $(TZORIG)/factory
-mv $(TZORIG)/zishrink.awk $(TZORIG)/zishrink.awk.orig
sed -e '/if (line ~ \/^R SystemV \/) return/s/^/#/' $(TZORIG)/zishrink.awk.orig > $(TZORIG)/zishrink.awk
-mv $(TZORIG)/Makefile $(TZORIG)/Makefile.orig
sed -e "s/BACKWARD=\$$(BACKWARD)/BACKWARD='\$$(BACKWARD)'/" $(TZORIG)/Makefile.orig > $(TZORIG)/Makefile
$(MAKE) -C $@ $(TZORIG_OPTS) zdump zones
$(ZDUMPOUT): tzorig
+7
View File
@@ -71,3 +71,10 @@ Link America/Los_Angeles PST
Link Pacific/Guadalcanal SST
#Link Etc/UTC UTC # Olson LINK
Link Asia/Ho_Chi_Minh VST
#
# Aliases already dropped from the TZ database.
# ICU may also remove these aliases.
#
Link America/Regina Canada/East-Saskatchewan # removed from backward in 2017c
+5 -5
View File
@@ -31,6 +31,7 @@
#ifdef ICU
#include "dirent.h"
#include "sys/stat.h"
#endif
#ifndef isascii
@@ -428,7 +429,7 @@ main(int argc, char *argv[])
}
closedir(dp);
}
#endif ICU
#endif
if (vflag | Vflag) {
intmax_t lo;
@@ -495,7 +496,6 @@ main(int argc, char *argv[])
int count;
count = getall(&namelist);
fakeargv = (char **) malloc((size_t) (argc + count) * sizeof *argv);
/*
if ((fakeargv = (char **) malloc((size_t) (argc + count) * sizeof *argv)) == NULL) {
@@ -1020,9 +1020,9 @@ static void dumptimeICU(FILE * fp, time_t t)
min = offset % 60;
hour = offset / 60;
fprintf(fp, "%02d", hour);
fprintf(fp, "%02d", min);
fprintf(fp, "%02d", sec);
fprintf(fp, "%02ld", hour);
fprintf(fp, "%02ld", min);
fprintf(fp, "%02ld", sec);
fprintf(fp, "[DST=%d]", loc.tm_isdst);
}
+2 -2
View File
@@ -6,7 +6,7 @@
#*******************************************************************************
api.report.version = 60
api.report.prev.version = 59
release.file.ver = 60rc
api.doc.version = 60 Release Candidate
release.file.ver = 60_1
api.doc.version = 60.1
maven.pom.ver = 60.1
@@ -132,9 +132,10 @@ public class Parse {
INSIDE_AFFIX_PATTERN;
}
// TODO: Does this set make sense for the whitespace characters?
// This set was decided after discussion with icu-design@. See ticket #13309.
// Zs+TAB is "horizontal whitespace" according to UTS #18 (blank property).
private static final UnicodeSet UNISET_WHITESPACE =
new UnicodeSet("[[:whitespace:][\\u2000-\\u200D]]").freeze();
new UnicodeSet("[[:Zs:][\\u0009]]").freeze();
// BiDi characters are skipped over and ignored at any point in the string, even in strict mode.
private static final UnicodeSet UNISET_BIDI =
@@ -4966,7 +4966,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
* @param str source string to be performed on
* @param breakiter break iterator to determine the positions in which
* the character should be title cased.
* @return lowercase version of the argument string
* @return titlecase version of the argument string
* @stable ICU 2.6
*/
public static String toTitleCase(String str, BreakIterator breakiter)
@@ -5058,7 +5058,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
* @param str source string to be performed on
* @param breakiter break iterator to determine the positions in which
* the character should be title cased.
* @return lowercase version of the argument string
* @return titlecase version of the argument string
* @stable ICU 2.6
*/
public static String toTitleCase(Locale locale, String str,
@@ -5083,7 +5083,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
* @param str source string to be performed on
* @param titleIter break iterator to determine the positions in which
* the character should be title cased.
* @return lowercase version of the argument string
* @return titlecase version of the argument string
* @stable ICU 3.2
*/
public static String toTitleCase(ULocale locale, String str,
@@ -5108,7 +5108,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
* @param titleIter break iterator to determine the positions in which
* the character should be title cased.
* @param options bit set to modify the titlecasing operation
* @return lowercase version of the argument string
* @return titlecase version of the argument string
* @stable ICU 3.8
* @see #TITLECASE_NO_LOWERCASE
* @see #TITLECASE_NO_BREAK_ADJUSTMENT
@@ -5171,7 +5171,7 @@ public final class UCharacter implements ECharacterCategory, ECharacterDirection
* @param titleIter break iterator to determine the positions in which
* the character should be title cased.
* @param options bit set to modify the titlecasing operation
* @return lowercase version of the argument string
* @return titlecase version of the argument string
* @see #TITLECASE_NO_LOWERCASE
* @see #TITLECASE_NO_BREAK_ADJUSTMENT
* @stable ICU 54
@@ -202,7 +202,9 @@ import com.ibm.icu.util.ULocale.Category;
* pattern string and the input string. For example, the pattern "# %" matches "35 %" (with a single
* space), "35%" (with no space), "35&nbsp;%" (with a non-breaking space), and "35&nbsp; %" (with
* multiple spaces). Arbitrary ignorables are also allowed at boundaries between the parts of the
* number: prefix, number, exponent separator, and suffix.
* number: prefix, number, exponent separator, and suffix. Ignorable whitespace characters are those
* having the Unicode "blank" property for regular expressions, defined in UTS #18 Annex C, which is
* "horizontal" whitespace, like spaces and tabs, but not "vertical" whitespace, like line breaks.
*
* <p>If {@link #parse(String, ParsePosition)} fails to parse a string, it returns <code>null</code>
* and leaves the parse position unchanged. The convenience method {@link #parse(String)} indicates
@@ -424,6 +424,9 @@ public abstract class NumberFormat extends UFormat {
* <p>Does not throw an exception; if no object can be parsed, index is
* unchanged!
*
* <p>For more detail on parsing, see the "Parsing" header in the class
* documentation of {@link DecimalFormat}.
*
* @see #isParseIntegerOnly
* @see DecimalFormat#setParseBigDecimal
* @see java.text.Format#parseObject(String, ParsePosition)
@@ -32,6 +32,7 @@ import java.util.Set;
import com.ibm.icu.impl.ICUData;
import com.ibm.icu.impl.ICUResourceBundle;
import com.ibm.icu.impl.PatternProps;
import com.ibm.icu.impl.SoftCache;
import com.ibm.icu.impl.TZDBTimeZoneNames;
import com.ibm.icu.impl.TextTrieMap;
@@ -2397,7 +2398,26 @@ public class TimeZoneFormat extends UFormat implements Freezable<TimeZoneFormat>
if (patternItems[i] instanceof String) {
String patStr = (String)patternItems[i];
int len = patStr.length();
if (!text.regionMatches(true, idx, patStr, 0, len)) {
int patIdx = 0;
if (i == 0) {
// When TimeZoneFormat parse() is called from SimpleDateFormat,
// leading space characters might be truncated. If the first pattern text
// starts with such character (e.g. Bidi control), then we need to
// skip the leading space characters.
if (idx < text.length() && !PatternProps.isWhiteSpace(text.codePointAt(idx))) {
while (len > 0) {
int cp = patStr.codePointAt(patIdx);
if (PatternProps.isWhiteSpace(cp)) {
int cpLen = Character.charCount(cp);
len -= cpLen;
patIdx += cpLen;
} else {
break;
}
}
}
}
if (!text.regionMatches(true, idx, patStr, patIdx, len)) {
failed = true;
break;
}
@@ -568,7 +568,7 @@ public final class VersionInfo implements Comparable<VersionInfo>
UNICODE_10_0 = getInstance(10, 0, 0, 0);
ICU_VERSION = getInstance(60, 1, 0, 0);
ICU_DATA_VERSION = getInstance(60, 0, 1, 0);
ICU_DATA_VERSION = getInstance(60, 1, 0, 0);
UNICODE_VERSION = UNICODE_10_0;
UCOL_RUNTIME_VERSION = getInstance(9);
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:af06fc6894d8a366d1d9a12f68d1562ca602ddbcf574673aadc0a017f01583a8
size 12459424
oid sha256:9d9e1962263203f4c7c071c58cc0da6f23212294b163f6a7047df4e858c908c8
size 12459520
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:07ca360bece76117efc098b97cf6bf082df398e4afe6150081de59a9d8f1a940
size 92486
oid sha256:9ab0aa84333a23a0e40f5641d96d4b12e0f7acc10b3ca32a98141d04af1ef59b
size 92714
+1 -1
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bc37dab789d1d29379040fa938b58d63a21d0e8bf5e7b6ec07a7e6e26fc0cab7
oid sha256:49fc3149b6f7691682845386826d43267e196a0286eef1dc9ffaf7100690cab1
size 813106
@@ -2503,5 +2503,23 @@ public class CalendarRegressionTest extends com.ibm.icu.dev.test.TestFmwk {
assertEquals("Incorrect time for long range milliseconds","Sun Jan 25 21:00:00 PST 1970", cal.getTime().toString());
}
}
@Test
public void TestPersianCalOverflow() {
String localeID = "bs_Cyrl@calendar=persian";
Calendar cal = Calendar.getInstance(new ULocale(localeID));
int maxMonth = cal.getMaximum(Calendar.MONTH);
int maxDayOfMonth = cal.getMaximum(Calendar.DATE);
int jd, month, dayOfMonth;
for (jd = 67023580; jd <= 67023584; jd++) { // year 178171, int32_t overflow if jd >= 67023582
cal.clear();
cal.set(Calendar.JULIAN_DAY, jd);
month = cal.get(Calendar.MONTH);
dayOfMonth = cal.get(Calendar.DATE);
if (month > maxMonth || dayOfMonth > maxDayOfMonth) {
errln("Error: localeID " + localeID + ", julianDay " + jd + "; maxMonth " + maxMonth + ", got month " + month +
"; maxDayOfMonth " + maxDayOfMonth + ", got dayOfMonth " + dayOfMonth);
}
}
}
}
//eof
@@ -427,11 +427,11 @@ public class DateTimeGeneratorTest extends TestFmwk {
new ULocale("fi"),
new String[] {"yM", "1.1999"}, // (fixed expected result per ticket 6872<-6626)
new String[] {"yMMM", "1.1999"}, // (fixed expected result per ticket 6872<-7007)
new String[] {"yMMM", "tammi 1999"}, // (fixed expected result per ticket 6872<-7007)
new String[] {"yMd", "13.1.1999"},
new String[] {"yMMMd", "13.1.1999"},
new String[] {"yMMMd", "13. tammik. 1999"},
new String[] {"Md", "13.1."},
new String[] {"MMMd", "13.1."},
new String[] {"MMMd", "13. tammik."},
new String[] {"MMMMd", "13. tammikuuta"},
new String[] {"yQQQ", "1. nelj. 1999"},
new String[] {"hhmm", "11.58 ip."},
@@ -439,7 +439,7 @@ public class DateTimeGeneratorTest extends TestFmwk {
new String[] {"jjmm", "23.58"},
new String[] {"mmss", "58.59"},
new String[] {"yyyyMMMM", "tammikuu 1999"}, // (new item for testing 6872<-5702,7007)
new String[] {"MMMEd", "ke 13.1."},
new String[] {"MMMEd", "ke 13. tammik."},
new String[] {"Ed", "ke 13."},
new String[] {"jmmssSSS", "23.58.59,123"},
new String[] {"JJmm", "23.58"},
@@ -63,6 +63,7 @@ import com.ibm.icu.text.NumberFormat.SimpleNumberFormatFactory;
import com.ibm.icu.text.NumberingSystem;
import com.ibm.icu.text.PluralRules;
import com.ibm.icu.text.RuleBasedNumberFormat;
import com.ibm.icu.text.UnicodeSet;
import com.ibm.icu.util.Currency;
import com.ibm.icu.util.Currency.CurrencyUsage;
import com.ibm.icu.util.CurrencyAmount;
@@ -438,8 +439,8 @@ public class NumberFormatTest extends TestFmwk {
{" $ 124 ", "6", "-1"},
{"124$", "3", "-1"},
{"124 $", "3", "-1"},
{"$124\u200D", "4", "-1"},
{"$\u200D124", "5", "-1"},
{"$124\u200A", "4", "-1"},
{"$\u200A124", "5", "-1"},
};
NumberFormat foo = NumberFormat.getCurrencyInstance();
for (int i = 0; i < DATA.length; ++i) {
@@ -1712,6 +1713,29 @@ public class NumberFormatTest extends TestFmwk {
expect(fmt, "ab 1234", n);
expect(fmt, "a b1234", n);
expect(fmt, "a b1234", n);
expect(fmt, " a b 1234", n);
// Horizontal whitespace is allowed, but not vertical whitespace.
expect(fmt, "\ta\u00A0b\u20001234", n);
expect(fmt, "a \u200A b1234", n);
expectParseException(fmt, "\nab1234", n);
expectParseException(fmt, "a \n b1234", n);
expectParseException(fmt, "a \u0085 b1234", n);
expectParseException(fmt, "a \u2028 b1234", n);
// Test all characters in the UTS 18 "blank" set stated in the API docstring.
UnicodeSet blanks = new UnicodeSet("[[:Zs:][\\u0009]]").freeze();
for (String space : blanks) {
String str = "a " + space + " b1234";
expect(fmt, str, n);
}
// Test that other whitespace characters do not work
UnicodeSet otherWhitespace = new UnicodeSet("[[:whitespace:]]").removeAll(blanks).freeze();
for (String space : otherWhitespace) {
String str = "a " + space + " b1234";
expectParseException(fmt, str, n);
}
}
/**
@@ -2676,6 +2700,16 @@ public class NumberFormatTest extends TestFmwk {
expect(fmt, str, new Long(n));
}
/** Parse test */
public void expectParseException(DecimalFormat fmt, String str, Number n) {
Number num = null;
try {
num = fmt.parse(str);
errln("Expected failure, but passed: " + n + " on " + fmt.toPattern() + " -> " + num);
} catch (ParseException e) {
}
}
private void expectCurrency(NumberFormat nf, Currency curr,
double value, String string) {
DecimalFormat fmt = (DecimalFormat) nf;
@@ -360,7 +360,7 @@ public class TimeZoneFormatTest extends TestFmwk {
new ULocale("ko_KR"), new ULocale("nb_NO"), new ULocale("nl_NL"), new ULocale("nn_NO"), new ULocale("pl_PL"),
new ULocale("pt"), new ULocale("pt_BR"), new ULocale("pt_PT"), new ULocale("ru_RU"), new ULocale("sv_SE"),
new ULocale("th_TH"), new ULocale("tr_TR"), new ULocale("zh"), new ULocale("zh_Hans"), new ULocale("zh_Hans_CN"),
new ULocale("zh_Hant"), new ULocale("zh_Hant_HK"), new ULocale("zh_Hant_TW")
new ULocale("zh_Hant"), new ULocale("zh_Hant_HK"), new ULocale("zh_Hant_TW"), new ULocale("ccp"), new ULocale("fa")
};
} else {
LOCALES = new ULocale[] {
@@ -418,7 +418,8 @@ public class TimeZoneFormatTest extends TestFmwk {
}
}
if (id.equals("Pacific/Apia") && PATTERNS[patidx].equals("vvvv")
if ((id.equals("Pacific/Apia") || id.equals("Pacific/Midway") || id.equals("Pacific/Pago_Pago"))
&& PATTERNS[patidx].equals("vvvv")
&& logKnownIssue("11052", "Ambiguous zone name - Samoa Time")) {
continue;
}
+20 -12
View File
@@ -14,21 +14,21 @@ h3.doc { text-decoration: underline }
<body style="background-color: rgb(255, 255, 255);" lang="EN-US"
link="#0000ff" vlink="#800080">
<h1>International Components for Unicode for Java (ICU4J)</h1>
<h2>Read Me for ICU4J 60 Release Candidate</h2>
(Last Update: 2017-Oct-04)
<h2>Read Me for ICU4J 60.1</h2>
(Last Update: 2017-Oct-30)
<hr size="2" width="100%">
<p>
<!-- <b>Note:</b> This is major release of ICU4J. It contains bug fixes and adds implementations
of inherited API and introduces new API or functionality. -->
<b>Note:</b> This is major release of ICU4J. It contains bug fixes and adds implementations
of inherited API and introduces new API or functionality.
<!-- <b>Note:</b> This is a development milestone of ICU4J 60.
The contents of this document may not reflect the recent changes done
for ICU 60 development. It is not recommended for production use. -->
<b>Note:</b> This is a release candidate of ICU4J 60.
<!-- <b>Note:</b> This is a release candidate of ICU4J 60.
The contents of this document may not reflect the recent changes done
for ICU 60 development. This release candidate is intended for those
wishing to verify ICU 60 integration before final release. It is not
recommended for production use.
recommended for production use. -->
</p>
<p>For the most recent release, see the <a
href="http://www.icu-project.org/download/"> ICU4J
@@ -162,7 +162,7 @@ file included in this package.
<h2 class="doc"><a name="PlatformDependencies"></a>Platform Dependencies</h2>
<p>
ICU4J 60 depends on J2SE 6 functionality. Therefore, ICU4J only runs on
JRE version 6 or later.
JRE version 6 or later. ICU4J 60 is tested on JRE 6, 7, 8 and 9.
<h2 class="doc"><a name="download"></a>How to Download ICU4J</h2>
<p>There are a few different ways to download the ICU4J releases.
@@ -175,7 +175,7 @@ These versions are tested more thoroughly than day-to-day development
builds, and they are packaged in jar files for convenient download.
<ul>
<li><a href="http://www.icu-project.org/download/">ICU Download page</a>.</li>
<li>[TBD 60.1]Maven repository:
<li>Maven repository:
<pre>
&lt;dependency&gt;
&lt;groupId&gt;com.ibm.icu&lt;/groupId&gt;
@@ -428,6 +428,12 @@ ICU4J source archive is extracted.
</ul>
</td>
</tr>
<tr>
<td>lib</td>
<td>Folder used for downloading depedency libraries.<br>
<b>Note:</b> ICU4J runtime libraries do not depend on any external libraries other
than JDK. These dependencies are for testing (such as JUnit).</td>
</tr>
</table>
<h2 class="doc"><a name="API"></a>Where to get Documentation</h2>
@@ -526,7 +532,7 @@ Buildfile: C:\icu4j\build.xml
info:
[echo] ----- Build Environment Information -------------------
[echo] Java Home: C:\jdk1.8.0\jre
[echo] Java Version: 1.8.0_102
[echo] Java Version: 1.8.0_144
[echo] Ant Home: C:\apache-ant
[echo] Ant Version: Apache Ant(TM) version 1.9.4 compiled on April 29 2014
@@ -553,14 +559,16 @@ core:
[echo] ----------------------------------------------------
[mkdir] Created dir: C:\icu4j\main\classes\core\out\bin
[javac] Compiling 364 source files to C:\icu4j\main\classes\core\out\bin
[javac] Compiling 415 source files to C:\icu4j\main\classes\core\out\bin
[javac] Note: Some input files use or override a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
compile:
@copy:
[copy] Copying 23 files to C:\icu4j\main\classes\core\out\bin
[copy] Copying 24 files to C:\icu4j\main\classes\core\out\bin
[copy] Copied 4 empty directories to 3 empty directories under D:\devicu\ma
int-60\icu4j\main\classes\core\out\bin
set-icuconfig-datapath:
@@ -597,7 +605,7 @@ _build-localespi:
compile:
@copy:
[copy] Copying 10 files to C:\icu4j\main\classes\localespi\out\bin
[copy] Copying 11 files to C:\icu4j\main\classes\localespi\out\bin
copy: