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, SpanVectorichVector ) { 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++) { Spanspan = _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) { SpanRiderichRider = 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, SpanVectorichVector ) { 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++) { Spanspan = _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) { SpanRiderichRider = 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
- PrimitiveType.cs
- EasingQuaternionKeyFrame.cs
- CustomCategoryAttribute.cs
- WindowClosedEventArgs.cs
- ParentUndoUnit.cs
- ClientEventManager.cs
- FixedTextContainer.cs
- IpcPort.cs
- OdbcTransaction.cs
- SafeUserTokenHandle.cs
- HyperLinkField.cs
- HandlerBase.cs
- ValidatedControlConverter.cs
- TextParaClient.cs
- UserControlBuildProvider.cs
- BufferModesCollection.cs
- WindowsNonControl.cs
- MaterialGroup.cs
- BookmarkUndoUnit.cs
- LocatorManager.cs
- UInt64Converter.cs
- MetadataCacheItem.cs
- StreamWithDictionary.cs
- InputEventArgs.cs
- ListView.cs
- SelectionPattern.cs
- Pair.cs
- GradientBrush.cs
- XmlILOptimizerVisitor.cs
- PeerPresenceInfo.cs
- PropertyGridEditorPart.cs
- KeyBinding.cs
- BulletedListEventArgs.cs
- FusionWrap.cs
- FileVersionInfo.cs
- SqlBinder.cs
- XpsViewerException.cs
- Int16Animation.cs
- CompilationRelaxations.cs
- HtmlEmptyTagControlBuilder.cs
- DataServiceProviderMethods.cs
- Rfc2898DeriveBytes.cs
- WebSysDefaultValueAttribute.cs
- brushes.cs
- ComplexPropertyEntry.cs
- PackUriHelper.cs
- ApplicationException.cs
- xmlformatgeneratorstatics.cs
- Variant.cs
- RoleManagerEventArgs.cs
- PartialCachingAttribute.cs
- PeerFlooder.cs
- BlurEffect.cs
- PTConverter.cs
- DataGridTableCollection.cs
- StylusDownEventArgs.cs
- WindowsListBox.cs
- XmlLinkedNode.cs
- BasicHttpMessageCredentialType.cs
- KeyInterop.cs
- DataGridViewCell.cs
- QueryConverter.cs
- Token.cs
- ArcSegment.cs
- SrgsDocument.cs
- XmlTextReaderImplHelpers.cs
- SettingsPropertyValueCollection.cs
- basenumberconverter.cs
- TypeDescriptionProviderAttribute.cs
- DataGridViewRowCancelEventArgs.cs
- SvcMapFileLoader.cs
- RelationHandler.cs
- FormsAuthenticationEventArgs.cs
- WindowsTab.cs
- JumpList.cs
- TypedOperationInfo.cs
- PointAnimationUsingKeyFrames.cs
- DirectionalLight.cs
- XamlSerializerUtil.cs
- WebHttpBehavior.cs
- SqlNodeAnnotation.cs
- ListViewSortEventArgs.cs
- ArgumentValueSerializer.cs
- DefaultEventAttribute.cs
- TableLayoutStyle.cs
- InputScope.cs
- BindableTemplateBuilder.cs
- ComboBoxRenderer.cs
- SiteMapHierarchicalDataSourceView.cs
- HttpModuleCollection.cs
- DataPagerFieldCollection.cs
- DataGridCellsPresenter.cs
- NextPreviousPagerField.cs
- CodeParameterDeclarationExpression.cs
- InvalidOperationException.cs
- SessionStateItemCollection.cs
- ArrayList.cs
- DataSourceControl.cs
- ToolStripGripRenderEventArgs.cs
- WbemException.cs