/*
*******************************************************************************
-* Copyright (C) 2007-2008, International Business Machines Corporation and
+* Copyright (C) 2007-2010, International Business Machines Corporation and
* others. All Rights Reserved.
*******************************************************************************
*
PluralRules::PluralRules(UErrorCode& status)
: UObject(),
- mRules(NULL),
- mParser(new RuleParser())
+ mRules(NULL)
{
+ if (U_FAILURE(status)) {
+ return;
+ }
+ mParser = new RuleParser();
if (mParser==NULL) {
status = U_MEMORY_ALLOCATION_ERROR;
}
PluralRules::createRules(const UnicodeString& description, UErrorCode& status) {
RuleChain rules;
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
PluralRules *newRules = new PluralRules(status);
if ( (newRules != NULL)&& U_SUCCESS(status) ) {
newRules->parseDescription((UnicodeString &)description, rules, status);
PluralRules* U_EXPORT2
PluralRules::forLocale(const Locale& locale, UErrorCode& status) {
RuleChain rChain;
- status = U_ZERO_ERROR;
+ if (U_FAILURE(status)) {
+ return NULL;
+ }
PluralRules *newObj = new PluralRules(status);
- if (newObj==NULL) {
+ if (newObj==NULL || U_FAILURE(status)) {
return NULL;
}
UnicodeString locRule = newObj->getRuleFromResource(locale, status);
PluralRules::getKeywords(UErrorCode& status) const {
if (U_FAILURE(status)) return NULL;
StringEnumeration* nameEnumerator = new PluralKeywordEnumeration(mRules, status);
+ if (U_FAILURE(status)) return NULL;
+
return nameEnumerator;
}
return TRUE;
}
StringEnumeration* myKeywordList = getKeywords(status);
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
StringEnumeration* otherKeywordList =other.getKeywords(status);
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
- if (myKeywordList->count(status)!=otherKeywordList->count(status)) {
+ if (myKeywordList->count(status)!=otherKeywordList->count(status) ||
+ U_FAILURE(status)) {
sameList = FALSE;
}
else {
myKeywordList->reset(status);
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
while (sameList && (ptrKeyword=myKeywordList->snext(status))!=NULL) {
- if (!other.isKeyword(*ptrKeyword)) {
+ if (U_FAILURE(status) || !other.isKeyword(*ptrKeyword)) {
sameList = FALSE;
}
}
otherKeywordList->reset(status);
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
while (sameList && (ptrKeyword=otherKeywordList->snext(status))!=NULL) {
+ if (U_FAILURE(status)) {
+ return FALSE;
+ }
if (!this->isKeyword(*ptrKeyword)) {
sameList = FALSE;
}
OrConstraint *orNode=NULL;
RuleChain *lastChain=NULL;
+ if (U_FAILURE(status)) {
+ return;
+ }
UnicodeString ruleData = data.toLower();
while (ruleIndex< ruleData.length()) {
mParser->getNextToken(ruleData, &ruleIndex, token, type, status);
PluralRules::getRuleFromResource(const Locale& locale, UErrorCode& errCode) {
UnicodeString emptyStr;
- errCode = U_ZERO_ERROR;
+ if (U_FAILURE(errCode)) {
+ return emptyStr;
+ }
UResourceBundle *rb=ures_openDirect(NULL, "plurals", &errCode);
if(U_FAILURE(errCode)) {
/* total failure, not even root could be opened */
int32_t keyLen;
resLen=0;
s=ures_getNextString(setRes, &resLen, (const char**)&key, &errCode);
- keyLen = uprv_strlen(key);
+ keyLen = (int32_t)uprv_strlen(key);
u_charsToUChars(key, result+len, keyLen);
len += keyLen;
result[len++]=COLON;
}
else {
if ( rangeHigh == -1 ) {
- return(rangeLow>maxLimit? rangeLow : maxLimit);
return uprv_max(rangeLow, maxLimit);
}
else{
UChar ch;
tokenType prevType=none;
+ if (U_FAILURE(status)) {
+ return;
+ }
while (curIndex<ruleData.length()) {
ch = ruleData.charAt(curIndex);
if ( !inRange(ch, type) ) {
if ( (type == tLetter)||(type == tNumber) ) {
token=UnicodeString(ruleData, *ruleIndex, curIndex-*ruleIndex);
getKeyType(token, type, status);
+ if (U_FAILURE(status)) {
+ return;
+ }
}
*ruleIndex = ruleData.length();
}
void
RuleParser::getKeyType(const UnicodeString& token, tokenType& keyType, UErrorCode &status)
{
+ if (U_FAILURE(status)) {
+ return;
+ }
if ( keyType==tNumber) {
}
else if (token==PK_VAR_N) {
{
RuleChain *node=header;
UBool addKeywordOther=true;
-
+
+ if (U_FAILURE(status)) {
+ return;
+ }
pos=0;
fKeywordNames.removeAllElements();
while(node!=NULL) {
fKeywordNames.addElement(new UnicodeString(node->keyword), status);
+ if (U_FAILURE(status)) {
+ return;
+ }
if (node->keyword == PLURAL_KEYWORD_OTHER) {
addKeywordOther= false;
}
if (addKeywordOther) {
fKeywordNames.addElement(new UnicodeString(PLURAL_KEYWORD_OTHER), status);
+ if (U_FAILURE(status)) {
+ return;
+ }
}
}