Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / CallTemplateAction.cs / 1305376 / 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, "name"); CompileContent(compiler); } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Ref.Equal(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 (Ref.Equal(nspace, input.Atoms.UriXsl) && Ref.Equal(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, "call-template"); } } 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, "name"); CompileContent(compiler); } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Ref.Equal(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 (Ref.Equal(nspace, input.Atoms.UriXsl) && Ref.Equal(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, "call-template"); } } 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
- UrlPropertyAttribute.cs
- EntityReference.cs
- Int32AnimationBase.cs
- ListParagraph.cs
- Stroke.cs
- ToolStripContainer.cs
- BindingExpression.cs
- Geometry3D.cs
- KeyConverter.cs
- EntityProxyTypeInfo.cs
- ProviderCollection.cs
- MeasureItemEvent.cs
- ClientSession.cs
- XmlDataSourceDesigner.cs
- RuleConditionDialog.cs
- MouseActionValueSerializer.cs
- ADMembershipProvider.cs
- RootProfilePropertySettingsCollection.cs
- SpellerHighlightLayer.cs
- FormViewDeleteEventArgs.cs
- WebPartUserCapability.cs
- ListControlConvertEventArgs.cs
- CodeVariableReferenceExpression.cs
- CodeCommentStatement.cs
- MultipleViewProviderWrapper.cs
- UpdateTranslator.cs
- DesignerDataColumn.cs
- CqlQuery.cs
- ModuleBuilder.cs
- TargetParameterCountException.cs
- Activator.cs
- BoundPropertyEntry.cs
- LabelAutomationPeer.cs
- VisualStates.cs
- EndpointInfo.cs
- FileSecurity.cs
- RenderDataDrawingContext.cs
- BinaryConverter.cs
- EncodingTable.cs
- VariantWrapper.cs
- SimpleBitVector32.cs
- BrowserTree.cs
- CompiledQueryCacheKey.cs
- SerialPinChanges.cs
- SqlCacheDependencyDatabaseCollection.cs
- XPathParser.cs
- PrintEvent.cs
- FormViewDeleteEventArgs.cs
- OleAutBinder.cs
- ScrollEventArgs.cs
- MSAANativeProvider.cs
- OleDbParameter.cs
- ScriptManagerProxy.cs
- AuthorizationRule.cs
- Point3DAnimationBase.cs
- AnnotationHelper.cs
- SymLanguageVendor.cs
- OdbcPermission.cs
- CurrencyWrapper.cs
- Exception.cs
- ModuleBuilderData.cs
- DataGridViewDataConnection.cs
- DES.cs
- DashStyles.cs
- ToolStripRenderer.cs
- MultiSelectRootGridEntry.cs
- SystemUdpStatistics.cs
- SplashScreenNativeMethods.cs
- SQLDoubleStorage.cs
- SqlServer2KCompatibilityCheck.cs
- MessageQueuePermissionAttribute.cs
- UnsafeNativeMethods.cs
- Message.cs
- SoapAttributeOverrides.cs
- TextTreeRootTextBlock.cs
- ListBox.cs
- InvokePattern.cs
- XmlSchemaGroup.cs
- Compilation.cs
- WebRequestModuleElementCollection.cs
- ArithmeticException.cs
- CodeMethodInvokeExpression.cs
- DatePickerAutomationPeer.cs
- TreeBuilder.cs
- MainMenu.cs
- PrintPreviewDialog.cs
- Monitor.cs
- DoubleLink.cs
- GiveFeedbackEventArgs.cs
- altserialization.cs
- TreeViewAutomationPeer.cs
- FormatVersion.cs
- DataGridColumnFloatingHeader.cs
- GroupBoxAutomationPeer.cs
- ElementHost.cs
- TogglePatternIdentifiers.cs
- EntitySet.cs
- ComplexBindingPropertiesAttribute.cs
- EventManager.cs
- AuditLogLocation.cs