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
- ObjectDataSourceDisposingEventArgs.cs
- BuildProvider.cs
- WSHttpBindingBase.cs
- ObjectDataSource.cs
- SourceFileBuildProvider.cs
- PointUtil.cs
- MSG.cs
- SecurityManager.cs
- Crc32.cs
- CompensatableSequenceActivity.cs
- CodeCommentStatementCollection.cs
- ConditionalAttribute.cs
- NeutralResourcesLanguageAttribute.cs
- StrongNameUtility.cs
- GenericUriParser.cs
- DataServices.cs
- HijriCalendar.cs
- FileLevelControlBuilderAttribute.cs
- NamespaceExpr.cs
- HMACMD5.cs
- CodeIdentifier.cs
- Rect3D.cs
- ManipulationBoundaryFeedbackEventArgs.cs
- basecomparevalidator.cs
- Inflater.cs
- InsufficientMemoryException.cs
- DataError.cs
- Asn1Utilities.cs
- ListViewTableRow.cs
- FontFamily.cs
- ReflectionUtil.cs
- CodeGotoStatement.cs
- SqlCacheDependencyDatabase.cs
- TypeConverterAttribute.cs
- EtwTrace.cs
- HtmlElementEventArgs.cs
- OdbcCommandBuilder.cs
- JournalEntryStack.cs
- WebServicesInteroperability.cs
- PerformanceCounterPermission.cs
- ObsoleteAttribute.cs
- RolePrincipal.cs
- Annotation.cs
- BindMarkupExtensionSerializer.cs
- CharEnumerator.cs
- CookieHandler.cs
- _SslState.cs
- FontResourceCache.cs
- SpellerInterop.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- WebPartActionVerb.cs
- WebMessageEncoderFactory.cs
- ExceptionValidationRule.cs
- IndexerNameAttribute.cs
- ViewLoader.cs
- PeerNearMe.cs
- LambdaCompiler.Binary.cs
- EntityDataSourceWizardForm.cs
- ResourcePermissionBase.cs
- EmptyEnumerable.cs
- ErrorWrapper.cs
- AssemblyCache.cs
- WindowProviderWrapper.cs
- HttpApplicationFactory.cs
- XmlTextReaderImpl.cs
- WorkItem.cs
- CompressedStack.cs
- SortAction.cs
- ToolboxItemAttribute.cs
- SiteMap.cs
- CommandCollectionEditor.cs
- RowTypePropertyElement.cs
- ResourceAttributes.cs
- PassportIdentity.cs
- InfoCardArgumentException.cs
- XmlSerializerObjectSerializer.cs
- ObjectQueryProvider.cs
- SoapDocumentMethodAttribute.cs
- DecimalAnimationUsingKeyFrames.cs
- GeneratedView.cs
- ImageListImage.cs
- Rect3D.cs
- RootProfilePropertySettingsCollection.cs
- ControlSerializer.cs
- WebUtil.cs
- SortDescriptionCollection.cs
- MergablePropertyAttribute.cs
- XMLSchema.cs
- HtmlElementEventArgs.cs
- SymbolTable.cs
- RangeValidator.cs
- ContainerControl.cs
- ColorContextHelper.cs
- controlskin.cs
- SimpleHandlerFactory.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- RowSpanVector.cs
- RegionInfo.cs
- NavigationPropertyEmitter.cs
- DebugView.cs