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 / ProcessingInstructionAction.cs / 1 / ProcessingInstructionAction.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 ProcessingInstructionAction : ContainerAction { private const int NameEvaluated = 2; private const int NameReady = 3; private Avt nameAvt; // Compile time precalculated AVT private string name; private const char CharX = 'X'; private const char Charx = 'x'; private const char CharM = 'M'; private const char Charm = 'm'; private const char CharL = 'L'; private const char Charl = 'l'; internal ProcessingInstructionAction() {} internal override void Compile(Compiler compiler) { CompileAttributes(compiler); CheckRequiredAttribute(compiler, this.nameAvt, Keywords.s_Name); if(this.nameAvt.IsConstant) { this.name = this.nameAvt.Evaluate(null, null); this.nameAvt = null; if (! IsProcessingInstructionName(this.name)) { // For Now: set to null to ignore action late; this.name = null; } } if (compiler.Recurse()) { CompileTemplate(compiler); compiler.ToParent(); } } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Keywords.Equals(name, compiler.Atoms.Name)) { this.nameAvt = Avt.CompileAvt(compiler, value); } else { return false; } return true; } internal override void Execute(Processor processor, ActionFrame frame) { Debug.Assert(processor != null && frame != null); switch (frame.State) { case Initialized: if(this.nameAvt == null) { frame.StoredOutput = this.name; if(this.name == null) { // name was static but was bad; frame.Finished(); break; } } else { frame.StoredOutput = this.nameAvt.Evaluate(processor, frame); if (! IsProcessingInstructionName(frame.StoredOutput)) { frame.Finished(); break; } } goto case NameReady; case NameReady: Debug.Assert(frame.StoredOutput != null); if (processor.BeginEvent(XPathNodeType.ProcessingInstruction, string.Empty, frame.StoredOutput, string.Empty, false) == false) { // Come back later frame.State = NameReady; break; } processor.PushActionFrame(frame); frame.State = ProcessingChildren; break; // Allow children to run case ProcessingChildren: if (processor.EndEvent(XPathNodeType.ProcessingInstruction) == false) { frame.State = ProcessingChildren; break; } frame.Finished(); break; default: Debug.Fail("Invalid ElementAction execution state"); frame.Finished(); break; } } internal static bool IsProcessingInstructionName(string name) { if (name == null) { return false; } int nameLength = name.Length; int position = 0; XmlCharType xmlCharType = XmlCharType.Instance; while (position < nameLength && xmlCharType.IsWhiteSpace(name[position])) { position ++; } if (position >= nameLength) { return false; } if (position < nameLength && ! xmlCharType.IsStartNCNameChar(name[position])) { return false; } while (position < nameLength && xmlCharType.IsNCNameChar(name[position])) { position ++; } while (position < nameLength && xmlCharType.IsWhiteSpace(name[position])) { position ++; } if (position < nameLength) { return false; } if (nameLength == 3 && (name[0] == CharX || name[0] == Charx) && (name[1] == CharM || name[1] == Charm) && (name[2] == CharL || name[2] == Charl) ) { return false; } return true; } } } // 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 ProcessingInstructionAction : ContainerAction { private const int NameEvaluated = 2; private const int NameReady = 3; private Avt nameAvt; // Compile time precalculated AVT private string name; private const char CharX = 'X'; private const char Charx = 'x'; private const char CharM = 'M'; private const char Charm = 'm'; private const char CharL = 'L'; private const char Charl = 'l'; internal ProcessingInstructionAction() {} internal override void Compile(Compiler compiler) { CompileAttributes(compiler); CheckRequiredAttribute(compiler, this.nameAvt, Keywords.s_Name); if(this.nameAvt.IsConstant) { this.name = this.nameAvt.Evaluate(null, null); this.nameAvt = null; if (! IsProcessingInstructionName(this.name)) { // For Now: set to null to ignore action late; this.name = null; } } if (compiler.Recurse()) { CompileTemplate(compiler); compiler.ToParent(); } } internal override bool CompileAttribute(Compiler compiler) { string name = compiler.Input.LocalName; string value = compiler.Input.Value; if (Keywords.Equals(name, compiler.Atoms.Name)) { this.nameAvt = Avt.CompileAvt(compiler, value); } else { return false; } return true; } internal override void Execute(Processor processor, ActionFrame frame) { Debug.Assert(processor != null && frame != null); switch (frame.State) { case Initialized: if(this.nameAvt == null) { frame.StoredOutput = this.name; if(this.name == null) { // name was static but was bad; frame.Finished(); break; } } else { frame.StoredOutput = this.nameAvt.Evaluate(processor, frame); if (! IsProcessingInstructionName(frame.StoredOutput)) { frame.Finished(); break; } } goto case NameReady; case NameReady: Debug.Assert(frame.StoredOutput != null); if (processor.BeginEvent(XPathNodeType.ProcessingInstruction, string.Empty, frame.StoredOutput, string.Empty, false) == false) { // Come back later frame.State = NameReady; break; } processor.PushActionFrame(frame); frame.State = ProcessingChildren; break; // Allow children to run case ProcessingChildren: if (processor.EndEvent(XPathNodeType.ProcessingInstruction) == false) { frame.State = ProcessingChildren; break; } frame.Finished(); break; default: Debug.Fail("Invalid ElementAction execution state"); frame.Finished(); break; } } internal static bool IsProcessingInstructionName(string name) { if (name == null) { return false; } int nameLength = name.Length; int position = 0; XmlCharType xmlCharType = XmlCharType.Instance; while (position < nameLength && xmlCharType.IsWhiteSpace(name[position])) { position ++; } if (position >= nameLength) { return false; } if (position < nameLength && ! xmlCharType.IsStartNCNameChar(name[position])) { return false; } while (position < nameLength && xmlCharType.IsNCNameChar(name[position])) { position ++; } while (position < nameLength && xmlCharType.IsWhiteSpace(name[position])) { position ++; } if (position < nameLength) { return false; } if (nameLength == 3 && (name[0] == CharX || name[0] == Charx) && (name[1] == CharM || name[1] == Charm) && (name[2] == CharL || name[2] == Charl) ) { return false; } return true; } } } // 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
- SynchronizationScope.cs
- WinFormsUtils.cs
- TraceListeners.cs
- PassportAuthentication.cs
- ReservationNotFoundException.cs
- MsmqInputMessagePool.cs
- HiddenFieldPageStatePersister.cs
- ContentValidator.cs
- PropertyMetadata.cs
- FileVersion.cs
- DesignerAdRotatorAdapter.cs
- CrossSiteScriptingValidation.cs
- DataGridViewImageColumn.cs
- RegularExpressionValidator.cs
- FixedSOMPageConstructor.cs
- DictionaryKeyPropertyAttribute.cs
- CacheOutputQuery.cs
- GlobalProxySelection.cs
- ArrayTypeMismatchException.cs
- XAMLParseException.cs
- Stroke.cs
- StringFunctions.cs
- Debug.cs
- ArraySegment.cs
- ContextMenu.cs
- _NestedSingleAsyncResult.cs
- PaintValueEventArgs.cs
- HwndProxyElementProvider.cs
- CodeChecksumPragma.cs
- DataGridViewButtonCell.cs
- XmlStreamStore.cs
- ThreadStaticAttribute.cs
- SemaphoreSlim.cs
- StreamGeometryContext.cs
- MsmqIntegrationProcessProtocolHandler.cs
- PropVariant.cs
- MappingMetadataHelper.cs
- XmlDataSourceView.cs
- DesignerPerfEventProvider.cs
- FunctionOverloadResolver.cs
- BoolLiteral.cs
- NamedPipeDuplicateContext.cs
- ProfileSettingsCollection.cs
- WaitForChangedResult.cs
- DesignSurfaceServiceContainer.cs
- WindowsListViewScroll.cs
- CallSiteHelpers.cs
- TextViewElement.cs
- SQLGuid.cs
- WebPartManager.cs
- VerificationAttribute.cs
- TemplateApplicationHelper.cs
- EmbeddedMailObjectsCollection.cs
- ScrollableControl.cs
- RotateTransform3D.cs
- XmlHierarchyData.cs
- DataServiceStreamProviderWrapper.cs
- MatrixIndependentAnimationStorage.cs
- TextTreeInsertElementUndoUnit.cs
- ControlCollection.cs
- XmlAttributes.cs
- ReadOnlyPropertyMetadata.cs
- TouchDevice.cs
- SystemResourceKey.cs
- CachedResourceDictionaryExtension.cs
- ModifierKeysConverter.cs
- SmiEventSink.cs
- QilReference.cs
- OleDbFactory.cs
- ColorAnimation.cs
- SafeProcessHandle.cs
- DESCryptoServiceProvider.cs
- ConfigurationSectionGroup.cs
- AppliedDeviceFiltersEditor.cs
- ServicePoint.cs
- MetadataSource.cs
- WindowsListView.cs
- IisTraceWebEventProvider.cs
- PersistenceTypeAttribute.cs
- ErrorRuntimeConfig.cs
- Substitution.cs
- OdbcCommandBuilder.cs
- XmlElement.cs
- StringDictionaryCodeDomSerializer.cs
- WmiEventSink.cs
- HtmlTableCellCollection.cs
- NetNamedPipeSecurityElement.cs
- EntityContainerRelationshipSet.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- cookiecollection.cs
- OAVariantLib.cs
- DbReferenceCollection.cs
- XmlCharCheckingWriter.cs
- LockedHandleGlyph.cs
- DataViewManagerListItemTypeDescriptor.cs
- DataDocumentXPathNavigator.cs
- BitmapEffectDrawing.cs
- InstanceHandleConflictException.cs
- SpecialNameAttribute.cs
- FileUtil.cs