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
- StreamInfo.cs
- EventProviderWriter.cs
- Function.cs
- TdsEnums.cs
- TextBreakpoint.cs
- HtmlGenericControl.cs
- ApplicationFileParser.cs
- WindowsToolbarAsMenu.cs
- GcSettings.cs
- ListView.cs
- DetailsViewPageEventArgs.cs
- StrongNameMembershipCondition.cs
- UserControlDesigner.cs
- ParallelTimeline.cs
- SqlCacheDependencyDatabaseCollection.cs
- MemberHolder.cs
- FileSystemInfo.cs
- WebConfigurationHostFileChange.cs
- ComponentGlyph.cs
- InstalledVoice.cs
- TimersDescriptionAttribute.cs
- ExcludeFromCodeCoverageAttribute.cs
- CompilationRelaxations.cs
- HwndSource.cs
- ObjectSpanRewriter.cs
- DynamicDiscoSearcher.cs
- Selector.cs
- SourceFileInfo.cs
- WizardStepBase.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- Themes.cs
- InvalidProgramException.cs
- SiteMapNodeCollection.cs
- NativeRightsManagementAPIsStructures.cs
- WindowsListViewSubItem.cs
- JournalEntryListConverter.cs
- StorageEndPropertyMapping.cs
- TypeHelper.cs
- RelationshipDetailsRow.cs
- XamlClipboardData.cs
- RSAOAEPKeyExchangeDeformatter.cs
- AddInDeploymentState.cs
- TextSearch.cs
- Funcletizer.cs
- DateTimeConverter.cs
- NewItemsContextMenuStrip.cs
- ExtractedStateEntry.cs
- RouteTable.cs
- Focus.cs
- ChannelProtectionRequirements.cs
- XmlSchemaObjectTable.cs
- DesignerForm.cs
- InvalidEnumArgumentException.cs
- HMACSHA1.cs
- WebBrowserEvent.cs
- ObjectStateFormatter.cs
- UnsafeNativeMethods.cs
- MetabaseServerConfig.cs
- ConsoleKeyInfo.cs
- BinaryObjectInfo.cs
- VirtualPathProvider.cs
- ParseElement.cs
- ReceiveContext.cs
- TransactionsSectionGroup.cs
- DocumentSequenceHighlightLayer.cs
- EventItfInfo.cs
- PropertyToken.cs
- ProxyGenerationError.cs
- SubqueryTrackingVisitor.cs
- LinqDataSourceDisposeEventArgs.cs
- BufferedResponseStream.cs
- Attachment.cs
- DrawingBrush.cs
- DocumentationServerProtocol.cs
- log.cs
- DependencyPropertyChangedEventArgs.cs
- EncoderParameter.cs
- WorkflowValidationFailedException.cs
- SecUtil.cs
- CellTreeNode.cs
- _ContextAwareResult.cs
- DEREncoding.cs
- DrawingAttributesDefaultValueFactory.cs
- ToolStripDesignerAvailabilityAttribute.cs
- GenericUriParser.cs
- EffectiveValueEntry.cs
- TableLayout.cs
- DbConnectionStringCommon.cs
- ExpressionContext.cs
- MDIClient.cs
- unsafeIndexingFilterStream.cs
- CodePrimitiveExpression.cs
- ControlPropertyNameConverter.cs
- InstanceOwnerQueryResult.cs
- X509IssuerSerialKeyIdentifierClause.cs
- XmlSchemaAttribute.cs
- XmlSerializableReader.cs
- SortableBindingList.cs
- PerformanceCounterPermissionEntry.cs
- XmlTextAttribute.cs