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
- ExtractCollection.cs
- SafeViewOfFileHandle.cs
- WsdlContractConversionContext.cs
- UnorderedHashRepartitionStream.cs
- Trigger.cs
- DependencyObjectPropertyDescriptor.cs
- ObjectComplexPropertyMapping.cs
- ZipIOLocalFileHeader.cs
- DataBindingExpressionBuilder.cs
- SystemFonts.cs
- TerminatorSinks.cs
- SapiAttributeParser.cs
- SettingsPropertyIsReadOnlyException.cs
- AmbiguousMatchException.cs
- ActiveXContainer.cs
- XsltCompileContext.cs
- Soap12ProtocolImporter.cs
- ClientConfigPaths.cs
- EntityContainerRelationshipSet.cs
- MD5CryptoServiceProvider.cs
- XmlUTF8TextReader.cs
- XPathPatternParser.cs
- Mouse.cs
- ProjectionQueryOptionExpression.cs
- BaseComponentEditor.cs
- ModelVisual3D.cs
- TabControlAutomationPeer.cs
- MenuCommandsChangedEventArgs.cs
- FrameworkRichTextComposition.cs
- ProgressPage.cs
- TypeConverterBase.cs
- ProjectedWrapper.cs
- ReverseQueryOperator.cs
- BindingContext.cs
- BinaryParser.cs
- SafeHandles.cs
- InsufficientExecutionStackException.cs
- ObjectHandle.cs
- CodeAttributeDeclarationCollection.cs
- WindowsComboBox.cs
- Graphics.cs
- Boolean.cs
- VSWCFServiceContractGenerator.cs
- PropertyRecord.cs
- EntityClientCacheKey.cs
- JsonSerializer.cs
- PolyLineSegment.cs
- ProxyDataContractResolver.cs
- WindowsImpersonationContext.cs
- FloaterParaClient.cs
- TransformProviderWrapper.cs
- LostFocusEventManager.cs
- QueueNameHelper.cs
- UnsafeNativeMethods.cs
- ResizeGrip.cs
- FloatUtil.cs
- AutoGeneratedField.cs
- FixedFlowMap.cs
- PageThemeCodeDomTreeGenerator.cs
- FormView.cs
- RelatedPropertyManager.cs
- BufferBuilder.cs
- DataGridViewAdvancedBorderStyle.cs
- CodeIterationStatement.cs
- EntitySetDataBindingList.cs
- DbConnectionClosed.cs
- DocumentSequence.cs
- BamlResourceSerializer.cs
- wmiprovider.cs
- OdbcCommand.cs
- StretchValidation.cs
- TagPrefixAttribute.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- XmlCollation.cs
- CachedPathData.cs
- RenderTargetBitmap.cs
- Selection.cs
- ConsumerConnectionPointCollection.cs
- SpecialTypeDataContract.cs
- ProcessModelSection.cs
- SystemColors.cs
- CqlLexer.cs
- TextEffect.cs
- StringStorage.cs
- ScriptManagerProxy.cs
- ObjectPersistData.cs
- TrueReadOnlyCollection.cs
- WaitHandleCannotBeOpenedException.cs
- TypedLocationWrapper.cs
- HtmlButton.cs
- TreeNode.cs
- XmlArrayItemAttributes.cs
- MessagePartDescription.cs
- ParameterToken.cs
- sqlser.cs
- DynamicArgumentDesigner.xaml.cs
- _OverlappedAsyncResult.cs
- HttpFileCollection.cs
- GradientBrush.cs
- safesecurityhelperavalon.cs