virtual UChar tokenChar() const { return (UChar)0x003e; } // '>'
+ virtual void toString(UnicodeString& result) const;
+
public:
static UClassID getStaticClassID(void);
virtual UClassID getDynamicClassID(void) const;
return TRUE;
}
}
+/**
+ * Returns a textual description of the substitution
+ * @return A textual description of the substitution. This might
+ * not be identical to the description it was created from, but
+ * it'll produce the same result.
+ */
+void
+ModulusSubstitution::toString(UnicodeString& text) const
+{
+ // use tokenChar() to get the character at the beginning and
+ // end of the substitutin token. In between them will go
+ // either the name of the rule set it uses, or the pattern of
+ // the DecimalFormat it uses
-
+ if ( ruleToUse != NULL ) { // Must have been a >>> substitution.
+ text.remove();
+ text.append(tokenChar());
+ text.append(tokenChar());
+ text.append(tokenChar());
+ } else { // Otherwise just use the super-class function.
+ NFSubstitution::toString(text);
+ }
+}
//===================================================================
// IntegralPartSubstitution
//===================================================================
TESTCASE(TestInt64Parse);
TESTCASE(TestParseZero);
TESTCASE(TestParseCurrency);
+ TESTCASE(TestCloneWithRBNF);
}
/** copy src to dst with unicode-escapes for values < 0x20 and > 0x7e, null terminate if possible */
}
+static void TestCloneWithRBNF(void) {
+ const wchar_t* pattern = L"\
+%main:0.x: >%%millis-only>;\n\
+x.0: <%%duration<;\n\
+x.x: <%%durationwithmillis<>%%millis-added>;\n\
+-x: ->>;%%millis-only:\n\
+1000: 00:00.<%%millis<;\n\
+%%millis-added:\n\
+1000: .<%%millis<;\n\
+%%millis:\n\
+0: =000=;\n\
+%%duration:\n\
+0: =%%seconds-only=;\n\
+60: =%%min-sec=;\n\
+3600: =%%hr-min-sec=;\n\
+86400/86400: <%%ddaayyss<[, >>];\n\
+%%durationwithmillis:\n\
+0: =%%seconds-only=;\n\
+60: =%%min-sec=;\n\
+3600: =%%hr-min-sec=;\n\
+86400/86400: <%%ddaayyss<, >>;\n\
+%%seconds-only:\n\
+0: 0:00:=00=;\n\
+%%min-sec:\n\
+0: :=00=;\n\
+60/60: 0:<00<>>;\n\
+%%hr-min-sec:\n\
+0: :=00=;\n\
+60/60: <00<>>;\n\
+3600/60: <0<:>>>;\n\
+%%ddaayyss:\n\
+0 days;\n\
+1 day;\n\
+=0= days;";
+
+ UErrorCode status = U_ZERO_ERROR;
+ UChar buffer[256];
+ UChar buffer_cloned[256];
+ char temp1[256];
+ char temp2[256];
+
+ UNumberFormat *pform_cloned;
+ UNumberFormat *pform = unum_open(UNUM_PATTERN_RULEBASED, pattern, -1, "en_US", NULL, &status);
+
+ unum_formatDouble(pform, 3600, buffer, 256, NULL, &status);
+
+ pform_cloned = unum_clone(pform,&status);
+ unum_formatDouble(pform_cloned, 3600, buffer_cloned, 256, NULL, &status);
+
+ if (u_strcmp(buffer,buffer_cloned)) {
+ log_err("Result from cloned formatter not identical to the original. Original: %s Cloned: %s",u_austrcpy(temp1, buffer),u_austrcpy(temp2,buffer_cloned));
+ }
+}
#endif /* #if !UCONFIG_NO_FORMATTING */