Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- TypeKeyValue.cs
- TrackingWorkflowEventArgs.cs
- EntityDesignerUtils.cs
- BitmapEffectDrawingContextWalker.cs
- ZoneButton.cs
- WebZone.cs
- ImageSourceValueSerializer.cs
- EntityContainerRelationshipSet.cs
- XPathScanner.cs
- ObjectDataSourceMethodEventArgs.cs
- DesignerLoader.cs
- JobStaple.cs
- Operator.cs
- TreeNodeStyleCollection.cs
- EllipseGeometry.cs
- MessagePartSpecification.cs
- AsyncPostBackErrorEventArgs.cs
- ConnectionStringsExpressionBuilder.cs
- BreakSafeBase.cs
- DataGridCaption.cs
- ViewGenResults.cs
- PublishLicense.cs
- LockedActivityGlyph.cs
- Menu.cs
- RSAPKCS1SignatureFormatter.cs
- EntityContainerRelationshipSetEnd.cs
- PieceDirectory.cs
- XpsDigitalSignature.cs
- BevelBitmapEffect.cs
- BaseResourcesBuildProvider.cs
- PrimitiveType.cs
- BitmapEffectDrawingContent.cs
- HashAlgorithm.cs
- Panel.cs
- ResourceLoader.cs
- DbConnectionPoolCounters.cs
- DataTablePropertyDescriptor.cs
- WindowsListViewGroup.cs
- RelationshipEndCollection.cs
- Int32CollectionConverter.cs
- mil_sdk_version.cs
- FrugalList.cs
- ExtentKey.cs
- CodeCommentStatement.cs
- CodeDefaultValueExpression.cs
- PropertyCondition.cs
- EncoderExceptionFallback.cs
- WebPartEditVerb.cs
- compensatingcollection.cs
- ConfigurationPropertyCollection.cs
- ResourceSet.cs
- ServiceHttpHandlerFactory.cs
- BitArray.cs
- ChangeConflicts.cs
- CustomAttribute.cs
- ResourceDisplayNameAttribute.cs
- xmlfixedPageInfo.cs
- HttpContextWrapper.cs
- DisableDpiAwarenessAttribute.cs
- Util.cs
- CoreSwitches.cs
- ComponentCodeDomSerializer.cs
- HtmlInputReset.cs
- ObjectDataSourceMethodEventArgs.cs
- IisTraceListener.cs
- NGCSerializationManager.cs
- QilTargetType.cs
- SchemaObjectWriter.cs
- TdsParameterSetter.cs
- DataServiceQueryOfT.cs
- FormsAuthenticationUserCollection.cs
- DataGridViewCheckBoxCell.cs
- XmlComplianceUtil.cs
- ThemeDirectoryCompiler.cs
- RadioButtonList.cs
- EventMap.cs
- SocketCache.cs
- BatchStream.cs
- TextElementEnumerator.cs
- DataGridTablesFactory.cs
- KeysConverter.cs
- ServiceEndpoint.cs
- HiddenField.cs
- MiniMapControl.xaml.cs
- HtmlDocument.cs
- KeyGestureConverter.cs
- ListViewItemMouseHoverEvent.cs
- IpcClientChannel.cs
- CurrentChangingEventArgs.cs
- mda.cs
- DbProviderFactory.cs
- SystemKeyConverter.cs
- TargetParameterCountException.cs
- Decimal.cs
- Menu.cs
- BindValidator.cs
- ManagementPath.cs
- NumberSubstitution.cs
- ReceiveSecurityHeaderElementManager.cs
- Region.cs