XamlNamespace ParseNamespace(string xmlNamespace)
        {
            string name = xmlNamespace;

            Debug.Assert(name.StartsWith("clr-namespace:", StringComparison.Ordinal));
            name = name.Substring("clr-namespace:".Length);
            string namespaceName, assembly;
            int    pos = name.IndexOf(';');

            if (pos < 0)
            {
                namespaceName = name;
                assembly      = "";
            }
            else
            {
                namespaceName = name.Substring(0, pos);
                name          = name.Substring(pos + 1).Trim();
                if (!name.StartsWith("assembly=", StringComparison.Ordinal))
                {
                    throw new XamlLoadException("Expected: 'assembly='");
                }
                assembly = name.Substring("assembly=".Length);
            }
            XamlNamespace ns  = new XamlNamespace(xmlNamespace);
            Assembly      asm = LoadAssembly(assembly);

            if (asm != null)
            {
                AddMappingToNamespace(ns, new AssemblyNamespaceMapping(asm, namespaceName));
            }
            return(ns);
        }
        private void ScanAssemblies(IEnumerable <Assembly> assemblies)
        {
            foreach (var assembly in assemblies)
            {
                var namespaces = assembly.GetCustomAttributes <XmlnsDefinitionAttribute>()
                                 .Select(x => new { x.XmlNamespace, x.ClrNamespace })
                                 .GroupBy(x => x.XmlNamespace);

                foreach (var nsa in namespaces)
                {
                    var xamlNamespace = _namespaces.FirstOrDefault(x => x.Name == nsa.Key);

                    if (xamlNamespace == null)
                    {
                        xamlNamespace = new XamlNamespace(nsa.Key);
                        _namespaces.Add(xamlNamespace);
                    }

                    var clrNamespaces = nsa.Select(x => x.ClrNamespace);
                    xamlNamespace.Addresses.Add(new ConfiguredAssemblyWithNamespaces(assembly, clrNamespaces));
                }

                _scanned.Add(assembly);
            }
        }
Example #3
0
        private static XamlNamespaceRegistry CreateXamlNamespaceRegistry()
        {
            var xamlNamespaceRegistry = new XamlNamespaceRegistry();

            var forcedAssemblies = new[]
            {
                typeof(Control),
                typeof(Style)
            }.Select(t => t.GetTypeInfo().Assembly);

            foreach (var nsa in
                     forcedAssemblies
                     .Concat(PerspexLocator.Current.GetService <IPclPlatformWrapper>().GetLoadedAssemblies())
                     .Distinct()
                     .SelectMany(asm
                                 => asm.GetCustomAttributes <XmlnsDefinitionAttribute>().Select(attr => new { asm, attr }))
                     .GroupBy(entry => entry.attr.XmlNamespace))
            {
                var def = XamlNamespace.Map(nsa.Key)
                          .With(nsa.GroupBy(x => x.asm).Select(
                                    a => Route.Assembly(a.Key)
                                    .WithNamespaces(a.Select(entry => entry.attr.ClrNamespace).ToList())
                                    ));
                xamlNamespaceRegistry.AddNamespace(def);
            }
            xamlNamespaceRegistry.RegisterPrefix(new PrefixRegistration(string.Empty, PerspexNs));

            return(xamlNamespaceRegistry);
        }
        void AddMappingToNamespace(XamlNamespace ns, AssemblyNamespaceMapping mapping)
        {
            ns.ClrNamespaces.Add(mapping);

            List <string> xmlNamespaceList;

            if (reverseDictList.TryGetValue(mapping, out xmlNamespaceList))
            {
                if (!xmlNamespaceList.Contains(ns.XmlNamespace))
                {
                    xmlNamespaceList.Add(ns.XmlNamespace);
                }
            }
            else
            {
                reverseDictList.Add(mapping, new List <string>()
                {
                    ns.XmlNamespace
                });
            }

            string xmlNamespace;

            if (reverseDict.TryGetValue(mapping, out xmlNamespace))
            {
                if (xmlNamespace == XamlConstants.PresentationNamespace)
                {
                    return;
                }
            }
            reverseDict[mapping] = ns.XmlNamespace;
        }
        public void ParentPrefixesAreAvailableInChild()
        {
            var type            = typeof(TextBlock);
            var assembly        = type.GetTypeInfo().Assembly;
            var xamlNamespaces  = XamlNamespace.Map("root").With(Route.Assembly(assembly).WithNamespaces(type.Namespace));
            var prefixAnnotator = new PrefixAnnotator();

            var sut = new PrefixedTypeResolver(prefixAnnotator, new TypeDirectory(new[] { xamlNamespaces }));

            var childNode = new ConstructionNode(typeof(TextBlock));
            var root      = new ConstructionNode(typeof(Window))
            {
                Assignments = new List <MemberAssignment>()
                {
                    new MemberAssignment()
                    {
                        Member   = Member.FromStandard <Window>(window => window.Content),
                        Children = new[] { childNode, }
                    }
                },
            };

            prefixAnnotator.Annotate(root, new List <PrefixDeclaration>()
            {
                new PrefixDeclaration(string.Empty, "root")
            });

            sut.Root = root;
            var buttonType = sut.GetTypeByPrefix(childNode, "Button");

            Assert.Equal(typeof(Button), buttonType);
        }
Example #6
0
        private ITypeDirectory CreateSut()
        {
            var type           = typeof(TextBlock);
            var assembly       = type.GetTypeInfo().Assembly;
            var xamlNamespaces = XamlNamespace.Map("root").With(Route.Assembly(assembly).WithNamespaces(type.Namespace));

            return(new TypeDirectory(new[] { xamlNamespaces }));
        }
            internal XamlNamespace Clone()
            {
                XamlNamespace copy = new XamlNamespace(this.XmlNamespacePrefix, this.XmlNamespace);

                // AssemblyNamespaceMapping is immutable
                copy.ClrNamespaces.AddRange(this.ClrNamespaces);
                return(copy);
            }
Example #8
0
        public static void FillFromAttributes(this INamespaceRegistry nsReg, IEnumerable <Assembly> assemblies)
        {
            var namespaces = XamlNamespace.DefinedInAssemblies(assemblies);

            foreach (var xamlNamespace in namespaces)
            {
                nsReg.AddNamespace(xamlNamespace);
            }
        }
 public void Initialize()
 {
     type     = typeof(DummyClass);
     registry = new XamlNamespaceRegistry();
     registry.RegisterPrefix(new PrefixRegistration("my", "target"));
     clrNamespace = $"clr-namespace:{type.Namespace};Assembly={type.GetTypeInfo().Assembly}";
     registry.RegisterPrefix(new PrefixRegistration("clr", clrNamespace));
     registry.AddNamespace(
         XamlNamespace.Map("target")
         .With(new[] { Route.Assembly(type.Assembly).WithNamespaces(new[] { type.Namespace }) }));
 }
Example #10
0
        private ITypeDirectory GetTypeDirectory()
        {
            var configuredAssemblyWithNamespaces = Route
                                                   .Assembly(typeof(Window).Assembly)
                                                   .WithNamespaces("System.Windows", "System.Windows.Controls");
            var xamlNamespace = XamlNamespace
                                .Map("root")
                                .With(configuredAssemblyWithNamespaces);

            return(new TypeDirectory(new[] { xamlNamespace }));
        }
Example #11
0
        private static TypeDirectory GetTypeDirectory()
        {
            var type        = typeof(TextBlock);
            var typeAnother = typeof(CustomControl);

            var assembly  = type.GetTypeInfo().Assembly;
            var nsAnother = XamlNamespace.Map("another").With(Route.Assembly(assembly).WithNamespaces(typeAnother.Namespace));

            var newTypeDirectory = new TypeDirectory(new[] { nsAnother });

            return(newTypeDirectory);
        }
Example #12
0
        protected internal virtual XamlType GetXamlType(string xamlNamespace, string name, params XamlType[] typeArguments)
        {
            if (xamlNamespace == null)
            {
                throw new ArgumentNullException("xamlNamespace");
            }
            if (name == null)
            {
                throw new ArgumentNullException("name");
            }
            if (typeArguments != null)
            {
                foreach (XamlType type in typeArguments)
                {
                    if (type == null)
                    {
                        throw new ArgumentException(System.Xaml.SR.Get("CollectionCannotContainNulls", new object[] { "typeArguments" }));
                    }
                    if (type.UnderlyingType == null)
                    {
                        return(null);
                    }
                }
            }
            XamlType xamlType = null;

            if ((typeArguments == null) || (typeArguments.Length == 0))
            {
                xamlType = XamlLanguage.LookupXamlType(xamlNamespace, name);
                if (xamlType != null)
                {
                    if (this.FullyQualifyAssemblyNamesInClrNamespaces)
                    {
                        xamlType = this.GetXamlType(xamlType.UnderlyingType);
                    }
                    return(xamlType);
                }
            }
            XamlNamespace namespace2     = this.GetXamlNamespace(xamlNamespace);
            int           revisionNumber = namespace2.RevisionNumber;

            xamlType = namespace2.GetXamlType(name, typeArguments);
            if ((xamlType == null) && !namespace2.IsClrNamespace)
            {
                this.UpdateXmlNsInfo();
                if (namespace2.RevisionNumber > revisionNumber)
                {
                    xamlType = namespace2.GetXamlType(name, typeArguments);
                }
            }
            return(xamlType);
        }
Example #13
0
        void AddMappingToNamespace(XamlNamespace ns, AssemblyNamespaceMapping mapping)
        {
            ns.ClrNamespaces.Add(mapping);

            string xmlNamespace;

            if (reverseDict.TryGetValue(mapping, out xmlNamespace))
            {
                if (xmlNamespace == XamlConstants.PresentationNamespace)
                {
                    return;
                }
            }
            reverseDict[mapping] = ns.XmlNamespace;
        }
Example #14
0
        private ITypeDirectory RegisterTypeLocation()
        {
            var type          = typeof(Page);
            var ass           = type.GetTypeInfo().Assembly;
            var xamlNamespace = XamlNamespace
                                .Map("root")
                                .With(
                Route
                .Assembly(ass)
                .WithNamespaces(type.Namespace),
                Route
                .Assembly(typeof(OmniDataTemplate).GetTypeInfo().Assembly)
                .WithNamespaces(typeof(OmniDataTemplate).Namespace));

            return(new TypeDirectory(new[] { xamlNamespace }));
        }
Example #15
0
        public XamlTypeRepositoryTests()
        {
            nsRegistryMock = new Mock <IXamlNamespaceRegistry>();

            var type = typeof(DummyClass);

            var fullyConfiguredMapping = XamlNamespace
                                         .Map("root")
                                         .With(new[] { Route.Assembly(type.Assembly).WithNamespaces(new[] { type.Namespace }) });

            nsRegistryMock.Setup(registry => registry.GetNamespace("root"))
            .Returns(fullyConfiguredMapping);

            nsRegistryMock.Setup(registry => registry.GetNamespace("clr-namespace:DummyNamespace;Assembly=DummyAssembly"))
            .Returns(new ClrNamespace(type.Assembly, type.Namespace));
        }
Example #16
0
        public static XamlNamespace Parse(string xamlNamespaceText)
        {
            // Declare local variables
            XamlNamespace xamlNamespace = new XamlNamespace();

            if (xamlNamespaceText.StartsWith("xmlns"))
            {
                // Read and set the prefix
                xamlNamespace.Prefix = xamlNamespaceText.Substring(0, xamlNamespaceText.IndexOf("=")).Replace("xmlns", "").Trim(':');

                if (xamlNamespaceText.Contains(";assembly="))
                {
                    // Read the assembly and remove it from xamlNamespaceText
                    string assembly = xamlNamespaceText.Substring(xamlNamespaceText.IndexOf(";assembly=")).Trim('"');
                    xamlNamespaceText = xamlNamespaceText.Replace(assembly, "");

                    // Set the assembly
                    xamlNamespace.Assembly = assembly.Replace(";assembly=", "");
                }

                if (xamlNamespaceText.Contains("clr-namespace:"))
                {
                    // Read the clr namespace and remove it from xamlNamespaceText
                    string clrNameSpace = xamlNamespaceText.Substring(xamlNamespaceText.IndexOf("clr-namespace:")).Trim('"');
                    xamlNamespaceText = xamlNamespaceText.Replace(clrNameSpace, "");

                    // Set the clr and xml namespaces
                    xamlNamespace.ClrNamespace = clrNameSpace.Replace("clr-namespace:", "");
                    xamlNamespace.XmlNamespace = clrNameSpace;

                    // If the assembly was not previously set, set it to the clr namespace
                    if (string.IsNullOrWhiteSpace(xamlNamespace.Assembly))
                    {
                        xamlNamespace.Assembly = xamlNamespace.ClrNamespace;
                    }
                }
                else
                {
                    // Read and set the xaml namespace
                    xamlNamespace.XmlNamespace = xamlNamespaceText.Substring(xamlNamespaceText.IndexOf("=")).Trim('=', '"');
                }
            }

            // Return the xaml namespace
            return(xamlNamespace);
        }
Example #17
0
        private IEnumerable <XamlNamespace> GetNamespaces(IEnumerable <Assembly> assemblies)
        {
            var routes = from a in assemblies
                         let attributes = a.GetCustomAttributes <Tizen.NUI.XmlnsDefinitionAttribute>()
                                          from byNamespace in attributes.GroupBy(arg => arg.XmlNamespace)
                                          let name = byNamespace.Key
                                                     let clrNamespaces = byNamespace.Select(arg => arg.ClrNamespace)
                                                                         let configuredAssemblyWithNamespaces = Route.Assembly(a).WithNamespaces(clrNamespaces.ToArray())
                                                                                                                select new { Ns = name, configuredAssemblyWithNamespaces };

            var nss = from route in routes
                      group route by route.Ns
                      into g
                      let ns = g.Select(arg => arg.configuredAssemblyWithNamespaces).ToArray()
                               select XamlNamespace.Map(g.Key).With(ns);

            return(nss);
        }
Example #18
0
        private static XamlNamespaceRegistry CreateXamlNamespaceRegistry()
        {
            var xamlNamespaceRegistry = new XamlNamespaceRegistry();

            var rootType    = typeof(DummyClass);
            var anotherType = typeof(Foreigner);

            var definitionForRoot = XamlNamespace
                                    .Map("root")
                                    .With(
                new[]
            {
                Route.Assembly(rootType.GetTypeInfo().Assembly)
                .WithNamespaces(
                    new[]
                {
                    rootType.Namespace,
                    typeof(Window).Namespace,
                })
            });

            var definitionForAnother = XamlNamespace
                                       .Map("another")
                                       .With(
                new[]
            {
                Route.Assembly(anotherType.GetTypeInfo().Assembly)
                .WithNamespaces(new[] { anotherType.Namespace })
            });

            foreach (var ns in new List <XamlNamespace> {
                definitionForRoot, definitionForAnother
            })
            {
                xamlNamespaceRegistry.AddNamespace(ns);
            }

            xamlNamespaceRegistry.RegisterPrefix(new PrefixRegistration("", "root"));
            xamlNamespaceRegistry.RegisterPrefix(new PrefixRegistration("x", "another"));

            return(xamlNamespaceRegistry);
        }
Example #19
0
        protected static ParseResult ParseResult(string xaml)
        {
            var ass = Assembly.Load(new AssemblyName("OmniXaml.Tests"));

            var namespaces = new[]
            {
                XamlNamespace.Map("root").With(Route.Assembly(ass).WithNamespaces("OmniXaml.Tests.Model")),
                XamlNamespace.Map("custom").With(Route.Assembly(ass).WithNamespaces("OmniXaml.Tests.Model.Custom")),
            };

            var directory = new TypeDirectory(namespaces);

            var resolver = new XmlTypeXmlTypeResolver(directory);
            var sut      = new XamlToTreeParser(new AttributeBasedMetadataProvider(), new[] { new InlineParser(resolver) }, resolver);

            var prefixAnnotator = new PrefixAnnotator();
            var tree            = sut.Parse(xaml, prefixAnnotator);

            return(tree);
        }
Example #20
0
        private XamlNamespace GetXamlNamespace(string xmlns)
        {
            XamlNamespace namespace2 = null;
            string        str;
            string        str2;

            if (this.NamespaceByUriList.TryGetValue(xmlns, out namespace2))
            {
                return(namespace2);
            }
            if (ClrNamespaceUriParser.TryParseUri(xmlns, out str, out str2))
            {
                namespace2 = new XamlNamespace(this, str, str2);
            }
            else
            {
                namespace2 = new XamlNamespace(this);
            }
            return(TryAdd <string, XamlNamespace>(this.NamespaceByUriList, xmlns, namespace2));
        }
Example #21
0
        private static XamlNamespaceRegistry CreateXamlNamespaceRegistry()
        {
            var xamlNamespaceRegistry = new XamlNamespaceRegistry();

            var rootType     = typeof(Control);
            var bindingType  = typeof(BindingExtension);
            var templateType = typeof(XamlDataTemplate);

            var definitionForRoot = XamlNamespace
                                    .Map(PerspexNs)
                                    .With(
                new[]
            {
                Route.Assembly(rootType.GetTypeInfo().Assembly).WithNamespaces(
                    new[]
                {
                    rootType.Namespace
                }),
                Route.Assembly(bindingType.GetTypeInfo().Assembly).WithNamespaces(
                    new[]
                {
                    bindingType.Namespace,
                }),
                Route.Assembly(templateType.GetTypeInfo().Assembly).WithNamespaces(
                    new[]
                {
                    templateType.Namespace,
                })
            });

            foreach (var ns in new List <XamlNamespace> {
                definitionForRoot
            })
            {
                xamlNamespaceRegistry.AddNamespace(ns);
            }

            xamlNamespaceRegistry.RegisterPrefix(new PrefixRegistration(string.Empty, PerspexNs));

            return(xamlNamespaceRegistry);
        }
        private static NamespaceRegistry CreateXamlNamespaceRegistry()
        {
            var xamlNamespaceRegistry = new NamespaceRegistry();

            var windowType          = typeof(Window);
            var textBlockType       = typeof(TextBlock);
            var toggleButtonType    = typeof(ToggleButton);
            var rotateTransformType = typeof(RotateTransform);
            var bindingType         = typeof(BindingExtension);

            var rootNs = XamlNamespace.Map(WpfRootNs)
                         .With(
                new[]
            {
                Route.Assembly(bindingType.Assembly).WithNamespaces(
                    new[] { bindingType.Namespace }),
                Route.Assembly(rotateTransformType.Assembly).WithNamespaces(
                    new[] { rotateTransformType.Namespace }),
                Route.Assembly(bindingType.Assembly).WithNamespaces(
                    new[] { bindingType.Namespace }),
                Route.Assembly(windowType.Assembly).WithNamespaces(
                    new[]
                {
                    windowType.Namespace,
                    textBlockType.Namespace,
                    toggleButtonType.Namespace
                })
            });

            foreach (var ns in new List <XamlNamespace> {
                rootNs
            })
            {
                xamlNamespaceRegistry.AddNamespace(ns);
            }

            xamlNamespaceRegistry.RegisterPrefix(new PrefixRegistration("", WpfRootNs));

            return(xamlNamespaceRegistry);
        }
 public void AddNamespace(XamlNamespace xamlNamespace)
 {
     xamlNamespaces.Add(xamlNamespace);
 }
Example #24
0
 public void AddNamespace(XamlNamespace xamlNamespace)
 {
     NamespaceRegistry.AddNamespace(xamlNamespace);
 }
 public void AddNamespace(XamlNamespace xamlNamespace)
 {
     inner.AddNamespace(xamlNamespace);
 }
Example #26
0
 public void AddNamespace(XamlNamespace xamlNamespace)
 {
     nsRegistry.AddNamespace(xamlNamespace);
 }
Example #27
0
 public void AddNamespace(XamlNamespace xamlNamespace)
 {
     xamlNamespaces.Add(xamlNamespace);
 }