diff -r 000000000000 -r 6474c204b198 intl/icu/source/common/uscript.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/intl/icu/source/common/uscript.c Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,97 @@ +/* +********************************************************************** +* Copyright (C) 1997-2011, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* +* File USCRIPT.C +* +* Modification History: +* +* Date Name Description +* 07/06/2001 Ram Creation. +****************************************************************************** +*/ + +#include "unicode/uscript.h" +#include "unicode/ures.h" +#include "unicode/uchar.h" +#include "unicode/putil.h" +#include "uprops.h" +#include "cmemory.h" +#include "cstring.h" + +static const char kLocaleScript[] = "LocaleScript"; + +/* TODO: this is a bad API should be deprecated */ +U_CAPI int32_t U_EXPORT2 +uscript_getCode(const char* nameOrAbbrOrLocale, + UScriptCode* fillIn, + int32_t capacity, + UErrorCode* err){ + + UScriptCode code = USCRIPT_INVALID_CODE; + int32_t numFilled=0; + int32_t len=0; + /* check arguments */ + if(err==NULL ||U_FAILURE(*err)){ + return numFilled; + } + if(nameOrAbbrOrLocale==NULL || fillIn == NULL || capacity<0){ + *err = U_ILLEGAL_ARGUMENT_ERROR; + return numFilled; + } + + if(uprv_strchr(nameOrAbbrOrLocale, '-')==NULL && uprv_strchr(nameOrAbbrOrLocale, '_')==NULL ){ + /* try long and abbreviated script names first */ + code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, nameOrAbbrOrLocale); + + } + if(code==(UScriptCode)UCHAR_INVALID_CODE){ + /* Do not propagate error codes from just not finding a locale bundle. */ + UErrorCode localErrorCode = U_ZERO_ERROR; + UResourceBundle* resB = ures_open(NULL,nameOrAbbrOrLocale,&localErrorCode); + if(U_SUCCESS(localErrorCode)&& localErrorCode != U_USING_DEFAULT_WARNING){ + UResourceBundle* resD = ures_getByKey(resB,kLocaleScript,NULL,&localErrorCode); + if(U_SUCCESS(localErrorCode) ){ + len =0; + while(ures_hasNext(resD)){ + const UChar* name = ures_getNextString(resD,&len,NULL,&localErrorCode); + if(U_SUCCESS(localErrorCode)){ + char cName[50] = {'\0'}; + u_UCharsToChars(name,cName,len); + code = (UScriptCode) u_getPropertyValueEnum(UCHAR_SCRIPT, cName); + /* got the script code now fill in the buffer */ + if(numFilled