Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / ForEachAction.cs / 1 / ForEachAction.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.Collections; using System.Xml; using System.Xml.XPath; internal class ForEachAction : ContainerAction { private const int ProcessedSort = 2; private const int ProcessNextNode = 3; private const int PositionAdvanced = 4; private const int ContentsProcessed = 5; private int selectKey = Compiler.InvalidQueryKey; private ContainerAction sortContainer; internal override void Compile(Compiler compiler) { CompileAttributes(compiler); CheckRequiredAttribute(compiler, selectKey != Compiler.InvalidQueryKey, Keywords.s_Select); compiler.CanHaveApplyImports = false; if (compiler.Recurse()) { CompileSortElements(compiler); CompileTemplate(compiler); compiler.ToParent(); } } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Keywords.Equals(name, compiler.Atoms.Select)) { this.selectKey = compiler.AddQuery(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 (sortContainer != null) { processor.InitSortArray(); processor.PushActionFrame(sortContainer, frame.NodeSet); frame.State = ProcessedSort; break; } goto case ProcessedSort; case ProcessedSort: frame.InitNewNodeSet(processor.StartQuery(frame.NodeSet, this.selectKey)); if (sortContainer != null) { Debug.Assert(processor.SortArray.Count != 0); frame.SortNewNodeSet(processor, processor.SortArray); } frame.State = ProcessNextNode; goto case ProcessNextNode; case ProcessNextNode: Debug.Assert(frame.State == ProcessNextNode); Debug.Assert(frame.NewNodeSet != null); if (frame.NewNextNode(processor)) { frame.State = PositionAdvanced; goto case PositionAdvanced; } else { frame.Finished(); break; } case PositionAdvanced: processor.PushActionFrame(frame, frame.NewNodeSet); frame.State = ContentsProcessed; break; case ContentsProcessed: frame.State = ProcessNextNode; goto case ProcessNextNode; } } protected void CompileSortElements(Compiler compiler) { NavigatorInput input = compiler.Input; do { switch(input.NodeType) { case XPathNodeType.Element: if (Keywords.Equals(input.NamespaceURI, input.Atoms.XsltNamespace) && Keywords.Equals(input.LocalName, input.Atoms.Sort)) { if (sortContainer == null) { sortContainer = new ContainerAction(); } sortContainer.AddAction(compiler.CreateSortAction()); continue; } return; case XPathNodeType.Text: return; case XPathNodeType.SignificantWhitespace: this.AddEvent(compiler.CreateTextEvent()); continue; default : continue; } } while (input.Advance()); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// 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.Collections; using System.Xml; using System.Xml.XPath; internal class ForEachAction : ContainerAction { private const int ProcessedSort = 2; private const int ProcessNextNode = 3; private const int PositionAdvanced = 4; private const int ContentsProcessed = 5; private int selectKey = Compiler.InvalidQueryKey; private ContainerAction sortContainer; internal override void Compile(Compiler compiler) { CompileAttributes(compiler); CheckRequiredAttribute(compiler, selectKey != Compiler.InvalidQueryKey, Keywords.s_Select); compiler.CanHaveApplyImports = false; if (compiler.Recurse()) { CompileSortElements(compiler); CompileTemplate(compiler); compiler.ToParent(); } } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Keywords.Equals(name, compiler.Atoms.Select)) { this.selectKey = compiler.AddQuery(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 (sortContainer != null) { processor.InitSortArray(); processor.PushActionFrame(sortContainer, frame.NodeSet); frame.State = ProcessedSort; break; } goto case ProcessedSort; case ProcessedSort: frame.InitNewNodeSet(processor.StartQuery(frame.NodeSet, this.selectKey)); if (sortContainer != null) { Debug.Assert(processor.SortArray.Count != 0); frame.SortNewNodeSet(processor, processor.SortArray); } frame.State = ProcessNextNode; goto case ProcessNextNode; case ProcessNextNode: Debug.Assert(frame.State == ProcessNextNode); Debug.Assert(frame.NewNodeSet != null); if (frame.NewNextNode(processor)) { frame.State = PositionAdvanced; goto case PositionAdvanced; } else { frame.Finished(); break; } case PositionAdvanced: processor.PushActionFrame(frame, frame.NewNodeSet); frame.State = ContentsProcessed; break; case ContentsProcessed: frame.State = ProcessNextNode; goto case ProcessNextNode; } } protected void CompileSortElements(Compiler compiler) { NavigatorInput input = compiler.Input; do { switch(input.NodeType) { case XPathNodeType.Element: if (Keywords.Equals(input.NamespaceURI, input.Atoms.XsltNamespace) && Keywords.Equals(input.LocalName, input.Atoms.Sort)) { if (sortContainer == null) { sortContainer = new ContainerAction(); } sortContainer.AddAction(compiler.CreateSortAction()); continue; } return; case XPathNodeType.Text: return; case XPathNodeType.SignificantWhitespace: this.AddEvent(compiler.CreateTextEvent()); continue; default : continue; } } while (input.Advance()); } } } // 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
- MetricEntry.cs
- CookielessHelper.cs
- DataGridViewComboBoxColumnDesigner.cs
- XmlDataContract.cs
- StateMachineExecutionState.cs
- SafeTimerHandle.cs
- BCryptSafeHandles.cs
- FindProgressChangedEventArgs.cs
- InputScope.cs
- LabelLiteral.cs
- ZeroOpNode.cs
- FullTextBreakpoint.cs
- VariableBinder.cs
- CaseExpr.cs
- XdrBuilder.cs
- TypeInfo.cs
- Column.cs
- Stylesheet.cs
- SerialStream.cs
- IdleTimeoutMonitor.cs
- Walker.cs
- NavigateEvent.cs
- BaseCollection.cs
- InkSerializer.cs
- DataRelationCollection.cs
- HtmlImage.cs
- ProxyAttribute.cs
- ECDiffieHellmanPublicKey.cs
- NavigationPropertySingletonExpression.cs
- WindowAutomationPeer.cs
- WindowsToolbarAsMenu.cs
- OdbcConnectionHandle.cs
- ScriptMethodAttribute.cs
- HttpWrapper.cs
- AsymmetricSignatureDeformatter.cs
- ColorKeyFrameCollection.cs
- WeakRefEnumerator.cs
- HtmlButton.cs
- IconHelper.cs
- CodeDomDesignerLoader.cs
- DbConnectionInternal.cs
- SecurityTokenProvider.cs
- ListViewGroupConverter.cs
- DbModificationCommandTree.cs
- LambdaCompiler.Address.cs
- WebPartVerbsEventArgs.cs
- Serializer.cs
- IntPtr.cs
- FeatureSupport.cs
- ComplexType.cs
- BehaviorEditorPart.cs
- LocalFileSettingsProvider.cs
- TextParaClient.cs
- QilSortKey.cs
- ComponentConverter.cs
- PriorityQueue.cs
- DesignObjectWrapper.cs
- ProtectedConfiguration.cs
- SqlRowUpdatedEvent.cs
- ContentTextAutomationPeer.cs
- XmlBinaryReaderSession.cs
- Substitution.cs
- SqlConnectionHelper.cs
- wmiprovider.cs
- ListItemParagraph.cs
- PrivateFontCollection.cs
- NotEqual.cs
- Policy.cs
- DbgUtil.cs
- ReferentialConstraint.cs
- TableRowCollection.cs
- SystemWebExtensionsSectionGroup.cs
- DesignerDataRelationship.cs
- ProfileService.cs
- _LoggingObject.cs
- JsonUriDataContract.cs
- Operators.cs
- BindableTemplateBuilder.cs
- List.cs
- EntityDesignerDataSourceView.cs
- ChildrenQuery.cs
- VisualTreeFlattener.cs
- RenderCapability.cs
- DynamicScriptObject.cs
- WebPartsPersonalizationAuthorization.cs
- JavaScriptSerializer.cs
- JsonFormatReaderGenerator.cs
- DropShadowEffect.cs
- Enumerable.cs
- CqlBlock.cs
- SystemParameters.cs
- SafeCryptContextHandle.cs
- XsltContext.cs
- Stacktrace.cs
- CustomTypeDescriptor.cs
- ExceptionCollection.cs
- TextBox.cs
- HttpHandlerActionCollection.cs
- ManifestResourceInfo.cs
- XamlFrame.cs