ICU-20511 Merge maint/maint-64 to master

This commit is contained in:
Shane F. Carr 2019-03-22 11:16:43 -07:00 committed by GitHub
commit 13889bece1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
256 changed files with 1827 additions and 1979 deletions

View file

@ -9,14 +9,15 @@ resources:
lfs: true
fetchDepth: 1
# Only run the exhaustive tests on the master branch, and batch up
# any pending changes so that we will only have at most one build
# running at a given time.
# Only run the exhaustive tests on the master and maint branches, and
# also batch up any pending changes so that we will only have at most
# one build running at a given time (since they take a long time).
trigger:
batch: true
branches:
include:
- master
- maint/*
jobs:
#-------------------------------------------------------------------------

View file

@ -23,8 +23,8 @@
milestone - if the release note is a milestone release
-->
<!-- <body> -->
<body class="rc">
<body>
<!-- <body class="rc"> -->
<p class="only-draft"><b>Note:</b> This is a draft readme.</p>
<h1>
@ -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: 2019-Feb-22<br/>
<p>Last updated: 2019-Mar-18<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.

View file

@ -7,6 +7,7 @@
<ClCompile>
<!-- ICU does not use exceptions in library code. -->
<PreprocessorDefinitions>
$(DefineConstants);
_HAS_EXCEPTIONS=0;
%(PreprocessorDefinitions)
</PreprocessorDefinitions>

View file

@ -124,13 +124,12 @@ static void U_CALLCONV _deleteEngine(void *obj) {
U_CDECL_END
U_NAMESPACE_BEGIN
static UMutex gBreakEngineMutex = U_MUTEX_INITIALIZER;
const LanguageBreakEngine *
ICULanguageBreakFactory::getEngineFor(UChar32 c) {
const LanguageBreakEngine *lbe = NULL;
UErrorCode status = U_ZERO_ERROR;
static UMutex gBreakEngineMutex = U_MUTEX_INITIALIZER;
Mutex m(&gBreakEngineMutex);
if (fEngines == NULL) {

View file

@ -47,7 +47,10 @@ UnicodeSet *sets[UCHAR_BINARY_LIMIT] = {};
UCPMap *maps[UCHAR_INT_LIMIT - UCHAR_INT_START] = {};
icu::UMutex cpMutex = U_MUTEX_INITIALIZER;
icu::UMutex *cpMutex() {
static icu::UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
//----------------------------------------------------------------
// Inclusions list
@ -358,7 +361,7 @@ u_getBinaryPropertySet(UProperty property, UErrorCode *pErrorCode) {
*pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
return nullptr;
}
Mutex m(&cpMutex);
Mutex m(cpMutex());
UnicodeSet *set = sets[property];
if (set == nullptr) {
sets[property] = set = makeSet(property, *pErrorCode);
@ -374,7 +377,7 @@ u_getIntPropertyMap(UProperty property, UErrorCode *pErrorCode) {
*pErrorCode = U_ILLEGAL_ARGUMENT_ERROR;
return nullptr;
}
Mutex m(&cpMutex);
Mutex m(cpMutex());
UCPMap *map = maps[property - UCHAR_INT_START];
if (map == nullptr) {
maps[property - UCHAR_INT_START] = map = makeMap(property, *pErrorCode);

View file

@ -286,7 +286,6 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames {
#else
UObject* capitalizationBrkIter;
#endif
static UMutex capitalizationBrkIterLock;
UnicodeString formatOpenParen;
UnicodeString formatReplaceOpenParen;
UnicodeString formatCloseParen;
@ -352,8 +351,6 @@ private:
struct CapitalizationContextSink;
};
UMutex LocaleDisplayNamesImpl::capitalizationBrkIterLock = U_MUTEX_INITIALIZER;
LocaleDisplayNamesImpl::LocaleDisplayNamesImpl(const Locale& locale,
UDialectHandling dialectHandling)
: dialectHandling(dialectHandling)
@ -552,6 +549,7 @@ LocaleDisplayNamesImpl::adjustForUsageAndContext(CapContextUsage usage,
if ( result.length() > 0 && u_islower(result.char32At(0)) && capitalizationBrkIter!= NULL &&
( capitalizationContext==UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE || fCapitalization[usage] ) ) {
// note fCapitalization[usage] won't be set unless capitalizationContext is UI_LIST_OR_MENU or STANDALONE
static UMutex capitalizationBrkIterLock = U_MUTEX_INITIALIZER;
Mutex lock(&capitalizationBrkIterLock);
result.toTitle(capitalizationBrkIter, locale, U_TITLECASE_NO_LOWERCASE | U_TITLECASE_NO_BREAK_ADJUSTMENT);
}

View file

@ -62,7 +62,10 @@ static Locale *gLocaleCache = NULL;
static UInitOnce gLocaleCacheInitOnce = U_INITONCE_INITIALIZER;
// gDefaultLocaleMutex protects all access to gDefaultLocalesHashT and gDefaultLocale.
static UMutex gDefaultLocaleMutex = U_MUTEX_INITIALIZER;
static UMutex *gDefaultLocaleMutex() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
static UHashtable *gDefaultLocalesHashT = NULL;
static Locale *gDefaultLocale = NULL;
@ -171,7 +174,7 @@ U_NAMESPACE_BEGIN
Locale *locale_set_default_internal(const char *id, UErrorCode& status) {
// Synchronize this entire function.
Mutex lock(&gDefaultLocaleMutex);
Mutex lock(gDefaultLocaleMutex());
UBool canonicalize = FALSE;
@ -708,7 +711,7 @@ const Locale& U_EXPORT2
Locale::getDefault()
{
{
Mutex lock(&gDefaultLocaleMutex);
Mutex lock(gDefaultLocaleMutex());
if (gDefaultLocale != NULL) {
return *gDefaultLocale;
}

View file

@ -241,7 +241,6 @@ u_signBit(double d) {
UDate fakeClock_t0 = 0; /** Time to start the clock from **/
UDate fakeClock_dt = 0; /** Offset (fake time - real time) **/
UBool fakeClock_set = FALSE; /** True if fake clock has spun up **/
static UMutex fakeClockMutex = U_MUTEX_INTIALIZER;
static UDate getUTCtime_real() {
struct timeval posixTime;
@ -250,6 +249,7 @@ static UDate getUTCtime_real() {
}
static UDate getUTCtime_fake() {
static UMutex fakeClockMutex = U_MUTEX_INTIALIZER;
umtx_lock(&fakeClockMutex);
if(!fakeClock_set) {
UDate real = getUTCtime_real();
@ -1307,9 +1307,9 @@ uprv_pathIsAbsolute(const char *path)
return FALSE;
}
/* Temporary backup setting of ICU_DATA_DIR_PREFIX_ENV_VAR
until some client wrapper makefiles are updated */
#if U_PLATFORM_IS_DARWIN_BASED && TARGET_IPHONE_SIMULATOR
/* Backup setting of ICU_DATA_DIR_PREFIX_ENV_VAR
(needed for some Darwin ICU build environments) */
#if U_PLATFORM_IS_DARWIN_BASED && TARGET_OS_SIMULATOR
# if !defined(ICU_DATA_DIR_PREFIX_ENV_VAR)
# define ICU_DATA_DIR_PREFIX_ENV_VAR "IPHONE_SIMULATOR_ROOT"
# endif
@ -1420,12 +1420,7 @@ static void U_CALLCONV dataDirectoryInitFn() {
if(path==NULL) {
/* It looks really bad, set it to something. */
#if U_PLATFORM_HAS_WIN32_API
// Windows UWP will require icudtl.dat file in same directory as icuuc.dll
path = ".\\";
#else
path = "";
#endif
}
u_setDataDirectory(path);

View file

@ -376,8 +376,8 @@ void ResourceBundle::getVersion(UVersionInfo versionInfo) const {
ures_getVersion(fResource, versionInfo);
}
static UMutex gLocaleLock = U_MUTEX_INITIALIZER;
const Locale &ResourceBundle::getLocale(void) const {
static UMutex gLocaleLock = U_MUTEX_INITIALIZER;
Mutex lock(&gLocaleLock);
if (fLocale != NULL) {
return *fLocale;

View file

@ -333,7 +333,10 @@ U_CDECL_END
******************************************************************
*/
static UMutex lock = U_MUTEX_INITIALIZER;
static UMutex *lock() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
ICUService::ICUService()
: name()
@ -358,7 +361,7 @@ ICUService::ICUService(const UnicodeString& newName)
ICUService::~ICUService()
{
{
Mutex mutex(&lock);
Mutex mutex(lock());
clearCaches();
delete factories;
factories = NULL;
@ -449,7 +452,7 @@ ICUService::getKey(ICUServiceKey& key, UnicodeString* actualReturn, const ICUSer
// if factory is not null, we're calling from within the mutex,
// and since some unix machines don't have reentrant mutexes we
// need to make sure not to try to lock it again.
XMutex mutex(&lock, factory != NULL);
XMutex mutex(lock(), factory != NULL);
if (serviceCache == NULL) {
ncthis->serviceCache = new Hashtable(status);
@ -615,7 +618,7 @@ ICUService::getVisibleIDs(UVector& result, const UnicodeString* matchID, UErrorC
}
{
Mutex mutex(&lock);
Mutex mutex(lock());
const Hashtable* map = getVisibleIDMap(status);
if (map != NULL) {
ICUServiceKey* fallbackKey = createKey(matchID, status);
@ -692,7 +695,7 @@ ICUService::getDisplayName(const UnicodeString& id, UnicodeString& result, const
{
{
UErrorCode status = U_ZERO_ERROR;
Mutex mutex(&lock);
Mutex mutex(lock());
const Hashtable* map = getVisibleIDMap(status);
if (map != NULL) {
ICUServiceFactory* f = (ICUServiceFactory*)map->get(id);
@ -744,7 +747,7 @@ ICUService::getDisplayNames(UVector& result,
result.setDeleter(userv_deleteStringPair);
if (U_SUCCESS(status)) {
ICUService* ncthis = (ICUService*)this; // cast away semantic const
Mutex mutex(&lock);
Mutex mutex(lock());
if (dnCache != NULL && dnCache->locale != locale) {
delete dnCache;
@ -849,7 +852,7 @@ URegistryKey
ICUService::registerFactory(ICUServiceFactory* factoryToAdopt, UErrorCode& status)
{
if (U_SUCCESS(status) && factoryToAdopt != NULL) {
Mutex mutex(&lock);
Mutex mutex(lock());
if (factories == NULL) {
factories = new UVector(deleteUObject, NULL, status);
@ -880,7 +883,7 @@ ICUService::unregister(URegistryKey rkey, UErrorCode& status)
ICUServiceFactory *factory = (ICUServiceFactory*)rkey;
UBool result = FALSE;
if (factory != NULL && factories != NULL) {
Mutex mutex(&lock);
Mutex mutex(lock());
if (factories->removeElement(factory)) {
clearCaches();
@ -900,7 +903,7 @@ void
ICUService::reset()
{
{
Mutex mutex(&lock);
Mutex mutex(lock());
reInitializeFactories();
clearCaches();
}

View file

@ -26,7 +26,6 @@
U_NAMESPACE_BEGIN
static UMutex llock = U_MUTEX_INITIALIZER;
ICULocaleService::ICULocaleService()
: fallbackLocale(Locale::getDefault())
{
@ -264,6 +263,7 @@ ICULocaleService::validateFallbackLocale() const
{
const Locale& loc = Locale::getDefault();
ICULocaleService* ncThis = (ICULocaleService*)this;
static UMutex llock = U_MUTEX_INITIALIZER;
{
Mutex mutex(&llock);
if (loc != fallbackLocale) {

View file

@ -21,7 +21,10 @@ U_NAMESPACE_BEGIN
EventListener::~EventListener() {}
UOBJECT_DEFINE_RTTI_IMPLEMENTATION(EventListener)
static UMutex notifyLock = U_MUTEX_INITIALIZER;
static UMutex *notifyLock() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
ICUNotifier::ICUNotifier(void)
: listeners(NULL)
@ -30,7 +33,7 @@ ICUNotifier::ICUNotifier(void)
ICUNotifier::~ICUNotifier(void) {
{
Mutex lmx(&notifyLock);
Mutex lmx(notifyLock());
delete listeners;
listeners = NULL;
}
@ -47,7 +50,7 @@ ICUNotifier::addListener(const EventListener* l, UErrorCode& status)
}
if (acceptsListener(*l)) {
Mutex lmx(&notifyLock);
Mutex lmx(notifyLock());
if (listeners == NULL) {
listeners = new UVector(5, status);
} else {
@ -80,7 +83,7 @@ ICUNotifier::removeListener(const EventListener *l, UErrorCode& status)
}
{
Mutex lmx(&notifyLock);
Mutex lmx(notifyLock());
if (listeners != NULL) {
// identity equality check
for (int i = 0, e = listeners->size(); i < e; ++i) {
@ -103,7 +106,7 @@ void
ICUNotifier::notifyChanged(void)
{
if (listeners != NULL) {
Mutex lmx(&notifyLock);
Mutex lmx(notifyLock());
if (listeners != NULL) {
for (int i = 0, e = listeners->size(); i < e; ++i) {
EventListener* el = (EventListener*)listeners->elementAt(i);

View file

@ -194,9 +194,12 @@ static struct {
/*initializes some global variables */
static UHashtable *SHARED_DATA_HASHTABLE = NULL;
static icu::UMutex cnvCacheMutex = U_MUTEX_INITIALIZER; /* Mutex for synchronizing cnv cache access. */
/* Note: the global mutex is used for */
/* reference count updates. */
static icu::UMutex *cnvCacheMutex() { /* Mutex for synchronizing cnv cache access. */
static icu::UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
/* Note: the global mutex is used for */
/* reference count updates. */
static const char **gAvailableConverters = NULL;
static uint16_t gAvailableConverterCount = 0;
@ -599,9 +602,9 @@ U_CFUNC void
ucnv_unloadSharedDataIfReady(UConverterSharedData *sharedData)
{
if(sharedData != NULL && sharedData->isReferenceCounted) {
umtx_lock(&cnvCacheMutex);
umtx_lock(cnvCacheMutex());
ucnv_unload(sharedData);
umtx_unlock(&cnvCacheMutex);
umtx_unlock(cnvCacheMutex());
}
}
@ -609,9 +612,9 @@ U_CFUNC void
ucnv_incrementRefCount(UConverterSharedData *sharedData)
{
if(sharedData != NULL && sharedData->isReferenceCounted) {
umtx_lock(&cnvCacheMutex);
umtx_lock(cnvCacheMutex());
sharedData->referenceCounter++;
umtx_unlock(&cnvCacheMutex);
umtx_unlock(cnvCacheMutex());
}
}
@ -812,9 +815,9 @@ ucnv_loadSharedData(const char *converterName,
pArgs->nestedLoads=1;
pArgs->pkg=NULL;
umtx_lock(&cnvCacheMutex);
umtx_lock(cnvCacheMutex());
mySharedConverterData = ucnv_load(pArgs, err);
umtx_unlock(&cnvCacheMutex);
umtx_unlock(cnvCacheMutex());
if (U_FAILURE (*err) || (mySharedConverterData == NULL))
{
return NULL;
@ -1061,7 +1064,7 @@ ucnv_flushCache ()
* because the sequence of looking up in the cache + incrementing
* is protected by cnvCacheMutex.
*/
umtx_lock(&cnvCacheMutex);
umtx_lock(cnvCacheMutex());
/*
* double loop: A delta/extension-only converter has a pointer to its base table's
* shared data; the first iteration of the outer loop may see the delta converter
@ -1090,7 +1093,7 @@ ucnv_flushCache ()
}
}
} while(++i == 1 && remaining > 0);
umtx_unlock(&cnvCacheMutex);
umtx_unlock(cnvCacheMutex());
UTRACE_DATA1(UTRACE_INFO, "ucnv_flushCache() exits with %d converters remaining", remaining);
@ -1196,7 +1199,7 @@ internalSetName(const char *name, UErrorCode *status) {
}
algorithmicSharedData = getAlgorithmicTypeFromName(stackArgs.name);
umtx_lock(&cnvCacheMutex);
umtx_lock(cnvCacheMutex());
gDefaultAlgorithmicSharedData = algorithmicSharedData;
gDefaultConverterContainsOption = containsOption;
@ -1212,7 +1215,7 @@ internalSetName(const char *name, UErrorCode *status) {
ucnv_enableCleanup();
umtx_unlock(&cnvCacheMutex);
umtx_unlock(cnvCacheMutex());
}
#endif
@ -1237,7 +1240,7 @@ ucnv_getDefaultName() {
but ucnv_setDefaultName is not thread safe.
*/
{
icu::Mutex lock(&cnvCacheMutex);
icu::Mutex lock(cnvCacheMutex());
name = gDefaultConverterName;
}
if(name==NULL) {

View file

@ -365,7 +365,10 @@ U_CDECL_END
#if !UCONFIG_NO_SERVICE
struct CReg;
static UMutex gCRegLock = U_MUTEX_INITIALIZER;
static UMutex *gCRegLock() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
static CReg* gCRegHead = 0;
struct CReg : public icu::UMemory {
@ -391,14 +394,14 @@ struct CReg : public icu::UMemory {
if (status && U_SUCCESS(*status) && _iso && _id) {
CReg* n = new CReg(_iso, _id);
if (n) {
umtx_lock(&gCRegLock);
umtx_lock(gCRegLock());
if (!gCRegHead) {
/* register for the first time */
ucln_common_registerCleanup(UCLN_COMMON_CURRENCY, currency_cleanup);
}
n->next = gCRegHead;
gCRegHead = n;
umtx_unlock(&gCRegLock);
umtx_unlock(gCRegLock());
return n;
}
*status = U_MEMORY_ALLOCATION_ERROR;
@ -408,7 +411,7 @@ struct CReg : public icu::UMemory {
static UBool unreg(UCurrRegistryKey key) {
UBool found = FALSE;
umtx_lock(&gCRegLock);
umtx_lock(gCRegLock());
CReg** p = &gCRegHead;
while (*p) {
@ -421,13 +424,13 @@ struct CReg : public icu::UMemory {
p = &((*p)->next);
}
umtx_unlock(&gCRegLock);
umtx_unlock(gCRegLock());
return found;
}
static const UChar* get(const char* id) {
const UChar* result = NULL;
umtx_lock(&gCRegLock);
umtx_lock(gCRegLock());
CReg* p = gCRegHead;
/* register cleanup of the mutex */
@ -439,7 +442,7 @@ struct CReg : public icu::UMemory {
}
p = p->next;
}
umtx_unlock(&gCRegLock);
umtx_unlock(gCRegLock());
return result;
}
@ -690,7 +693,13 @@ ucurr_getName(const UChar* currency,
key.append("/", ec2);
key.append(buf, ec2);
s = ures_getStringByKeyWithFallback(rb.getAlias(), key.data(), len, &ec2);
} else {
if (ec2 == U_MISSING_RESOURCE_ERROR) {
*ec = U_USING_FALLBACK_WARNING;
ec2 = U_ZERO_ERROR;
choice = UCURR_SYMBOL_NAME;
}
}
if (s == NULL) {
ures_getByKey(rb.getAlias(), CURRENCIES, rb.getAlias(), &ec2);
ures_getByKeyWithFallback(rb.getAlias(), buf, rb.getAlias(), &ec2);
s = ures_getStringByIndex(rb.getAlias(), choice, len, &ec2);
@ -1347,7 +1356,10 @@ static CurrencyNameCacheEntry* currCache[CURRENCY_NAME_CACHE_NUM] = {NULL};
// It is a simple round-robin replacement strategy.
static int8_t currentCacheEntryIndex = 0;
static UMutex gCurrencyCacheMutex = U_MUTEX_INITIALIZER;
static UMutex *gCurrencyCacheMutex() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
// Cache deletion
static void
@ -1396,7 +1408,7 @@ getCacheEntry(const char* locale, UErrorCode& ec) {
CurrencyNameStruct* currencySymbols = NULL;
CurrencyNameCacheEntry* cacheEntry = NULL;
umtx_lock(&gCurrencyCacheMutex);
umtx_lock(gCurrencyCacheMutex());
// in order to handle racing correctly,
// not putting 'search' in a separate function.
int8_t found = -1;
@ -1411,13 +1423,13 @@ getCacheEntry(const char* locale, UErrorCode& ec) {
cacheEntry = currCache[found];
++(cacheEntry->refCount);
}
umtx_unlock(&gCurrencyCacheMutex);
umtx_unlock(gCurrencyCacheMutex());
if (found == -1) {
collectCurrencyNames(locale, &currencyNames, &total_currency_name_count, &currencySymbols, &total_currency_symbol_count, ec);
if (U_FAILURE(ec)) {
return NULL;
}
umtx_lock(&gCurrencyCacheMutex);
umtx_lock(gCurrencyCacheMutex());
// check again.
for (int8_t i = 0; i < CURRENCY_NAME_CACHE_NUM; ++i) {
if (currCache[i]!= NULL &&
@ -1456,19 +1468,19 @@ getCacheEntry(const char* locale, UErrorCode& ec) {
cacheEntry = currCache[found];
++(cacheEntry->refCount);
}
umtx_unlock(&gCurrencyCacheMutex);
umtx_unlock(gCurrencyCacheMutex());
}
return cacheEntry;
}
static void releaseCacheEntry(CurrencyNameCacheEntry* cacheEntry) {
umtx_lock(&gCurrencyCacheMutex);
umtx_lock(gCurrencyCacheMutex());
--(cacheEntry->refCount);
if (cacheEntry->refCount == 0) { // remove
deleteCacheEntry(cacheEntry);
}
umtx_unlock(&gCurrencyCacheMutex);
umtx_unlock(gCurrencyCacheMutex());
}
U_CAPI void

View file

@ -42,12 +42,15 @@ U_NAMESPACE_BEGIN
*************************************************************************************************/
// The ICU global mutex. Used when ICU implementation code passes NULL for the mutex pointer.
static UMutex globalMutex = U_MUTEX_INITIALIZER;
static UMutex *globalMutex() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
U_CAPI void U_EXPORT2
umtx_lock(UMutex *mutex) {
if (mutex == nullptr) {
mutex = &globalMutex;
mutex = globalMutex();
}
mutex->fMutex.lock();
}
@ -57,7 +60,7 @@ U_CAPI void U_EXPORT2
umtx_unlock(UMutex* mutex)
{
if (mutex == nullptr) {
mutex = &globalMutex;
mutex = globalMutex();
}
mutex->fMutex.unlock();
}
@ -71,7 +74,7 @@ UConditionVar::~UConditionVar() {
U_CAPI void U_EXPORT2
umtx_condWait(UConditionVar *cond, UMutex *mutex) {
if (mutex == nullptr) {
mutex = &globalMutex;
mutex = globalMutex();
}
cond->fCV.wait(mutex->fMutex);
}
@ -95,8 +98,15 @@ umtx_condSignal(UConditionVar *cond) {
*
*************************************************************************************************/
static std::mutex initMutex;
static std::condition_variable initCondition;
static std::mutex &initMutex() {
static std::mutex m;
return m;
}
static std::condition_variable &initCondition() {
static std::condition_variable cv;
return cv;
}
// This function is called when a test of a UInitOnce::fState reveals that
@ -109,7 +119,7 @@ static std::condition_variable initCondition;
//
U_COMMON_API UBool U_EXPORT2
umtx_initImplPreInit(UInitOnce &uio) {
std::unique_lock<std::mutex> lock(initMutex);
std::unique_lock<std::mutex> lock(initMutex());
if (umtx_loadAcquire(uio.fState) == 0) {
umtx_storeRelease(uio.fState, 1);
@ -118,7 +128,7 @@ umtx_initImplPreInit(UInitOnce &uio) {
while (umtx_loadAcquire(uio.fState) == 1) {
// Another thread is currently running the initialization.
// Wait until it completes.
initCondition.wait(lock);
initCondition().wait(lock);
}
U_ASSERT(uio.fState == 2);
return false;
@ -135,10 +145,10 @@ umtx_initImplPreInit(UInitOnce &uio) {
U_COMMON_API void U_EXPORT2
umtx_initImplPostInit(UInitOnce &uio) {
{
std::unique_lock<std::mutex> lock(initMutex);
std::unique_lock<std::mutex> lock(initMutex());
umtx_storeRelease(uio.fState, 2);
}
initCondition.notify_all();
initCondition().notify_all();
}
U_NAMESPACE_END

View file

@ -115,6 +115,7 @@
#define dayPeriodRulesCleanup U_ICU_ENTRY_POINT_RENAME(dayPeriodRulesCleanup)
#define deleteAllowedHourFormats U_ICU_ENTRY_POINT_RENAME(deleteAllowedHourFormats)
#define gTimeZoneFilesInitOnce U_ICU_ENTRY_POINT_RENAME(gTimeZoneFilesInitOnce)
#define initNumsysNames U_ICU_ENTRY_POINT_RENAME(initNumsysNames)
#define izrule_clone U_ICU_ENTRY_POINT_RENAME(izrule_clone)
#define izrule_close U_ICU_ENTRY_POINT_RENAME(izrule_close)
#define izrule_equals U_ICU_ENTRY_POINT_RENAME(izrule_equals)
@ -133,6 +134,7 @@
#define locale_getKeywordsStart U_ICU_ENTRY_POINT_RENAME(locale_getKeywordsStart)
#define locale_get_default U_ICU_ENTRY_POINT_RENAME(locale_get_default)
#define locale_set_default U_ICU_ENTRY_POINT_RENAME(locale_set_default)
#define numSysCleanup U_ICU_ENTRY_POINT_RENAME(numSysCleanup)
#define pl_addFontRun U_ICU_ENTRY_POINT_RENAME(pl_addFontRun)
#define pl_addLocaleRun U_ICU_ENTRY_POINT_RENAME(pl_addLocaleRun)
#define pl_addValueRun U_ICU_ENTRY_POINT_RENAME(pl_addValueRun)

View file

@ -21,8 +21,14 @@
#include "umutex.h"
static icu::UnifiedCache *gCache = NULL;
static icu::UMutex gCacheMutex = U_MUTEX_INITIALIZER;
static icu::UConditionVar gInProgressValueAddedCond = U_CONDITION_INITIALIZER;
static icu::UMutex *gCacheMutex() {
static icu::UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
static icu::UConditionVar *gInProgressValueAddedCond() {
static icu::UConditionVar cv = U_CONDITION_INITIALIZER;
return &cv;
}
static icu::UInitOnce gCacheInitOnce = U_INITONCE_INITIALIZER;
static const int32_t MAX_EVICT_ITERATIONS = 10;
@ -132,28 +138,28 @@ void UnifiedCache::setEvictionPolicy(
status = U_ILLEGAL_ARGUMENT_ERROR;
return;
}
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
fMaxUnused = count;
fMaxPercentageOfInUse = percentageOfInUseItems;
}
int32_t UnifiedCache::unusedCount() const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
return uhash_count(fHashtable) - fNumValuesInUse;
}
int64_t UnifiedCache::autoEvictedCount() const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
return fAutoEvictedCount;
}
int32_t UnifiedCache::keyCount() const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
return uhash_count(fHashtable);
}
void UnifiedCache::flush() const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
// Use a loop in case cache items that are flushed held hard references to
// other cache items making those additional cache items eligible for
@ -162,7 +168,7 @@ void UnifiedCache::flush() const {
}
void UnifiedCache::handleUnreferencedObject() const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
--fNumValuesInUse;
_runEvictionSlice();
}
@ -181,7 +187,7 @@ void UnifiedCache::dump() {
}
void UnifiedCache::dumpContents() const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
_dumpContents();
}
@ -221,7 +227,7 @@ UnifiedCache::~UnifiedCache() {
// Now all that should be left in the cache are entries that refer to
// each other and entries with hard references from outside the cache.
// Nothing we can do about these so proceed to wipe out the cache.
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
_flush(TRUE);
}
uhash_close(fHashtable);
@ -322,7 +328,7 @@ void UnifiedCache::_putIfAbsentAndGet(
const CacheKeyBase &key,
const SharedObject *&value,
UErrorCode &status) const {
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
const UHashElement *element = uhash_find(fHashtable, &key);
if (element != NULL && !_inProgress(element)) {
_fetch(element, value, status);
@ -347,14 +353,14 @@ UBool UnifiedCache::_poll(
UErrorCode &status) const {
U_ASSERT(value == NULL);
U_ASSERT(status == U_ZERO_ERROR);
Mutex lock(&gCacheMutex);
Mutex lock(gCacheMutex());
const UHashElement *element = uhash_find(fHashtable, &key);
// If the hash table contains an inProgress placeholder entry for this key,
// this means that another thread is currently constructing the value object.
// Loop, waiting for that construction to complete.
while (element != NULL && _inProgress(element)) {
umtx_condWait(&gInProgressValueAddedCond, &gCacheMutex);
umtx_condWait(gInProgressValueAddedCond(), gCacheMutex());
element = uhash_find(fHashtable, &key);
}
@ -427,7 +433,7 @@ void UnifiedCache::_put(
// Tell waiting threads that we replace in-progress status with
// an error.
umtx_condBroadcast(&gInProgressValueAddedCond);
umtx_condBroadcast(gInProgressValueAddedCond());
}
void UnifiedCache::_fetch(

View file

@ -49,7 +49,10 @@ TODO: This cache should probably be removed when the deprecated code is
static UHashtable *cache = NULL;
static icu::UInitOnce gCacheInitOnce;
static UMutex resbMutex = U_MUTEX_INITIALIZER;
static UMutex *resbMutex() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
/* INTERNAL: hashes an entry */
static int32_t U_CALLCONV hashEntry(const UHashTok parm) {
@ -93,13 +96,13 @@ static UBool chopLocale(char *name) {
* Internal function
*/
static void entryIncrease(UResourceDataEntry *entry) {
umtx_lock(&resbMutex);
umtx_lock(resbMutex());
entry->fCountExisting++;
while(entry->fParent != NULL) {
entry = entry->fParent;
entry->fCountExisting++;
}
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
}
/**
@ -181,9 +184,9 @@ static int32_t ures_flushCache()
/*if shared data hasn't even been lazy evaluated yet
* return 0
*/
umtx_lock(&resbMutex);
umtx_lock(resbMutex());
if (cache == NULL) {
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
return 0;
}
@ -215,7 +218,7 @@ static int32_t ures_flushCache()
* got decremented by free_entry().
*/
} while(deletedMore);
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
return rbDeletedNum;
}
@ -229,9 +232,9 @@ U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void) {
const UHashElement *e;
UResourceDataEntry *resB;
umtx_lock(&resbMutex);
umtx_lock(resbMutex());
if (cache == NULL) {
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
fprintf(stderr,"%s:%d: RB Cache is NULL.\n", __FILE__, __LINE__);
return FALSE;
}
@ -251,7 +254,7 @@ U_CAPI UBool U_EXPORT2 ures_dumpCacheContents(void) {
fprintf(stderr,"%s:%d: RB Cache still contains %d items.\n", __FILE__, __LINE__, uhash_count(cache));
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
return cacheNotEmpty;
}
@ -663,7 +666,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
}
}
umtx_lock(&resbMutex);
umtx_lock(resbMutex());
{ /* umtx_lock */
/* We're going to skip all the locales that do not have any data */
r = findFirstExisting(path, name, &isRoot, &hasChopped, &isDefault, &intStatus);
@ -762,7 +765,7 @@ static UResourceDataEntry *entryOpen(const char* path, const char* localeID,
}
} /* umtx_lock */
finishUnlock:
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
if(U_SUCCESS(*status)) {
if(intStatus != U_ZERO_ERROR) {
@ -787,7 +790,7 @@ entryOpenDirect(const char* path, const char* localeID, UErrorCode* status) {
return NULL;
}
umtx_lock(&resbMutex);
umtx_lock(resbMutex());
// findFirstExisting() without fallbacks.
UResourceDataEntry *r = init_entry(localeID, path, status);
if(U_SUCCESS(*status)) {
@ -825,7 +828,7 @@ entryOpenDirect(const char* path, const char* localeID, UErrorCode* status) {
t1 = t1->fParent;
}
}
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
return r;
}
@ -868,9 +871,9 @@ static void entryCloseInt(UResourceDataEntry *resB) {
*/
static void entryClose(UResourceDataEntry *resB) {
umtx_lock(&resbMutex);
umtx_lock(resbMutex());
entryCloseInt(resB);
umtx_unlock(&resbMutex);
umtx_unlock(resbMutex());
}
/*

View file

@ -47,7 +47,10 @@ Static cache for already opened StringPrep profiles
static UHashtable *SHARED_DATA_HASHTABLE = NULL;
static icu::UInitOnce gSharedDataInitOnce;
static UMutex usprepMutex = U_MUTEX_INITIALIZER;
static UMutex *usprepMutex() {
static UMutex m = U_MUTEX_INITIALIZER;
return &m;
}
/* format version of spp file */
//static uint8_t formatVersion[4]={ 0, 0, 0, 0 };
@ -148,9 +151,9 @@ usprep_internal_flushCache(UBool noRefCount){
* if shared data hasn't even been lazy evaluated yet
* return 0
*/
umtx_lock(&usprepMutex);
umtx_lock(usprepMutex());
if (SHARED_DATA_HASHTABLE == NULL) {
umtx_unlock(&usprepMutex);
umtx_unlock(usprepMutex());
return 0;
}
@ -181,7 +184,7 @@ usprep_internal_flushCache(UBool noRefCount){
}
}
umtx_unlock(&usprepMutex);
umtx_unlock(usprepMutex());
return deletedNum;
}
@ -259,7 +262,7 @@ loadData(UStringPrepProfile* profile,
}
/* in the mutex block, set the data for this process */
umtx_lock(&usprepMutex);
umtx_lock(usprepMutex());
if(profile->sprepData==NULL) {
profile->sprepData=dataMemory;
dataMemory=NULL;
@ -268,7 +271,7 @@ loadData(UStringPrepProfile* profile,
} else {
p=(const int32_t *)udata_getMemory(profile->sprepData);
}
umtx_unlock(&usprepMutex);
umtx_unlock(usprepMutex());
/* initialize some variables */
profile->mappingData=(uint16_t *)((uint8_t *)(p+_SPREP_INDEX_TOP)+profile->indexes[_SPREP_INDEX_TRIE_SIZE]);
@ -325,12 +328,12 @@ usprep_getProfile(const char* path,
stackKey.path = (char*) path;
/* fetch the data from the cache */
umtx_lock(&usprepMutex);
umtx_lock(usprepMutex());
profile = (UStringPrepProfile*) (uhash_get(SHARED_DATA_HASHTABLE,&stackKey));
if(profile != NULL) {
profile->refCount++;
}
umtx_unlock(&usprepMutex);
umtx_unlock(usprepMutex());
if(profile == NULL) {
/* else load the data and put the data in the cache */
@ -362,7 +365,7 @@ usprep_getProfile(const char* path,
return NULL;
}
umtx_lock(&usprepMutex);
umtx_lock(usprepMutex());
// If another thread already inserted the same key/value, refcount and cleanup our thread data
profile = (UStringPrepProfile*) (uhash_get(SHARED_DATA_HASHTABLE,&stackKey));
if(profile != NULL) {
@ -383,7 +386,7 @@ usprep_getProfile(const char* path,
profile->refCount = 1;
uhash_put(SHARED_DATA_HASHTABLE, key.orphan(), profile, status);
}
umtx_unlock(&usprepMutex);
umtx_unlock(usprepMutex());
}
return profile;
@ -422,12 +425,12 @@ usprep_close(UStringPrepProfile* profile){
return;
}
umtx_lock(&usprepMutex);
umtx_lock(usprepMutex());
/* decrement the ref count*/
if(profile->refCount > 0){
profile->refCount--;
}
umtx_unlock(&usprepMutex);
umtx_unlock(usprepMutex());
}

View file

@ -2603,6 +2603,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Instruct Python to never write any byte code to the ICU source tree.
PYTHONDONTWRITEBYTECODE=1
export PYTHONDONTWRITEBYTECODE

View file

@ -16,6 +16,10 @@ AC_INIT([ICU],
[International Components for Unicode],
[http://icu-project.org])
# Instruct Python to never write any byte code to the ICU source tree.
PYTHONDONTWRITEBYTECODE=1
export PYTHONDONTWRITEBYTECODE
AC_CONFIG_MACRO_DIR([config/m4])
AC_CONFIG_SRCDIR([common/unicode/utypes.h])

View file

@ -5,13 +5,14 @@
# TODO(ICU-20301): Remove this.
from __future__ import print_function
from distutils.sysconfig import parse_makefile
from buildtool import *
from buildtool import locale_dependencies
from buildtool import utils
from buildtool.request_types import *
import os
import sys
import xml.etree.ElementTree as ET
def generate(config, glob, common_vars):
@ -41,63 +42,49 @@ def generate(config, glob, common_vars):
requests += generate_tree(config, glob, common_vars,
"locales",
None,
"resfiles.mk",
"GENRB_CLDR_VERSION",
"GENRB_SOURCE",
"icu-locale-deprecates.xml",
True,
[])
requests += generate_tree(config, glob, common_vars,
"curr",
"curr",
"resfiles.mk",
"CURR_CLDR_VERSION",
"CURR_SOURCE",
"icu-locale-deprecates.xml",
True,
[])
requests += generate_tree(config, glob, common_vars,
"lang",
"lang",
"resfiles.mk",
"LANG_CLDR_VERSION",
"LANG_SOURCE",
"icu-locale-deprecates.xml",
True,
[])
requests += generate_tree(config, glob, common_vars,
"region",
"region",
"resfiles.mk",
"REGION_CLDR_VERSION",
"REGION_SOURCE",
"icu-locale-deprecates.xml",
True,
[])
requests += generate_tree(config, glob, common_vars,
"zone",
"zone",
"resfiles.mk",
"ZONE_CLDR_VERSION",
"ZONE_SOURCE",
"icu-locale-deprecates.xml",
True,
[])
requests += generate_tree(config, glob, common_vars,
"unit",
"unit",
"resfiles.mk",
"UNIT_CLDR_VERSION",
"UNIT_SOURCE",
"icu-locale-deprecates.xml",
True,
[])
requests += generate_tree(config, glob, common_vars,
"coll",
"coll",
"colfiles.mk",
"COLLATION_CLDR_VERSION",
"COLLATION_SOURCE",
"icu-coll-deprecates.xml",
False,
# Depends on timezoneTypes.res and keyTypeData.res.
# TODO: We should not need this dependency to build collation.
@ -107,18 +94,14 @@ def generate(config, glob, common_vars):
requests += generate_tree(config, glob, common_vars,
"brkitr",
"brkitr",
"brkfiles.mk",
"BRK_RES_CLDR_VERSION",
"BRK_RES_SOURCE",
"icu-locale-deprecates.xml",
False,
[DepTarget("brkitr_brk"), DepTarget("dictionaries")])
requests += generate_tree(config, glob, common_vars,
"rbnf",
"rbnf",
"rbnffiles.mk",
"RBNF_CLDR_VERSION",
"RBNF_SOURCE",
"icu-rbnf-deprecates.xml",
False,
[])
@ -432,7 +415,7 @@ def generate_translit(config, glob, common_vars):
]
dep_files = set(InFile(filename) for filename in glob("translit/*.txt"))
dep_files -= set(input_files)
dep_files = list(dep_files)
dep_files = list(sorted(dep_files))
input_basenames = [v.filename[9:] for v in input_files]
output_files = [
OutFile("translit/%s.res" % v[:-4])
@ -464,9 +447,7 @@ def generate_tree(
common_vars,
sub_dir,
out_sub_dir,
resfile_name,
version_var,
source_var,
xml_filename,
use_pool_bundle,
dep_targets):
requests = []
@ -536,27 +517,33 @@ def generate_tree(
]
# Generate index txt file
# TODO: Change .mk files to .py files so they can be loaded directly.
# Alternatively, figure out a way to not require reading this file altogether.
# Right now, it is required for the index list file.
# Reading these files as .py will be required for Bazel.
mk_values = parse_makefile("{GLOB_DIR}/{IN_SUB_DIR}/{RESFILE_NAME}".format(
IN_SUB_DIR = sub_dir,
RESFILE_NAME = resfile_name,
**common_vars
))
cldr_version = mk_values[version_var] if version_var and sub_dir == "locales" else None
index_input_files = [
InFile("%s/%s" % (sub_dir, basename))
for basename in mk_values[source_var].split()
]
synthetic_locales = set()
deprecates_xml_path = os.path.join(os.path.dirname(__file__), xml_filename)
deprecates_xml = ET.parse(deprecates_xml_path)
for child in deprecates_xml.getroot():
if child.tag == "alias":
synthetic_locales.add(child.attrib["from"])
elif child.tag == "emptyLocale":
synthetic_locales.add(child.attrib["locale"])
else:
raise ValueError("Unknown tag in deprecates XML: %s" % child.tag)
index_input_files = []
for f in input_files:
file_stem = f.filename[f.filename.rfind("/")+1:-4]
if file_stem == "root":
continue
if file_stem in synthetic_locales:
continue
index_input_files.append(f)
cldr_version = locale_dependencies.data["cldrVersion"] if sub_dir == "locales" else None
index_file_txt = TmpFile("{IN_SUB_DIR}/{INDEX_NAME}.txt".format(
IN_SUB_DIR = sub_dir,
**common_vars
))
index_file_target_name = "%s_index_txt" % sub_dir
requests += [
IndexTxtRequest(
name = "%s_index_txt" % sub_dir,
name = index_file_target_name,
category = category,
input_files = index_input_files,
output_file = index_file_txt,
@ -572,9 +559,9 @@ def generate_tree(
requests += [
SingleExecutionRequest(
name = "%s_index_res" % sub_dir,
category = "%s_index" % sub_dir,
dep_targets = [],
input_files = [index_file_txt],
category = category,
dep_targets = [DepTarget(index_file_target_name)],
input_files = [],
output_files = [index_res_file],
tool = IcuTool("genrb"),
args = "-s {TMP_DIR}/{IN_SUB_DIR} -d {OUT_DIR}/{OUT_PREFIX} -i {OUT_DIR} "

View file

@ -317,7 +317,9 @@ $(OUTDIR)/icu4j/icutzdata.jar: generate-data
# - extract all data items
# - package them into the .jar file
# TODO(ICU-20466): Move this to Python
$(OUTDIR)/icu4j/icudata.jar: generate-data
# NOTE: If you get the error "No rule to make target 'out/build/icudt64l/uprops.icu'",
# you need to reconfigure with unicore data. See icu4j-readme.txt
$(OUTDIR)/icu4j/icudata.jar: generate-data | $(OUT_DIR)/uprops.icu
$(JAR) cf $(OUTDIR)/icu4j/icudata.jar -C $(OUTDIR)/icu4j $(ICU4J_DATA_DIRNAME)/
ICU4J_DATA=$(OUTDIR)/icu4j/icudata.jar

View file

@ -1,57 +0,0 @@
# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html#License
BRK_RES_CLDR_VERSION = 35
#
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# NOTE (January 2019): Please use ICU's new data filtering to select locale
# files. This makefile is no longer used to filter locale files.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# Old description: A list of txt's to build
# Note:
#
# If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a 'brklocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'brklocal.mk' files:
#
# * To add an additional locale to the list:
# _____________________________________________________
# | BRK_RES_SOURCE_LOCAL = myLocale.txt ...
#
# * To REPLACE the default list and only build with a few
# locales:
# _____________________________________________________
# | BRK_RES_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.
# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
BRK_RES_SYNTHETIC_ALIAS =
# All aliases (to not be included under 'installed'), but not including root.
BRK_RES_ALIAS_SOURCE = $(BRK_RES_SYNTHETIC_ALIAS)
# List of dictionary files (dict).
BRK_DICT_SOURCE = burmesedict.txt cjdict.txt khmerdict.txt laodict.txt\
thaidict.txt
# List of break iterator files (brk).
BRK_SOURCE = char.txt line.txt line_cj.txt line_loose.txt\
line_loose_cj.txt line_normal.txt line_normal_cj.txt sent.txt sent_el.txt\
title.txt word.txt word_POSIX.txt
# Ordinary resources
BRK_RES_SOURCE = de.txt el.txt en.txt en_US.txt\
en_US_POSIX.txt es.txt fr.txt it.txt ja.txt\
pt.txt ru.txt zh.txt zh_Hant.txt

View file

@ -1,7 +1,7 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
root{
Version{"2.1.44.57"}
Version{"2.1.49.32"}
boundaries{
grapheme:process(dependency){"char.brk"}
line:process(dependency){"line.brk"}

View file

@ -111,7 +111,6 @@
<arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/main"/>
<arg name="--supplementaldir" value="${env.CLDR_DIR}/common/supplemental" />
<arg name="--type" value="locales"/>
<arg name="--makefile" value="resfiles.mk"/>
<arg name="--depgraphfile" value="../buildtool/locale_dependencies.py"/>
</args>
<remapper>
@ -163,7 +162,6 @@
<arg name="--destdir" value="${env.ICU4C_DIR}/source/data/coll"/>
<arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/collation"/>
<arg name="--type" value="collation"/>
<arg name="--makefile" value="colfiles.mk"/>
</args>
<!-- http://ant.apache.org/faq.html#xml-entity-include -->
&icu-config;
@ -179,7 +177,6 @@
<arg name="--destdir" value="${env.ICU4C_DIR}/source/data/rbnf"/>
<arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/rbnf"/>
<arg name="--type" value="rbnf" />
<arg name="--makefile" value="rbnffiles.mk"/>
</args>
<!-- http://ant.apache.org/faq.html#xml-entity-include -->
&icu-config;
@ -319,7 +316,6 @@
<arg name="--specialsdir" value="${env.ICU4C_DIR}/source/data/xml/brkitr"/>
<arg name="--destdir" value="${env.ICU4C_DIR}/source/data/brkitr"/>
<arg name="--type" value="brkitr" />
<arg name="--makefile" value="brkfiles.mk"/>
</args>
<!-- The entity include is not required for this target -->
<!-- http://ant.apache.org/faq.html#xml-entity-include

View file

@ -78,12 +78,6 @@ flag_parser.add_argument(
help = "Path to an ICU data filter JSON file.",
default = None
)
flag_parser.add_argument(
"--collation_ucadata",
help = "Which data set to use for ucadata in collation.",
choices = ["unihan", "implicithan"],
default = "unihan"
)
flag_parser.add_argument(
"--include_uni_core_data",
help = "Include the full Unicode core data in the dat file.",
@ -126,9 +120,6 @@ class Config(object):
# Process arguments
self.max_parallel = (args.seqmode == "parallel")
# Either "unihan" or "implicithan"
self.coll_han_type = args.collation_ucadata
# Boolean: Whether to include core Unicode data files in the .dat file
self.include_uni_core_data = args.include_uni_core_data
@ -145,6 +136,11 @@ class Config(object):
print("Error: Could not read filter file %s." % args.filter_file, file=sys.stderr)
exit(1)
# Either "unihan" or "implicithan"
self.coll_han_type = "unihan"
if "collationUCAData" in self.filters_json_data:
self.coll_han_type = self.filters_json_data["collationUCAData"]
def _parse_filter_file(self, f):
# Use the Hjson parser if it is available; otherwise, use vanilla JSON.
try:

View file

@ -281,8 +281,10 @@ class ResourceFilterInfo(object):
continue
if request.tool != IcuTool("genrb"):
continue
if not request.input_files:
continue
self._set_files(request.input_files)
request.dep_targets += [self.filter_files]
request.dep_targets += [self.filter_files[:]]
arg_str = "--filterDir {TMP_DIR}/%s" % self.filter_tmp_dir
request.args = "%s %s" % (arg_str, request.args)

View file

@ -53,6 +53,10 @@
},
"additionalProperties": false,
"required": ["directory", "replacements"]
},
"collationUCAData": {
"type": "string",
"enum": ["unihan", "implicithan"]
}
},
"additionalProperties": false,

View file

@ -3,17 +3,22 @@
# License & terms of use: http://www.unicode.org/copyright.html#License
data = {
"cldrVersion": "35",
"aliases": {
"ars": "ar_SA",
"az_AZ": "az_Latn_AZ",
"bs_BA": "bs_Latn_BA",
"en_NH": "en_VU",
"en_RH": "en_ZW",
"ff_CM": "ff_Latn_CM",
"ff_GN": "ff_Latn_GN",
"ff_MR": "ff_Latn_MR",
"ff_SN": "ff_Latn_SN",
"in": "id",
"in_ID": "id_ID",
"iw": "he",
"iw_IL": "he_IL",
"mo": "ro_MD",
"mo": "ro",
"no_NO": "nb_NO",
"no_NO_NY": "nn_NO",
"no": "nb",

View file

@ -41,6 +41,10 @@ class AbstractRequest(object):
raise ValueError("Unknown argument: %s" % key)
def apply_file_filter(self, filter):
"""
Returns True if this request still has input files after filtering,
or False if the request is "empty" after filtering.
"""
return True
def flatten(self, config, all_requests, common_vars):
@ -104,6 +108,11 @@ class AbstractExecutionRequest(AbstractRequest):
del self.input_files[i]
for _, v in self.format_with.items():
if isinstance(v, list):
assert len(v) == len(self.input_files) + 1
del v[i]
for v in self.dep_targets:
if isinstance(v, list):
assert len(v) == len(self.input_files) + 1
del v[i]
def flatten(self, config, all_requests, common_vars):

View file

@ -43,8 +43,8 @@
# http://www.unicode.org/repos/cldr/trunk/common/dtd/ldml.dtd
#
# Unless you cache the dtds locally by
# 1. creating a temp directory e.g. /tmp/cldrdtd
# 2. setting CLDR_DTD_CACHE to it e.g. -DCLDR_DTD_CACHE=/tmp/cldrdtd
# 1. creating a temp directory e.g. ~/.cldrdtd
# 2. setting CLDR_DTD_CACHE to it e.g. -DCLDR_DTD_CACHE=~/.cldrdtd
# your system will make excessive network requests, which will result in the
# Unicode server blocking access.
#
@ -62,7 +62,7 @@
#
# -Xmx4096m, to give Java more memory; otherwise it may run out
# of heap.
# -DCLDR_DTD_CACHE=/tmp/cldrdtd (or some other temp directory
# -DCLDR_DTD_CACHE=~/.cldrdtd (or some other temp directory
# that already exists), to reduce frequent http: access to dtds
# and consequent blockage by Unicode server.
#
@ -140,7 +140,7 @@
# 1a. Java and ant variables, adjust for your system
export JAVA_HOME=`/usr/libexec/java_home`
export ANT_OPTS="-Xmx4096m -DCLDR_DTD_CACHE=/tmp/cldrdtd"
export ANT_OPTS="-Xmx4096m -DCLDR_DTD_CACHE=~/.cldrdtd"
# 1b. CLDR variables, adjust for your setup; with cygwin it might be e.g.
# CLDR_DIR=`cygpath -wp /build/cldr`
@ -152,6 +152,20 @@ export CLDR_DIR=$HOME/cldr/trunk
export ICU4C_DIR=$HOME/icu/icu4c
export ICU4J_ROOT=$HOME/icu/icu4j
# 1d. Pre-populate your CLDR DTD cache. You need to do this only once.
mkdir ~/.cldrdtd
cd ~/.cldrdtd
curl http://www.unicode.org/repos/cldr/trunk/common/dtd/ldml.dtd \
-o http___www.unicode.org_repos_cldr_trunk_common_dtd_ldml.dtd
# WAIT before hitting the server again; it WILL NOT give you a second chance!
sleep 5
curl http://www.unicode.org/repos/cldr/trunk/common/dtd/ldmlICU.dtd \
-o http___www.unicode.org_repos_cldr_trunk_common_dtd_ldmlICU.dtd
sleep 5
curl http://www.unicode.org/repos/cldr/trunk/common/dtd/ldmlSupplemental.dtd \
-o http___www.unicode.org_repos_cldr_trunk_common_dtd_ldmlSupplemental.dtd
# 2. Build the CLDR Java tools
# Optionally build the jar, but ant will look inside the classes directory anyway
@ -160,11 +174,11 @@ ant all
#ant jar
# 3. Configure ICU4C, build and test without new data first, to verify that
# there are no pre-existing errors (configure shown here for MacOSX, adjust
# for your platform).
# there are no pre-existing errors. Here <platform> is the runConfigureICU
# code for the platform you are building, e.g. Linux, MacOSX, Cygwin.
cd $ICU4C_DIR/source
./runConfigureICU MacOSX
./runConfigureICU <platform>
make all 2>&1 | tee /tmp/icu4c-oldData-makeAll.txt
make check 2>&1 | tee /tmp/icu4c-oldData-makeCheck.txt
@ -184,6 +198,11 @@ make check 2>&1 | tee /tmp/icu4c-oldData-makeCheck.txt
# a dtd cache and are still having timeout problems, the IP address of your system
# may have been blocked due to previous excessive access. In this case you may need
# to contact a Unicode sysadmin to restore access.
#
# Unfortunately, even if you have your DTD cache variable enabled, you may still
# get blocked and unable to populate your cache because of multiple successive
# requests to download the required DTD files. It is recommended that you
# pre-populate your cache as shown above in step 1d.
cd $ICU4C_DIR/source/data
ant setup
@ -207,8 +226,13 @@ git status
# 7. Now rebuild ICU4C with the new data and run make check tests.
# Again, keep a log so you can investigate the errors.
cd $ICU4C_DIR/source
# 7a. If any files were added or removed (likely), re-run configure:
./runConfigureICU <platform>
make clean
# 7b. Now do the rebuild.
make check 2>&1 | tee /tmp/icu4c-newData-makeCheck.txt
# 8. Investigate each test case failure. The first run processing new CLDR data
@ -241,9 +265,17 @@ cd $ICU4J_ROOT
ant all 2>&1 | tee /tmp/icu4j-oldData-antAll.txt
ant check 2>&1 | tee /tmp/icu4j-oldData-antCheck.txt
# 12. Now build the new data and test data for ICU4J
# 12. Transfer the data to ICU4J:
cd $ICU4C_DIR/source
# 12a. You need to reconfigure ICU4C to include the unicore data.
ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU <platform>
# 12b. Now build the jar files.
cd $ICU4C_DIR/source/data
# The following 2 lines are required to include the unicore data:
make clean
make -j6
make icu4j-data-install
cd $ICU4C_DIR/source/test/testdata
make icu4j-data-install

View file

@ -1,80 +0,0 @@
# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html#License
COLLATION_CLDR_VERSION = 35
#
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# NOTE (January 2019): Please use ICU's new data filtering to select locale
# files. This makefile is no longer used to filter locale files.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# Old description: A list of txt's to build
# Note:
#
# If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a 'collocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'collocal.mk' files:
#
# * To add an additional locale to the list:
# _____________________________________________________
# | COLLATION_SOURCE_LOCAL = myLocale.txt ...
#
# * To REPLACE the default list and only build with a few
# locales:
# _____________________________________________________
# | COLLATION_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.
# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
COLLATION_SYNTHETIC_ALIAS = ars.txt de_.txt de__PHONEBOOK.txt es_.txt\
es__TRADITIONAL.txt he_IL.txt id_ID.txt in.txt in_ID.txt\
iw.txt iw_IL.txt mo.txt nb_NO.txt no.txt\
no_NO.txt pa_Guru.txt pa_Guru_IN.txt pa_IN.txt ro_MD.txt\
sh.txt sh_BA.txt sh_CS.txt sh_YU.txt sr_BA.txt\
sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_RS.txt sr_Latn_BA.txt\
sr_Latn_RS.txt sr_ME.txt sr_RS.txt yue.txt yue_CN.txt\
yue_Hans.txt zh_CN.txt zh_HK.txt zh_Hans.txt zh_Hans_CN.txt\
zh_Hans_SG.txt zh_Hant_HK.txt zh_Hant_MO.txt zh_Hant_TW.txt zh_MO.txt\
zh_SG.txt zh_TW.txt
# All aliases (to not be included under 'installed'), but not including root.
COLLATION_ALIAS_SOURCE = $(COLLATION_SYNTHETIC_ALIAS)
# Empty locales, used for validSubLocale fallback.
COLLATION_EMPTY_SOURCE =
# Ordinary resources
COLLATION_SOURCE = $(COLLATION_EMPTY_SOURCE) af.txt am.txt ar.txt\
as.txt az.txt be.txt bg.txt bn.txt\
bo.txt bs.txt bs_Cyrl.txt ca.txt ceb.txt\
chr.txt cs.txt cy.txt da.txt de.txt\
de_AT.txt dsb.txt dz.txt ee.txt el.txt\
en.txt en_US.txt en_US_POSIX.txt eo.txt es.txt\
et.txt fa.txt fa_AF.txt fi.txt fil.txt\
fo.txt fr.txt fr_CA.txt ga.txt gl.txt\
gu.txt ha.txt haw.txt he.txt hi.txt\
hr.txt hsb.txt hu.txt hy.txt id.txt\
ig.txt is.txt it.txt ja.txt ka.txt\
kk.txt kl.txt km.txt kn.txt ko.txt\
kok.txt ku.txt ky.txt lb.txt lkt.txt\
ln.txt lo.txt lt.txt lv.txt mk.txt\
ml.txt mn.txt mr.txt ms.txt mt.txt\
my.txt nb.txt ne.txt nl.txt nn.txt\
om.txt or.txt pa.txt pl.txt ps.txt\
pt.txt ro.txt ru.txt se.txt si.txt\
sk.txt sl.txt smn.txt sq.txt sr.txt\
sr_Latn.txt sv.txt sw.txt ta.txt te.txt\
th.txt tk.txt to.txt tr.txt ug.txt\
uk.txt ur.txt uz.txt vi.txt wae.txt\
wo.txt xh.txt yi.txt yo.txt zh.txt\
zh_Hant.txt zu.txt

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
"%%ALIAS"{"ro"}
}

View file

@ -4,5 +4,5 @@ ar_AE{
Currencies%narrow{
BND{"$"}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -91,5 +91,5 @@ ceb{
one{"{1} {0}"}
other{"{1} {0}"}
}
Version{"2.1.48.67"}
Version{"2.1.49.33"}
}

View file

@ -2266,5 +2266,5 @@ el{
one{"{0} {1}"}
other{"{0} {1}"}
}
Version{"2.1.48.27"}
Version{"2.1.49.26"}
}

View file

@ -22,5 +22,5 @@ en_IN{
other{"VES"}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.14"}
}

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
eo{
Version{"2.1.47.82"}
Version{"2.1.49.33"}
}

View file

@ -0,0 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_CM{
"%%ALIAS"{"ff_Latn_CM"}
}

View file

@ -1,11 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_GN{
Currencies{
GNF{
"FG",
"GNF",
}
}
Version{"2.1.48.67"}
"%%ALIAS"{"ff_Latn_GN"}
}

View file

@ -3,6 +3,6 @@
/**
* generated alias target
*/
ro_MD{
ff_Latn_CM{
___{""}
}

View file

@ -7,5 +7,5 @@ ff_Latn_GH{
"GHS",
}
}
Version{"2.1.47.82"}
Version{"2.1.49.34"}
}

View file

@ -7,5 +7,5 @@ ff_Latn_GM{
"Dalasi Gammbi",
}
}
Version{"2.1.47.82"}
Version{"2.1.49.34"}
}

View file

@ -7,5 +7,5 @@ ff_Latn_LR{
"Dolaar Liberiyaa",
}
}
Version{"2.1.47.82"}
Version{"2.1.49.34"}
}

View file

@ -7,5 +7,5 @@ ff_Latn_SL{
"Lewoon Seraa Liyon",
}
}
Version{"2.1.47.82"}
Version{"2.1.49.34"}
}

View file

@ -3,6 +3,6 @@
/**
* generated alias target
*/
ro_MD{
ff_Latn_SN{
___{""}
}

View file

@ -1,11 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_MR{
Currencies{
MRU{
"UM",
"Ugiyya Muritani",
}
}
Version{"2.1.48.67"}
"%%ALIAS"{"ff_Latn_MR"}
}

View file

@ -0,0 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_SN{
"%%ALIAS"{"ff_Latn_SN"}
}

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
"%%ALIAS"{"ro"}
}

View file

@ -1248,5 +1248,5 @@ ms{
CurrencyUnitPatterns{
other{"{0} {1}"}
}
Version{"2.1.48.42"}
Version{"2.1.49.2"}
}

View file

@ -21,5 +21,5 @@ ps_PK{
other{"(نامعلومه مروجه پېسے)"}
}
}
Version{"2.1.48.67"}
Version{"2.1.49.34"}
}

View file

@ -1,145 +0,0 @@
# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html#License
CURR_CLDR_VERSION = 35
#
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# NOTE (January 2019): Please use ICU's new data filtering to select locale
# files. This makefile is no longer used to filter locale files.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# Old description: A list of txt's to build
# Note:
#
# If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a 'reslocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'reslocal.mk' files:
#
# * To add an additional locale to the list:
# _____________________________________________________
# | CURR_SOURCE_LOCAL = myLocale.txt ...
#
# * To REPLACE the default list and only build with a few
# locales:
# _____________________________________________________
# | CURR_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.
# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
CURR_SYNTHETIC_ALIAS = ar_SA.txt ars.txt az_AZ.txt az_Latn_AZ.txt\
bs_BA.txt bs_Latn_BA.txt en_NH.txt en_RH.txt fil_PH.txt\
he_IL.txt id_ID.txt in.txt in_ID.txt iw.txt\
iw_IL.txt ja_JP.txt ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt\
nn_NO.txt no.txt no_NO.txt no_NO_NY.txt pa_Arab_PK.txt\
pa_Guru_IN.txt pa_IN.txt pa_PK.txt sh.txt sh_BA.txt\
sh_CS.txt sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt\
sr_CS.txt sr_Cyrl_BA.txt sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_XK.txt\
sr_Cyrl_YU.txt sr_Latn_BA.txt sr_Latn_CS.txt sr_Latn_ME.txt sr_Latn_RS.txt\
sr_Latn_YU.txt sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt\
th_TH.txt th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt\
uz_Arab_AF.txt uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt\
yue_CN.txt yue_HK.txt yue_Hans_CN.txt yue_Hant_HK.txt zh_CN.txt\
zh_HK.txt zh_Hans_CN.txt zh_Hant_TW.txt zh_MO.txt zh_SG.txt\
zh_TW.txt
# All aliases (to not be included under 'installed'), but not including root.
CURR_ALIAS_SOURCE = $(CURR_SYNTHETIC_ALIAS)
# Ordinary resources
CURR_SOURCE = af.txt af_NA.txt agq.txt ak.txt\
am.txt ar.txt ar_AE.txt ar_DJ.txt ar_ER.txt\
ar_KM.txt ar_LB.txt ar_SO.txt ar_SS.txt as.txt\
asa.txt ast.txt az.txt az_Cyrl.txt az_Latn.txt\
bas.txt be.txt bem.txt bez.txt bg.txt\
bm.txt bn.txt bo.txt bo_IN.txt br.txt\
brx.txt bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt\
ca_FR.txt ccp.txt ce.txt ceb.txt cgg.txt\
chr.txt ckb.txt cs.txt cy.txt da.txt\
dav.txt de.txt de_CH.txt de_LI.txt de_LU.txt\
dje.txt dsb.txt dua.txt dyo.txt dz.txt\
ebu.txt ee.txt el.txt en.txt en_001.txt\
en_150.txt en_AE.txt en_AG.txt en_AI.txt en_AT.txt\
en_AU.txt en_BB.txt en_BE.txt en_BI.txt en_BM.txt\
en_BS.txt en_BW.txt en_BZ.txt en_CA.txt en_CC.txt\
en_CH.txt en_CK.txt en_CM.txt en_CX.txt en_CY.txt\
en_DE.txt en_DG.txt en_DK.txt en_DM.txt en_ER.txt\
en_FI.txt en_FJ.txt en_FK.txt en_FM.txt en_GB.txt\
en_GD.txt en_GG.txt en_GH.txt en_GI.txt en_GM.txt\
en_GY.txt en_HK.txt en_IE.txt en_IL.txt en_IM.txt\
en_IN.txt en_IO.txt en_JE.txt en_JM.txt en_KE.txt\
en_KI.txt en_KN.txt en_KY.txt en_LC.txt en_LR.txt\
en_LS.txt en_MG.txt en_MO.txt en_MS.txt en_MT.txt\
en_MU.txt en_MW.txt en_MY.txt en_NA.txt en_NF.txt\
en_NG.txt en_NL.txt en_NR.txt en_NU.txt en_NZ.txt\
en_PG.txt en_PH.txt en_PK.txt en_PN.txt en_PW.txt\
en_RW.txt en_SB.txt en_SC.txt en_SD.txt en_SE.txt\
en_SG.txt en_SH.txt en_SI.txt en_SL.txt en_SS.txt\
en_SX.txt en_SZ.txt en_TC.txt en_TK.txt en_TO.txt\
en_TT.txt en_TV.txt en_TZ.txt en_UG.txt en_VC.txt\
en_VG.txt en_VU.txt en_WS.txt en_ZA.txt en_ZM.txt\
en_ZW.txt eo.txt es.txt es_419.txt es_AR.txt\
es_BO.txt es_BR.txt es_BZ.txt es_CL.txt es_CO.txt\
es_CR.txt es_CU.txt es_DO.txt es_EC.txt es_GQ.txt\
es_GT.txt es_HN.txt es_MX.txt es_NI.txt es_PA.txt\
es_PE.txt es_PH.txt es_PR.txt es_PY.txt es_SV.txt\
es_US.txt es_UY.txt es_VE.txt et.txt eu.txt\
ewo.txt fa.txt fa_AF.txt ff.txt ff_GN.txt\
ff_Latn.txt ff_Latn_GH.txt ff_Latn_GM.txt ff_Latn_GN.txt ff_Latn_LR.txt\
ff_Latn_MR.txt ff_Latn_NG.txt ff_Latn_SL.txt ff_MR.txt fi.txt\
fil.txt fo.txt fo_DK.txt fr.txt fr_BI.txt\
fr_CA.txt fr_CD.txt fr_DJ.txt fr_DZ.txt fr_GN.txt\
fr_HT.txt fr_KM.txt fr_LU.txt fr_MG.txt fr_MR.txt\
fr_MU.txt fr_RW.txt fr_SC.txt fr_SY.txt fr_TN.txt\
fr_VU.txt fur.txt fy.txt ga.txt gd.txt\
gl.txt gsw.txt gu.txt guz.txt gv.txt\
ha.txt ha_GH.txt ha_NE.txt haw.txt he.txt\
hi.txt hr.txt hr_BA.txt hsb.txt hu.txt\
hy.txt ia.txt id.txt ig.txt ii.txt\
is.txt it.txt ja.txt jgo.txt jmc.txt\
jv.txt ka.txt kab.txt kam.txt kde.txt\
kea.txt khq.txt ki.txt kk.txt kkj.txt\
kl.txt kln.txt km.txt kn.txt ko.txt\
kok.txt ks.txt ksb.txt ksf.txt ksh.txt\
ku.txt kw.txt ky.txt lag.txt lb.txt\
lg.txt lkt.txt ln.txt ln_AO.txt lo.txt\
lrc.txt lt.txt lu.txt luo.txt luy.txt\
lv.txt mas.txt mas_TZ.txt mer.txt mfe.txt\
mg.txt mgh.txt mgo.txt mi.txt mk.txt\
ml.txt mn.txt mr.txt ms.txt ms_BN.txt\
ms_SG.txt mt.txt mua.txt my.txt mzn.txt\
naq.txt nb.txt nd.txt nds.txt ne.txt\
nl.txt nl_AW.txt nl_BQ.txt nl_CW.txt nl_SR.txt\
nl_SX.txt nmg.txt nn.txt nnh.txt nus.txt\
nyn.txt om.txt om_KE.txt or.txt os.txt\
os_RU.txt pa.txt pa_Arab.txt pa_Guru.txt pl.txt\
ps.txt ps_PK.txt pt.txt pt_AO.txt pt_CH.txt\
pt_CV.txt pt_GQ.txt pt_GW.txt pt_LU.txt pt_MO.txt\
pt_MZ.txt pt_PT.txt pt_ST.txt pt_TL.txt qu.txt\
qu_BO.txt qu_EC.txt rm.txt rn.txt ro.txt\
ro_MD.txt rof.txt ru.txt ru_BY.txt ru_KG.txt\
ru_KZ.txt ru_MD.txt rw.txt rwk.txt sah.txt\
saq.txt sbp.txt sd.txt se.txt se_SE.txt\
seh.txt ses.txt sg.txt shi.txt shi_Latn.txt\
shi_Tfng.txt si.txt sk.txt sl.txt smn.txt\
sn.txt so.txt so_DJ.txt so_ET.txt so_KE.txt\
sq.txt sq_MK.txt sr.txt sr_Cyrl.txt sr_Latn.txt\
sv.txt sw.txt sw_CD.txt sw_UG.txt ta.txt\
ta_LK.txt ta_MY.txt ta_SG.txt te.txt teo.txt\
teo_KE.txt tg.txt th.txt ti.txt ti_ER.txt\
tk.txt to.txt tr.txt tt.txt twq.txt\
tzm.txt ug.txt uk.txt ur.txt ur_IN.txt\
uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt\
vai_Latn.txt vai_Vaii.txt vi.txt vun.txt wae.txt\
wo.txt xh.txt xog.txt yav.txt yi.txt\
yo.txt yo_BJ.txt yue.txt yue_Hans.txt yue_Hant.txt\
zgh.txt zh.txt zh_Hans.txt zh_Hans_HK.txt zh_Hans_MO.txt\
zh_Hans_SG.txt zh_Hant.txt zh_Hant_HK.txt zh_Hant_MO.txt zu.txt

View file

@ -16,7 +16,7 @@
<alias from="in_ID" to="id_ID" />
<alias from="iw" to="he" />
<alias from="iw_IL" to="he_IL" />
<alias from="mo" to="ro_MD" />
<alias from="mo" to="ro" />
<alias from="no" to="nb" />
<alias from="no_NO" to="nb_NO" />
<alias from="pa_IN" to="pa_Guru_IN" />

View file

@ -14,12 +14,16 @@
<alias from="bs_BA" to="bs_Latn_BA" />
<alias from="en_NH" to="en_VU"/>
<alias from="en_RH" to="en_ZW"/>
<alias from="ff_CM" to="ff_Latn_CM"/>
<alias from="ff_GN" to="ff_Latn_GN"/>
<alias from="ff_MR" to="ff_Latn_MR"/>
<alias from="ff_SN" to="ff_Latn_SN"/>
<alias from="in" to="id"/>
<alias from="in_ID" to="id_ID"/>
<alias from="iw" to="he"/>
<alias from="iw_IL" to="he_IL"/>
<alias from="ja_JP_TRADITIONAL" to="ja_JP" rbpath="/calendar/default" value="japanese"/>
<alias from="mo" to="ro_MD"/>
<alias from="mo" to="ro"/>
<alias from="no_NO" to="nb_NO"/>
<alias from="no_NO_NY" to="nn_NO"/>
<alias from="no" to="nb"/>

View file

@ -8,6 +8,10 @@
*******************************************************************************
*/
-->
<!--
TODO: Most of these aliases are CLDR parent locales. Is this separate list
necessary and can we just use the main list in icu-locale-deprecates.xml?
-->
<deprecates>
<alias from="ars" to="ar" />
<alias from="es_DO" to="es_419" />

View file

@ -17,11 +17,16 @@ In the following,
$icu4j_root is the ICU4J root directory
$jdk_bin is the JDK bin directory (for the jar tool)
1. Download, configure, and build ICU4C. When you configure ICU4C, you must
1. *Linux*
Download, configure, and build ICU4C. When you configure ICU4C, you must
set the environment variable ICU_DATA_BUILDTOOL_OPTS to
"--include_uni_core_data" to build additional required ICU4J data:
ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU Linux
*Windows*
- Add ICU_DATA_BUILDTOOL_OPTS as a system environment variable with value "--include_uni_core_data"
- Build $icu4c_root\source\allinone\allinone.sln in Visual Studio
For more instructions on downloading and building ICU4C,
see the ICU4C readme at:
@ -38,10 +43,10 @@ platform.
*Windows*
2a. On the command line, cd to $icu4c_root\source\data.
2a. On Developer Command Prompt for VS, cd to $icu4c_root\source\data.
2b. On the command line,
nmake -f makedata.mak ICUMAKE=$icu4c_root\source\data\ CFG=x86\Release JAR="$jdk_bin\jar" ICU4J_ROOT=$icu4j_root icu4j-data-install
2b. On Developer Command Prompt for VS,
nmake -f makedata.mak ICUMAKE=$icu4c_root\source\data\ CFG=x86\Release JAR="$jdk_bin\jar" ICU4J_ROOT=$icu4j_root icu4j-data-install
Continue with step 3 below, in Java:
@ -71,3 +76,7 @@ icutzdata.jar in $icu4j_root/main/shared/data.
cd $icu4j_root
ant main
Run the tests locally and make sure they pass:
ant check

View file

@ -4,5 +4,5 @@ ar_EG{
Languages{
da{"الدنماركية"}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -13,5 +13,5 @@ ar_SA{
te{"التيلوجو"}
ti{"التيغرينية"}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -57,7 +57,7 @@ ceb{
latn{"Kasadpanhong mga Digit"}
}
}
Version{"2.1.48.67"}
Version{"2.1.49.33"}
codePatterns{
language{"Pinulongan: {0}"}
script{"Alpabeto {0}"}

View file

@ -328,7 +328,7 @@ el{
mi{"Μαορί"}
mic{"Μικμάκ"}
min{"Μινανγκαμπάου"}
mk{"Σλαβομακεδονικά"}
mk{"Μακεδονικά"}
ml{"Μαλαγιαλαμικά"}
mn{"Μογγολικά"}
mnc{"Μαντσού"}
@ -883,7 +883,7 @@ el{
VALENCIA{"Βαλενθιανά"}
WADEGILE{"Εκλατινισμένα Γουάντ-Γκιλς"}
}
Version{"2.1.48.27"}
Version{"2.1.49.26"}
characterLabelPattern{
all{"{0} — όλα"}
category-list{"{0}: {1}"}

View file

@ -15,5 +15,5 @@ en_IN{
orya{"Oriya Digits"}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.14"}
}

View file

@ -156,5 +156,5 @@ eo{
zu{"zulua"}
zxx{"nelingvaĵo"}
}
Version{"2.1.47.82"}
Version{"2.1.49.33"}
}

View file

@ -0,0 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_CM{
"%%ALIAS"{"ff_Latn_CM"}
}

View file

@ -0,0 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_GN{
"%%ALIAS"{"ff_Latn_GN"}
}

View file

@ -0,0 +1,8 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
*/
ff_Latn_CM{
___{""}
}

View file

@ -0,0 +1,8 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
*/
ff_Latn_GN{
___{""}
}

View file

@ -0,0 +1,8 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
*/
ff_Latn_MR{
___{""}
}

View file

@ -0,0 +1,8 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
/**
* generated alias target
*/
ff_Latn_SN{
___{""}
}

View file

@ -0,0 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_MR{
"%%ALIAS"{"ff_Latn_MR"}
}

View file

@ -0,0 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_SN{
"%%ALIAS"{"ff_Latn_SN"}
}

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
"%%ALIAS"{"ro"}
}

View file

@ -714,8 +714,9 @@ ms{
}
Variants{
POSIX{"Komputer"}
SCOTLAND{"Inggeris Standard Scotland"}
}
Version{"2.1.48.42"}
Version{"2.1.49.2"}
characterLabelPattern{
all{"{0} — Semua"}
category-list{"{0}: {1}"}

View file

@ -16,5 +16,5 @@ ps_PK{
arabext{"غځېدلے عربي ۔ اينډيک عدد"}
}
}
Version{"2.1.48.67"}
Version{"2.1.49.34"}
}

View file

@ -1,133 +0,0 @@
# © 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html#License
LANG_CLDR_VERSION = 35
#
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# NOTE (January 2019): Please use ICU's new data filtering to select locale
# files. This makefile is no longer used to filter locale files.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# Old description: A list of txt's to build
# Note:
#
# If you are thinking of modifying this file, READ THIS.
#
# Instead of changing this file [unless you want to check it back in],
# you should consider creating a 'reslocal.mk' file in this same directory.
# Then, you can have your local changes remain even if you upgrade or
# reconfigure ICU.
#
# Example 'reslocal.mk' files:
#
# * To add an additional locale to the list:
# _____________________________________________________
# | LANG_SOURCE_LOCAL = myLocale.txt ...
#
# * To REPLACE the default list and only build with a few
# locales:
# _____________________________________________________
# | LANG_SOURCE = ar.txt ar_AE.txt en.txt de.txt zh.txt
#
#
# Generated by LDML2ICUConverter, from LDML source files.
# Aliases without a corresponding xx.xml file (see icu-config.xml & build.xml)
LANG_SYNTHETIC_ALIAS = ars.txt az_AZ.txt az_Latn_AZ.txt bs_BA.txt\
bs_Latn_BA.txt en_NH.txt en_RH.txt fil_PH.txt he_IL.txt\
id_ID.txt in.txt in_ID.txt iw.txt iw_IL.txt\
ja_JP.txt ja_JP_TRADITIONAL.txt mo.txt nb_NO.txt nn_NO.txt\
no.txt no_NO.txt no_NO_NY.txt pa_Arab_PK.txt pa_Guru_IN.txt\
pa_IN.txt pa_PK.txt sh.txt sh_BA.txt sh_CS.txt\
sh_YU.txt shi_MA.txt shi_Tfng_MA.txt sr_BA.txt sr_CS.txt\
sr_Cyrl_CS.txt sr_Cyrl_RS.txt sr_Cyrl_YU.txt sr_Latn_CS.txt sr_Latn_RS.txt\
sr_Latn_YU.txt sr_ME.txt sr_RS.txt sr_XK.txt sr_YU.txt\
th_TH.txt th_TH_TRADITIONAL.txt tl.txt tl_PH.txt uz_AF.txt\
uz_Arab_AF.txt uz_Latn_UZ.txt uz_UZ.txt vai_LR.txt vai_Vaii_LR.txt\
yue_CN.txt yue_HK.txt yue_Hans_CN.txt yue_Hant_HK.txt zh_CN.txt\
zh_HK.txt zh_Hans_CN.txt zh_Hans_SG.txt zh_Hant_TW.txt zh_MO.txt\
zh_SG.txt zh_TW.txt
# All aliases (to not be included under 'installed'), but not including root.
LANG_ALIAS_SOURCE = $(LANG_SYNTHETIC_ALIAS)
# Ordinary resources
LANG_SOURCE = af.txt agq.txt ak.txt am.txt\
ar.txt ar_EG.txt ar_LY.txt ar_SA.txt as.txt\
asa.txt ast.txt az.txt az_Cyrl.txt az_Latn.txt\
bas.txt be.txt bem.txt bez.txt bg.txt\
bm.txt bn.txt bn_IN.txt bo.txt br.txt\
brx.txt bs.txt bs_Cyrl.txt bs_Latn.txt ca.txt\
ccp.txt ce.txt ceb.txt cgg.txt chr.txt\
ckb.txt cs.txt cy.txt da.txt dav.txt\
de.txt de_AT.txt de_CH.txt de_LU.txt dje.txt\
dsb.txt dua.txt dyo.txt dz.txt ebu.txt\
ee.txt el.txt en.txt en_001.txt en_150.txt\
en_AG.txt en_AI.txt en_AT.txt en_AU.txt en_BB.txt\
en_BE.txt en_BM.txt en_BS.txt en_BW.txt en_BZ.txt\
en_CA.txt en_CC.txt en_CH.txt en_CK.txt en_CM.txt\
en_CX.txt en_CY.txt en_DE.txt en_DG.txt en_DK.txt\
en_DM.txt en_ER.txt en_FI.txt en_FJ.txt en_FK.txt\
en_FM.txt en_GB.txt en_GD.txt en_GG.txt en_GH.txt\
en_GI.txt en_GM.txt en_GY.txt en_HK.txt en_IE.txt\
en_IL.txt en_IM.txt en_IN.txt en_IO.txt en_JE.txt\
en_JM.txt en_KE.txt en_KI.txt en_KN.txt en_KY.txt\
en_LC.txt en_LR.txt en_LS.txt en_MG.txt en_MO.txt\
en_MS.txt en_MT.txt en_MU.txt en_MW.txt en_MY.txt\
en_NA.txt en_NF.txt en_NG.txt en_NL.txt en_NR.txt\
en_NU.txt en_NZ.txt en_PG.txt en_PH.txt en_PK.txt\
en_PN.txt en_PW.txt en_RW.txt en_SB.txt en_SC.txt\
en_SD.txt en_SE.txt en_SG.txt en_SH.txt en_SI.txt\
en_SL.txt en_SS.txt en_SX.txt en_SZ.txt en_TC.txt\
en_TK.txt en_TO.txt en_TT.txt en_TV.txt en_TZ.txt\
en_UG.txt en_VC.txt en_VG.txt en_VU.txt en_WS.txt\
en_ZA.txt en_ZM.txt en_ZW.txt eo.txt es.txt\
es_419.txt es_AR.txt es_BO.txt es_BR.txt es_BZ.txt\
es_CL.txt es_CO.txt es_CR.txt es_CU.txt es_DO.txt\
es_EC.txt es_GT.txt es_HN.txt es_MX.txt es_NI.txt\
es_PA.txt es_PE.txt es_PR.txt es_PY.txt es_SV.txt\
es_US.txt es_UY.txt es_VE.txt et.txt eu.txt\
ewo.txt fa.txt fa_AF.txt ff.txt ff_Latn.txt\
fi.txt fil.txt fo.txt fr.txt fr_BE.txt\
fr_CA.txt fr_CH.txt fur.txt fy.txt ga.txt\
gd.txt gl.txt gsw.txt gu.txt guz.txt\
gv.txt ha.txt ha_NE.txt haw.txt he.txt\
hi.txt hr.txt hsb.txt hu.txt hy.txt\
ia.txt id.txt ig.txt ii.txt is.txt\
it.txt ja.txt jgo.txt jmc.txt jv.txt\
ka.txt kab.txt kam.txt kde.txt kea.txt\
khq.txt ki.txt kk.txt kkj.txt kl.txt\
kln.txt km.txt kn.txt ko.txt kok.txt\
ks.txt ksb.txt ksf.txt ksh.txt ku.txt\
kw.txt ky.txt lag.txt lb.txt lg.txt\
lkt.txt ln.txt lo.txt lrc.txt lt.txt\
lu.txt luo.txt luy.txt lv.txt mas.txt\
mer.txt mfe.txt mg.txt mgh.txt mgo.txt\
mi.txt mk.txt ml.txt mn.txt mr.txt\
ms.txt mt.txt mua.txt my.txt mzn.txt\
naq.txt nb.txt nd.txt nds.txt ne.txt\
nl.txt nmg.txt nn.txt nnh.txt nus.txt\
nyn.txt om.txt or.txt os.txt pa.txt\
pa_Arab.txt pa_Guru.txt pl.txt ps.txt ps_PK.txt\
pt.txt pt_AO.txt pt_CH.txt pt_CV.txt pt_GQ.txt\
pt_GW.txt pt_LU.txt pt_MO.txt pt_MZ.txt pt_PT.txt\
pt_ST.txt pt_TL.txt qu.txt rm.txt rn.txt\
ro.txt ro_MD.txt rof.txt ru.txt rw.txt\
rwk.txt sah.txt saq.txt sbp.txt sd.txt\
se.txt se_FI.txt seh.txt ses.txt sg.txt\
shi.txt shi_Latn.txt shi_Tfng.txt si.txt sk.txt\
sl.txt smn.txt sn.txt so.txt sq.txt\
sr.txt sr_Cyrl.txt sr_Cyrl_BA.txt sr_Cyrl_ME.txt sr_Cyrl_XK.txt\
sr_Latn.txt sr_Latn_BA.txt sr_Latn_ME.txt sr_Latn_XK.txt sv.txt\
sv_FI.txt sw.txt sw_CD.txt sw_KE.txt ta.txt\
te.txt teo.txt tg.txt th.txt ti.txt\
tk.txt to.txt tr.txt tt.txt twq.txt\
tzm.txt ug.txt uk.txt ur.txt ur_IN.txt\
uz.txt uz_Arab.txt uz_Cyrl.txt uz_Latn.txt vai.txt\
vai_Latn.txt vai_Vaii.txt vi.txt vun.txt wae.txt\
wo.txt xh.txt xog.txt yav.txt yi.txt\
yo.txt yo_BJ.txt yue.txt yue_Hans.txt yue_Hant.txt\
zgh.txt zh.txt zh_Hans.txt zh_Hant.txt zh_Hant_HK.txt\
zh_Hant_MO.txt zu.txt

View file

@ -8,6 +8,7 @@ ar_AE{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,7 +16,7 @@ ar_AE{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
calendar{
gregorian{
eras{

View file

@ -8,6 +8,7 @@ ar_BH{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_BH{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -8,6 +8,7 @@ ar_EG{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_EG{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -8,6 +8,7 @@ ar_IQ{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,7 +16,7 @@ ar_IQ{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
calendar{
gregorian{
monthNames{

View file

@ -8,6 +8,7 @@ ar_JO{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,7 +16,7 @@ ar_JO{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
calendar{
gregorian{
monthNames{

View file

@ -8,6 +8,7 @@ ar_KW{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_KW{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -8,6 +8,7 @@ ar_OM{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_OM{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -8,6 +8,7 @@ ar_QA{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_QA{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -3,13 +3,14 @@
ar_SA{
ExemplarCharactersNumbers{"[\u200E \\- , . ٪ ‰ + 0 1 2 3 4 5 6 7 8 9]"}
NumberElements{
default{"arab"}
latn{
symbols{
percentSign{"٪"}
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
calendar{
default{"islamic-umalqura"}
gregorian{

View file

@ -8,6 +8,7 @@ ar_SD{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_SD{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -8,6 +8,7 @@ ar_SY{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,7 +16,7 @@ ar_SY{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
calendar{
gregorian{
monthNames{

View file

@ -8,6 +8,7 @@ ar_YE{
group{"٬"}
}
}
default{"arab"}
latn{
symbols{
decimal{"."}
@ -15,5 +16,5 @@ ar_YE{
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.36"}
}

View file

@ -22,7 +22,7 @@ ceb{
}
}
}
Version{"2.1.48.67"}
Version{"2.1.49.33"}
calendar{
generic{
DateTimePatterns{

View file

@ -211,7 +211,7 @@ el{
minimumGroupingDigits{"1"}
traditional{"grek"}
}
Version{"2.1.48.27"}
Version{"2.1.49.26"}
calendar{
buddhist{
DateTimePatterns{

View file

@ -23,6 +23,10 @@ en_IN{
one{"¤0L"}
other{"¤0L"}
}
1000000{
one{"¤00L"}
other{"¤00L"}
}
10000000{
one{"¤0Cr"}
other{"¤0Cr"}
@ -31,6 +35,10 @@ en_IN{
one{"¤00Cr"}
other{"¤00Cr"}
}
1000000000{
one{"¤000Cr"}
other{"¤000Cr"}
}
10000000000{
one{"¤0TCr"}
other{"¤0TCr"}
@ -39,11 +47,23 @@ en_IN{
one{"¤00TCr"}
other{"¤00TCr"}
}
1000000000000{
one{"¤0LCr"}
other{"¤0LCr"}
}
10000000000000{
one{"¤00LCr"}
other{"¤00LCr"}
}
100000000000000{
one{"¤000LCr"}
other{"¤000LCr"}
}
}
}
}
}
Version{"2.1.47.86"}
Version{"2.1.49.14"}
calendar{
generic{
DateTimePatterns{

View file

@ -14,7 +14,7 @@ eo{
}
}
}
Version{"2.1.47.82"}
Version{"2.1.49.33"}
calendar{
generic{
DateTimePatterns{

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_CM{
Version{"2.1.48.67"}
"%%ALIAS"{"ff_Latn_CM"}
}

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_GN{
Version{"2.1.48.67"}
"%%ALIAS"{"ff_Latn_GN"}
}

View file

@ -1,5 +1,24 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_Latn_GH{
Version{"2.1.47.82"}
Version{"2.1.49.34"}
calendar{
gregorian{
DateTimePatterns{
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE d MMMM y",
"d MMMM y",
"d MMM, y",
"d/M/y",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
}
}
}
}

View file

@ -1,5 +1,24 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_Latn_GM{
Version{"2.1.47.82"}
Version{"2.1.49.34"}
calendar{
gregorian{
DateTimePatterns{
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE d MMMM y",
"d MMMM y",
"d MMM, y",
"d/M/y",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
}
}
}
}

View file

@ -1,5 +1,24 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_Latn_LR{
Version{"2.1.47.82"}
Version{"2.1.49.34"}
calendar{
gregorian{
DateTimePatterns{
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE d MMMM y",
"d MMMM y",
"d MMM, y",
"d/M/y",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
}
}
}
}

View file

@ -1,5 +1,24 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_Latn_SL{
Version{"2.1.47.82"}
Version{"2.1.49.34"}
calendar{
gregorian{
DateTimePatterns{
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE d MMMM y",
"d MMMM y",
"d MMM, y",
"d/M/y",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
}
}
}
}

View file

@ -1,24 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_MR{
Version{"2.1.48.67"}
calendar{
gregorian{
DateTimePatterns{
"h:mm:ss a zzzz",
"h:mm:ss a z",
"h:mm:ss a",
"h:mm a",
"EEEE d MMMM y",
"d MMMM y",
"d MMM, y",
"d/M/y",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
"{1} {0}",
}
}
}
"%%ALIAS"{"ff_Latn_MR"}
}

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
ff_SN{
Version{"2.1.48.67"}
"%%ALIAS"{"ff_Latn_SN"}
}

View file

@ -1,5 +1,5 @@
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
mo{
"%%ALIAS"{"ro_MD"}
"%%ALIAS"{"ro"}
}

Some files were not shown because too many files have changed in this diff Show more