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

  1. //------------------------------------------------------------------------------
  2. // <copyright file="ValueOfAction.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 ValueOfAction : CompiledAction
  24.     {
  25.         private const int ResultStored = 2;
  26.        
  27.         private int selectKey = Compiler.InvalidQueryKey;
  28.         private bool disableOutputEscaping;
  29.        
  30.         private static Action s_BuiltInRule = new BuiltInRuleTextAction();
  31.        
  32.         static internal Action BuiltInRule()
  33.         {
  34.             Debug.Assert(s_BuiltInRule != null);
  35.             return s_BuiltInRule;
  36.         }
  37.        
  38.         internal override void Compile(Compiler compiler)
  39.         {
  40.             CompileAttributes(compiler);
  41.             CheckRequiredAttribute(compiler, selectKey != Compiler.InvalidQueryKey, Keywords.s_Select);
  42.             CheckEmpty(compiler);
  43.         }
  44.        
  45.         internal override bool CompileAttribute(Compiler compiler)
  46.         {
  47.             string name = compiler.Input.LocalName;
  48.             string value = compiler.Input.Value;
  49.            
  50.             if (Keywords.Equals(name, compiler.Atoms.Select)) {
  51.                 this.selectKey = compiler.AddQuery(value);
  52.             }
  53.             else if (Keywords.Equals(name, compiler.Atoms.DisableOutputEscaping)) {
  54.                 this.disableOutputEscaping = compiler.GetYesNo(value);
  55.             }
  56.             else {
  57.                 return false;
  58.             }
  59.            
  60.             return true;
  61.         }
  62.        
  63.         internal override void Execute(Processor processor, ActionFrame frame)
  64.         {
  65.             Debug.Assert(processor != null && frame != null);
  66.            
  67.             switch (frame.State) {
  68.                 case Initialized:
  69.                     Debug.Assert(frame != null);
  70.                     Debug.Assert(frame.NodeSet != null);
  71.                    
  72.                     string value = processor.ValueOf(frame, this.selectKey);
  73.                    
  74.                     if (processor.TextEvent(value, disableOutputEscaping)) {
  75.                         frame.Finished();
  76.                     }
  77.                     else {
  78.                         frame.StoredOutput = value;
  79.                         frame.State = ResultStored;
  80.                     }
  81.                     break;
  82.                 case ResultStored:
  83.                    
  84.                     Debug.Assert(frame.StoredOutput != null);
  85.                     processor.TextEvent(frame.StoredOutput);
  86.                     frame.Finished();
  87.                     break;
  88.                 default:
  89.                    
  90.                     Debug.Fail("Invalid ValueOfAction execution state");
  91.                     break;
  92.             }
  93.         }
  94.     }
  95.    
  96.     internal class BuiltInRuleTextAction : Action
  97.     {
  98.         private const int ResultStored = 2;
  99.         internal override void Execute(Processor processor, ActionFrame frame)
  100.         {
  101.             Debug.Assert(processor != null && frame != null);
  102.            
  103.             switch (frame.State) {
  104.                 case Initialized:
  105.                     Debug.Assert(frame != null);
  106.                     Debug.Assert(frame.NodeSet != null);
  107.                    
  108.                     string value = processor.ValueOf(frame.NodeSet.Current);
  109.                    
  110.                     if (processor.TextEvent(value, false))/*disableOutputEscaping:*/ {
  111.                         frame.Finished();
  112.                     }
  113.                     else {
  114.                         frame.StoredOutput = value;
  115.                         frame.State = ResultStored;
  116.                     }
  117.                     break;
  118.                 case ResultStored:
  119.                    
  120.                     Debug.Assert(frame.StoredOutput != null);
  121.                     processor.TextEvent(frame.StoredOutput);
  122.                     frame.Finished();
  123.                     break;
  124.                 default:
  125.                    
  126.                     Debug.Fail("Invalid BuiltInRuleTextAction execution state");
  127.                     break;
  128.             }
  129.         }
  130.     }
  131. }

Developer Fusion