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
- NumericUpDown.cs
- COM2PropertyPageUITypeConverter.cs
- EntityDataSourceContextCreatedEventArgs.cs
- UniqueConstraint.cs
- Invariant.cs
- XsltContext.cs
- FileCodeGroup.cs
- ExpandCollapsePattern.cs
- DataGridViewRowHeaderCell.cs
- WrapPanel.cs
- GlobalAllocSafeHandle.cs
- SmtpClient.cs
- HandlerBase.cs
- TemplateInstanceAttribute.cs
- MsmqTransportReceiveParameters.cs
- CompModSwitches.cs
- Win32MouseDevice.cs
- PagesSection.cs
- SafePipeHandle.cs
- WeakReferenceEnumerator.cs
- ListSourceHelper.cs
- PathFigure.cs
- ServiceReference.cs
- NotifyInputEventArgs.cs
- ExtensionWindow.cs
- Registry.cs
- XmlWriterSettings.cs
- BitHelper.cs
- WebPartMovingEventArgs.cs
- ModelItemExtensions.cs
- ObjectSpanRewriter.cs
- Event.cs
- OptionalMessageQuery.cs
- MobileControlsSectionHandler.cs
- Misc.cs
- NativeMethods.cs
- AspNetCacheProfileAttribute.cs
- WindowsGraphicsWrapper.cs
- DataGridCellAutomationPeer.cs
- DoubleAnimationClockResource.cs
- ProgramNode.cs
- SafeArrayRankMismatchException.cs
- NameValuePermission.cs
- ObjectSecurity.cs
- CompressedStack.cs
- Tuple.cs
- ObjectResult.cs
- DataObject.cs
- SafeNativeMethods.cs
- ContentPresenter.cs
- PositiveTimeSpanValidator.cs
- Helpers.cs
- XmlSiteMapProvider.cs
- ModelUIElement3D.cs
- HtmlMobileTextWriter.cs
- ButtonBase.cs
- SelectorItemAutomationPeer.cs
- Queue.cs
- FrameworkTextComposition.cs
- wmiprovider.cs
- Polygon.cs
- NamespaceQuery.cs
- MulticastNotSupportedException.cs
- EncodingDataItem.cs
- ContainsRowNumberChecker.cs
- DataRowCollection.cs
- SmiContext.cs
- FloaterParaClient.cs
- TemplateColumn.cs
- BindingManagerDataErrorEventArgs.cs
- FormViewUpdatedEventArgs.cs
- Win32SafeHandles.cs
- AbstractSvcMapFileLoader.cs
- DnsPermission.cs
- InstanceDataCollectionCollection.cs
- SerialPinChanges.cs
- CodeTypeReference.cs
- ListViewUpdatedEventArgs.cs
- SqlNamer.cs
- FolderBrowserDialog.cs
- XPathQilFactory.cs
- MessageQueuePermissionEntry.cs
- EncryptedXml.cs
- Registry.cs
- SqlCommandSet.cs
- ConnectionPoolManager.cs
- LinqDataSourceHelper.cs
- mactripleDES.cs
- UserNameSecurityTokenProvider.cs
- WebCategoryAttribute.cs
- StatusBarDrawItemEvent.cs
- SQLSingle.cs
- ResourcePermissionBase.cs
- HttpHandlerActionCollection.cs
- ReflectionUtil.cs
- MailHeaderInfo.cs
- FacetValueContainer.cs
- SmiEventSink_Default.cs
- FilterException.cs
- PartBasedPackageProperties.cs