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
- XmlSchemaSequence.cs
- GeneralTransform3DTo2D.cs
- CommandID.cs
- BaseCollection.cs
- BooleanStorage.cs
- WpfKnownMemberInvoker.cs
- SubclassTypeValidator.cs
- BufferBuilder.cs
- XmlSchemaSimpleTypeUnion.cs
- ListBoxItemAutomationPeer.cs
- SQlBooleanStorage.cs
- XmlSchemaComplexContent.cs
- ModelItemDictionary.cs
- CodeExpressionCollection.cs
- ShaderEffect.cs
- ThaiBuddhistCalendar.cs
- DynamicObject.cs
- EventRouteFactory.cs
- ConfigurationValidatorAttribute.cs
- TablePatternIdentifiers.cs
- RemotingConfiguration.cs
- ReceiveReply.cs
- MaskInputRejectedEventArgs.cs
- PairComparer.cs
- BevelBitmapEffect.cs
- IgnoreFileBuildProvider.cs
- Buffer.cs
- InvalidEnumArgumentException.cs
- ConfigurationPropertyCollection.cs
- XmlSchemaValidator.cs
- InkSerializer.cs
- AuthenticationModuleElement.cs
- PersonalizationProvider.cs
- AxHostDesigner.cs
- Console.cs
- TableLayoutPanelCodeDomSerializer.cs
- BitmapImage.cs
- NetCodeGroup.cs
- View.cs
- XmlTypeAttribute.cs
- ParsedAttributeCollection.cs
- TextWriterTraceListener.cs
- XamlPointCollectionSerializer.cs
- InkCanvasFeedbackAdorner.cs
- Pens.cs
- DatatypeImplementation.cs
- HyperLinkStyle.cs
- NullableLongAverageAggregationOperator.cs
- HwndProxyElementProvider.cs
- ReadOnlyAttribute.cs
- TraceSection.cs
- AvtEvent.cs
- Buffer.cs
- ApplicationManager.cs
- Effect.cs
- IndentedTextWriter.cs
- Polyline.cs
- XmlSchemaAny.cs
- WindowsContainer.cs
- PrintDialogDesigner.cs
- EntitySqlQueryState.cs
- WindowAutomationPeer.cs
- DoubleIndependentAnimationStorage.cs
- SkinBuilder.cs
- CapiSafeHandles.cs
- ProfileSettings.cs
- EmptyTextWriter.cs
- DataGridToolTip.cs
- ClientSponsor.cs
- TTSEngineProxy.cs
- XmlNodeChangedEventManager.cs
- AssemblyAttributesGoHere.cs
- HostedHttpRequestAsyncResult.cs
- SafeEventLogReadHandle.cs
- ItemCollectionEditor.cs
- ApplicationInfo.cs
- IProvider.cs
- ListViewSortEventArgs.cs
- IndexerNameAttribute.cs
- mansign.cs
- FormsAuthenticationEventArgs.cs
- DiffuseMaterial.cs
- SchemaSetCompiler.cs
- ValueTable.cs
- UnmanagedHandle.cs
- XmlChoiceIdentifierAttribute.cs
- CodeFieldReferenceExpression.cs
- RegexCaptureCollection.cs
- FileDetails.cs
- OleDbConnectionFactory.cs
- NullExtension.cs
- NativeMethods.cs
- ClientApiGenerator.cs
- AdornedElementPlaceholder.cs
- SecurityKeyUsage.cs
- UnsafeNetInfoNativeMethods.cs
- Semaphore.cs
- BaseTemplatedMobileComponentEditor.cs
- ThemeableAttribute.cs
- DelegateBodyWriter.cs