Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / MS / Internal / TextFormatting / LexicalChunk.cs / 1 / LexicalChunk.cs
//------------------------------------------------------------------------
//
// Microsoft Windows Client Platform
// Copyright (C) Microsoft Corporation
//
// File: LexicalChunk.cs
//
// Contents: Lexical chunk represents the character analysis of a piece of raw character string.
//
// Created: 6-13-2005 Worachai Chaoweeraprasit (wchao)
//
//-----------------------------------------------------------------------
using System;
using System.Windows.Media.TextFormatting;
using MS.Internal.Generic;
namespace MS.Internal.TextFormatting
{
///
/// Lexical chunk represents the character analysis of a piece of raw character string.
/// It contains the analyzing result of the string by the lexical services component i.e.
/// word-breaker or hyphenator or both.
///
/// The number of character indices represented by a chunk may not map exactly to the same number
/// of LSCP in the LS character position space. This is because two adjacent character indices in
/// a chunk may be mapped by two non-adjacent LSCP in the LS positions. Between two LSRun could
/// exist a hidden-run which occupies real LSCP but represents no actual displayable character.
///
/// The mapping between the character offsets and the offsets to the correspondent LSCP is retained
/// in a span vector that is indexed by the character offsets.
///
internal struct LexicalChunk
{
private TextLexicalBreaks _breaks; // lexical breaks of chunk characters
private SpanVector _ichVector; // spans of offsets to the ich-correspondence LSCP
internal TextLexicalBreaks Breaks
{
get { return _breaks; }
}
///
/// Boolean value indicates whether this chunk contains no valid break info
///
internal bool IsNoBreak
{
get { return _breaks == null; }
}
///
/// Contruct lexical chunk from character analysis
///
internal LexicalChunk(
TextLexicalBreaks breaks,
SpanVector ichVector
)
{
Invariant.Assert(breaks != null);
_breaks = breaks;
_ichVector = ichVector;
}
///
/// Convert the specified LSCP to character index
///
internal int LSCPToCharacterIndex(int lsdcp)
{
if (_ichVector.Count > 0)
{
int ich = 0;
int cchLast = 0;
int lsdcpLast = 0;
for (int i = 0; i < _ichVector.Count; i++)
{
Span span = _ichVector[i];
int lsdcpCurrent = span.Value;
if (lsdcpCurrent > lsdcp)
{
return ich - cchLast + Math.Min(cchLast, lsdcp - lsdcpLast);
}
ich += span.Length;
cchLast = span.Length;
lsdcpLast = lsdcpCurrent;
}
return ich - cchLast + Math.Min(cchLast, lsdcp - lsdcpLast);
}
return lsdcp;
}
///
/// Convert the specified character index to LSCP
///
internal int CharacterIndexToLSCP(int ich)
{
if (_ichVector.Count > 0)
{
SpanRider ichRider = new SpanRider(_ichVector);
ichRider.At(ich);
return ichRider.CurrentValue + ich - ichRider.CurrentSpanStart;
}
return ich;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------
//
// Microsoft Windows Client Platform
// Copyright (C) Microsoft Corporation
//
// File: LexicalChunk.cs
//
// Contents: Lexical chunk represents the character analysis of a piece of raw character string.
//
// Created: 6-13-2005 Worachai Chaoweeraprasit (wchao)
//
//-----------------------------------------------------------------------
using System;
using System.Windows.Media.TextFormatting;
using MS.Internal.Generic;
namespace MS.Internal.TextFormatting
{
///
/// Lexical chunk represents the character analysis of a piece of raw character string.
/// It contains the analyzing result of the string by the lexical services component i.e.
/// word-breaker or hyphenator or both.
///
/// The number of character indices represented by a chunk may not map exactly to the same number
/// of LSCP in the LS character position space. This is because two adjacent character indices in
/// a chunk may be mapped by two non-adjacent LSCP in the LS positions. Between two LSRun could
/// exist a hidden-run which occupies real LSCP but represents no actual displayable character.
///
/// The mapping between the character offsets and the offsets to the correspondent LSCP is retained
/// in a span vector that is indexed by the character offsets.
///
internal struct LexicalChunk
{
private TextLexicalBreaks _breaks; // lexical breaks of chunk characters
private SpanVector _ichVector; // spans of offsets to the ich-correspondence LSCP
internal TextLexicalBreaks Breaks
{
get { return _breaks; }
}
///
/// Boolean value indicates whether this chunk contains no valid break info
///
internal bool IsNoBreak
{
get { return _breaks == null; }
}
///
/// Contruct lexical chunk from character analysis
///
internal LexicalChunk(
TextLexicalBreaks breaks,
SpanVector ichVector
)
{
Invariant.Assert(breaks != null);
_breaks = breaks;
_ichVector = ichVector;
}
///
/// Convert the specified LSCP to character index
///
internal int LSCPToCharacterIndex(int lsdcp)
{
if (_ichVector.Count > 0)
{
int ich = 0;
int cchLast = 0;
int lsdcpLast = 0;
for (int i = 0; i < _ichVector.Count; i++)
{
Span span = _ichVector[i];
int lsdcpCurrent = span.Value;
if (lsdcpCurrent > lsdcp)
{
return ich - cchLast + Math.Min(cchLast, lsdcp - lsdcpLast);
}
ich += span.Length;
cchLast = span.Length;
lsdcpLast = lsdcpCurrent;
}
return ich - cchLast + Math.Min(cchLast, lsdcp - lsdcpLast);
}
return lsdcp;
}
///
/// Convert the specified character index to LSCP
///
internal int CharacterIndexToLSCP(int ich)
{
if (_ichVector.Count > 0)
{
SpanRider ichRider = new SpanRider(_ichVector);
ichRider.At(ich);
return ichRider.CurrentValue + ich - ichRider.CurrentSpanStart;
}
return ich;
}
}
}
// 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
- EncryptedPackage.cs
- ReferenceService.cs
- SecUtil.cs
- InternalTypeHelper.cs
- WebPartAddingEventArgs.cs
- EmptyStringExpandableObjectConverter.cs
- Site.cs
- CTreeGenerator.cs
- UnsafeMethods.cs
- CoTaskMemSafeHandle.cs
- SmtpException.cs
- XmlRawWriterWrapper.cs
- ValidationResult.cs
- SoapInteropTypes.cs
- CheckPair.cs
- BitmapEffectGeneralTransform.cs
- RayMeshGeometry3DHitTestResult.cs
- SByte.cs
- LookupNode.cs
- VirtualPathProvider.cs
- HtmlControl.cs
- FtpWebResponse.cs
- CompilationRelaxations.cs
- DataSourceSelectArguments.cs
- EventLogger.cs
- handlecollector.cs
- SHA512CryptoServiceProvider.cs
- xmlformatgeneratorstatics.cs
- ListBoxChrome.cs
- StateRuntime.cs
- IISUnsafeMethods.cs
- PathStreamGeometryContext.cs
- Duration.cs
- SourceSwitch.cs
- ProfileGroupSettingsCollection.cs
- AnyReturnReader.cs
- EventMappingSettingsCollection.cs
- SByteStorage.cs
- CodeDirectionExpression.cs
- EqualityComparer.cs
- TrackingProfileDeserializationException.cs
- ToolStripControlHost.cs
- OrderByBuilder.cs
- WebPartsPersonalization.cs
- Control.cs
- XmlDocumentType.cs
- TrustSection.cs
- CompoundFileIOPermission.cs
- SchemaImporterExtension.cs
- CompoundFileStreamReference.cs
- ModuleElement.cs
- SQLSingleStorage.cs
- ZipFileInfo.cs
- NativeMethods.cs
- LineGeometry.cs
- SecurityTokenRequirement.cs
- WebPartCancelEventArgs.cs
- ForwardPositionQuery.cs
- XmlSchemaSimpleType.cs
- Decorator.cs
- VisualProxy.cs
- prompt.cs
- CollectionViewGroupInternal.cs
- Line.cs
- DesignerPerfEventProvider.cs
- DirectionalLight.cs
- TimeSpanParse.cs
- NegotiateStream.cs
- DbTransaction.cs
- diagnosticsswitches.cs
- RoleManagerEventArgs.cs
- PostBackTrigger.cs
- _ScatterGatherBuffers.cs
- MouseEventArgs.cs
- CqlLexerHelpers.cs
- MultiPropertyDescriptorGridEntry.cs
- mediaeventargs.cs
- NestedContainer.cs
- GuidTagList.cs
- RegexCompilationInfo.cs
- WorkflowDebuggerSteppingAttribute.cs
- EastAsianLunisolarCalendar.cs
- TrailingSpaceComparer.cs
- DiscoveryMessageSequenceCD1.cs
- BindingValueChangedEventArgs.cs
- FeatureSupport.cs
- PointAnimation.cs
- DispatcherHookEventArgs.cs
- _SslStream.cs
- CodeMemberField.cs
- NoClickablePointException.cs
- FixedPage.cs
- SqlGatherConsumedAliases.cs
- MultilineStringConverter.cs
- PeerCollaboration.cs
- QuaternionRotation3D.cs
- SortDescription.cs
- DateTimeOffsetConverter.cs
- HScrollBar.cs
- ProfilePropertySettingsCollection.cs