Exemple #1
0
        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());
        }
Exemple #2
0
        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());
        }
Exemple #3
0
        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());
        }
Exemple #4
0
            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);
            }