UnicodeString &MeasureFormat::formatMeasure( const Measure &measure, const NumberFormat &nf, UnicodeString &appendTo, FieldPosition &pos, UErrorCode &status) const { if (U_FAILURE(status)) { return appendTo; } const Formattable& amtNumber = measure.getNumber(); const MeasureUnit& amtUnit = measure.getUnit(); if (isCurrency(amtUnit)) { UChar isoCode[4]; u_charsToUChars(amtUnit.getSubtype(), isoCode, 4); return cache->getCurrencyFormat(fWidth)->format( new CurrencyAmount(amtNumber, isoCode, status), appendTo, pos, status); } UnicodeString formattedNumber; StandardPlural::Form pluralForm = QuantityFormatter::selectPlural( amtNumber, nf, **pluralRules, formattedNumber, pos, status); const SimpleFormatter *formatter = getPluralFormatter(amtUnit, fWidth, pluralForm, status); return QuantityFormatter::format(*formatter, formattedNumber, appendTo, pos, status); }
int32_t MeasureFormat::withPerUnitAndAppend( const UnicodeString &formatted, const MeasureUnit &perUnit, UnicodeString &appendTo, UErrorCode &status) const { int32_t offset = -1; if (U_FAILURE(status)) { return offset; } const SimpleFormatter *perUnitFormatter = getFormatterOrNull(perUnit, width, MeasureFormatCacheData::PER_UNIT_INDEX); if (perUnitFormatter != NULL) { const UnicodeString *params[] = {&formatted}; perUnitFormatter->formatAndAppend( params, UPRV_LENGTHOF(params), appendTo, &offset, 1, status); return offset; } const SimpleFormatter *perFormatter = getPerFormatter(width, status); const SimpleFormatter *pattern = getPluralFormatter(perUnit, width, StandardPlural::ONE, status); if (U_FAILURE(status)) { return offset; } UnicodeString perUnitString = pattern->getTextWithNoArguments(); perUnitString.trim(); const UnicodeString *params[] = {&formatted, &perUnitString}; perFormatter->formatAndAppend( params, UPRV_LENGTHOF(params), appendTo, &offset, 1, status); return offset; }