private static ComplexArgStyleNode BuildPluralStyleNode(MessagePattern pattern, int start, int limit, MessagePatternArgType argType) { ComplexArgStyleNode node = new ComplexArgStyleNode(argType); MessagePatternPart offset = pattern.GetPart(start); if (offset.Type.HasNumericValue()) { node.HasExplicitOffset = true; node.Offset = pattern.GetNumericValue(offset); ++start; } while (start < limit) { MessagePatternPart selector = pattern.GetPart(start++); double value = MessagePattern.NoNumericValue; MessagePatternPart part = pattern.GetPart(start); if (part.Type.HasNumericValue()) { value = pattern.GetNumericValue(part); ++start; } int msgLimit = pattern.GetLimitPartIndex(start); VariantNode variant = new VariantNode(); variant.Selector = pattern.GetSubstring(selector); variant.SelectorValue = value; variant.Message = BuildMessageNode(pattern, start, msgLimit); node.AddVariant(variant); start = msgLimit + 1; } return(node.Freeze()); }
private static ComplexArgStyleNode BuildSelectStyleNode(MessagePattern pattern, int start, int limit) { ComplexArgStyleNode node = new ComplexArgStyleNode(MessagePatternArgType.Select); while (start < limit) { MessagePatternPart selector = pattern.GetPart(start++); int msgLimit = pattern.GetLimitPartIndex(start); VariantNode variant = new VariantNode(); variant.Selector = pattern.GetSubstring(selector); variant.Message = BuildMessageNode(pattern, start, msgLimit); node.AddVariant(variant); start = msgLimit + 1; } return(node.Freeze()); }
private static ComplexArgStyleNode BuildChoiceStyleNode(MessagePattern pattern, int start, int limit) { ComplexArgStyleNode node = new ComplexArgStyleNode(MessagePatternArgType.Choice); while (start < limit) { int valueIndex = start; MessagePatternPart part = pattern.GetPart(start); double value = pattern.GetNumericValue(part); start += 2; int msgLimit = pattern.GetLimitPartIndex(start); VariantNode variant = new VariantNode(); variant.Selector = pattern.GetSubstring(pattern.GetPart(valueIndex + 1)); variant.SelectorValue = value; variant.Message = BuildMessageNode(pattern, start, msgLimit); node.AddVariant(variant); start = msgLimit + 1; } return(node.Freeze()); }