Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / TextFormatting / LexicalChunk.cs / 1305600 / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RightsManagementInformation.cs
- EmptyCollection.cs
- StatusBarAutomationPeer.cs
- EntitySqlQueryCacheKey.cs
- XmlSerializationWriter.cs
- Label.cs
- ResponseStream.cs
- TableRowGroup.cs
- Pair.cs
- Binding.cs
- PrimitiveType.cs
- DataGridToolTip.cs
- SwitchElementsCollection.cs
- SqlTypeConverter.cs
- CommandLibraryHelper.cs
- NameValueSectionHandler.cs
- ColumnHeader.cs
- Perspective.cs
- OneOfElement.cs
- DiagnosticSection.cs
- CompareValidator.cs
- SimpleFileLog.cs
- LoginView.cs
- Keywords.cs
- ConfigurationException.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- OpenFileDialog.cs
- MobileComponentEditorPage.cs
- ProjectionCamera.cs
- ScriptManager.cs
- ZipIOLocalFileHeader.cs
- LogArchiveSnapshot.cs
- ListItem.cs
- CustomTypeDescriptor.cs
- NavigateEvent.cs
- ChtmlTextWriter.cs
- CodePageEncoding.cs
- TransactionTable.cs
- DataGridViewRowCancelEventArgs.cs
- StateItem.cs
- MLangCodePageEncoding.cs
- MailHeaderInfo.cs
- WindowsHyperlink.cs
- TableColumn.cs
- UIElementIsland.cs
- TcpTransportManager.cs
- IWorkflowDebuggerService.cs
- Span.cs
- MetadataAssemblyHelper.cs
- _ListenerAsyncResult.cs
- WindowsListViewItemCheckBox.cs
- OperatingSystem.cs
- UInt16Converter.cs
- DebugControllerThread.cs
- NetCodeGroup.cs
- DataGridItemCollection.cs
- SymmetricKey.cs
- ColumnResult.cs
- Help.cs
- NativeBuffer.cs
- SoapObjectWriter.cs
- Schema.cs
- SchemaMapping.cs
- X500Name.cs
- Utils.cs
- graph.cs
- SerializationStore.cs
- DataPagerFieldCollection.cs
- SchemaNamespaceManager.cs
- FormsAuthentication.cs
- ScriptBehaviorDescriptor.cs
- ToolboxItemSnapLineBehavior.cs
- Rotation3D.cs
- EndPoint.cs
- CodeGeneratorOptions.cs
- ObjectQuery.cs
- XmlSchemaAll.cs
- LambdaCompiler.ControlFlow.cs
- DetailsViewModeEventArgs.cs
- EntityDataSourceContainerNameConverter.cs
- CqlWriter.cs
- BaseUriHelper.cs
- TextEditorSelection.cs
- ConstructorBuilder.cs
- ConnectionStringsExpressionBuilder.cs
- RefreshEventArgs.cs
- GrammarBuilderBase.cs
- XmlDataDocument.cs
- TreeViewItem.cs
- ParseChildrenAsPropertiesAttribute.cs
- MachineKeySection.cs
- ScopeCompiler.cs
- UrlAuthFailureHandler.cs
- ExeContext.cs
- TextReader.cs
- SqlNamer.cs
- SqlEnums.cs
- DrawingServices.cs
- RectangleHotSpot.cs
- TextControlDesigner.cs