1 //------------------------------------------------------------------------------
2 // <copyright file="NavigatorInput.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
8 namespace System.Xml.Xsl.XsltOld {
9 using Res = System.Xml.Utils.Res;
11 using System.Diagnostics;
13 using System.Xml.XPath;
14 using Keywords = System.Xml.Xsl.Xslt.KeywordsTable;
16 internal class NavigatorInput {
17 private XPathNavigator _Navigator;
18 private PositionInfo _PositionInfo;
19 private InputScopeManager _Manager;
20 private NavigatorInput _Next;
22 private Keywords _Atoms;
24 internal NavigatorInput Next {
33 internal string Href {
39 internal Keywords Atoms {
45 internal XPathNavigator Navigator {
52 internal InputScopeManager InputScopeManager {
59 internal bool Advance() {
61 return _Navigator.MoveToNext();
64 internal bool Recurse() {
66 return _Navigator.MoveToFirstChild();
69 internal bool ToParent() {
71 return _Navigator.MoveToParent();
74 internal void Close() {
80 // Input document properties
84 // XPathNavigator does not support line and position numbers
87 internal int LineNumber {
88 get { return _PositionInfo.LineNumber; }
91 internal int LinePosition {
92 get { return _PositionInfo.LinePosition; }
95 internal XPathNodeType NodeType {
98 return _Navigator.NodeType;
102 internal string Name {
105 return _Navigator.Name;
109 internal string LocalName {
112 return _Navigator.LocalName;
116 internal string NamespaceURI {
119 return _Navigator.NamespaceURI;
123 internal string Prefix {
126 return _Navigator.Prefix;
130 internal string Value {
133 return _Navigator.Value;
137 internal bool IsEmptyTag {
140 return _Navigator.IsEmptyElement;
144 internal string BaseURI {
146 return _Navigator.BaseURI;
150 internal bool MoveToFirstAttribute() {
152 return _Navigator.MoveToFirstAttribute();
155 internal bool MoveToNextAttribute() {
157 return _Navigator.MoveToNextAttribute();
159 internal bool MoveToFirstNamespace() {
161 return _Navigator.MoveToFirstNamespace(XPathNamespaceScope.ExcludeXml);
164 internal bool MoveToNextNamespace() {
166 return _Navigator.MoveToNextNamespace(XPathNamespaceScope.ExcludeXml);
172 internal NavigatorInput(XPathNavigator navigator, string baseUri, InputScope rootScope) {
173 if (navigator == null) {
174 throw new ArgumentNullException("navigator");
176 if (baseUri == null) {
177 throw new ArgumentNullException("baseUri");
179 Debug.Assert(navigator.NameTable != null);
182 _Atoms = new Keywords(navigator.NameTable);
183 _Navigator = navigator;
184 _Manager = new InputScopeManager(_Navigator, rootScope);
185 _PositionInfo = PositionInfo.GetPositionInfo(_Navigator);
189 if (NodeType == XPathNodeType.Root) {
190 _Navigator.MoveToFirstChild();
194 internal NavigatorInput(XPathNavigator navigator): this(navigator, navigator.BaseURI, null) {}
199 [System.Diagnostics.Conditional("DEBUG")]
200 internal void AssertInput() {
201 Debug.Assert(_Navigator != null);