Пример #1
0
        public DOM.Pair CreateMappedPair(ICharStream input, int nameQuotesType, DOM.Interval nameInterval, DOM.DelimiterEnum delimiter,
                                         Interval delimiterInterval, int valueQuotesType, DOM.Interval valueInterval, int valueIndent)
        {
            DOM.Mapped.IMappedPair pair;
            var nameText = GetNameText(input, nameQuotesType, nameInterval);
            var value    = GetValue(input, delimiter, valueQuotesType, valueInterval, valueIndent, _context, _module);

            if (nameQuotesType > 0)
            {
                pair = new Element
                {
                    Name               = VerifyElementName(nameText, nameInterval, _module),
                    NameQuotesType     = nameQuotesType,
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("@"))
            {
                var tuple = Element.GetNameAndNs(nameText.Substring(1), nameQuotesType);
                var ns    = string.IsNullOrEmpty(tuple.Item1) ? null : tuple.Item1;
                pair = new DOM.Mapped.Attribute
                {
                    NsPrefix           = ns,
                    Name               = VerifyName(tuple.Item2, nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("!$"))
            {
                pair = new DOM.Mapped.AliasDefinition
                {
                    Name               = VerifyName(nameText.Substring(2), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("!#"))
            {
                pair = new DOM.Mapped.NamespaceDefinition
                {
                    Name               = VerifyNsName(nameText.Substring(2), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("!%"))
            {
                pair = new Parameter
                {
                    Name               = VerifyNsName(nameText.Substring(2), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("!"))
            {
                pair = new DOM.Mapped.Document
                {
                    Name               = VerifyName(nameText.Substring(1), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("$"))
            {
                pair = new DOM.Mapped.Alias()
                {
                    Name               = VerifyName(nameText.Substring(1), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("%"))
            {
                pair = new DOM.Mapped.Argument()
                {
                    Name               = VerifyName(nameText.Substring(1), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (nameText.StartsWith("#"))
            {
                var tuple = Element.GetNameAndNs(nameText.Substring(1), nameQuotesType);
                var ns    = string.IsNullOrEmpty(tuple.Item1) ? null : tuple.Item1;

                if (ns == null)
                {
                    pair = new DOM.Mapped.Scope
                    {
                        NsPrefix           = VerifyScopeName(nameText.Substring(1), nameInterval, _module),
                        NameInterval       = nameInterval,
                        Delimiter          = delimiter,
                        DelimiterInterval  = delimiterInterval,
                        Value              = value.Item1,
                        ValueQuotesType    = valueQuotesType,
                        ValueInterval      = valueInterval,
                        InterpolationItems = value.Item2,
                        ValueIndent        = valueIndent
                    };
                }
                else
                {
                    pair = new DOM.Mapped.Scope
                    {
                        NsPrefix           = VerifyScopeName(ns, nameInterval, _module),
                        Name               = VerifyElementName(tuple.Item2, nameInterval, _module),
                        NameInterval       = nameInterval,
                        Delimiter          = delimiter,
                        DelimiterInterval  = delimiterInterval,
                        Value              = value.Item1,
                        ValueQuotesType    = valueQuotesType,
                        ValueInterval      = valueInterval,
                        InterpolationItems = value.Item2,
                        ValueIndent        = valueIndent
                    };
                }
            }
            else
            {
                var tuple = Element.GetNameAndNs(nameText, nameQuotesType);
                var ns    = string.IsNullOrEmpty(tuple.Item1) ? null : tuple.Item1;

                pair = new Element
                {
                    NsPrefix           = VerifyScopeName(ns, nameInterval, _module),
                    Name               = VerifyElementName(tuple.Item2, nameInterval, _module),
                    NameQuotesType     = nameQuotesType,
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            SetValueType(pair, delimiter, value.Item1, valueQuotesType);
            return((Pair)pair);
        }
Пример #2
0
        public Pair CreateMappedPair(ICharStream input, int nameQuotesType, Interval nameInterval, DelimiterEnum delimiter,
                                     Interval delimiterInterval, int valueQuotesType, Interval valueInterval, int valueIndent)
        {
            Pair pair;
            var  name  = PairFactoryForXml.GetNameText(input, nameQuotesType, nameInterval);
            var  value = PairFactoryForXml.GetValue(input, delimiter, valueQuotesType, valueInterval,
                                                    valueIndent, _context, (Module)_module);

            if (nameQuotesType > 0)
            {
                if (delimiter == DelimiterEnum.None)
                {
                    value = PairFactoryForXml.GetValue(input, delimiter, nameQuotesType, nameInterval,
                                                       0, _context, (Module)_module);
                    valueQuotesType = nameQuotesType;
                }
                pair = new Element
                {
                    Name               = name,
                    NameQuotesType     = nameQuotesType,
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };

                SetValueType((Element)pair, delimiter, value.Item1, valueQuotesType);
            }
            else if (name.StartsWith("@"))
            {
                pair = new DOM.Mapped.Attribute()
                {
                    Name               = name.Substring(1),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (name.StartsWith("!$"))
            {
                pair = new DOM.Mapped.AliasDefinition
                {
                    Name               = VerifyName(name.Substring(2), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (name.StartsWith("!#"))
            {
                pair = new DOM.Mapped.NamespaceDefinition
                {
                    Name               = VerifyNsName(name.Substring(2), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (name.StartsWith("!%"))
            {
                pair = new DOM.Mapped.Parameter
                {
                    Name               = VerifyNsName(name.Substring(2), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (name.StartsWith("!"))
            {
                pair = new DOM.Mapped.Document
                {
                    Name               = VerifyName(name.Substring(1), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (name.StartsWith("$"))
            {
                pair = new DOM.Mapped.Alias()
                {
                    Name               = VerifyName(name.Substring(1), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
            }
            else if (name.StartsWith("%"))
            {
                pair = new DOM.Mapped.Argument()
                {
                    Name               = VerifyName(name.Substring(1), nameInterval, _module),
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };

                SetValueType((IMappedPair)pair, delimiter, value.Item1, valueQuotesType);
            }
            else if (name.StartsWith("#"))
            {
                pair = new DOM.Mapped.Scope
                {
                    NsPrefix          = VerifyScopeName(name.Substring(1), nameInterval, _module),
                    NameInterval      = nameInterval,
                    Delimiter         = delimiter,
                    DelimiterInterval = delimiterInterval
                };
                SetValueType((IMappedPair)pair, delimiter, value.Item1, valueQuotesType);
            }
            else
            {
                pair = new Element
                {
                    Name               = name,
                    NameQuotesType     = nameQuotesType,
                    NameInterval       = nameInterval,
                    Delimiter          = delimiter,
                    DelimiterInterval  = delimiterInterval,
                    Value              = value.Item1,
                    ValueQuotesType    = valueQuotesType,
                    ValueInterval      = valueInterval,
                    InterpolationItems = value.Item2,
                    ValueIndent        = valueIndent
                };
                if (delimiter == DelimiterEnum.None)
                {
                    value = PairFactoryForXml.GetValue(input, delimiter, nameQuotesType, nameInterval,
                                                       0, _context, (Module)_module);
                    valueQuotesType = nameQuotesType;
                }
            }
            SetValueType((IMappedPair)pair, delimiter, value.Item1, valueQuotesType);
            return(pair);
        }