mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-08 15:05:53 +00:00
ICU-20511 Merge maint/maint-64 to master
This commit is contained in:
commit
13889bece1
256 changed files with 1827 additions and 1979 deletions
|
@ -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:
|
||||
#-------------------------------------------------------------------------
|
||||
|
|
|
@ -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 © 2016 and later: Unicode, Inc. and others. License & terms of use:
|
||||
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
|
||||
Copyright © 1997-2016 International Business Machines Corporation and others.
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
<ClCompile>
|
||||
<!-- ICU does not use exceptions in library code. -->
|
||||
<PreprocessorDefinitions>
|
||||
$(DefineConstants);
|
||||
_HAS_EXCEPTIONS=0;
|
||||
%(PreprocessorDefinitions)
|
||||
</PreprocessorDefinitions>
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(¬ifyLock);
|
||||
Mutex lmx(notifyLock());
|
||||
delete listeners;
|
||||
listeners = NULL;
|
||||
}
|
||||
|
@ -47,7 +50,7 @@ ICUNotifier::addListener(const EventListener* l, UErrorCode& status)
|
|||
}
|
||||
|
||||
if (acceptsListener(*l)) {
|
||||
Mutex lmx(¬ifyLock);
|
||||
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(¬ifyLock);
|
||||
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(¬ifyLock);
|
||||
Mutex lmx(notifyLock());
|
||||
if (listeners != NULL) {
|
||||
for (int i = 0, e = listeners->size(); i < e; ++i) {
|
||||
EventListener* el = (EventListener*)listeners->elementAt(i);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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, ¤cyNames, &total_currency_name_count, ¤cySymbols, &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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -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());
|
||||
|
||||
}
|
||||
|
||||
|
|
4
icu4c/source/configure
vendored
4
icu4c/source/configure
vendored
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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])
|
||||
|
||||
|
|
|
@ -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} "
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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"}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -53,6 +53,10 @@
|
|||
},
|
||||
"additionalProperties": false,
|
||||
"required": ["directory", "replacements"]
|
||||
},
|
||||
"collationUCAData": {
|
||||
"type": "string",
|
||||
"enum": ["unihan", "implicithan"]
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -4,5 +4,5 @@ ar_AE{
|
|||
Currencies%narrow{
|
||||
BND{"$"}
|
||||
}
|
||||
Version{"2.1.47.86"}
|
||||
Version{"2.1.49.36"}
|
||||
}
|
||||
|
|
|
@ -91,5 +91,5 @@ ceb{
|
|||
one{"{1} {0}"}
|
||||
other{"{1} {0}"}
|
||||
}
|
||||
Version{"2.1.48.67"}
|
||||
Version{"2.1.49.33"}
|
||||
}
|
||||
|
|
|
@ -2266,5 +2266,5 @@ el{
|
|||
one{"{0} {1}"}
|
||||
other{"{0} {1}"}
|
||||
}
|
||||
Version{"2.1.48.27"}
|
||||
Version{"2.1.49.26"}
|
||||
}
|
||||
|
|
|
@ -22,5 +22,5 @@ en_IN{
|
|||
other{"VES"}
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.86"}
|
||||
Version{"2.1.49.14"}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
5
icu4c/source/data/curr/ff_CM.txt
Normal file
5
icu4c/source/data/curr/ff_CM.txt
Normal 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"}
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
/**
|
||||
* generated alias target
|
||||
*/
|
||||
ro_MD{
|
||||
ff_Latn_CM{
|
||||
___{""}
|
||||
}
|
|
@ -7,5 +7,5 @@ ff_Latn_GH{
|
|||
"GHS",
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.82"}
|
||||
Version{"2.1.49.34"}
|
||||
}
|
||||
|
|
|
@ -7,5 +7,5 @@ ff_Latn_GM{
|
|||
"Dalasi Gammbi",
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.82"}
|
||||
Version{"2.1.49.34"}
|
||||
}
|
||||
|
|
|
@ -7,5 +7,5 @@ ff_Latn_LR{
|
|||
"Dolaar Liberiyaa",
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.82"}
|
||||
Version{"2.1.49.34"}
|
||||
}
|
||||
|
|
|
@ -7,5 +7,5 @@ ff_Latn_SL{
|
|||
"Lewoon Seraa Liyon",
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.82"}
|
||||
Version{"2.1.49.34"}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
/**
|
||||
* generated alias target
|
||||
*/
|
||||
ro_MD{
|
||||
ff_Latn_SN{
|
||||
___{""}
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
|
|
5
icu4c/source/data/curr/ff_SN.txt
Normal file
5
icu4c/source/data/curr/ff_SN.txt
Normal 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"}
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -1248,5 +1248,5 @@ ms{
|
|||
CurrencyUnitPatterns{
|
||||
other{"{0} {1}"}
|
||||
}
|
||||
Version{"2.1.48.42"}
|
||||
Version{"2.1.49.2"}
|
||||
}
|
||||
|
|
|
@ -21,5 +21,5 @@ ps_PK{
|
|||
other{"(نامعلومه مروجه پېسے)"}
|
||||
}
|
||||
}
|
||||
Version{"2.1.48.67"}
|
||||
Version{"2.1.49.34"}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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" />
|
||||
|
|
|
@ -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"/>
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -4,5 +4,5 @@ ar_EG{
|
|||
Languages{
|
||||
da{"الدنماركية"}
|
||||
}
|
||||
Version{"2.1.47.86"}
|
||||
Version{"2.1.49.36"}
|
||||
}
|
||||
|
|
|
@ -13,5 +13,5 @@ ar_SA{
|
|||
te{"التيلوجو"}
|
||||
ti{"التيغرينية"}
|
||||
}
|
||||
Version{"2.1.47.86"}
|
||||
Version{"2.1.49.36"}
|
||||
}
|
||||
|
|
|
@ -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}"}
|
||||
|
|
|
@ -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}"}
|
||||
|
|
|
@ -15,5 +15,5 @@ en_IN{
|
|||
orya{"Oriya Digits"}
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.86"}
|
||||
Version{"2.1.49.14"}
|
||||
}
|
||||
|
|
|
@ -156,5 +156,5 @@ eo{
|
|||
zu{"zulua"}
|
||||
zxx{"nelingvaĵo"}
|
||||
}
|
||||
Version{"2.1.47.82"}
|
||||
Version{"2.1.49.33"}
|
||||
}
|
||||
|
|
5
icu4c/source/data/lang/ff_CM.txt
Normal file
5
icu4c/source/data/lang/ff_CM.txt
Normal 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"}
|
||||
}
|
5
icu4c/source/data/lang/ff_GN.txt
Normal file
5
icu4c/source/data/lang/ff_GN.txt
Normal 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"}
|
||||
}
|
8
icu4c/source/data/lang/ff_Latn_CM.txt
Normal file
8
icu4c/source/data/lang/ff_Latn_CM.txt
Normal 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{
|
||||
___{""}
|
||||
}
|
8
icu4c/source/data/lang/ff_Latn_GN.txt
Normal file
8
icu4c/source/data/lang/ff_Latn_GN.txt
Normal 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{
|
||||
___{""}
|
||||
}
|
8
icu4c/source/data/lang/ff_Latn_MR.txt
Normal file
8
icu4c/source/data/lang/ff_Latn_MR.txt
Normal 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{
|
||||
___{""}
|
||||
}
|
8
icu4c/source/data/lang/ff_Latn_SN.txt
Normal file
8
icu4c/source/data/lang/ff_Latn_SN.txt
Normal 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{
|
||||
___{""}
|
||||
}
|
5
icu4c/source/data/lang/ff_MR.txt
Normal file
5
icu4c/source/data/lang/ff_MR.txt
Normal 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"}
|
||||
}
|
5
icu4c/source/data/lang/ff_SN.txt
Normal file
5
icu4c/source/data/lang/ff_SN.txt
Normal 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"}
|
||||
}
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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}"}
|
||||
|
|
|
@ -16,5 +16,5 @@ ps_PK{
|
|||
arabext{"غځېدلے عربي ۔ اينډيک عدد"}
|
||||
}
|
||||
}
|
||||
Version{"2.1.48.67"}
|
||||
Version{"2.1.49.34"}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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{
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ ceb{
|
|||
}
|
||||
}
|
||||
}
|
||||
Version{"2.1.48.67"}
|
||||
Version{"2.1.49.33"}
|
||||
calendar{
|
||||
generic{
|
||||
DateTimePatterns{
|
||||
|
|
|
@ -211,7 +211,7 @@ el{
|
|||
minimumGroupingDigits{"1"}
|
||||
traditional{"grek"}
|
||||
}
|
||||
Version{"2.1.48.27"}
|
||||
Version{"2.1.49.26"}
|
||||
calendar{
|
||||
buddhist{
|
||||
DateTimePatterns{
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -14,7 +14,7 @@ eo{
|
|||
}
|
||||
}
|
||||
}
|
||||
Version{"2.1.47.82"}
|
||||
Version{"2.1.49.33"}
|
||||
calendar{
|
||||
generic{
|
||||
DateTimePatterns{
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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}",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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}",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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}",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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}",
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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"}
|
||||
}
|
||||
|
|
|
@ -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
Loading…
Add table
Reference in a new issue