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()); }
internal override bool Matches(MessageContentsNode c) { bool ok = base.Matches(c); if (!ok) { return(ok); } ArgNode arg = (ArgNode)c; ComplexArgStyleNode complexStyle = arg.ComplexStyle; ok &= assertNotNull("unexpected null complex style", complexStyle); if (!ok) { return(ok); } ok &= assertEquals("unexpected complex-style argType", argType, complexStyle.ArgType); ok &= assertEquals("unexpected complex-style hasExplicitOffset()", explicitOffset, complexStyle.HasExplicitOffset); ok &= assertEquals("unexpected complex-style offset", offset, complexStyle.Offset); IList <VariantNode> complexVariants = complexStyle.Variants; ok &= assertEquals("different number of variants", variants.Count, complexVariants.Count); if (!ok) { return(ok); } //Iterator<VariantNode> complexIter = complexVariants.iterator(); using (var complexIter = complexVariants.GetEnumerator()) foreach (ExpectVariantNode variant in variants) { complexIter.MoveNext(); ok &= variant.Matches(complexIter.Current); } return(ok); }