Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / 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
- TreeNodeConverter.cs
- BaseDataListComponentEditor.cs
- HostSecurityManager.cs
- TextElementEditingBehaviorAttribute.cs
- TextProperties.cs
- DoubleAnimationUsingPath.cs
- FaultException.cs
- ValidationSummary.cs
- ImageField.cs
- WpfGeneratedKnownProperties.cs
- XPathNavigatorKeyComparer.cs
- httpstaticobjectscollection.cs
- EndpointInstanceProvider.cs
- DateTimeConstantAttribute.cs
- PenThreadPool.cs
- HGlobalSafeHandle.cs
- DSASignatureDeformatter.cs
- SqlTriggerContext.cs
- LassoSelectionBehavior.cs
- CommandSet.cs
- SchemaSetCompiler.cs
- ChtmlImageAdapter.cs
- OdbcHandle.cs
- ExceptionHandler.cs
- HtmlHistory.cs
- RepeatButtonAutomationPeer.cs
- DSASignatureDeformatter.cs
- WebBrowser.cs
- InheritanceAttribute.cs
- HttpStreamMessageEncoderFactory.cs
- CompositionAdorner.cs
- DataView.cs
- Stackframe.cs
- CfgRule.cs
- ToolStripMenuItem.cs
- XmlSchemaInferenceException.cs
- ConfigXmlComment.cs
- ThicknessAnimationBase.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- OutOfMemoryException.cs
- TextAdaptor.cs
- TreeViewDesigner.cs
- ToolStripEditorManager.cs
- ReadOnlyDictionary.cs
- Animatable.cs
- JumpList.cs
- BrowserTree.cs
- ResourceContainer.cs
- ListViewHitTestInfo.cs
- SQlBooleanStorage.cs
- ISFTagAndGuidCache.cs
- CalendarModeChangedEventArgs.cs
- ClientBuildManager.cs
- DocumentXPathNavigator.cs
- UrlMapping.cs
- MultipleFilterMatchesException.cs
- ExpressionLexer.cs
- TextProviderWrapper.cs
- sqlnorm.cs
- SchemaAttDef.cs
- DbMetaDataFactory.cs
- EntityDataSourceState.cs
- AutomationFocusChangedEventArgs.cs
- ProviderSettings.cs
- Repeater.cs
- DuplexClientBase.cs
- CodeSubDirectory.cs
- BridgeDataRecord.cs
- SmtpFailedRecipientsException.cs
- TransformerInfo.cs
- HTTPNotFoundHandler.cs
- XmlAnyElementAttribute.cs
- ExpressionBuilder.cs
- ServiceMemoryGates.cs
- ADMembershipProvider.cs
- BasicHttpMessageSecurityElement.cs
- WindowsRichEdit.cs
- MetadataItem_Static.cs
- EventMappingSettings.cs
- CodeAttributeArgumentCollection.cs
- TextEffect.cs
- SizeChangedInfo.cs
- WebServiceTypeData.cs
- InvalidContentTypeException.cs
- TextSelectionHighlightLayer.cs
- CalculatedColumn.cs
- SchemaCollectionCompiler.cs
- PageStatePersister.cs
- BooleanAnimationBase.cs
- ResourcePermissionBaseEntry.cs
- Memoizer.cs
- SmiRequestExecutor.cs
- ToolStripContainer.cs
- Typography.cs
- Point3DCollection.cs
- RegisteredDisposeScript.cs
- NativeMethods.cs
- ContentElement.cs
- XamlRtfConverter.cs
- CellLabel.cs