The Labs \ Source Viewer \ SSCLI \ System.Xml.Xsl.XsltOld \ InputScope

  1. //------------------------------------------------------------------------------
  2. // <copyright file="InputScope.cs" company="Microsoft">
  3. //
  4. // Copyright (c) 2006 Microsoft Corporation. All rights reserved.
  5. //
  6. // The use and distribution terms for this software are contained in the file
  7. // named license.txt, which can be found in the root of this distribution.
  8. // By using this software in any fashion, you are agreeing to be bound by the
  9. // terms of this license.
  10. //
  11. // You must not remove this notice, or any other, from this software.
  12. //
  13. // </copyright>
  14. //------------------------------------------------------------------------------
  15. namespace System.Xml.Xsl.XsltOld
  16. {
  17.     using Res = System.Xml.Utils.Res;
  18.     using System;
  19.     using System.Diagnostics;
  20.     using System.Xml;
  21.     using System.Xml.XPath;
  22.     using System.Collections;
  23.    
  24.     internal class InputScope : DocumentScope
  25.     {
  26.         private InputScope parent;
  27.         private bool forwardCompatibility;
  28.         private bool canHaveApplyImports;
  29.         private Hashtable variables;
  30.         private Hashtable extensionNamespaces;
  31.         private Hashtable excludedNamespaces;
  32.        
  33.         internal InputScope Parent {
  34.             get { return this.parent; }
  35.         }
  36.        
  37.         internal Hashtable Variables {
  38.             get { return this.variables; }
  39.         }
  40.        
  41.         internal bool ForwardCompatibility {
  42.             get { return this.forwardCompatibility; }
  43.             set { this.forwardCompatibility = value; }
  44.         }
  45.        
  46.         internal bool CanHaveApplyImports {
  47.             get { return this.canHaveApplyImports; }
  48.             set { this.canHaveApplyImports = value; }
  49.         }
  50.        
  51.         internal InputScope(InputScope parent)
  52.         {
  53.             Init(parent);
  54.         }
  55.        
  56.         internal void Init(InputScope parent)
  57.         {
  58.             this.scopes = null;
  59.             this.parent = parent;
  60.            
  61.             if (this.parent != null) {
  62.                 this.forwardCompatibility = this.parent.forwardCompatibility;
  63.                 this.canHaveApplyImports = this.parent.canHaveApplyImports;
  64.             }
  65.         }
  66.        
  67.         internal void InsertExtensionNamespace(string nspace)
  68.         {
  69.             if (this.extensionNamespaces == null) {
  70.                 this.extensionNamespaces = new Hashtable();
  71.             }
  72.             this.extensionNamespaces[nspace] = null;
  73.         }
  74.        
  75.         internal bool IsExtensionNamespace(string nspace)
  76.         {
  77.             if (extensionNamespaces == null) {
  78.                 return false;
  79.             }
  80.             return extensionNamespaces.Contains(nspace);
  81.         }
  82.        
  83.         internal void InsertExcludedNamespace(string nspace)
  84.         {
  85.             if (this.excludedNamespaces == null) {
  86.                 this.excludedNamespaces = new Hashtable();
  87.             }
  88.             this.excludedNamespaces[nspace] = null;
  89.         }
  90.        
  91.         internal bool IsExcludedNamespace(string nspace)
  92.         {
  93.             if (excludedNamespaces == null) {
  94.                 return false;
  95.             }
  96.             return excludedNamespaces.Contains(nspace);
  97.         }
  98.        
  99.         internal void InsertVariable(VariableAction variable)
  100.         {
  101.             Debug.Assert(variable != null);
  102.            
  103.             if (this.variables == null) {
  104.                 this.variables = new Hashtable();
  105.             }
  106.             this.variables[variable.Name] = variable;
  107.         }
  108.        
  109.         internal int GetVeriablesCount()
  110.         {
  111.             if (this.variables == null) {
  112.                 return 0;
  113.             }
  114.             return this.variables.Count;
  115.         }
  116.        
  117.         public VariableAction ResolveVariable(XmlQualifiedName qname)
  118.         {
  119.             for (InputScope inputScope = this; inputScope != null; inputScope = inputScope.Parent) {
  120.                 if (inputScope.Variables != null) {
  121.                     VariableAction variable = (VariableAction)inputScope.Variables[qname];
  122.                     if (variable != null) {
  123.                         return variable;
  124.                     }
  125.                 }
  126.             }
  127.             return null;
  128.         }
  129.        
  130.         public VariableAction ResolveGlobalVariable(XmlQualifiedName qname)
  131.         {
  132.             InputScope prevScope = null;
  133.             for (InputScope inputScope = this; inputScope != null; inputScope = inputScope.Parent) {
  134.                 prevScope = inputScope;
  135.             }
  136.             return prevScope.ResolveVariable(qname);
  137.         }
  138.     }
  139. }

Developer Fusion