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
- HostingEnvironmentSection.cs
- FilePresentation.cs
- TypeExtension.cs
- RSACryptoServiceProvider.cs
- OdbcConnectionFactory.cs
- DateTimeOffset.cs
- XmlValidatingReader.cs
- TransformProviderWrapper.cs
- RoleManagerSection.cs
- X509Certificate2Collection.cs
- ParseNumbers.cs
- TextParagraphProperties.cs
- WebPartZoneCollection.cs
- SafeWaitHandle.cs
- ReachObjectContext.cs
- BaseCAMarshaler.cs
- RightsManagementEncryptionTransform.cs
- InProcStateClientManager.cs
- ConfigurationElement.cs
- QueryStringConverter.cs
- ColorInterpolationModeValidation.cs
- IFormattable.cs
- ServicePointManager.cs
- CodeDOMUtility.cs
- CustomAssemblyResolver.cs
- Clipboard.cs
- MenuStrip.cs
- ConditionChanges.cs
- PopupEventArgs.cs
- AbstractSvcMapFileLoader.cs
- OleDbCommand.cs
- RelatedImageListAttribute.cs
- HttpAsyncResult.cs
- AmbiguousMatchException.cs
- AuthenticationSection.cs
- ServiceOperationWrapper.cs
- XslTransform.cs
- DiscoveryClientDuplexChannel.cs
- XamlBrushSerializer.cs
- Menu.cs
- UInt32Converter.cs
- ControlValuePropertyAttribute.cs
- TextParagraph.cs
- CacheDict.cs
- TagPrefixCollection.cs
- TCPListener.cs
- UdpDuplexChannel.cs
- log.cs
- MimeImporter.cs
- SettingsPropertyWrongTypeException.cs
- LinqDataSourceHelper.cs
- DataGridViewComponentPropertyGridSite.cs
- HttpRequest.cs
- FixedElement.cs
- Thread.cs
- UnaryExpressionHelper.cs
- Model3D.cs
- ContentPlaceHolder.cs
- StateMachine.cs
- Floater.cs
- SynchronousChannel.cs
- Inline.cs
- TagMapInfo.cs
- HostProtectionException.cs
- SimpleFileLog.cs
- UTF32Encoding.cs
- ClusterRegistryConfigurationProvider.cs
- UnsafeNativeMethods.cs
- XpsStructure.cs
- DiscoveryInnerClientAdhoc11.cs
- EditorPart.cs
- ResumeStoryboard.cs
- CodeGroup.cs
- MetadataArtifactLoaderCompositeResource.cs
- ClosableStream.cs
- ResourceWriter.cs
- RC2.cs
- PropertyDescriptorCollection.cs
- xmlglyphRunInfo.cs
- RowSpanVector.cs
- CommonGetThemePartSize.cs
- DetailsViewPagerRow.cs
- TableItemPattern.cs
- XmlTextAttribute.cs
- CqlParser.cs
- VisualProxy.cs
- StateManagedCollection.cs
- ServiceObjectContainer.cs
- Rect3DConverter.cs
- DoubleAnimationUsingKeyFrames.cs
- AssociatedControlConverter.cs
- StackOverflowException.cs
- XmlLoader.cs
- GACIdentityPermission.cs
- IFlowDocumentViewer.cs
- DurableRuntimeValidator.cs
- PrintPreviewGraphics.cs
- SHA512.cs
- CodeAttributeDeclarationCollection.cs
- UnsafeNativeMethodsCLR.cs