Ejemplo n.º 1
0
        private IEnumerable <Instruction> ParseContentPropertyIfAny(XamlType parentType)
        {
            if (IsNestedPropertyImplicit)
            {
                var contentProperty = parentType.ContentProperty;

                if (contentProperty == null)
                {
                    // There is no content property, so try to use a TypeConverter to supply the value.
                    yield return(Inject.Initialization());

                    yield return(Inject.Value(CurrentText));

                    yield return(Inject.EndOfMember());
                }
                else if (contentProperty.XamlType.IsCollection)
                {
                    foreach (var instruction in ParseCollectionInsideThisProperty(contentProperty))
                    {
                        yield return(instruction);
                    }
                }
                else
                {
                    yield return(Inject.StartOfMember(contentProperty));

                    foreach (var instruction in ParseElements())
                    {
                        yield return(instruction);
                    }
                    yield return(Inject.EndOfMember());
                }
            }
        }
Ejemplo n.º 2
0
        private IEnumerable <Instruction> ParseMembersOfObject()
        {
            while (CurrentNodeType == NodeType.Attribute && !EndOfStream)
            {
                var valueOfMember = CurrentPropertyText;

                yield return(Inject.StartOfMember(CurrentMember));

                if (IsMarkupExtension(valueOfMember))
                {
                    foreach (var instruction in ParseMarkupExtension(valueOfMember))
                    {
                        yield return(instruction);
                    }
                }
                else
                {
                    yield return(Inject.Value(valueOfMember));
                }

                yield return(Inject.EndOfMember());

                SetNextInstruction();
            }
        }
Ejemplo n.º 3
0
        private IEnumerable <Instruction> ParseCollectionInsideThisProperty(MemberBase member)
        {
            yield return(Inject.StartOfMember(member));

            if (IsBeginingOfImplicitCollection)
            {
                yield return(Inject.GetObject());

                yield return(Inject.Items());

                foreach (var instruction in ParseElements())
                {
                    yield return(instruction);
                }

                yield return(Inject.EndOfMember());

                yield return(Inject.EndOfObject());
            }
            else
            {
                foreach (var xamlInstruction in ParseNonEmptyElement())
                {
                    yield return(xamlInstruction);
                }
            }

            yield return(Inject.EndOfMember());
        }
Ejemplo n.º 4
0
        private IEnumerable <XamlInstruction> ParseContentPropertyIfAny(XamlType parentType)
        {
            if (IsNestedPropertyImplicit)
            {
                var contentProperty = parentType.ContentProperty;
                if (contentProperty == null)
                {
                    throw new XamlParseException($"Cannot get the content property for the type {parentType}");
                }

                if (contentProperty.XamlType.IsCollection)
                {
                    foreach (var instruction in ParseCollectionInsideThisProperty(contentProperty))
                    {
                        yield return(instruction);
                    }
                }
                else
                {
                    yield return(Inject.StartOfMember(contentProperty));

                    foreach (var instruction in ParseElements())
                    {
                        yield return(instruction);
                    }
                    yield return(Inject.EndOfMember());
                }
            }
        }
Ejemplo n.º 5
0
        private IEnumerable <Instruction> ParseProperties(IEnumerable <PropertyOption> options, XamlType xamlType)
        {
            foreach (var option in options)
            {
                var member = xamlType.GetMember(option.Property);
                yield return(Inject.StartOfMember(member));


                var stringNode = option.Value as StringNode;
                if (stringNode != null)
                {
                    yield return(Inject.Value(stringNode.Value));
                }

                var markupExtensionNode = option.Value as MarkupExtensionNode;
                if (markupExtensionNode != null)
                {
                    foreach (var xamlInstruction in ParseMarkupExtensionNode(markupExtensionNode))
                    {
                        yield return(xamlInstruction);
                    }
                }

                yield return(Inject.EndOfMember());
            }
        }
Ejemplo n.º 6
0
        private IEnumerable <XamlInstruction> InjectNodesForTypeThatRequiresInitialization()
        {
            yield return(Inject.Initialization());

            SetNextInstruction();
            yield return(Inject.Value(CurrentText));

            yield return(Inject.EndOfMember());
        }
Ejemplo n.º 7
0
        private IEnumerable <Instruction> ParseItemsOfCollection()
        {
            yield return(Inject.Items());

            foreach (var xamlInstruction in ParseElements())
            {
                yield return(xamlInstruction);
            }
            yield return(Inject.EndOfMember());
        }
Ejemplo n.º 8
0
        private IEnumerable <XamlInstruction> ParseNestedProperty(XamlMember member)
        {
            yield return(Inject.StartOfMember(member));

            SetNextInstruction();

            foreach (var instruction in ParseInnerContentOfNestedProperty())
            {
                yield return(instruction);
            }

            yield return(Inject.EndOfMember());
        }
Ejemplo n.º 9
0
        private IEnumerable <XamlInstruction> ParseCollection()
        {
            yield return(Inject.Items());

            foreach (var instruction in ParseElements())
            {
                yield return(instruction);
            }

            yield return(Inject.EndOfMember());

            yield return(Inject.EndOfObject());
        }
Ejemplo n.º 10
0
        private IEnumerable <Instruction> ParseNestedProperty(MemberBase member)
        {
            yield return(Inject.StartOfMember(member));

            SetNextInstruction();

            foreach (var instruction in ParseInnerContentOfNestedProperty())
            {
                yield return(instruction);
            }

            SkipTextNodes();
            yield return(Inject.EndOfMember());
        }
Ejemplo n.º 11
0
        private IEnumerable <Instruction> InjectNodesForTypeThatRequiresInitialization()
        {
            SetNextInstruction();

            foreach (var member in ParseMembersOfObject())
            {
                yield return(member);
            }

            yield return(Inject.Initialization());

            yield return(Inject.Value(CurrentText));

            yield return(Inject.EndOfMember());
        }
Ejemplo n.º 12
0
        private static IEnumerable <Instruction> ParseArguments(IEnumerable <PositionalOption> options)
        {
            var positionalOptions = options.ToList();

            if (positionalOptions.Any())
            {
                yield return(Inject.MarkupExtensionArguments());

                foreach (var option in positionalOptions)
                {
                    yield return(Inject.Value(option.Identifier));
                }
                yield return(Inject.EndOfMember());
            }
        }
Ejemplo n.º 13
0
        private IEnumerable <XamlInstruction> ParseCollectionInsideThisProperty(XamlMemberBase member)
        {
            yield return(Inject.StartOfMember(member));

            yield return(Inject.GetObject());

            yield return(Inject.Items());

            foreach (var instruction in ParseElements())
            {
                yield return(instruction);
            }

            yield return(Inject.EndOfMember());

            yield return(Inject.EndOfObject());

            yield return(Inject.EndOfMember());
        }