Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / XsltOld / ProcessingInstructionAction.cs / 1305376 / 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, "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 (Ref.Equal(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; } int len = ValidateNames.ParseNCName(name, position); if (len == 0) { return false; } position += len; 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, "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 (Ref.Equal(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; } int len = ValidateNames.ParseNCName(name, position); if (len == 0) { return false; } position += len; 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
- OleDbWrapper.cs
- Stroke2.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- IndexedEnumerable.cs
- DiscoveryServiceExtension.cs
- CompilerGeneratedAttribute.cs
- CustomAttributeBuilder.cs
- CompilerState.cs
- EditCommandColumn.cs
- NetTcpBindingCollectionElement.cs
- UnsupportedPolicyOptionsException.cs
- BitmapEffectInputConnector.cs
- AssociationType.cs
- SQLBoolean.cs
- PerformanceCounterPermissionAttribute.cs
- XamlDesignerSerializationManager.cs
- CrossAppDomainChannel.cs
- UndirectedGraph.cs
- CultureMapper.cs
- Encoder.cs
- DataGridViewHeaderCell.cs
- TextureBrush.cs
- ChtmlCommandAdapter.cs
- DefaultPrintController.cs
- BCLDebug.cs
- XamlReaderConstants.cs
- AuthenticationService.cs
- ClearTypeHintValidation.cs
- XmlSerializerFactory.cs
- TextRenderer.cs
- __ConsoleStream.cs
- SiteMapSection.cs
- BamlVersionHeader.cs
- MultiPageTextView.cs
- FixedPageAutomationPeer.cs
- XPathNodeIterator.cs
- KnownTypeAttribute.cs
- OpenTypeLayoutCache.cs
- Annotation.cs
- KnownTypeDataContractResolver.cs
- LocalizedNameDescriptionPair.cs
- ConversionContext.cs
- SemanticResolver.cs
- FixedNode.cs
- ListMarkerLine.cs
- XsltSettings.cs
- HandlerWithFactory.cs
- BaseTemplateParser.cs
- PasswordDeriveBytes.cs
- ParagraphVisual.cs
- TextServicesCompartment.cs
- __FastResourceComparer.cs
- OSFeature.cs
- AnonymousIdentificationSection.cs
- FileDialogCustomPlacesCollection.cs
- DetailsViewInsertEventArgs.cs
- StoreAnnotationsMap.cs
- PeerPresenceInfo.cs
- TreeNodeConverter.cs
- ServiceInfo.cs
- WebBrowser.cs
- CharEnumerator.cs
- TabControl.cs
- BrowserCapabilitiesCodeGenerator.cs
- WebPartConnectionCollection.cs
- OracleDataAdapter.cs
- oledbmetadatacollectionnames.cs
- SocketAddress.cs
- SqlRecordBuffer.cs
- ResourceExpressionBuilder.cs
- TextParaLineResult.cs
- TrustSection.cs
- GeometryGroup.cs
- SecurityException.cs
- DataException.cs
- XamlFigureLengthSerializer.cs
- SignedPkcs7.cs
- TypeConverterHelper.cs
- autovalidator.cs
- HierarchicalDataTemplate.cs
- OleDbMetaDataFactory.cs
- RemoteWebConfigurationHost.cs
- ToolStripSettings.cs
- CalendarModeChangedEventArgs.cs
- xamlnodes.cs
- SystemIcmpV4Statistics.cs
- XmlUnspecifiedAttribute.cs
- DetailsViewDeletedEventArgs.cs
- DownloadProgressEventArgs.cs
- InputDevice.cs
- safePerfProviderHandle.cs
- XmlStreamStore.cs
- CodeDomConfigurationHandler.cs
- Cursors.cs
- TableCell.cs
- XmlChildNodes.cs
- ScriptIgnoreAttribute.cs
- SchemaEntity.cs
- LeafCellTreeNode.cs
- Odbc32.cs