/** * Appends the text representation of a plural part to a StringBuilder. * @param stringBuilder The StringBuilder to append to. * @param soyMsgPluralPart The SoyMsgPluralPart to add. * @param doUseBracedPhs Whether to use braced placeholders. */ private static void appendPluralToStringBuilder( StringBuilder stringBuilder, SoyMsgPluralPart soyMsgPluralPart, boolean doUseBracedPhs) { stringBuilder.append(IcuSyntaxUtils.getPluralOpenString( soyMsgPluralPart.getPluralVarName(), soyMsgPluralPart.getOffset())); for (Pair<SoyMsgPluralCaseSpec, List<SoyMsgPart>> pluralCase : soyMsgPluralPart.getCases()) { SoyMsgPluralCaseSpec pluralCaseSpec = pluralCase.first; stringBuilder.append(IcuSyntaxUtils.getPluralCaseOpenString( pluralCaseSpec.getType() == SoyMsgPluralCaseSpec.Type.OTHER ? null : pluralCaseSpec.getExplicitValue())); appendMsgPartsToTcStringBuilder(stringBuilder, pluralCase.second, doUseBracedPhs); stringBuilder.append(IcuSyntaxUtils.getPluralCaseCloseString()); } stringBuilder.append(IcuSyntaxUtils.getPluralCloseString()); }
/** * Private helper for visitGoogMsgNode(). * Generates code for a {@code MsgPluralNode} inside a message. * @param pluralNode A node of type {@code MsgPluralNode}. * @param googMsgNode The enclosing {@code GoogMsgNode} object. * @param googMsgCodeGenInfo Data structure holding information on placeholder * names, plural variable names, and select variable names to be used * for message code generation. */ private void genGoogMsgCodeForPluralNode( MsgPluralNode pluralNode, GoogMsgNode googMsgNode, GoogMsgCodeGenInfo googMsgCodeGenInfo) { String pluralVarName = googMsgNode.getPluralVarName(pluralNode); StringBuilder msgTextCodeSb = googMsgCodeGenInfo.msgTextCodeSb; msgTextCodeSb.append(IcuSyntaxUtils.getPluralOpenString(pluralVarName, pluralNode.getOffset())); updatePlrselVarCodeBits( googMsgCodeGenInfo, pluralVarName, jsExprTranslator.translateToJsExpr( pluralNode.getExpr(), null, localVarTranslations).getText()); for (CaseOrDefaultNode child : pluralNode.getChildren()) { genGoogMsgCodeForChildren(child, googMsgNode, googMsgCodeGenInfo); } msgTextCodeSb.append(IcuSyntaxUtils.getPluralCloseString()); }