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
- DataMemberFieldConverter.cs
- CultureInfoConverter.cs
- FileIOPermission.cs
- EventItfInfo.cs
- XsdDuration.cs
- SpeechAudioFormatInfo.cs
- DesignTimeType.cs
- Paragraph.cs
- DataGridViewCellMouseEventArgs.cs
- SQLByteStorage.cs
- CompressStream.cs
- BitmapEffectInputConnector.cs
- TypeConverter.cs
- Math.cs
- OleDbParameterCollection.cs
- WorkflowApplicationAbortedException.cs
- CompiledWorkflowDefinitionContext.cs
- TextRangeEdit.cs
- OrderPreservingMergeHelper.cs
- FormViewPagerRow.cs
- safesecurityhelperavalon.cs
- StringArrayConverter.cs
- ModelItemExtensions.cs
- Cursor.cs
- MasterPageParser.cs
- ReachPrintTicketSerializerAsync.cs
- PrimitiveCodeDomSerializer.cs
- IRCollection.cs
- EntitySqlException.cs
- XmlSchemaNotation.cs
- RemotingSurrogateSelector.cs
- PolicyManager.cs
- AlignmentYValidation.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- HttpFileCollection.cs
- OverrideMode.cs
- BamlResourceContent.cs
- UTF7Encoding.cs
- TrackBar.cs
- XmlParser.cs
- ChtmlPhoneCallAdapter.cs
- ComponentManagerBroker.cs
- ResolveNameEventArgs.cs
- AxParameterData.cs
- LineGeometry.cs
- XmlSchemaSimpleType.cs
- Pair.cs
- NetMsmqBindingElement.cs
- StringHandle.cs
- Cursors.cs
- DataBindEngine.cs
- TransportSecurityProtocolFactory.cs
- PropertyPath.cs
- PageStatePersister.cs
- SyndicationSerializer.cs
- _TLSstream.cs
- SectionVisual.cs
- ConvertersCollection.cs
- ActivityExecutor.cs
- PngBitmapDecoder.cs
- PropertyKey.cs
- BaseValidator.cs
- OleDbPermission.cs
- InstanceDataCollection.cs
- MsmqBindingFilter.cs
- AdapterSwitches.cs
- WindowsTitleBar.cs
- XmlILOptimizerVisitor.cs
- XsltArgumentList.cs
- JulianCalendar.cs
- TabRenderer.cs
- SoapAttributeAttribute.cs
- KoreanCalendar.cs
- LightweightCodeGenerator.cs
- WindowsListViewItemCheckBox.cs
- CompModSwitches.cs
- SecurityPermission.cs
- DataGridViewDataErrorEventArgs.cs
- DataGridSortCommandEventArgs.cs
- XPathScanner.cs
- XmlSchemaAnyAttribute.cs
- ScopeCollection.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- SslStream.cs
- ClassGenerator.cs
- ObjectRef.cs
- XNodeNavigator.cs
- TileModeValidation.cs
- Subtree.cs
- SiteOfOriginPart.cs
- SHA512Managed.cs
- DeflateEmulationStream.cs
- AutomationProperties.cs
- EtwTrace.cs
- WorkflowRuntimeService.cs
- WebPartUserCapability.cs
- SystemWebExtensionsSectionGroup.cs
- OleDbConnectionInternal.cs
- TraceSwitch.cs
- EntityDataSourceSelectingEventArgs.cs