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
- SchemaCreator.cs
- NumberAction.cs
- Nullable.cs
- TemplatedWizardStep.cs
- CustomAttribute.cs
- ColorTransformHelper.cs
- ToolboxComponentsCreatedEventArgs.cs
- XmlObjectSerializerReadContextComplexJson.cs
- MsmqTransportSecurity.cs
- IPGlobalProperties.cs
- PropertyKey.cs
- DataGridTextBox.cs
- PropertyPath.cs
- DockEditor.cs
- FileRecordSequenceHelper.cs
- FormatterConverter.cs
- SmiMetaDataProperty.cs
- ExecutorLocksHeldException.cs
- ReflectionUtil.cs
- MetadataResolver.cs
- ClientScriptManagerWrapper.cs
- ModelItem.cs
- TypeSystem.cs
- FontStyleConverter.cs
- PackageDigitalSignatureManager.cs
- MultiTrigger.cs
- PropertyChangingEventArgs.cs
- Effect.cs
- XmlSchemaGroup.cs
- EventBuilder.cs
- TableParagraph.cs
- TimelineCollection.cs
- RSACryptoServiceProvider.cs
- ActivityCodeDomSerializer.cs
- UndirectedGraph.cs
- Parallel.cs
- FontSizeConverter.cs
- HwndProxyElementProvider.cs
- QilInvokeEarlyBound.cs
- SerializationSectionGroup.cs
- RelatedView.cs
- SqlException.cs
- FontFamily.cs
- ComponentDispatcherThread.cs
- Stack.cs
- ToolbarAUtomationPeer.cs
- AuthorizationBehavior.cs
- SimpleBitVector32.cs
- ActivityInstanceReference.cs
- OletxEnlistment.cs
- MappingSource.cs
- DesignTimeValidationFeature.cs
- ColorConvertedBitmapExtension.cs
- EffectiveValueEntry.cs
- QueryAccessibilityHelpEvent.cs
- SqlDuplicator.cs
- MappingSource.cs
- CanonicalizationDriver.cs
- QuadraticBezierSegment.cs
- Matrix.cs
- ToolStripItemTextRenderEventArgs.cs
- AuthenticationException.cs
- CalendarDateRangeChangingEventArgs.cs
- ButtonPopupAdapter.cs
- TrackingValidationObjectDictionary.cs
- XhtmlBasicSelectionListAdapter.cs
- IndexedGlyphRun.cs
- TypeResolver.cs
- FolderLevelBuildProviderCollection.cs
- ProtocolsConfigurationEntry.cs
- HtmlHead.cs
- RemotingConfigParser.cs
- objectresult_tresulttype.cs
- ReadOnlyDictionary.cs
- ZoneMembershipCondition.cs
- RegexMatchCollection.cs
- coordinatorscratchpad.cs
- ApplicationActivator.cs
- HintTextConverter.cs
- RtfToXamlReader.cs
- Rotation3DAnimation.cs
- ColorTranslator.cs
- Metafile.cs
- XmlnsCache.cs
- ClipboardProcessor.cs
- StoreItemCollection.cs
- ComponentChangedEvent.cs
- SelectionGlyph.cs
- CookieProtection.cs
- UrlMappingCollection.cs
- FileUtil.cs
- ImageMap.cs
- ButtonChrome.cs
- PEFileReader.cs
- PrimitiveType.cs
- CheckedPointers.cs
- PropertyTabAttribute.cs
- XmlCharacterData.cs
- ReadOnlyHierarchicalDataSource.cs
- UriScheme.cs