Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / CallTemplateAction.cs / 1 / CallTemplateAction.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 CallTemplateAction : ContainerAction { private const int ProcessedChildren = 2; private const int ProcessedTemplate = 3; private XmlQualifiedName name; internal override void Compile(Compiler compiler) { CompileAttributes(compiler); CheckRequiredAttribute(compiler, this.name, Keywords.s_Name); CompileContent(compiler); } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Keywords.Equals(name, compiler.Atoms.Name)) { Debug.Assert(this.name == null); this.name = compiler.CreateXPathQName(value); } else { return false; } return true; } private void CompileContent(Compiler compiler) { NavigatorInput input = compiler.Input; if (compiler.Recurse()) { do { switch(input.NodeType) { case XPathNodeType.Element: compiler.PushNamespaceScope(); string nspace = input.NamespaceURI; string name = input.LocalName; if (Keywords.Equals(nspace, input.Atoms.XsltNamespace) && Keywords.Equals(name, input.Atoms.WithParam)) { WithParamAction par = compiler.CreateWithParamAction(); CheckDuplicateParams(par.Name); AddAction(par); } else { throw compiler.UnexpectedKeyword(); } compiler.PopScope(); break; case XPathNodeType.Comment: case XPathNodeType.ProcessingInstruction: case XPathNodeType.Whitespace: case XPathNodeType.SignificantWhitespace: break; default: throw XsltException.Create(Res.Xslt_InvalidContents, Keywords.s_CallTemplate); } } while(compiler.Advance()); compiler.ToParent(); } } internal override void Execute(Processor processor, ActionFrame frame) { Debug.Assert(processor != null && frame != null); switch(frame.State) { case Initialized : processor.ResetParams(); if (this.containedActions != null && this.containedActions.Count > 0) { processor.PushActionFrame(frame); frame.State = ProcessedChildren; break; } goto case ProcessedChildren; case ProcessedChildren: TemplateAction action = processor.Stylesheet.FindTemplate(this.name); if (action != null) { frame.State = ProcessedTemplate; processor.PushActionFrame(action, frame.NodeSet); break; } else { throw XsltException.Create(Res.Xslt_InvalidCallTemplate, this.name.ToString()); } case ProcessedTemplate: frame.Finished(); break; default: Debug.Fail("Invalid CallTemplateAction execution state"); break; } } } } // 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.Xml; using System.Xml.XPath; internal class CallTemplateAction : ContainerAction { private const int ProcessedChildren = 2; private const int ProcessedTemplate = 3; private XmlQualifiedName name; internal override void Compile(Compiler compiler) { CompileAttributes(compiler); CheckRequiredAttribute(compiler, this.name, Keywords.s_Name); CompileContent(compiler); } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Keywords.Equals(name, compiler.Atoms.Name)) { Debug.Assert(this.name == null); this.name = compiler.CreateXPathQName(value); } else { return false; } return true; } private void CompileContent(Compiler compiler) { NavigatorInput input = compiler.Input; if (compiler.Recurse()) { do { switch(input.NodeType) { case XPathNodeType.Element: compiler.PushNamespaceScope(); string nspace = input.NamespaceURI; string name = input.LocalName; if (Keywords.Equals(nspace, input.Atoms.XsltNamespace) && Keywords.Equals(name, input.Atoms.WithParam)) { WithParamAction par = compiler.CreateWithParamAction(); CheckDuplicateParams(par.Name); AddAction(par); } else { throw compiler.UnexpectedKeyword(); } compiler.PopScope(); break; case XPathNodeType.Comment: case XPathNodeType.ProcessingInstruction: case XPathNodeType.Whitespace: case XPathNodeType.SignificantWhitespace: break; default: throw XsltException.Create(Res.Xslt_InvalidContents, Keywords.s_CallTemplate); } } while(compiler.Advance()); compiler.ToParent(); } } internal override void Execute(Processor processor, ActionFrame frame) { Debug.Assert(processor != null && frame != null); switch(frame.State) { case Initialized : processor.ResetParams(); if (this.containedActions != null && this.containedActions.Count > 0) { processor.PushActionFrame(frame); frame.State = ProcessedChildren; break; } goto case ProcessedChildren; case ProcessedChildren: TemplateAction action = processor.Stylesheet.FindTemplate(this.name); if (action != null) { frame.State = ProcessedTemplate; processor.PushActionFrame(action, frame.NodeSet); break; } else { throw XsltException.Create(Res.Xslt_InvalidCallTemplate, this.name.ToString()); } case ProcessedTemplate: frame.Finished(); break; default: Debug.Fail("Invalid CallTemplateAction 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
- BinaryConverter.cs
- WebPartRestoreVerb.cs
- pingexception.cs
- DispatcherExceptionFilterEventArgs.cs
- EntityDataSourceWrapper.cs
- SpellerInterop.cs
- XPathCompileException.cs
- _DisconnectOverlappedAsyncResult.cs
- CompilationLock.cs
- TemplatePropertyEntry.cs
- Selector.cs
- DragEventArgs.cs
- DrawingAttributesDefaultValueFactory.cs
- MobileCapabilities.cs
- TimeoutValidationAttribute.cs
- OracleBFile.cs
- HtmlForm.cs
- EnlistmentTraceIdentifier.cs
- RadioButtonPopupAdapter.cs
- OrderedEnumerableRowCollection.cs
- ColumnPropertiesGroup.cs
- EditorZone.cs
- CommonXSendMessage.cs
- CompoundFileStorageReference.cs
- SqlRowUpdatingEvent.cs
- ReflectionHelper.cs
- WorkflowTraceTransfer.cs
- IgnorePropertiesAttribute.cs
- Function.cs
- GridViewRowCollection.cs
- CrossContextChannel.cs
- SemanticResultKey.cs
- ObjectDataSourceStatusEventArgs.cs
- LineMetrics.cs
- FormatterServicesNoSerializableCheck.cs
- WorkflowPrinting.cs
- KeyFrames.cs
- Accessible.cs
- MeshGeometry3D.cs
- OleDbException.cs
- WebChannelFactory.cs
- SqlCachedBuffer.cs
- SafeSecurityHandles.cs
- SimpleTypesSurrogate.cs
- DataGridViewSelectedCellCollection.cs
- ToolStripCustomTypeDescriptor.cs
- ConfigurationManager.cs
- Decorator.cs
- SqlRecordBuffer.cs
- MetadataSerializer.cs
- GeometryHitTestParameters.cs
- CursorConverter.cs
- EntityViewContainer.cs
- FloaterBaseParagraph.cs
- SaveLedgerEntryRequest.cs
- PriorityChain.cs
- Rotation3D.cs
- InitializationEventAttribute.cs
- OneOfConst.cs
- ManipulationPivot.cs
- XsltArgumentList.cs
- BuildResult.cs
- DocumentOrderComparer.cs
- StrokeCollection.cs
- EventItfInfo.cs
- ObjectDataSourceMethodEventArgs.cs
- HtmlButton.cs
- IItemContainerGenerator.cs
- CmsInterop.cs
- Lease.cs
- Types.cs
- OleDbTransaction.cs
- COM2TypeInfoProcessor.cs
- WebPartConnectionsCancelVerb.cs
- CallSite.cs
- MergePropertyDescriptor.cs
- HitTestDrawingContextWalker.cs
- SafeLocalAllocation.cs
- Floater.cs
- CompilerWrapper.cs
- Pen.cs
- DirectoryNotFoundException.cs
- NetNamedPipeBindingCollectionElement.cs
- CustomAttribute.cs
- GlyphRunDrawing.cs
- ProxyElement.cs
- DataControlCommands.cs
- MetabaseServerConfig.cs
- StreamGeometry.cs
- TextCompositionManager.cs
- SerializationInfo.cs
- Publisher.cs
- DocobjHost.cs
- PassportAuthentication.cs
- DbConvert.cs
- ConfigViewGenerator.cs
- ColumnBinding.cs
- Thickness.cs
- WebPartConnectionsConfigureVerb.cs
- Common.cs