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

  1. //------------------------------------------------------------------------------
  2. // <copyright file="TextAction.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.    
  23.     internal class TextAction : CompiledAction
  24.     {
  25.         private bool disableOutputEscaping;
  26.         private string text;
  27.        
  28.         internal override void Compile(Compiler compiler)
  29.         {
  30.             CompileAttributes(compiler);
  31.             CompileContent(compiler);
  32.            
  33.         }
  34.        
  35.         internal override bool CompileAttribute(Compiler compiler)
  36.         {
  37.             string name = compiler.Input.LocalName;
  38.             string value = compiler.Input.Value;
  39.            
  40.             if (Keywords.Equals(name, compiler.Atoms.DisableOutputEscaping)) {
  41.                 this.disableOutputEscaping = compiler.GetYesNo(value);
  42.             }
  43.             else {
  44.                 return false;
  45.             }
  46.            
  47.             return true;
  48.         }
  49.        
  50.         private void CompileContent(Compiler compiler)
  51.         {
  52.             if (compiler.Recurse()) {
  53.                 NavigatorInput input = compiler.Input;
  54.                
  55.                 this.text = string.Empty;
  56.                
  57.                 do {
  58.                     switch (input.NodeType) {
  59.                         case XPathNodeType.Text:
  60.                         case XPathNodeType.Whitespace:
  61.                         case XPathNodeType.SignificantWhitespace:
  62.                             this.text += input.Value;
  63.                             break;
  64.                         case XPathNodeType.Comment:
  65.                         case XPathNodeType.ProcessingInstruction:
  66.                             break;
  67.                         default:
  68.                             throw compiler.UnexpectedKeyword();
  69.                             break;
  70.                     }
  71.                 }
  72.                 while (compiler.Advance());
  73.                 compiler.ToParent();
  74.             }
  75.         }
  76.        
  77.         internal override void Execute(Processor processor, ActionFrame frame)
  78.         {
  79.             Debug.Assert(processor != null && frame != null);
  80.            
  81.             switch (frame.State) {
  82.                 case Initialized:
  83.                     if (processor.TextEvent(this.text, disableOutputEscaping)) {
  84.                         frame.Finished();
  85.                     }
  86.                     break;
  87.                 default:
  88.                    
  89.                     Debug.Fail("Invalid execution state in TextAction");
  90.                     break;
  91.             }
  92.         }
  93.     }
  94. }

Developer Fusion