Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / System / Windows / Documents / TextSegment.cs / 1305600 / TextSegment.cs
//----------------------------------------------------------------------------
//
// File: TextSegment.cs
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// Description: A pair of TextPositions used to denote a run of TextContainer content.
//
//---------------------------------------------------------------------------
namespace System.Windows.Documents
{
using MS.Internal;
using System.Collections;
///
/// A pair of TextPositions used to denote a run of TextContainer content.
///
//
internal struct TextSegment
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Constructor.
///
///
/// Position preceeding the TextSegment's content.
///
///
/// Position following the TextSegment's content.
///
///
/// If startPosition or endPosition are TextNavigators (derived from
/// TextPointer), the TextSegment constructor will store new TextPointer
/// instances internally. The values returned by the Start and End
/// properties are always immutable TextPositions.
///
internal TextSegment(ITextPointer startPosition, ITextPointer endPosition) :
this(startPosition, endPosition, false)
{
}
///
/// Constructor.
///
///
/// Position preceeding the TextSegment's content.
///
///
/// Position following the TextSegment's content.
///
///
/// Whether preserves LogicalDirection of start and end positions.
///
internal TextSegment(ITextPointer startPosition, ITextPointer endPosition, bool preserveLogicalDirection)
{
ValidationHelper.VerifyPositionPair(startPosition, endPosition);
if (startPosition.CompareTo(endPosition) == 0)
{
// To preserve segment emptiness
// we use the same instance of a pointer
// for both segment ends.
_start = startPosition.GetFrozenPointer(startPosition.LogicalDirection);
_end = _start;
}
else
{
Invariant.Assert(startPosition.CompareTo(endPosition) < 0);
_start = startPosition.GetFrozenPointer(preserveLogicalDirection ? startPosition.LogicalDirection : LogicalDirection.Backward);
_end = endPosition.GetFrozenPointer(preserveLogicalDirection ? endPosition.LogicalDirection : LogicalDirection.Forward);
}
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
///
/// returns true if the segment contains a given position
///
//
internal bool Contains(ITextPointer position)
{
return (!this.IsNull && this._start.CompareTo(position) <= 0 && position.CompareTo(this._end) <= 0);
}
#endregion Internal Methods
//------------------------------------------------------
//
// Internal Properties
//
//------------------------------------------------------
#region Internal Properties
///
/// Position preceeding the TextSegment's content.
///
internal ITextPointer Start
{
get
{
return _start;
}
}
///
/// Position following the TextSegment's content.
///
internal ITextPointer End
{
get
{
return _end;
}
}
internal bool IsNull
{
get
{
return _start == null || _end == null;
}
}
#endregion Internal Properties
///
/// The "TextSegment.Null" value.
///
///
/// TextSegtemt.Null is used in contexts where text segment is missing.
///
internal static readonly TextSegment Null = new TextSegment();
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
// Position preceeding the TextSegment's content.
private readonly ITextPointer _start;
// Position following the TextSegment's content.
private readonly ITextPointer _end;
#endregion Private Fields
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
//
// File: TextSegment.cs
//
// Copyright (C) Microsoft Corporation. All rights reserved.
//
// Description: A pair of TextPositions used to denote a run of TextContainer content.
//
//---------------------------------------------------------------------------
namespace System.Windows.Documents
{
using MS.Internal;
using System.Collections;
///
/// A pair of TextPositions used to denote a run of TextContainer content.
///
//
internal struct TextSegment
{
//-----------------------------------------------------
//
// Constructors
//
//-----------------------------------------------------
#region Constructors
///
/// Constructor.
///
///
/// Position preceeding the TextSegment's content.
///
///
/// Position following the TextSegment's content.
///
///
/// If startPosition or endPosition are TextNavigators (derived from
/// TextPointer), the TextSegment constructor will store new TextPointer
/// instances internally. The values returned by the Start and End
/// properties are always immutable TextPositions.
///
internal TextSegment(ITextPointer startPosition, ITextPointer endPosition) :
this(startPosition, endPosition, false)
{
}
///
/// Constructor.
///
///
/// Position preceeding the TextSegment's content.
///
///
/// Position following the TextSegment's content.
///
///
/// Whether preserves LogicalDirection of start and end positions.
///
internal TextSegment(ITextPointer startPosition, ITextPointer endPosition, bool preserveLogicalDirection)
{
ValidationHelper.VerifyPositionPair(startPosition, endPosition);
if (startPosition.CompareTo(endPosition) == 0)
{
// To preserve segment emptiness
// we use the same instance of a pointer
// for both segment ends.
_start = startPosition.GetFrozenPointer(startPosition.LogicalDirection);
_end = _start;
}
else
{
Invariant.Assert(startPosition.CompareTo(endPosition) < 0);
_start = startPosition.GetFrozenPointer(preserveLogicalDirection ? startPosition.LogicalDirection : LogicalDirection.Backward);
_end = endPosition.GetFrozenPointer(preserveLogicalDirection ? endPosition.LogicalDirection : LogicalDirection.Forward);
}
}
#endregion Constructors
//------------------------------------------------------
//
// Internal Methods
//
//-----------------------------------------------------
#region Internal Methods
///
/// returns true if the segment contains a given position
///
//
internal bool Contains(ITextPointer position)
{
return (!this.IsNull && this._start.CompareTo(position) <= 0 && position.CompareTo(this._end) <= 0);
}
#endregion Internal Methods
//------------------------------------------------------
//
// Internal Properties
//
//------------------------------------------------------
#region Internal Properties
///
/// Position preceeding the TextSegment's content.
///
internal ITextPointer Start
{
get
{
return _start;
}
}
///
/// Position following the TextSegment's content.
///
internal ITextPointer End
{
get
{
return _end;
}
}
internal bool IsNull
{
get
{
return _start == null || _end == null;
}
}
#endregion Internal Properties
///
/// The "TextSegment.Null" value.
///
///
/// TextSegtemt.Null is used in contexts where text segment is missing.
///
internal static readonly TextSegment Null = new TextSegment();
//-----------------------------------------------------
//
// Private Fields
//
//------------------------------------------------------
#region Private Fields
// Position preceeding the TextSegment's content.
private readonly ITextPointer _start;
// Position following the TextSegment's content.
private readonly ITextPointer _end;
#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
- WebBrowserEvent.cs
- PlacementWorkspace.cs
- InputScopeAttribute.cs
- XPathSingletonIterator.cs
- UniqueIdentifierService.cs
- HtmlForm.cs
- EndpointInstanceProvider.cs
- MessageContractImporter.cs
- EntityContainerAssociationSet.cs
- ExtensionElement.cs
- RootBrowserWindow.cs
- CapiSymmetricAlgorithm.cs
- Font.cs
- FamilyCollection.cs
- ManifestResourceInfo.cs
- SqlRetyper.cs
- DelegatingConfigHost.cs
- BinaryFormatterWriter.cs
- XamlPointCollectionSerializer.cs
- ReaderWriterLockWrapper.cs
- ToolStripItem.cs
- DynamicValueConverter.cs
- OutputCacheSettingsSection.cs
- RectangleF.cs
- BuildTopDownAttribute.cs
- XmlTextReaderImplHelpers.cs
- VisualTreeUtils.cs
- DiscardableAttribute.cs
- SQLGuid.cs
- DrawingCollection.cs
- VBCodeProvider.cs
- ReadWriteSpinLock.cs
- DbConnectionStringBuilder.cs
- ExtensionSimplifierMarkupObject.cs
- UserMapPath.cs
- SystemResourceKey.cs
- ContentDisposition.cs
- MSAAEventDispatcher.cs
- Select.cs
- ProviderMetadataCachedInformation.cs
- ActivityMarkupSerializationProvider.cs
- HebrewCalendar.cs
- IdentitySection.cs
- SocketElement.cs
- URLMembershipCondition.cs
- CodeDOMUtility.cs
- JavaScriptObjectDeserializer.cs
- OletxTransactionManager.cs
- TextElementEditingBehaviorAttribute.cs
- TimelineGroup.cs
- ImmutableClientRuntime.cs
- FormatterServices.cs
- Quaternion.cs
- GestureRecognizer.cs
- TextRangeEdit.cs
- LinearGradientBrush.cs
- VerticalAlignConverter.cs
- BindingMemberInfo.cs
- MULTI_QI.cs
- X509CertificateRecipientClientCredential.cs
- VirtualizedContainerService.cs
- EFDataModelProvider.cs
- SpecialFolderEnumConverter.cs
- DragEvent.cs
- SystemColorTracker.cs
- SizeF.cs
- Html32TextWriter.cs
- ConsoleCancelEventArgs.cs
- FunctionQuery.cs
- OptimalBreakSession.cs
- EventManager.cs
- CqlLexer.cs
- ActivityCodeDomSerializationManager.cs
- DashStyles.cs
- SettingsPropertyValueCollection.cs
- FormViewPageEventArgs.cs
- Aggregates.cs
- PerformanceCountersBase.cs
- FixedHyperLink.cs
- SQLChars.cs
- FormView.cs
- BitFlagsGenerator.cs
- MsmqInputMessagePool.cs
- MethodToken.cs
- JoinSymbol.cs
- WindowsTitleBar.cs
- CacheOutputQuery.cs
- TextClipboardData.cs
- AttributeCollection.cs
- WebBrowser.cs
- LocatorManager.cs
- MultipartContentParser.cs
- WebRequestModuleElement.cs
- StretchValidation.cs
- ProcessModelSection.cs
- Rotation3D.cs
- Wildcard.cs
- COM2PictureConverter.cs
- ServiceThrottle.cs
- ConsumerConnectionPoint.cs