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
- HuffModule.cs
- XdrBuilder.cs
- InstalledFontCollection.cs
- TreeViewItem.cs
- ChtmlCommandAdapter.cs
- MsmqBindingMonitor.cs
- FtpCachePolicyElement.cs
- ConfigurationSectionHelper.cs
- OutKeywords.cs
- StubHelpers.cs
- GlyphInfoList.cs
- EnumConverter.cs
- CommandConverter.cs
- XmlSchemaSequence.cs
- OrderedDictionary.cs
- TimeSpanConverter.cs
- ExpressionBuilder.cs
- ClientProxyGenerator.cs
- RuleInfoComparer.cs
- odbcmetadatacollectionnames.cs
- IndicFontClient.cs
- KnownColorTable.cs
- ButtonBaseAdapter.cs
- InputBindingCollection.cs
- dataprotectionpermission.cs
- FontStretches.cs
- RequestResizeEvent.cs
- followingsibling.cs
- FtpWebRequest.cs
- SBCSCodePageEncoding.cs
- Vars.cs
- CollectionViewSource.cs
- XmlSchemaAppInfo.cs
- ResXResourceReader.cs
- CompoundFileStreamReference.cs
- IntAverageAggregationOperator.cs
- SortDescription.cs
- SerializerProvider.cs
- XhtmlConformanceSection.cs
- TextClipboardData.cs
- EpmContentDeSerializer.cs
- FunctionQuery.cs
- XmlSchemaImport.cs
- BoolLiteral.cs
- ExpressionHelper.cs
- TagMapInfo.cs
- AnonymousIdentificationModule.cs
- ScriptComponentDescriptor.cs
- DataKey.cs
- RightsManagementLicense.cs
- NoneExcludedImageIndexConverter.cs
- FilteredSchemaElementLookUpTable.cs
- httpapplicationstate.cs
- PresentationSource.cs
- CultureTableRecord.cs
- StrokeCollectionDefaultValueFactory.cs
- DrawingCollection.cs
- PerformanceCounterPermission.cs
- FilteredXmlReader.cs
- FacetValues.cs
- HtmlMobileTextWriter.cs
- SQLMoney.cs
- SizeF.cs
- FixedSOMImage.cs
- HandleRef.cs
- PageThemeParser.cs
- NCryptNative.cs
- TabControl.cs
- LocalizationComments.cs
- FileIOPermission.cs
- Context.cs
- MulticastDelegate.cs
- SecurityPolicySection.cs
- StickyNoteContentControl.cs
- ObjectDataProvider.cs
- _AuthenticationState.cs
- TrailingSpaceComparer.cs
- AlphaSortedEnumConverter.cs
- BrowserCapabilitiesCodeGenerator.cs
- CodeCommentStatementCollection.cs
- MenuItem.cs
- MemberRelationshipService.cs
- BitmapEffectrendercontext.cs
- OleDbReferenceCollection.cs
- ErrorRuntimeConfig.cs
- CheckBoxAutomationPeer.cs
- ArithmeticException.cs
- ProtectedConfigurationSection.cs
- ExtensionQuery.cs
- XmlNodeChangedEventArgs.cs
- BitmapEffectDrawing.cs
- ElementUtil.cs
- ColumnResult.cs
- TreeBuilder.cs
- FilePrompt.cs
- RegisteredDisposeScript.cs
- PropertyIdentifier.cs
- ButtonBase.cs
- IntSecurity.cs
- FileVersion.cs