Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / WhitespaceRuleReader.cs / 1305376 / WhitespaceRuleReader.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.IO; using System.Xml; using System.Xml.Schema; using System.Diagnostics; using MS.Internal.Xml; namespace System.Xml.Xsl.Runtime { ////// internal class WhitespaceRuleReader : XmlWrappingReader { private WhitespaceRuleLookup wsRules; private BitStack stkStrip; private bool shouldStrip, preserveAdjacent; private string val; private XmlCharType xmlCharType = XmlCharType.Instance; static public XmlReader CreateReader(XmlReader baseReader, WhitespaceRuleLookup wsRules) { if (wsRules == null) { return baseReader; // There is no rules to process } XmlReaderSettings readerSettings = baseReader.Settings; if (readerSettings != null) { if (readerSettings.IgnoreWhitespace) { return baseReader; // V2 XmlReader that strips all WS } } else { XmlTextReader txtReader = baseReader as XmlTextReader; if (txtReader != null && txtReader.WhitespaceHandling == WhitespaceHandling.None) { return baseReader; // V1 XmlTextReader that strips all WS } XmlTextReaderImpl txtReaderImpl = baseReader as XmlTextReaderImpl; if (txtReaderImpl != null && txtReaderImpl.WhitespaceHandling == WhitespaceHandling.None) { return baseReader; // XmlTextReaderImpl that strips all WS } } return new WhitespaceRuleReader(baseReader, wsRules); } private WhitespaceRuleReader(XmlReader baseReader, WhitespaceRuleLookup wsRules) : base(baseReader) { Debug.Assert(wsRules != null); this.val = null; this.stkStrip = new BitStack(); this.shouldStrip = false; this.preserveAdjacent = false; this.wsRules = wsRules; this.wsRules.Atomize(baseReader.NameTable); } ////// Override Value in order to possibly prepend extra whitespace. /// public override string Value { get { return (this.val == null) ? base.Value : this.val; } } ////// Override Read in order to search for strippable whitespace, to concatenate adjacent text nodes, and to /// resolve entities. /// public override bool Read() { XmlCharType xmlCharType = XmlCharType.Instance; string ws = null; // Clear text value this.val = null; while (base.Read()) { switch (base.NodeType) { case XmlNodeType.Element: // Push boolean indicating whether whitespace children of this element should be stripped if (!base.IsEmptyElement) { this.stkStrip.PushBit(this.shouldStrip); // Strip if rules say we should and we're not within the scope of xml:space="preserve" this.shouldStrip = wsRules.ShouldStripSpace(base.LocalName, base.NamespaceURI) && (base.XmlSpace != XmlSpace.Preserve); } break; case XmlNodeType.EndElement: // Restore parent shouldStrip setting this.shouldStrip = this.stkStrip.PopBit(); break; case XmlNodeType.Text: case XmlNodeType.CDATA: // If preserving adjacent text, don't perform any further checks if (this.preserveAdjacent) return true; if (this.shouldStrip) { // Reader may report whitespace as Text or CDATA if (xmlCharType.IsOnlyWhitespace(base.Value)) goto case XmlNodeType.Whitespace; // If whitespace was cached, then prepend it to text or CDATA value if (ws != null) this.val = string.Concat(ws, base.Value); // Preserve adjacent whitespace this.preserveAdjacent = true; return true; } break; case XmlNodeType.Whitespace: case XmlNodeType.SignificantWhitespace: // If preserving adjacent text, don't perform any further checks if (this.preserveAdjacent) return true; if (this.shouldStrip) { // Save whitespace until it can be determined whether it will be stripped if (ws == null) ws = base.Value; else ws = string.Concat(ws, base.Value); // Read next event continue; } break; case XmlNodeType.EndEntity: // Read next event continue; } // No longer preserve adjacent space this.preserveAdjacent = false; return true; } return false; } } } // 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
- AssemblyBuilder.cs
- VirtualPathUtility.cs
- ParameterCollectionEditor.cs
- IDReferencePropertyAttribute.cs
- CodeObjectCreateExpression.cs
- HWStack.cs
- httpserverutility.cs
- _Rfc2616CacheValidators.cs
- Button.cs
- DigitShape.cs
- DependencyPropertyKey.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- RuntimeArgument.cs
- ThreadStaticAttribute.cs
- ResourcePool.cs
- BehaviorEditorPart.cs
- BasicKeyConstraint.cs
- DataGridView.cs
- OutputCacheSettings.cs
- HtmlElementErrorEventArgs.cs
- XmlEncodedRawTextWriter.cs
- MatrixAnimationUsingKeyFrames.cs
- SimpleWorkerRequest.cs
- ToolStripDesigner.cs
- SqlDependencyListener.cs
- MetadataItemSerializer.cs
- SchemaImporterExtensionElement.cs
- ProcessHostServerConfig.cs
- Table.cs
- IPEndPoint.cs
- RawUIStateInputReport.cs
- StreamGeometryContext.cs
- RuleValidation.cs
- HtmlEmptyTagControlBuilder.cs
- RelationshipEndMember.cs
- ControllableStoryboardAction.cs
- TextEffect.cs
- WindowsScrollBar.cs
- CornerRadiusConverter.cs
- LocalFileSettingsProvider.cs
- CheckPair.cs
- FileVersion.cs
- PreProcessInputEventArgs.cs
- CFStream.cs
- CollectionBase.cs
- LoginCancelEventArgs.cs
- WindowHideOrCloseTracker.cs
- ThousandthOfEmRealDoubles.cs
- XmlArrayItemAttribute.cs
- FocusWithinProperty.cs
- ProtectedConfigurationSection.cs
- DataSourceSelectArguments.cs
- KeyInfo.cs
- TextSchema.cs
- LinkedResourceCollection.cs
- XPathNavigator.cs
- BasicHttpMessageSecurity.cs
- Menu.cs
- Latin1Encoding.cs
- Canvas.cs
- FileDialog_Vista.cs
- WindowsIPAddress.cs
- ElementHostPropertyMap.cs
- WebPartDisplayModeEventArgs.cs
- WebBrowser.cs
- DelayedRegex.cs
- InternalDispatchObject.cs
- TextEditorTyping.cs
- TableLayoutColumnStyleCollection.cs
- Function.cs
- DependencyObjectProvider.cs
- SingleKeyFrameCollection.cs
- DescendentsWalkerBase.cs
- MetadataUtil.cs
- PointLightBase.cs
- AbsoluteQuery.cs
- WinFormsComponentEditor.cs
- FontStretch.cs
- DotNetATv1WindowsLogEntryDeserializer.cs
- FunctionUpdateCommand.cs
- SourceFileBuildProvider.cs
- InternalConfigHost.cs
- UiaCoreApi.cs
- PhysicalFontFamily.cs
- TextWriterTraceListener.cs
- TileBrush.cs
- BitmapSource.cs
- lengthconverter.cs
- DataGridTable.cs
- ConstraintConverter.cs
- BamlResourceDeserializer.cs
- IndexedEnumerable.cs
- ResolveDuplexCD1AsyncResult.cs
- VariableQuery.cs
- CheckedListBox.cs
- XamlSerializerUtil.cs
- WSHttpBindingBaseElement.cs
- CultureSpecificCharacterBufferRange.cs
- InstanceHandleConflictException.cs
- WsdlServiceChannelBuilder.cs