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
- VirtualPathProvider.cs
- ComPersistableTypeElementCollection.cs
- MetadataCache.cs
- BaseParagraph.cs
- InstanceValue.cs
- ListBoxItemWrapperAutomationPeer.cs
- DockEditor.cs
- ResourceSet.cs
- Parameter.cs
- ObjectDataSourceChooseTypePanel.cs
- GatewayDefinition.cs
- SerializationBinder.cs
- AbandonedMutexException.cs
- BrowserCapabilitiesCompiler.cs
- CrossAppDomainChannel.cs
- DbConnectionHelper.cs
- DataServiceProviderWrapper.cs
- DocumentPageView.cs
- SequentialOutput.cs
- DesignTimeVisibleAttribute.cs
- EmbeddedObject.cs
- StateFinalizationActivity.cs
- UpdatePanelControlTrigger.cs
- ClientFormsAuthenticationCredentials.cs
- EastAsianLunisolarCalendar.cs
- ColumnBinding.cs
- ResourceContainer.cs
- DataGridLinkButton.cs
- URLAttribute.cs
- QueryTask.cs
- TableLayoutColumnStyleCollection.cs
- DataColumn.cs
- DataStreamFromComStream.cs
- VarInfo.cs
- VerificationException.cs
- RequestCacheValidator.cs
- LocalValueEnumerator.cs
- AuthenticateEventArgs.cs
- IndentedWriter.cs
- UriSection.cs
- SuppressMergeCheckAttribute.cs
- HttpServerVarsCollection.cs
- ISFTagAndGuidCache.cs
- SafeEventLogWriteHandle.cs
- HttpCacheVaryByContentEncodings.cs
- CodeFieldReferenceExpression.cs
- XsltContext.cs
- StreamReader.cs
- FileDialogCustomPlacesCollection.cs
- CapabilitiesAssignment.cs
- smtpconnection.cs
- Literal.cs
- ConfigXmlElement.cs
- PermissionListSet.cs
- ResourceDefaultValueAttribute.cs
- SqlConnectionString.cs
- CellQuery.cs
- HostingEnvironment.cs
- DataObjectEventArgs.cs
- DoubleConverter.cs
- ListViewItemMouseHoverEvent.cs
- PropertyGridView.cs
- WebPartCancelEventArgs.cs
- StringDictionaryEditor.cs
- Point3DAnimation.cs
- SinglePageViewer.cs
- XmlCompatibilityReader.cs
- SEHException.cs
- RegexWriter.cs
- Interfaces.cs
- SortableBindingList.cs
- HyperLinkDataBindingHandler.cs
- Schema.cs
- FileCodeGroup.cs
- ResumeStoryboard.cs
- WebBrowserUriTypeConverter.cs
- SourceSwitch.cs
- DebugView.cs
- ApplicationBuildProvider.cs
- IteratorFilter.cs
- WebPartTransformer.cs
- BackgroundFormatInfo.cs
- UserPrincipalNameElement.cs
- AspNetHostingPermission.cs
- HeaderPanel.cs
- BindingGroup.cs
- IncrementalHitTester.cs
- DataGridPageChangedEventArgs.cs
- Parser.cs
- SkewTransform.cs
- SpoolingTaskBase.cs
- Logging.cs
- WebPartEditorCancelVerb.cs
- OracleCommand.cs
- InProcStateClientManager.cs
- AttachedPropertyMethodSelector.cs
- ControlBuilder.cs
- SchemaNamespaceManager.cs
- TypeElement.cs
- ThemeDirectoryCompiler.cs