Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TextBreakpoint.cs
- CompiledQueryCacheEntry.cs
- StateDesigner.LayoutSelectionGlyph.cs
- PlacementWorkspace.cs
- ConfigurationLocation.cs
- WebPartTransformer.cs
- _CacheStreams.cs
- DataContract.cs
- ComplusTypeValidator.cs
- CompiledQueryCacheEntry.cs
- HtmlCalendarAdapter.cs
- _TimerThread.cs
- RubberbandSelector.cs
- ByteAnimation.cs
- Block.cs
- SiteMapNode.cs
- XmlSiteMapProvider.cs
- ServiceProviders.cs
- InheritanceContextChangedEventManager.cs
- WebPartPersonalization.cs
- HttpWebResponse.cs
- DesignerSerializerAttribute.cs
- COM2ExtendedBrowsingHandler.cs
- ConfigurationPropertyCollection.cs
- UrlPath.cs
- ConsoleKeyInfo.cs
- TextSchema.cs
- Registry.cs
- ForwardPositionQuery.cs
- Win32.cs
- NativeStructs.cs
- FontCollection.cs
- QilTernary.cs
- DynamicScriptObject.cs
- OverloadGroupAttribute.cs
- ResourceWriter.cs
- RelationshipConstraintValidator.cs
- ImageFormat.cs
- DataColumnMapping.cs
- PropertyBuilder.cs
- MenuItemBindingCollection.cs
- StreamMarshaler.cs
- Variant.cs
- QilStrConcatenator.cs
- Literal.cs
- Region.cs
- TokenBasedSet.cs
- ZoneIdentityPermission.cs
- DesignerPainter.cs
- SecurityContext.cs
- ActionItem.cs
- EventHandlersStore.cs
- SqlMethods.cs
- HatchBrush.cs
- SoapAttributes.cs
- NavigationCommands.cs
- XmlParser.cs
- WpfWebRequestHelper.cs
- TypeBuilderInstantiation.cs
- newinstructionaction.cs
- DockPattern.cs
- IndexedString.cs
- GradientStop.cs
- FileFormatException.cs
- ObservableCollectionDefaultValueFactory.cs
- ToolZone.cs
- NgenServicingAttributes.cs
- TransformerConfigurationWizardBase.cs
- LingerOption.cs
- Animatable.cs
- ObfuscateAssemblyAttribute.cs
- BitmapEncoder.cs
- RtType.cs
- Block.cs
- DataTableReader.cs
- HttpListener.cs
- TypeSystem.cs
- FilterRepeater.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- NullToBooleanConverter.cs
- HtmlControl.cs
- DataGridViewCellLinkedList.cs
- ManipulationInertiaStartingEventArgs.cs
- GridView.cs
- SolidColorBrush.cs
- CacheEntry.cs
- MeshGeometry3D.cs
- PtsPage.cs
- CodeAccessSecurityEngine.cs
- XamlSerializerUtil.cs
- ResourceBinder.cs
- WebPartMinimizeVerb.cs
- PropertyCondition.cs
- RequiredFieldValidator.cs
- WeakReferenceEnumerator.cs
- ObjectParameter.cs
- SharedPerformanceCounter.cs
- MethodRental.cs
- GridViewUpdateEventArgs.cs
- ServiceProviders.cs