Esempio n. 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());
        }
Esempio n. 2
0
            internal ExpectComplexArgNode ExpectComplexArg(Object name, MessagePatternArgType argType)
            {
                ExpectComplexArgNode complexArg = new ExpectComplexArgNode(this, name, argType);

                contents.Add(complexArg);
                return(complexArg);
            }
Esempio n. 3
0
 internal ExpectComplexArgNode(ExpectMessageNode parent,
                               Object name, MessagePatternArgType argType)
     : base(name, argType.ToString().ToLowerInvariant())
 {
     this.argType = argType;
     this.parent  = parent;
 }
Esempio n. 4
0
        private static ArgNode BuildArgNode(MessagePattern pattern, int start, int limit)
        {
            ArgNode               node    = ArgNode.CreateArgNode();
            MessagePatternPart    part    = pattern.GetPart(start);
            MessagePatternArgType argType = node.ArgType = part.ArgType;

            part      = pattern.GetPart(++start); // ARG_NAME or ARG_NUMBER
            node.Name = pattern.GetSubstring(part);
            if (part.Type == MessagePatternPartType.ArgNumber)
            {
                node.Number = part.Value;
            }
            ++start;
            switch (argType)
            {
            case MessagePatternArgType.Simple:
                // ARG_TYPE
                node.TypeName = pattern.GetSubstring(pattern.GetPart(start++));
                if (start < limit)
                {
                    // ARG_STYLE
                    node.SimpleStyle = pattern.GetSubstring(pattern.GetPart(start));
                }
                break;

            case MessagePatternArgType.Choice:
                node.TypeName     = "choice";
                node.ComplexStyle = BuildChoiceStyleNode(pattern, start, limit);
                break;

            case MessagePatternArgType.Plural:
                node.TypeName     = "plural";
                node.ComplexStyle = BuildPluralStyleNode(pattern, start, limit, argType);
                break;

            case MessagePatternArgType.Select:
                node.TypeName     = "select";
                node.ComplexStyle = BuildSelectStyleNode(pattern, start, limit);
                break;

            case MessagePatternArgType.SelectOrdinal:
                node.TypeName     = "selectordinal";
                node.ComplexStyle = BuildPluralStyleNode(pattern, start, limit, argType);
                break;

            default:
                // NONE type, nothing else to do
                break;
            }
            return(node);
        }
Esempio n. 5
0
 internal ComplexArgStyleNode(MessagePatternArgType argType)
 {
     this.argType = argType;
 }