Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- PersistenceException.cs
- MediaEntryAttribute.cs
- EntitySetRetriever.cs
- ReliableInputConnection.cs
- SimpleExpression.cs
- AssemblyInfo.cs
- ChildTable.cs
- CodeMemberField.cs
- BrowserDefinition.cs
- LinqDataSourceHelper.cs
- WebPartDisplayMode.cs
- ModelUtilities.cs
- MachineKeyConverter.cs
- SectionVisual.cs
- RoutedEventConverter.cs
- XslUrlEditor.cs
- PageWrapper.cs
- HttpPostClientProtocol.cs
- IsolatedStorage.cs
- RunClient.cs
- CurrentTimeZone.cs
- UriScheme.cs
- XmlCharCheckingWriter.cs
- XamlSerializer.cs
- ColumnResizeUndoUnit.cs
- WindowsAuthenticationModule.cs
- AsyncCompletedEventArgs.cs
- SqlWriter.cs
- MsdtcWrapper.cs
- _LocalDataStoreMgr.cs
- XmlSchemaCollection.cs
- ConfigurationLocation.cs
- DesignerVerbCollection.cs
- RemoteTokenFactory.cs
- ThemeDirectoryCompiler.cs
- PrintPreviewGraphics.cs
- Grammar.cs
- Size.cs
- WebPartConnectionsConnectVerb.cs
- WebPartDisplayMode.cs
- AnnotationObservableCollection.cs
- ConfigXmlAttribute.cs
- ModelEditingScope.cs
- ContentPosition.cs
- NameObjectCollectionBase.cs
- SettingsAttributes.cs
- RegionIterator.cs
- ProfileSettings.cs
- SqlXml.cs
- EntityDataSourceMemberPath.cs
- OrderToken.cs
- TextEvent.cs
- NamedServiceModelExtensionCollectionElement.cs
- HttpFileCollectionBase.cs
- XmlILAnnotation.cs
- TdsParser.cs
- StorageConditionPropertyMapping.cs
- ExeContext.cs
- TransformerTypeCollection.cs
- AutomationPeer.cs
- MenuItemCollection.cs
- UIPropertyMetadata.cs
- MsmqIntegrationOutputChannel.cs
- MemoryFailPoint.cs
- CompoundFileStorageReference.cs
- DateTimeStorage.cs
- SimpleWorkerRequest.cs
- _Events.cs
- KerberosTicketHashIdentifierClause.cs
- MetafileHeaderEmf.cs
- SponsorHelper.cs
- WpfXamlMember.cs
- WmpBitmapEncoder.cs
- ValidationVisibilityAttribute.cs
- PopupRoot.cs
- QilBinary.cs
- WorkflowInstanceTerminatedRecord.cs
- ConnectionStringEditor.cs
- MouseEventArgs.cs
- RtfControlWordInfo.cs
- LayoutTableCell.cs
- HtmlInputFile.cs
- MultiBindingExpression.cs
- OracleBinary.cs
- Brush.cs
- PeerNameRecordCollection.cs
- TextWriter.cs
- ConditionalExpression.cs
- ReferentialConstraintRoleElement.cs
- TextSearch.cs
- SchemaNamespaceManager.cs
- XmlNamespaceMapping.cs
- FunctionQuery.cs
- MenuTracker.cs
- DependencySource.cs
- SqlMethodTransformer.cs
- FragmentNavigationEventArgs.cs
- TreeViewImageIndexConverter.cs
- CustomDictionarySources.cs
- TextPointer.cs