try {
for (TemplateChunk chunk : MessageFormatParser.parse(template)) {
if (chunk.isLiteral()) {
buf.appendStringLiteral(chunk.getString());
} else if (chunk instanceof ArgumentChunk) {
ArgumentChunk argChunk = (ArgumentChunk) chunk;
int argNumber = argChunk.getArgumentNumber();
if (argNumber >= params.length) {
throw error(logger, "Argument " + argNumber
+ " beyond range of arguments: " + template);
}
seenFlag[argNumber] = true;
String arg = "arg" + argNumber;
String format = argChunk.getFormat();
if (format != null) {
String subformat = argChunk.getSubFormat();
ValueFormatter formatter = formatters.get(format);
if (formatter != null) {
// TODO(jat): add support for specifying additional dynamic data
// in another argument -- examples would be the currency code
// for a number format or the timezone for a date/time format.