1 //------------------------------------------------------------------------------
2 // <copyright file="CopyNamespacesAction.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;
15 internal sealed class CopyNamespacesAction : Action {
16 private const int BeginEvent = 2;
17 private const int TextEvent = 3;
18 private const int EndEvent = 4;
19 private const int Advance = 5;
21 private static CopyNamespacesAction s_Action = new CopyNamespacesAction();
23 internal static CopyNamespacesAction GetAction() {
24 Debug.Assert(s_Action != null);
28 internal override void Execute(Processor processor, ActionFrame frame) {
29 Debug.Assert(processor != null && frame != null);
31 while (processor.CanContinue) {
32 switch (frame.State) {
34 if (frame.Node.MoveToFirstNamespace(XPathNamespaceScope.ExcludeXml) == false) {
39 frame.State = BeginEvent;
43 Debug.Assert(frame.State == BeginEvent);
44 Debug.Assert(frame.Node.NodeType == XPathNodeType.Namespace);
46 if (processor.BeginEvent(XPathNodeType.Namespace, null, frame.Node.LocalName, frame.Node.Value, false) == false) {
47 // This one wasn't output
50 frame.State = EndEvent;
54 Debug.Assert(frame.State == EndEvent);
55 Debug.Assert(frame.Node.NodeType == XPathNodeType.Namespace);
57 if (processor.EndEvent(XPathNodeType.Namespace) == false) {
58 // This one wasn't output
61 frame.State = Advance;
65 Debug.Assert(frame.State == Advance);
66 Debug.Assert(frame.Node.NodeType == XPathNodeType.Namespace);
68 if (frame.Node.MoveToNextNamespace(XPathNamespaceScope.ExcludeXml)) {
69 frame.State = BeginEvent;
73 frame.Node.MoveToParent();