PluralRules* U_EXPORT2 PluralRules::forLocale(const Locale& locale, UPluralType type, UErrorCode& status) { RuleChain rChain; if (U_FAILURE(status)) { return NULL; } if (type >= UPLURAL_TYPE_COUNT) { status = U_ILLEGAL_ARGUMENT_ERROR; return NULL; } PluralRules *newObj = new PluralRules(status); if (newObj==NULL || U_FAILURE(status)) { delete newObj; return NULL; } UnicodeString locRule = newObj->getRuleFromResource(locale, type, status); if ((locRule.length() != 0) && U_SUCCESS(status)) { newObj->parseDescription(locRule, rChain, status); if (U_SUCCESS(status)) { newObj->addRules(rChain); } } if (U_FAILURE(status)||(locRule.length() == 0)) { // use default plural rule status = U_ZERO_ERROR; UnicodeString defRule = UnicodeString(PLURAL_DEFAULT_RULE); newObj->parseDescription(defRule, rChain, status); newObj->addRules(rChain); } return newObj; }
PluralRules* U_EXPORT2 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); if (U_SUCCESS(status)) { newRules->addRules(rules); } } if (U_FAILURE(status)) { delete newRules; return NULL; } else { return newRules; } }