17 #ifndef __MESSAGEPATTERN_H__
18 #define __MESSAGEPATTERN_H__
27 #if U_SHOW_CPLUSPLUS_API
29 #if !UCONFIG_NO_FORMATTING
272 #define UMSGPAT_ARG_TYPE_HAS_PLURAL_STYLE(argType) \
273 ((argType)==UMSGPAT_ARG_TYPE_PLURAL || (argType)==UMSGPAT_ARG_TYPE_SELECTORDINAL)
299 #define UMSGPAT_NO_NUMERIC_VALUE ((double)(-123456789))
303 class MessagePatternDoubleList;
304 class MessagePatternPartsList;
544 int32_t hashCode()
const;
580 return hasArgNumbers;
594 static int32_t validateArgumentName(
const UnicodeString &name);
638 return getPart(i).type;
649 return getPart(partIndex).index;
671 return 0==msg.compare(part.index, part.length, s);
680 double getNumericValue(
const Part &part)
const;
688 double getPluralOffset(int32_t pluralStart)
const;
699 int32_t limit=getPart(start).limitPartIndex;
816 return ((type*37+index)*37+length)*37+value;
822 static const int32_t MAX_LENGTH=0xffff;
823 static const int32_t MAX_VALUE=0x7fff;
831 int32_t limitPartIndex;
839 int32_t parseMessage(int32_t index, int32_t msgStartLength,
843 int32_t parseArg(int32_t index, int32_t argStartLength, int32_t nestingLevel,
848 int32_t parseChoiceStyle(int32_t index, int32_t nestingLevel,
862 static int32_t parseArgNumber(
const UnicodeString &s, int32_t start, int32_t limit);
864 int32_t parseArgNumber(int32_t start, int32_t limit) {
865 return parseArgNumber(msg, start, limit);
876 void parseDouble(int32_t start, int32_t limit,
UBool allowInfinity,
882 int32_t skipWhiteSpace(int32_t index);
884 int32_t skipIdentifier(int32_t index);
890 int32_t skipDouble(int32_t index);
894 UBool isChoice(int32_t index);
896 UBool isPlural(int32_t index);
898 UBool isSelect(int32_t index);
900 UBool isOrdinal(int32_t index);
906 UBool inMessageFormatPattern(int32_t nestingLevel);
917 void addLimitPart(int32_t start,
921 void addArgDoublePart(
double numericValue, int32_t start, int32_t length,
UErrorCode &errorCode);
923 void setParseError(
UParseError *parseError, int32_t index);
931 MessagePatternPartsList *partsList;
935 MessagePatternDoubleList *numericValuesList;
936 double *numericValues;
937 int32_t numericValuesLength;
940 UBool needsAutoQuoting;
945 #endif // !UCONFIG_NO_FORMATTING
949 #endif // __MESSAGEPATTERN_H__
The argument is a SelectFormat with one or more (ARG_SELECTOR, message) pairs.
An integer value, for example the offset or an explicit selector value in a PluralFormat style...
A numeric value, for example the offset or an explicit selector value in a PluralFormat style...
const Part & getPart(int32_t i) const
Gets the i-th pattern "part".
A literal apostrophe is represented by either a single or a double apostrophe pattern character...
int32_t getLimitPartIndex(int32_t start) const
Returns the index of the ARG|MSG_LIMIT part corresponding to the ARG|MSG_START at start...
int32_t getIndex() const
Returns the pattern string index associated with this Part.
UBool operator!=(const MessagePattern &other) const
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
The argument has no specified type.
UBool partSubstringMatches(const Part &part, const UnicodeString &s) const
Compares the part's substring with the input string s.
int32_t getLimit() const
Returns the pattern string limit (exclusive-end) index associated with this Part. ...
UBool hasNumberedArguments() const
Does the parsed pattern have numbered arguments like {2}?
UBool hasNamedArguments() const
Does the parsed pattern have named arguments like {first_name}?
static UBool hasNumericValue(UMessagePatternPartType type)
Indicates whether the Part type has a numeric value.
UMessagePatternPartType
MessagePattern::Part type constants.
The argument number, provided by the value.
The argument is an ordinal-number PluralFormat with the same style parts sequence and semantics as UM...
void clearPatternAndSetApostropheMode(UMessagePatternApostropheMode mode)
Clears this MessagePattern and sets the UMessagePatternApostropheMode.
Parses and represents ICU MessageFormat patterns.
The argument is a ChoiceFormat with one or more ((ARG_INT | ARG_DOUBLE), ARG_SELECTOR, message) tuples.
UBool operator!=(const Part &other) const
const UnicodeString & getPatternString() const
UMessagePatternApostropheMode getApostropheMode() const
Return value from MessagePattern.validateArgumentName() for when the string is a valid "pattern ident...
int32_t countParts() const
Returns the number of "parts" created by parsing the pattern string.
A literal apostrophe must be represented by a double apostrophe pattern character.
UnicodeString tempSubString(int32_t start=0, int32_t length=INT32_MAX) const
Create a temporary substring for the specified range.
int32_t UChar32
Define UChar32 as a type for single Unicode code points.
Indicates that a syntax character needs to be inserted for auto-quoting.
UnicodeString getSubstring(const Part &part) const
Returns the substring of the pattern string indicated by the Part.
int32_t getPatternIndex(int32_t partIndex) const
Returns the pattern index of the specified pattern "part".
Return value from MessagePattern.validateArgumentName() for when the string is invalid.
Start of a message pattern (main or nested).
C API: Parse Error Information.
End of a message pattern (main or nested).
A selector substring in a "complex" argument style.
Indicates a substring of the pattern string which is to be skipped when formatting.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Part()
Default constructor, do not use.
A message pattern "part", representing a pattern parsing event.
Indicates a syntactic (non-escaped) # symbol in a plural variant.
int32_t getValue() const
Returns a value associated with this part.
The argument is a cardinal-number PluralFormat with an optional ARG_INT or ARG_DOUBLE offset (e...
UMessagePatternArgType
Argument type constants.
UMessagePatternPartType getPartType(int32_t i) const
Returns the UMessagePatternPartType of the i-th pattern "part".
A UParseError struct is used to returned detailed information about parsing errors.
Basic definitions for ICU, for both C and C++ APIs.
#define U_COMMON_API
Set to export library symbols from inside the common library, and to import them from outside...
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
int32_t getLength() const
Returns the length of the pattern substring associated with this Part.
The argument has a "simple" type which is provided by the ARG_TYPE part.
UObject is the common ICU "boilerplate" class.
UMemory is the common ICU base class.
UMessagePatternApostropheMode
Mode for when an apostrophe starts quoted literal text for MessageFormat output.
UMessagePatternPartType getType() const
Returns the type of this part.
int8_t UBool
The ICU boolean type, a signed-byte integer.
UMessagePatternArgType getArgType() const
Returns the argument type if this part is of type ARG_START or ARG_LIMIT, otherwise UMSGPAT_ARG_TYPE_...