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; } } }
public void ExitAliasDef(DOM.Antlr.AliasDefinition node) { //Checking if the alias definition name is unique var sameNameAliasDef = ModuleMembersNsInfo.FindAll(n => (n.ModuleMember is DOM.AliasDefinition && ((DOM.AliasDefinition)n.ModuleMember).Name == node.Name)); if (sameNameAliasDef.Count > 1) { if (sameNameAliasDef.Count == 2) { //Reporting error for 2 documents (existing and new) var prevAliasDef = (DOM.AliasDefinition)sameNameAliasDef[0].ModuleMember; _context.AddError(CompilerErrorFactory.DuplicateAliasDefName(prevAliasDef, prevAliasDef.Module.FileName)); } _context.AddError(CompilerErrorFactory.DuplicateAliasDefName(node, _currentModule.FileName)); } }
public void ExitDocument(DOM.Antlr.Document node) { //Checking if the document's name is unique per format (json/xml) var sameNameDocuments = ModuleMembersNsInfo.FindAll(n => (n.ModuleMember is DOM.Document && ((DOM.Document)n.ModuleMember).Name == node.Name) && ((DOM.Antlr.Module)node.Module).TargetFormat == ((DOM.Antlr.Module)((DOM.Document)n.ModuleMember).Module).TargetFormat ); if (sameNameDocuments.Count > 1) { if (sameNameDocuments.Count == 2) { //Reporting error for 2 documents (existing and new) var prevDoc = (DOM.Document)sameNameDocuments[0].ModuleMember; _context.AddError(CompilerErrorFactory.DuplicateDocumentName(prevDoc, prevDoc.Module.FileName)); } _context.AddError(CompilerErrorFactory.DuplicateDocumentName(node, _currentModule.FileName)); } }
/// <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; } } }
public void EnterAliasDef(AliasDefinition node) { _currentModuleMember = node; _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember); ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo); }
public void EnterDocument(Document node) { _currentModuleMember = node; _currentModuleMemberNsInfo = new NsInfo(_currentModuleMember); ModuleMembersNsInfo.Add(_currentModuleMemberNsInfo); }
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; } } }