Code:
/ 4.0 / 4.0 / 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, 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
- SizeChangedInfo.cs
- DocumentPage.cs
- SpellerError.cs
- XamlReader.cs
- InProcStateClientManager.cs
- EntityContainerEntitySet.cs
- UdpTransportSettings.cs
- WsiProfilesElementCollection.cs
- _BufferOffsetSize.cs
- MarshalByValueComponent.cs
- QueryAccessibilityHelpEvent.cs
- HitTestDrawingContextWalker.cs
- PropertyGridEditorPart.cs
- CorePropertiesFilter.cs
- CachedTypeface.cs
- ValidateNames.cs
- InputProcessorProfiles.cs
- DrawingAttributesDefaultValueFactory.cs
- EventLogTraceListener.cs
- PageCatalogPart.cs
- ControlCachePolicy.cs
- ContentOnlyMessage.cs
- XmlRawWriter.cs
- ACE.cs
- DrawItemEvent.cs
- SizeFConverter.cs
- EncodingStreamWrapper.cs
- CryptoStream.cs
- PanelDesigner.cs
- AdPostCacheSubstitution.cs
- AggregateNode.cs
- ComponentEvent.cs
- ScrollViewer.cs
- InkPresenterAutomationPeer.cs
- XPathEmptyIterator.cs
- CultureSpecificStringDictionary.cs
- CookieParameter.cs
- UnhandledExceptionEventArgs.cs
- Exception.cs
- RequestCachePolicyConverter.cs
- ServiceTimeoutsElement.cs
- Monitor.cs
- MemberBinding.cs
- DynamicResourceExtension.cs
- SocketException.cs
- WebReferencesBuildProvider.cs
- ValidationError.cs
- ItemsChangedEventArgs.cs
- TableLayoutSettings.cs
- DrawListViewSubItemEventArgs.cs
- ServiceDescriptionContext.cs
- VariableAction.cs
- ApplicationManager.cs
- XmlSchemaCompilationSettings.cs
- LineMetrics.cs
- MouseGestureValueSerializer.cs
- XmlSchemaAnnotation.cs
- ProgressBar.cs
- ApplicationInfo.cs
- ServiceHttpHandlerFactory.cs
- HtmlLink.cs
- ObjectConverter.cs
- ProfileSection.cs
- TypeReference.cs
- GridViewColumnCollection.cs
- DbTypeMap.cs
- HttpException.cs
- RemoteWebConfigurationHost.cs
- XPathDescendantIterator.cs
- CompositeDataBoundControl.cs
- DataGridCellsPresenter.cs
- sqlser.cs
- PaperSource.cs
- IdnMapping.cs
- OutputScope.cs
- BookmarkManager.cs
- DllNotFoundException.cs
- EventProviderBase.cs
- HtmlInputText.cs
- TraceEventCache.cs
- FtpWebResponse.cs
- lengthconverter.cs
- ButtonFieldBase.cs
- ThreadInterruptedException.cs
- BasicAsyncResult.cs
- Missing.cs
- HttpRequestCacheValidator.cs
- Journaling.cs
- TextHidden.cs
- WindowsStatusBar.cs
- ByteRangeDownloader.cs
- ManagementPath.cs
- ApplicationHost.cs
- DataGridViewCellConverter.cs
- BamlBinaryReader.cs
- DataBoundControlAdapter.cs
- ImpersonationContext.cs
- GcHandle.cs
- DayRenderEvent.cs
- ViewStateException.cs