示例#1
0
        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;
                }
            }
        }
示例#2
0
        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));
            }
        }
示例#3
0
        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));
            }
        }
示例#4
0
        /// <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);
 }
示例#7
0
        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;
                }
            }
        }