public void GetPrefixAndNs(INsNode node, DOM.Document document, Func <Scope> getScope, out string prefix, out string ns) { prefix = null; ns = null; if (node.NsPrefix == null) { var scope = getScope(); if (scope == null) { return; } node.NsPrefix = scope.NsPrefix; } //Getting namespace info for the generated document. var targetNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == document); var moduleMember = GetModuleMember((Node)node); var member = moduleMember as ModuleMember; if (member != null) { //Resolving ns first using aliasDef context NsInfo var contextNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == moduleMember); var domNamespace = contextNsInfo.Namespaces.FirstOrDefault(n => n.Name == node.NsPrefix); if (domNamespace == null) { //Prefix was defined in the module. Looking up in the module. var moduleNamespace = member.Module.Namespaces.FirstOrDefault(n => n.Name == node.NsPrefix); if (moduleNamespace != null) { ns = moduleNamespace.Value; } } else { ns = domNamespace.Value; } //Resolving prefix using Document's NsInfo if (ns != null) { var ns1 = ns; prefix = targetNsInfo.Namespaces.First(n => n.Value == ns1).Name; } } }
INsNode GetNode(INsNode parent, TypeMapping tm, string oldName, bool preserve = false) { return(parent.GetOrAddNode(oldName, () => { string newName; if (preserve) { newName = oldName; } else { newName = NameGenerator(parent, tm?.Source, oldName, n => parent.NewName == n || parent.MembersByNewName.ContainsKey(n)); } return newName; })); }
/// <summary> /// Resolves namespace and prefix for <see cref="INsNode"/>. /// </summary> /// <param name="node">Target <see cref="INsNode"/>.</param> /// <param name="document">Current <see cref="Document"/>.</param> /// <param name="currentModuleMember">Current module member.</param> /// <param name="scope">Current <see cref="Scope"/>.</param> /// <param name="prefix">Output namespace prefix parameter.</param> /// <param name="ns">Output namespace parameter.</param> public void GetPrefixAndNs(INsNode node, DOM.Document document, ModuleMember currentModuleMember, Scope scope, out string prefix, out string ns) { prefix = null; ns = null; var nsPrefix = node.NsPrefix; if (nsPrefix == null) { if (scope == null) { return; } nsPrefix = scope.NsPrefix; } GetPrefixAndNs(nsPrefix, node, document, currentModuleMember, out prefix, out ns); }
public void GetPrefixAndNs(INsNode node, DOM.Document document, Func <Scope> getScope, out string prefix, out string ns) { prefix = null; ns = null; var nsPrefix = node.NsPrefix; if (nsPrefix == null) { var scope = getScope(); if (scope == null) { return; } nsPrefix = scope.NsPrefix; } GetPrefixAndNs(nsPrefix, node, document, out prefix, out ns); }
/// <summary> /// Resolves namespace and prefix for <see cref="INsNode"/>. /// </summary> /// <param name="nsPrefix">Effective namespace prefix of the node. Could be different than the actual prefix.</param> /// <param name="node">Target <see cref="INsNode"/>.</param> /// <param name="document">Current <see cref="Document"/>.</param> /// <param name="currentModuleMember"></param> /// <param name="prefix">Output namespace prefix parameter.</param> /// <param name="ns">Output namespace parameter.</param> public void GetPrefixAndNs(string nsPrefix, INsNode node, DOM.Document document, ModuleMember currentModuleMember, out string prefix, out string ns) { prefix = null; ns = null; //Getting namespace info for the generated document. var targetNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == document); var moduleMember = currentModuleMember;// GetModuleMember((Pair)node); _ if (moduleMember is ModuleMember member) { //Resolving namespace first using aliasDef context NsInfo var contextNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == moduleMember); var domNamespace = contextNsInfo.Namespaces.FirstOrDefault(n => n.Name == nsPrefix); if (domNamespace == null) { //Prefix was defined in the module. Looking up in the module. var moduleNamespace = member.Module.NamespaceDefinitions.FirstOrDefault(n => n.Name == nsPrefix); if (moduleNamespace != null) { ns = moduleNamespace.Value; } } else { ns = domNamespace.Value; } //Resolving prefix using Document's NsInfo if (ns != null) { var ns1 = ns; prefix = targetNsInfo.Namespaces.First(n => n.Value == ns1).Name; } } }
INsNode GetNode(TypeMapping mapping) { return(_ns.GetOrAddNode(mapping, tm => { var source = tm.Source; var uniqueInScopeOldName = tm.UniqueName; var toMangle = _options.Type & ~_ns.Preserved(tm) & MetaType.NamespaceAndType; var preserveType = (toMangle & MetaType.Type) == 0; var preserveNs = (toMangle & MetaType.Namespace) == 0; INsNode scope; if (source.DeclaringType != null) { var parent = GetNode(Context.MappedTypes[source.DeclaringType.CreateKey()]); scope = GetNode(parent, tm, uniqueInScopeOldName, preserveType); } else { INsNode node = _root; if (preserveNs) { node = GetNode(node, null, tm.Source.Namespace, true); } else { var nsfolding = _options.NamespaceMangling; switch (nsfolding) { // root -> types case NamespaceMangling.Empty: if (preserveType) { if (node.MembersByNewName.ContainsKey(uniqueInScopeOldName)) { goto case NamespaceMangling.Fold; } else { break; } } if (tm.Source.Namespace.Length > 0) { // this will serve as a key only to prevent duplicates, it will be replaced by mangled name uniqueInScopeOldName = tm.Source.Namespace + "." + uniqueInScopeOldName; } break; // root -> namespaces -> types case NamespaceMangling.Fold: node = GetNode(node, null, tm.Source.Namespace); break; // root -> namespaces[0] -> namespaces[1] -> namespaces[...n] -> types case NamespaceMangling.Parts: foreach (var part in tm.Source.Namespace.ToString().Split('.')) { node = GetNode(node, null, part); } break; case NamespaceMangling.Distribute: node = (INsNode)node.Members.RandomElementOrDefault(_rng); goto case NamespaceMangling.Empty; } if (tm.Target.Namespace != node.FullNewName) { tm.Target.Namespace = node.FullNewName; } } scope = GetNode(node, tm, uniqueInScopeOldName, preserveType); } if (tm.Target.Name != scope.NewName) { tm.Target.Name = scope.NewName; } return scope; })); }
public void GetPrefixAndNs(INsNode node, DOM.Document document, Func <DOM.AliasDefinition> getAliasDef, Func <Scope> getScope, out string prefix, out string ns) { prefix = null; ns = null; if (node.NsPrefix == null) { var scope = getScope(); if (scope == null) { return; } node.NsPrefix = scope.NsPrefix; } //Getting namespace info for the generated document. var targetNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == document); var aliasDef = getAliasDef(); if (aliasDef == null) {//Resolving based on document's NsInfo var domNamespace = targetNsInfo.Namespaces.FirstOrDefault(n => n.Name == node.NsPrefix); if (domNamespace != null) { prefix = domNamespace.Name; ns = domNamespace.Value; } else { //Prefix is defined in Module. Resolving using module namespaces //Finding uri first var moduleNamespace = document.Module.Namespaces.FirstOrDefault(n => n.Name == node.NsPrefix); if (moduleNamespace != null) { ns = moduleNamespace.Value; //Finding effective prefix in the Document Namespace domNamespace = targetNsInfo.Namespaces.First(n => n.Value == moduleNamespace.Value); prefix = domNamespace.Name; } } } else { //Resolving ns first using aliasDef context NsInfo var contextNsInfo = ModuleMembersNsInfo.First(n => n.ModuleMember == aliasDef); var domNamespace = contextNsInfo.Namespaces.FirstOrDefault(n => n.Name == node.NsPrefix); if (domNamespace == null) { //Prefix was defined in the module. Looking up in the module. var moduleNamespace = aliasDef.Module.Namespaces.FirstOrDefault(n => n.Name == node.NsPrefix); if (moduleNamespace != null) { ns = moduleNamespace.Value; } } else { ns = domNamespace.Value; } //Resolving prefix using Document's NsInfo if (ns != null) { var ns1 = ns; prefix = targetNsInfo.Namespaces.First(n => n.Value == ns1).Name; } } }