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
- ParserStack.cs
- ParserStack.cs
- Configuration.cs
- TextChangedEventArgs.cs
- XmlSchemaDatatype.cs
- ReadOnlyHierarchicalDataSource.cs
- XPathQilFactory.cs
- TransformerTypeCollection.cs
- StateFinalizationActivity.cs
- EventItfInfo.cs
- ErasingStroke.cs
- DataControlImageButton.cs
- SqlClientMetaDataCollectionNames.cs
- ScriptingJsonSerializationSection.cs
- SqlConnectionStringBuilder.cs
- ResolvedKeyFrameEntry.cs
- TriggerAction.cs
- DesignTimeVisibleAttribute.cs
- EventProviderWriter.cs
- VisualTransition.cs
- Compensation.cs
- AssociationEndMember.cs
- Point3DAnimationUsingKeyFrames.cs
- AsymmetricSignatureDeformatter.cs
- HtmlTitle.cs
- ResumeStoryboard.cs
- FormsAuthentication.cs
- StyleCollection.cs
- LinkDesigner.cs
- StyleXamlTreeBuilder.cs
- StyleConverter.cs
- BuildProvidersCompiler.cs
- LineServicesRun.cs
- LocalValueEnumerator.cs
- DesignBindingPicker.cs
- VersionUtil.cs
- ChannelTracker.cs
- Base64WriteStateInfo.cs
- MessageHeaderException.cs
- HttpContext.cs
- XmlSchemaAnnotation.cs
- WebZone.cs
- RuntimeWrappedException.cs
- PersonalizationProviderHelper.cs
- DataListCommandEventArgs.cs
- TextServicesCompartmentContext.cs
- XamlDesignerSerializationManager.cs
- wgx_exports.cs
- TextEditorTyping.cs
- DataBinding.cs
- RelatedEnd.cs
- ProfilePropertySettingsCollection.cs
- fixedPageContentExtractor.cs
- CollectionView.cs
- XmlSchemaGroup.cs
- DataServiceHost.cs
- DashStyle.cs
- BreakRecordTable.cs
- StylusEventArgs.cs
- SoapExtensionImporter.cs
- LedgerEntryCollection.cs
- DataPagerFieldCommandEventArgs.cs
- ClientRolePrincipal.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- XmlSchemaValidationException.cs
- InstancePersistence.cs
- XsltOutput.cs
- XmlSchema.cs
- XmlSchemaChoice.cs
- MSHTMLHost.cs
- CompressEmulationStream.cs
- Range.cs
- FontSizeConverter.cs
- ResourceDictionary.cs
- DisableDpiAwarenessAttribute.cs
- Connector.cs
- DoWorkEventArgs.cs
- TcpPortSharing.cs
- ParentQuery.cs
- ContentFilePart.cs
- LassoHelper.cs
- COM2ColorConverter.cs
- ParameterModifier.cs
- OdbcParameter.cs
- Style.cs
- Command.cs
- TextChangedEventArgs.cs
- XmlSchemaCompilationSettings.cs
- WorkflowInstanceRecord.cs
- EntityContainer.cs
- Delegate.cs
- StylusTip.cs
- WebBrowsableAttribute.cs
- SplitterCancelEvent.cs
- WhitespaceRuleReader.cs
- OdbcParameter.cs
- GlyphRunDrawing.cs
- TdsParserStateObject.cs
- ImpersonateTokenRef.cs
- ContextBase.cs