Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / ForEachAction.cs / 1305376 / 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, "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 (Ref.Equal(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 (Ref.Equal(input.NamespaceURI, input.Atoms.UriXsl) && Ref.Equal(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, "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 (Ref.Equal(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 (Ref.Equal(input.NamespaceURI, input.Atoms.UriXsl) && Ref.Equal(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
- FlowDocumentReader.cs
- HyperLink.cs
- Listbox.cs
- IPCCacheManager.cs
- DelegatingTypeDescriptionProvider.cs
- DataGridViewRowConverter.cs
- CellConstantDomain.cs
- DataPagerField.cs
- PropertyConverter.cs
- XmlSchemaSimpleContentRestriction.cs
- UnsafeNativeMethods.cs
- DiscoveryCallbackBehavior.cs
- TemplateKeyConverter.cs
- WebPartDisplayMode.cs
- SecUtil.cs
- HistoryEventArgs.cs
- DoubleConverter.cs
- OdbcFactory.cs
- SessionStateContainer.cs
- ReferenceAssemblyAttribute.cs
- DialogResultConverter.cs
- Rect3DConverter.cs
- HotSpot.cs
- TransformedBitmap.cs
- AsymmetricKeyExchangeDeformatter.cs
- ObjectReferenceStack.cs
- StorageAssociationSetMapping.cs
- HashSet.cs
- WebDescriptionAttribute.cs
- DataGridViewColumnDividerDoubleClickEventArgs.cs
- XamlTypeWithExplicitNamespace.cs
- LateBoundBitmapDecoder.cs
- XsltSettings.cs
- SemaphoreSecurity.cs
- Internal.cs
- ExpressionCopier.cs
- Composition.cs
- TraceXPathNavigator.cs
- StateMachineSubscription.cs
- AnnotationComponentChooser.cs
- TimeIntervalCollection.cs
- StylusTouchDevice.cs
- ImpersonateTokenRef.cs
- MediaTimeline.cs
- SHA384.cs
- DataServiceRequestOfT.cs
- Module.cs
- SelectionGlyphBase.cs
- ClassData.cs
- ServiceBusyException.cs
- Win32PrintDialog.cs
- Matrix.cs
- DataListItemEventArgs.cs
- VariableQuery.cs
- FixUpCollection.cs
- Italic.cs
- altserialization.cs
- TraversalRequest.cs
- SiteMapNode.cs
- Formatter.cs
- ParenExpr.cs
- IDReferencePropertyAttribute.cs
- SynchronizedInputAdaptor.cs
- KeyInstance.cs
- SHA1.cs
- GeneratedCodeAttribute.cs
- ComponentEvent.cs
- DefinitionUpdate.cs
- XmlEntityReference.cs
- Expressions.cs
- FormatConvertedBitmap.cs
- SoapElementAttribute.cs
- BitmapDecoder.cs
- XamlDesignerSerializationManager.cs
- EncryptedData.cs
- Vertex.cs
- FrameworkElement.cs
- RC2.cs
- UnsafeNativeMethods.cs
- storepermissionattribute.cs
- Grant.cs
- GenericTransactionFlowAttribute.cs
- FileRegion.cs
- MimeTextImporter.cs
- relpropertyhelper.cs
- AliasedExpr.cs
- QueueProcessor.cs
- ImageListStreamer.cs
- ObjectDataSourceStatusEventArgs.cs
- HostedTransportConfigurationBase.cs
- DataGridViewBand.cs
- XmlBinaryWriterSession.cs
- ValidatedMobileControlConverter.cs
- StylusButton.cs
- EdmRelationshipRoleAttribute.cs
- ShaderRenderModeValidation.cs
- DisplayClaim.cs
- WeakRefEnumerator.cs
- SourceCollection.cs
- ButtonField.cs