Beispiel #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());
        }
Beispiel #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());
        }
Beispiel #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());
        }