Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- Vars.cs
- SR.cs
- SchemaCompiler.cs
- MultiAsyncResult.cs
- ListViewCommandEventArgs.cs
- UidManager.cs
- WebScriptEnablingElement.cs
- RelationshipWrapper.cs
- WindowClosedEventArgs.cs
- ToolStripPanelRenderEventArgs.cs
- X509AsymmetricSecurityKey.cs
- KoreanCalendar.cs
- connectionpool.cs
- CookieParameter.cs
- ImageDrawing.cs
- InvalidCastException.cs
- GridViewCellAutomationPeer.cs
- QuarticEase.cs
- CqlParserHelpers.cs
- HttpModuleCollection.cs
- DesignTimeVisibleAttribute.cs
- WebServicesInteroperability.cs
- StrongName.cs
- StylusTip.cs
- PerformanceCounterLib.cs
- WebProxyScriptElement.cs
- Matrix3D.cs
- SeekableReadStream.cs
- ObjectTypeMapping.cs
- ProjectionPlan.cs
- FileSystemWatcher.cs
- UnsafeNativeMethods.cs
- MaskDesignerDialog.cs
- PenCursorManager.cs
- Effect.cs
- ListViewPagedDataSource.cs
- XPathItem.cs
- NavigatorInvalidBodyAccessException.cs
- PerfCounters.cs
- CodeTypeReferenceCollection.cs
- EmissiveMaterial.cs
- FontConverter.cs
- Transform3DCollection.cs
- ProxyHelper.cs
- OAVariantLib.cs
- CategoryGridEntry.cs
- DesignTimeXamlWriter.cs
- ImplicitInputBrush.cs
- MessageDescription.cs
- Msmq4SubqueuePoisonHandler.cs
- OdbcStatementHandle.cs
- FusionWrap.cs
- WebPartVerbsEventArgs.cs
- MasterPageParser.cs
- DesignBindingEditor.cs
- AbsoluteQuery.cs
- TypeDelegator.cs
- Container.cs
- SafeCryptContextHandle.cs
- PolyBezierSegment.cs
- DataContext.cs
- CheckoutException.cs
- SafeCryptHandles.cs
- mediaclock.cs
- EdmToObjectNamespaceMap.cs
- Scripts.cs
- KoreanLunisolarCalendar.cs
- DiscreteKeyFrames.cs
- PropertyChangeTracker.cs
- UInt32Storage.cs
- ScrollChangedEventArgs.cs
- StorageRoot.cs
- HttpHandlersSection.cs
- Rectangle.cs
- UnmanagedBitmapWrapper.cs
- EdmProperty.cs
- ConfigurationErrorsException.cs
- TableItemPatternIdentifiers.cs
- MessageQueueConverter.cs
- DataSourceDescriptorCollection.cs
- NumericPagerField.cs
- CheckStoreFileValidityRequest.cs
- XmlElementAttribute.cs
- HtmlInputHidden.cs
- Transactions.cs
- invalidudtexception.cs
- AuthorizationRule.cs
- WebColorConverter.cs
- SecurityRuntime.cs
- TextServicesPropertyRanges.cs
- CustomSignedXml.cs
- PasswordBoxAutomationPeer.cs
- XPathPatternParser.cs
- IdSpace.cs
- SafeReversePInvokeHandle.cs
- AccessDataSourceView.cs
- PortCache.cs
- Matrix3DStack.cs
- propertytag.cs
- QilLiteral.cs