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 / Runtime / WhitespaceRuleReader.cs / 1 / 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.EntityReference: reader.ResolveEntity(); 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. //------------------------------------------------------------------------------ //// 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.EntityReference: reader.ResolveEntity(); 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
- itemelement.cs
- InputScopeAttribute.cs
- DataGrid.cs
- OLEDB_Enum.cs
- DataGridViewComboBoxEditingControl.cs
- IPHostEntry.cs
- SqlBuilder.cs
- HtmlButton.cs
- AutoScrollExpandMessageFilter.cs
- NamespaceList.cs
- RIPEMD160.cs
- ReadingWritingEntityEventArgs.cs
- ServicePointManagerElement.cs
- SqlClientFactory.cs
- DataGridViewAdvancedBorderStyle.cs
- BitmapEffectState.cs
- ReachDocumentReferenceSerializer.cs
- CommandTreeTypeHelper.cs
- ManagementInstaller.cs
- TileModeValidation.cs
- ContractAdapter.cs
- StructuredTypeEmitter.cs
- SplitContainer.cs
- HtmlTable.cs
- DataDesignUtil.cs
- SignalGate.cs
- ColorConvertedBitmap.cs
- XmlReflectionMember.cs
- CounterNameConverter.cs
- SqlUnionizer.cs
- CachedFontFace.cs
- StdValidatorsAndConverters.cs
- DataPager.cs
- SystemIPv4InterfaceProperties.cs
- _LocalDataStoreMgr.cs
- GenericEnumerator.cs
- XhtmlStyleClass.cs
- JsonStringDataContract.cs
- RemotingService.cs
- ConfigurationSectionGroup.cs
- RootNamespaceAttribute.cs
- EntityDataSourceDesignerHelper.cs
- IIS7WorkerRequest.cs
- QualificationDataAttribute.cs
- DataControlFieldCollection.cs
- HtmlToClrEventProxy.cs
- ExtenderControl.cs
- WindowsEditBox.cs
- SiteMapSection.cs
- DesignTimeVisibleAttribute.cs
- UIElement3D.cs
- HostedHttpContext.cs
- storepermission.cs
- BooleanAnimationUsingKeyFrames.cs
- BitmapMetadataBlob.cs
- HandlerWithFactory.cs
- RightsManagementInformation.cs
- WindowsScrollBarBits.cs
- SchemaNotation.cs
- XpsViewerException.cs
- XmlSchemaComplexType.cs
- PtsCache.cs
- CodeExpressionStatement.cs
- EllipseGeometry.cs
- DataColumnMapping.cs
- UInt16Converter.cs
- TemplateFactory.cs
- ToolStripPanelCell.cs
- LinqDataSourceView.cs
- CodeBlockBuilder.cs
- RegexCharClass.cs
- Relationship.cs
- VisualStyleElement.cs
- PolyQuadraticBezierSegment.cs
- SchemaImporterExtensionElement.cs
- Compiler.cs
- AppSettingsReader.cs
- mediaclock.cs
- TextDecorations.cs
- ChtmlMobileTextWriter.cs
- CustomTypeDescriptor.cs
- storepermissionattribute.cs
- PageThemeParser.cs
- DataGridColumnCollection.cs
- IntellisenseTextBox.designer.cs
- ObfuscateAssemblyAttribute.cs
- SqlException.cs
- ParameterModifier.cs
- NotFiniteNumberException.cs
- EventLogHandle.cs
- XmlNamespaceManager.cs
- PriorityQueue.cs
- DataGridClipboardCellContent.cs
- __FastResourceComparer.cs
- OpenTypeLayout.cs
- PropertyGeneratedEventArgs.cs
- TransactionBridge.cs
- InvokeMethod.cs
- BuildManager.cs
- SetterTriggerConditionValueConverter.cs