Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / wpf / src / Framework / System / Windows / Documents / TextElementEnumerator.cs / 1 / TextElementEnumerator.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: IEnumerator for TextRange and TextElement content. // // // History: // 05/27/2003 : benwest - Created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using MS.Internal; using System.Text; using MS.Utility; using System.Windows.Controls; #pragma warning disable 1634, 1691 // suppressing PreSharp warnings namespace System.Windows.Documents { internal class TextElementEnumerator: IEnumerator where TextElementType : TextElement { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors // Creates an enumerator instance. // Null start/end creates an empty enumerator. internal TextElementEnumerator(TextPointer start, TextPointer end) { Invariant.Assert(start != null && end != null || start == null && end == null, "If start is null end should be null!"); _start = start; _end = end; // Remember what generation the backing store was in when we started, // so we can throw if this enumerator is accessed after content has // changed. if (_start != null) { _generation = _start.TextContainer.Generation; } } #endregion Constructors //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- #region Public Methods public void Dispose() { // Empty the enumerator _current = null; _navigator = null; } object System.Collections.IEnumerator.Current { get { return this.Current; } } /// /// Return the current object this enumerator is pointing to. This is /// generally a FrameworkElement, TextElement, an embedded /// object, or Text content. /// ////// According to the IEnumerator spec, the Current property keeps /// the element even after the content has been modified /// (even if the current element has been deleted from the collection). /// This is unlike to Reset or MoveNext which throw after any content change. /// public TextElementType Current { get { if (_navigator == null) { #pragma warning suppress 6503 // IEnumerator.Current is documented to throw this exception throw new InvalidOperationException(SR.Get(SRID.EnumeratorNotStarted)); } if (_current == null) { #pragma warning suppress 6503 // IEnumerator.Current is documented to throw this exception throw new InvalidOperationException(SR.Get(SRID.EnumeratorReachedEnd)); } return _current; } } ////// Advance the enumerator to the next object in the range. Return true if content /// was found. /// public bool MoveNext() { // Throw if the tree has been modified since this enumerator was created. if (_start != null && _generation != _start.TextContainer.Generation) { throw new InvalidOperationException(SR.Get(SRID.EnumeratorVersionChanged)); } // Return false if the collection is empty if (_start == null || _start.CompareTo(_end) == 0) { return false; } // Return false if the navigator reached the end of the collection if (_navigator != null && _navigator.CompareTo(_end) >= 0) { return false; } // Advance the navigator if (_navigator == null) { // Set it to the first element for the very first move _navigator = new TextPointer(_start); _navigator.MoveToNextContextPosition(LogicalDirection.Forward); } else { // Move to the next element in the collection Invariant.Assert(_navigator.GetPointerContext(LogicalDirection.Backward) == TextPointerContext.ElementStart, "Unexpected run type in TextElementEnumerator"); _navigator.MoveToElementEdge(ElementEdge.AfterEnd); _navigator.MoveToNextContextPosition(LogicalDirection.Forward); } // Update current cache if (_navigator.CompareTo(_end) < 0) { _current = (TextElementType)_navigator.Parent; } else { _current = null; } // Return true if the content was found return (_current != null); } ////// Reset the enumerator to the start of the range. /// public void Reset() { // Throw if the tree has been modified since this enumerator was created. if (_start != null && _generation != _start.TextContainer.Generation) { throw new InvalidOperationException(SR.Get(SRID.EnumeratorVersionChanged)); } _navigator = null; _current = null; } #endregion Public Methods //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ #region Public Properties #endregion Public Properties //----------------------------------------------------- // // Public Events // //------------------------------------------------------ #region Public Events #endregion Public Events //----------------------------------------------------- // // Protected Methods // //----------------------------------------------------- #region Protected Methods #endregion Protected Events //----------------------------------------------------- // // Internal Methods // //------------------------------------------------------ #region Internal Methods #endregion Internal methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ #region Internal Properties #endregion Internal Properties //------------------------------------------------------ // // Internal Events // //----------------------------------------------------- #region Internal Events #endregion Internal Events //------------------------------------------------------ // // Private Properties // //----------------------------------------------------- #region Private Properties #endregion Private Properties //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- #region Private Fields // Edges of the span to enumerator over. private readonly TextPointer _start; private readonly TextPointer _end; // Backing store generation when this enumerator was created. private readonly uint _generation; // Current position in the enumeration. private TextPointer _navigator; // Calculated content at the current position. private TextElementType _current; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // // Description: IEnumerator for TextRange and TextElement content. // // // History: // 05/27/2003 : benwest - Created // //--------------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using MS.Internal; using System.Text; using MS.Utility; using System.Windows.Controls; #pragma warning disable 1634, 1691 // suppressing PreSharp warnings namespace System.Windows.Documents { internal class TextElementEnumerator: IEnumerator where TextElementType : TextElement { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- #region Constructors // Creates an enumerator instance. // Null start/end creates an empty enumerator. internal TextElementEnumerator(TextPointer start, TextPointer end) { Invariant.Assert(start != null && end != null || start == null && end == null, "If start is null end should be null!"); _start = start; _end = end; // Remember what generation the backing store was in when we started, // so we can throw if this enumerator is accessed after content has // changed. if (_start != null) { _generation = _start.TextContainer.Generation; } } #endregion Constructors //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- #region Public Methods public void Dispose() { // Empty the enumerator _current = null; _navigator = null; } object System.Collections.IEnumerator.Current { get { return this.Current; } } /// /// Return the current object this enumerator is pointing to. This is /// generally a FrameworkElement, TextElement, an embedded /// object, or Text content. /// ////// According to the IEnumerator spec, the Current property keeps /// the element even after the content has been modified /// (even if the current element has been deleted from the collection). /// This is unlike to Reset or MoveNext which throw after any content change. /// public TextElementType Current { get { if (_navigator == null) { #pragma warning suppress 6503 // IEnumerator.Current is documented to throw this exception throw new InvalidOperationException(SR.Get(SRID.EnumeratorNotStarted)); } if (_current == null) { #pragma warning suppress 6503 // IEnumerator.Current is documented to throw this exception throw new InvalidOperationException(SR.Get(SRID.EnumeratorReachedEnd)); } return _current; } } ////// Advance the enumerator to the next object in the range. Return true if content /// was found. /// public bool MoveNext() { // Throw if the tree has been modified since this enumerator was created. if (_start != null && _generation != _start.TextContainer.Generation) { throw new InvalidOperationException(SR.Get(SRID.EnumeratorVersionChanged)); } // Return false if the collection is empty if (_start == null || _start.CompareTo(_end) == 0) { return false; } // Return false if the navigator reached the end of the collection if (_navigator != null && _navigator.CompareTo(_end) >= 0) { return false; } // Advance the navigator if (_navigator == null) { // Set it to the first element for the very first move _navigator = new TextPointer(_start); _navigator.MoveToNextContextPosition(LogicalDirection.Forward); } else { // Move to the next element in the collection Invariant.Assert(_navigator.GetPointerContext(LogicalDirection.Backward) == TextPointerContext.ElementStart, "Unexpected run type in TextElementEnumerator"); _navigator.MoveToElementEdge(ElementEdge.AfterEnd); _navigator.MoveToNextContextPosition(LogicalDirection.Forward); } // Update current cache if (_navigator.CompareTo(_end) < 0) { _current = (TextElementType)_navigator.Parent; } else { _current = null; } // Return true if the content was found return (_current != null); } ////// Reset the enumerator to the start of the range. /// public void Reset() { // Throw if the tree has been modified since this enumerator was created. if (_start != null && _generation != _start.TextContainer.Generation) { throw new InvalidOperationException(SR.Get(SRID.EnumeratorVersionChanged)); } _navigator = null; _current = null; } #endregion Public Methods //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ #region Public Properties #endregion Public Properties //----------------------------------------------------- // // Public Events // //------------------------------------------------------ #region Public Events #endregion Public Events //----------------------------------------------------- // // Protected Methods // //----------------------------------------------------- #region Protected Methods #endregion Protected Events //----------------------------------------------------- // // Internal Methods // //------------------------------------------------------ #region Internal Methods #endregion Internal methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ #region Internal Properties #endregion Internal Properties //------------------------------------------------------ // // Internal Events // //----------------------------------------------------- #region Internal Events #endregion Internal Events //------------------------------------------------------ // // Private Properties // //----------------------------------------------------- #region Private Properties #endregion Private Properties //----------------------------------------------------- // // Private Fields // //----------------------------------------------------- #region Private Fields // Edges of the span to enumerator over. private readonly TextPointer _start; private readonly TextPointer _end; // Backing store generation when this enumerator was created. private readonly uint _generation; // Current position in the enumeration. private TextPointer _navigator; // Calculated content at the current position. private TextElementType _current; #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HtmlElementEventArgs.cs
- Errors.cs
- ManagedWndProcTracker.cs
- PieceDirectory.cs
- ModelTreeEnumerator.cs
- SyndicationDeserializer.cs
- SecurityHeaderTokenResolver.cs
- InheritedPropertyChangedEventArgs.cs
- Delay.cs
- StyleCollection.cs
- StaticExtensionConverter.cs
- ModifyActivitiesPropertyDescriptor.cs
- CodePropertyReferenceExpression.cs
- _TransmitFileOverlappedAsyncResult.cs
- XmlCustomFormatter.cs
- CodeExpressionCollection.cs
- StylusCaptureWithinProperty.cs
- SourceSwitch.cs
- CreateUserWizardStep.cs
- DbParameterCollection.cs
- WebPartHeaderCloseVerb.cs
- NameValueSectionHandler.cs
- SizeKeyFrameCollection.cs
- NullableLongAverageAggregationOperator.cs
- ObservableCollection.cs
- PeerCollaboration.cs
- SymbolDocumentGenerator.cs
- PartialClassGenerationTaskInternal.cs
- Funcletizer.cs
- HwndKeyboardInputProvider.cs
- XmlAttributeProperties.cs
- XmlDataSource.cs
- WebPartDescriptionCollection.cs
- FunctionUpdateCommand.cs
- DataGridViewBindingCompleteEventArgs.cs
- BreakSafeBase.cs
- WebDisplayNameAttribute.cs
- RandomDelaySendsAsyncResult.cs
- EpmCustomContentDeSerializer.cs
- DetailsViewInsertedEventArgs.cs
- CallContext.cs
- MergeLocalizationDirectives.cs
- ToolboxItemCollection.cs
- SelfIssuedTokenFactoryCredential.cs
- Update.cs
- CodeBlockBuilder.cs
- DesignerTextWriter.cs
- ColorAnimationUsingKeyFrames.cs
- TextBoxLine.cs
- Perspective.cs
- ScriptingSectionGroup.cs
- XmlAttribute.cs
- CompiledIdentityConstraint.cs
- PhotoPrintingIntent.cs
- Attachment.cs
- MDIClient.cs
- WebBrowserDocumentCompletedEventHandler.cs
- SystemUnicastIPAddressInformation.cs
- TargetParameterCountException.cs
- RNGCryptoServiceProvider.cs
- GrammarBuilderBase.cs
- Membership.cs
- ConfigurationErrorsException.cs
- ColorPalette.cs
- EntityDataSourceStatementEditor.cs
- SelectedDatesCollection.cs
- StreamGeometryContext.cs
- Thread.cs
- BufferedGraphicsContext.cs
- PersonalizationStateQuery.cs
- IssuedTokenClientElement.cs
- Rectangle.cs
- DataListItemEventArgs.cs
- ChangeConflicts.cs
- TargetControlTypeAttribute.cs
- UnionExpr.cs
- UserControlAutomationPeer.cs
- ElementProxy.cs
- bindurihelper.cs
- ConstructorBuilder.cs
- CookieProtection.cs
- VideoDrawing.cs
- XmlDocumentType.cs
- SequenceFullException.cs
- ExecutionPropertyManager.cs
- VariantWrapper.cs
- MonikerHelper.cs
- FrameworkPropertyMetadata.cs
- InheritanceContextChangedEventManager.cs
- Slider.cs
- OutputWindow.cs
- WebPartRestoreVerb.cs
- GridViewSelectEventArgs.cs
- KerberosSecurityTokenAuthenticator.cs
- XamlToRtfParser.cs
- AsyncCompletedEventArgs.cs
- OdbcUtils.cs
- RoutedEventConverter.cs
- DataGridViewControlCollection.cs
- SqlClientWrapperSmiStream.cs