Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / IfAction.cs / 1305376 / IfAction.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
namespace System.Xml.Xsl.XsltOld {
using Res = System.Xml.Utils.Res;
using System;
using System.Diagnostics;
using System.Xml;
using System.Xml.XPath;
internal class IfAction : ContainerAction {
internal enum ConditionType {
ConditionIf,
ConditionWhen,
ConditionOtherwise
}
private ConditionType type;
private int testKey = Compiler.InvalidQueryKey;
internal IfAction(ConditionType type) {
this.type = type;
}
internal override void Compile(Compiler compiler) {
CompileAttributes(compiler);
if (this.type != ConditionType.ConditionOtherwise) {
CheckRequiredAttribute(compiler, this.testKey != Compiler.InvalidQueryKey, "test");
}
if (compiler.Recurse()) {
CompileTemplate(compiler);
compiler.ToParent();
}
}
internal override bool CompileAttribute(Compiler compiler) {
string name = compiler.Input.LocalName;
string value = compiler.Input.Value;
if (Ref.Equal(name, compiler.Atoms.Test)) {
if (this.type == ConditionType.ConditionOtherwise) {
return false;
}
this.testKey = compiler.AddBooleanQuery(value);
}
else {
return false;
}
return true;
}
internal override void Execute(Processor processor, ActionFrame frame) {
Debug.Assert(processor != null && frame != null);
switch (frame.State) {
case Initialized:
if (this.type == ConditionType.ConditionIf || this.type == ConditionType.ConditionWhen) {
Debug.Assert(this.testKey != Compiler.InvalidQueryKey);
bool value = processor.EvaluateBoolean(frame, this.testKey);
if (value == false) {
frame.Finished();
break;
}
}
processor.PushActionFrame(frame);
frame.State = ProcessingChildren;
break; // Allow children to run
case ProcessingChildren:
if (this.type == ConditionType.ConditionWhen ||this.type == ConditionType.ConditionOtherwise) {
Debug.Assert(frame.Container != null);
frame.Exit();
}
frame.Finished();
break;
default:
Debug.Fail("Invalid IfAction execution state");
break;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ListViewCancelEventArgs.cs
- Expander.cs
- MessageQueuePermissionAttribute.cs
- RequestQueryParser.cs
- FormViewDeleteEventArgs.cs
- HttpWebRequest.cs
- ProviderException.cs
- EntityViewGenerationAttribute.cs
- ResourcesBuildProvider.cs
- MimeWriter.cs
- RestHandler.cs
- ClientTarget.cs
- SubMenuStyle.cs
- XmlAttributeOverrides.cs
- ModelTreeManager.cs
- OverflowException.cs
- FieldTemplateUserControl.cs
- Image.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- TempFiles.cs
- XPathEmptyIterator.cs
- SafeCryptContextHandle.cs
- DbProviderFactoriesConfigurationHandler.cs
- SerializationStore.cs
- NullReferenceException.cs
- IFlowDocumentViewer.cs
- Transform3D.cs
- Compiler.cs
- MethodCallConverter.cs
- ExpressionBuilderContext.cs
- Token.cs
- ComponentConverter.cs
- EntityPropertyMappingAttribute.cs
- TypefaceMetricsCache.cs
- WebPartConnectionsConnectVerb.cs
- RoleManagerEventArgs.cs
- LinqDataSourceView.cs
- CodeObject.cs
- Win32.cs
- IisTraceWebEventProvider.cs
- ExpressionBindingCollection.cs
- ValueExpressions.cs
- IdentityReference.cs
- HasCopySemanticsAttribute.cs
- ListViewItem.cs
- SoapWriter.cs
- SafeRegistryKey.cs
- DocumentPageView.cs
- HuffmanTree.cs
- Substitution.cs
- TextTreeInsertUndoUnit.cs
- LinkGrep.cs
- RegistryKey.cs
- SuppressMergeCheckAttribute.cs
- HtmlAnchor.cs
- WebBrowserContainer.cs
- SqlResolver.cs
- StrokeFIndices.cs
- PriorityItem.cs
- NonClientArea.cs
- OleDbReferenceCollection.cs
- PersistChildrenAttribute.cs
- webbrowsersite.cs
- Soap12ProtocolReflector.cs
- WebConfigurationHost.cs
- GZipStream.cs
- ModuleConfigurationInfo.cs
- ToolStripLocationCancelEventArgs.cs
- MarkupProperty.cs
- HttpContextServiceHost.cs
- SettingsProperty.cs
- ColumnResizeAdorner.cs
- Binding.cs
- ZipQueryOperator.cs
- SizeFConverter.cs
- GridView.cs
- BufferedConnection.cs
- CodeThrowExceptionStatement.cs
- StringValueSerializer.cs
- CommonObjectSecurity.cs
- QilStrConcatenator.cs
- AspProxy.cs
- WebPartUserCapability.cs
- TrackingMemoryStreamFactory.cs
- HtmlMeta.cs
- SolidBrush.cs
- InternalPermissions.cs
- _ConnectionGroup.cs
- QilReplaceVisitor.cs
- CheckPair.cs
- ConsoleEntryPoint.cs
- GeneralTransform3D.cs
- ArraySortHelper.cs
- JournalEntryStack.cs
- DataTableReader.cs
- KeyPullup.cs
- PathGeometry.cs
- RectangleConverter.cs
- FormsAuthenticationUser.cs
- ListViewAutomationPeer.cs