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
- ConfigurationConverterBase.cs
- SignalGate.cs
- DataGridViewColumnCollection.cs
- SqlVersion.cs
- SspiSafeHandles.cs
- RIPEMD160Managed.cs
- WCFServiceClientProxyGenerator.cs
- TileBrush.cs
- VirtualPathUtility.cs
- DelegateBodyWriter.cs
- GridViewRowPresenter.cs
- LineMetrics.cs
- EntityKey.cs
- RequestCache.cs
- MetabaseServerConfig.cs
- AsyncResult.cs
- HtmlElementEventArgs.cs
- xmlsaver.cs
- Volatile.cs
- DataTemplateSelector.cs
- XPathEmptyIterator.cs
- FixedLineResult.cs
- TextClipboardData.cs
- DockPatternIdentifiers.cs
- AppSettingsExpressionBuilder.cs
- SQLInt64.cs
- StructuredTypeInfo.cs
- DataSourceExpressionCollection.cs
- Group.cs
- ValueConversionAttribute.cs
- KeyValueSerializer.cs
- ClientProxyGenerator.cs
- XslCompiledTransform.cs
- PointLight.cs
- ListControl.cs
- ComplexPropertyEntry.cs
- _SafeNetHandles.cs
- SQLStringStorage.cs
- EmptyReadOnlyDictionaryInternal.cs
- SerializableAttribute.cs
- SapiRecoInterop.cs
- RawTextInputReport.cs
- Converter.cs
- CapiSafeHandles.cs
- __Error.cs
- MetadataSerializer.cs
- GetIndexBinder.cs
- TraceContextRecord.cs
- SchemaCollectionPreprocessor.cs
- MediaTimeline.cs
- SafeReversePInvokeHandle.cs
- Variable.cs
- ConnectivityStatus.cs
- CompressStream.cs
- CatalogZoneBase.cs
- EdmItemError.cs
- BitmapScalingModeValidation.cs
- WebPartActionVerb.cs
- PropertySet.cs
- Component.cs
- NotImplementedException.cs
- TextTreeRootTextBlock.cs
- TimeSpanConverter.cs
- ElementFactory.cs
- BuilderPropertyEntry.cs
- TreeViewCancelEvent.cs
- TextElementCollectionHelper.cs
- ByteFacetDescriptionElement.cs
- EdmToObjectNamespaceMap.cs
- OdbcFactory.cs
- ScriptingWebServicesSectionGroup.cs
- CardSpaceException.cs
- MessageOperationFormatter.cs
- StandardMenuStripVerb.cs
- Point3DAnimationUsingKeyFrames.cs
- StorageAssociationTypeMapping.cs
- ClusterSafeNativeMethods.cs
- FileRegion.cs
- AudienceUriMode.cs
- InfoCardRSAPKCS1KeyExchangeDeformatter.cs
- FixedFindEngine.cs
- CommonServiceBehaviorElement.cs
- SiteOfOriginContainer.cs
- HostingEnvironmentWrapper.cs
- DataServiceStreamResponse.cs
- AuthenticationManager.cs
- WebScriptEnablingElement.cs
- DispatcherEventArgs.cs
- DocumentViewerConstants.cs
- ProxyGenerationError.cs
- ComboBox.cs
- SQLStringStorage.cs
- TraceEventCache.cs
- ResourceExpressionBuilder.cs
- DataGridItemAttachedStorage.cs
- DateTimePicker.cs
- ConfigurationCollectionAttribute.cs
- XmlArrayItemAttribute.cs
- ApplicationDirectoryMembershipCondition.cs
- Padding.cs