Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- ScriptReferenceBase.cs
- QueryOperator.cs
- PointIndependentAnimationStorage.cs
- MultiView.cs
- SequentialOutput.cs
- ApplicationContext.cs
- SynchronousChannel.cs
- UTF8Encoding.cs
- DeclarationUpdate.cs
- FileInfo.cs
- HttpContextServiceHost.cs
- PageRequestManager.cs
- SimpleHandlerFactory.cs
- FileSystemEnumerable.cs
- ResourceDictionaryCollection.cs
- XmlCountingReader.cs
- EventSourceCreationData.cs
- XmlReaderSettings.cs
- FlowDocumentReaderAutomationPeer.cs
- URI.cs
- ImmutableCollection.cs
- HtmlTableRowCollection.cs
- ToolStripDropTargetManager.cs
- StyleCollection.cs
- XhtmlBasicLiteralTextAdapter.cs
- CancellationHandler.cs
- ModelItemCollectionImpl.cs
- SubMenuStyleCollection.cs
- ClientScriptManager.cs
- SqlRowUpdatingEvent.cs
- IntranetCredentialPolicy.cs
- DataGridTextBox.cs
- PropagatorResult.cs
- UnsupportedPolicyOptionsException.cs
- SqlTriggerAttribute.cs
- ReferenceService.cs
- DBSchemaRow.cs
- XPathBinder.cs
- RelatedImageListAttribute.cs
- XPathDocumentIterator.cs
- SubstitutionDesigner.cs
- TemplateDefinition.cs
- XmlImplementation.cs
- DependencyStoreSurrogate.cs
- FunctionImportElement.cs
- XXXInfos.cs
- SessionParameter.cs
- RadioButtonList.cs
- HeaderUtility.cs
- WebPartUserCapability.cs
- ContextStaticAttribute.cs
- ConfigurationLockCollection.cs
- LiteralControl.cs
- SyndicationElementExtension.cs
- XmlEventCache.cs
- StreamingContext.cs
- XmlIncludeAttribute.cs
- ArraySet.cs
- WizardPanel.cs
- TypeResolver.cs
- ReceiveReply.cs
- UrlPath.cs
- HttpDictionary.cs
- CompositeControl.cs
- MetaForeignKeyColumn.cs
- COM2ExtendedUITypeEditor.cs
- LifetimeServices.cs
- UInt64Converter.cs
- Sql8ConformanceChecker.cs
- ProfileSettingsCollection.cs
- TextRunTypographyProperties.cs
- CompositionAdorner.cs
- ParagraphResult.cs
- DetectRunnableInstancesTask.cs
- ReadOnlyNameValueCollection.cs
- CallbackValidator.cs
- ContextMenuStrip.cs
- ResourcesGenerator.cs
- MatrixKeyFrameCollection.cs
- ProcessInputEventArgs.cs
- TreeNodeSelectionProcessor.cs
- FrameSecurityDescriptor.cs
- SchemaRegistration.cs
- HtmlTableRow.cs
- TreeChangeInfo.cs
- PseudoWebRequest.cs
- WindowsTreeView.cs
- Simplifier.cs
- XmlSchemaImport.cs
- TimeSpanStorage.cs
- FlowDocumentPage.cs
- HierarchicalDataTemplate.cs
- MediaPlayerState.cs
- XamlNamespaceHelper.cs
- Tokenizer.cs
- BufferBuilder.cs
- RowType.cs
- HandlerMappingMemo.cs
- CaseStatement.cs
- DocumentDesigner.cs