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
- TypeValidationEventArgs.cs
- BamlLocalizabilityResolver.cs
- SpeechSeg.cs
- XNodeValidator.cs
- DataGridViewDataErrorEventArgs.cs
- PeerDefaultCustomResolverClient.cs
- CustomExpression.cs
- SplineKeyFrames.cs
- _StreamFramer.cs
- ServiceObjectContainer.cs
- basenumberconverter.cs
- ProcessManager.cs
- DefaultTextStore.cs
- ClientSideProviderDescription.cs
- SourceFileBuildProvider.cs
- OleDbErrorCollection.cs
- Literal.cs
- SoapExtension.cs
- ExpressionNode.cs
- _TimerThread.cs
- DataGridViewSelectedRowCollection.cs
- PermissionToken.cs
- IndependentAnimationStorage.cs
- ActivatableWorkflowsQueryResult.cs
- ParallelQuery.cs
- TextSelectionProcessor.cs
- ToolStripSplitStackLayout.cs
- SqlProviderUtilities.cs
- PasswordRecovery.cs
- DataSvcMapFile.cs
- JsonSerializer.cs
- HttpCookiesSection.cs
- SafeProcessHandle.cs
- ValidationVisibilityAttribute.cs
- DES.cs
- FontFamily.cs
- HwndTarget.cs
- QueryAccessibilityHelpEvent.cs
- DocumentAutomationPeer.cs
- ToolboxItemFilterAttribute.cs
- EmptyElement.cs
- PeerApplication.cs
- HtmlTableCellCollection.cs
- PiiTraceSource.cs
- ConfigXmlElement.cs
- Partitioner.cs
- CollectionBuilder.cs
- AssemblyCacheEntry.cs
- Italic.cs
- CheckoutException.cs
- EventProperty.cs
- RankException.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- ReservationNotFoundException.cs
- CompilerErrorCollection.cs
- TcpClientChannel.cs
- GeneralTransform3DGroup.cs
- WinHttpWebProxyFinder.cs
- NativeMethodsCLR.cs
- NumberFormatter.cs
- ActivityCodeDomReferenceService.cs
- PrefixHandle.cs
- KeyboardDevice.cs
- ScriptModule.cs
- DataGridViewSortCompareEventArgs.cs
- ToolboxItemFilterAttribute.cs
- SafeIUnknown.cs
- DeflateInput.cs
- StylusButton.cs
- ListChunk.cs
- Native.cs
- PropertyValueEditor.cs
- ApplicationInterop.cs
- TemplateBindingExpression.cs
- MimeMapping.cs
- DBDataPermissionAttribute.cs
- SeekStoryboard.cs
- ProtocolsConfigurationHandler.cs
- Pointer.cs
- AcceleratedTokenProviderState.cs
- FixedSOMLineRanges.cs
- BufferedGraphicsContext.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- ValidationSummary.cs
- SerTrace.cs
- DBSqlParserTableCollection.cs
- EmptyReadOnlyDictionaryInternal.cs
- NamedElement.cs
- AttachedPropertyBrowsableAttribute.cs
- WebBrowser.cs
- InternalCache.cs
- QilSortKey.cs
- WindowsGraphicsCacheManager.cs
- DataControlLinkButton.cs
- PackWebRequestFactory.cs
- WindowPattern.cs
- HttpWebRequestElement.cs
- GlobalAllocSafeHandle.cs
- PasswordPropertyTextAttribute.cs
- PropertyKey.cs