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
- ManagementExtension.cs
- AddDataControlFieldDialog.cs
- DataTemplateKey.cs
- OperatorExpressions.cs
- SystemSounds.cs
- BitmapEffectInput.cs
- NominalTypeEliminator.cs
- PolicyValidationException.cs
- DataDocumentXPathNavigator.cs
- ADMembershipUser.cs
- OleAutBinder.cs
- XmlEnumAttribute.cs
- IListConverters.cs
- ClientBuildManagerCallback.cs
- SafeFileMapViewHandle.cs
- SiteMapDataSourceDesigner.cs
- PolygonHotSpot.cs
- Invariant.cs
- ImportContext.cs
- HttpCacheVary.cs
- WindowsTitleBar.cs
- ConfigurationSettings.cs
- XsdValidatingReader.cs
- ViewBase.cs
- MultiSelectRootGridEntry.cs
- XmlProcessingInstruction.cs
- SamlAudienceRestrictionCondition.cs
- StringUtil.cs
- FlowDecisionDesigner.xaml.cs
- ColumnMap.cs
- ResourcePermissionBase.cs
- xmlglyphRunInfo.cs
- FindCriteriaCD1.cs
- BigInt.cs
- WindowsFormsEditorServiceHelper.cs
- TreeNodeCollection.cs
- TraceListeners.cs
- UniqueIdentifierService.cs
- ClientSettingsStore.cs
- ManipulationPivot.cs
- TextElement.cs
- WSDualHttpSecurityElement.cs
- ElementHost.cs
- URLEditor.cs
- DataKey.cs
- SubqueryRules.cs
- TrackingProfile.cs
- BaseDataBoundControl.cs
- MenuItemStyleCollection.cs
- TimeSpanSecondsOrInfiniteConverter.cs
- SimpleModelProvider.cs
- BinaryCommonClasses.cs
- ComboBoxItem.cs
- _CacheStreams.cs
- AssemblyCollection.cs
- Tuple.cs
- ReadOnlyCollectionBase.cs
- PointConverter.cs
- figurelength.cs
- ClientScriptManager.cs
- XmlAnyAttributeAttribute.cs
- InternalBase.cs
- ToolStripCollectionEditor.cs
- DelegateArgumentReference.cs
- XamlBuildTaskServices.cs
- FaultCode.cs
- HttpHandler.cs
- DisplayNameAttribute.cs
- TraceUtils.cs
- SymLanguageType.cs
- AsyncPostBackErrorEventArgs.cs
- TabControlCancelEvent.cs
- TableLayoutStyleCollection.cs
- DesigntimeLicenseContextSerializer.cs
- MobileListItem.cs
- IconHelper.cs
- ApplicationException.cs
- PrinterUnitConvert.cs
- XmlParserContext.cs
- VirtualDirectoryMapping.cs
- TextRangeEditTables.cs
- AssemblyNameEqualityComparer.cs
- DataSet.cs
- MetadataArtifactLoaderComposite.cs
- FormatException.cs
- DeploymentSectionCache.cs
- SiteMapNodeItem.cs
- IPGlobalProperties.cs
- DataGridViewCellStyle.cs
- IssuanceLicense.cs
- DataGridGeneralPage.cs
- SByteConverter.cs
- XmlQuerySequence.cs
- XPathNodeHelper.cs
- AttachedProperty.cs
- WorkflowPersistenceService.cs
- ActivityBindForm.Designer.cs
- ColorIndependentAnimationStorage.cs
- WebControlAdapter.cs
- ProcessStartInfo.cs