コード例 #1
0
            public void PopScope()
            {
                var prev = this.declaration;

                if (prev != null)
                {
                    do
                    {
                        prev = prev.prev;
                        if (prev.scope != this.scope)
                        {
                            break;
                        }
                        if (prev == this.declaration)
                        {
                            this.declaration = null;
                        }
                        else
                        {
                            this.declaration.prev = prev.prev;
                        }
                        this.rover = null;
                    }while (prev != this.declaration && this.declaration != null);
                }
                this.scope--;
            }
コード例 #2
0
            public void Add(string prefix, XNamespace ns)
            {
                var namespaceDeclaration = new NamespaceResolver.NamespaceDeclaration();

                namespaceDeclaration.prefix = prefix;
                namespaceDeclaration.ns     = ns;
                namespaceDeclaration.scope  = this.scope;
                if (this.declaration == null)
                {
                    this.declaration = namespaceDeclaration;
                }
                else
                {
                    namespaceDeclaration.prev = this.declaration.prev;
                }
                this.declaration.prev = namespaceDeclaration;
                this.rover            = null;
            }
コード例 #3
0
            public string GetPrefixOfNamespace(XNamespace ns, bool allowDefaultNamespace)
            {
                if (this.rover != null && this.rover.ns == ns && (allowDefaultNamespace || this.rover.prefix.Length > 0))
                {
                    return(this.rover.prefix);
                }
                var prev = this.declaration;

                if (prev != null)
                {
                    while (true)
                    {
                        prev = prev.prev;
                        if (prev.ns == ns)
                        {
                            var prev2 = this.declaration.prev;
                            while (prev2 != prev && prev2.prefix != prev.prefix)
                            {
                                prev2 = prev2.prev;
                            }
                            if (prev2 == prev)
                            {
                                if (allowDefaultNamespace)
                                {
                                    break;
                                }
                                if (prev.prefix.Length > 0)
                                {
                                    return(prev.prefix);
                                }
                            }
                        }
                        if (prev == this.declaration)
                        {
                            return(null);
                        }
                    }
                    this.rover = prev;
                    return(prev.prefix);
                }

                return(null);
            }