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
- PropertyChangeTracker.cs
- HttpCapabilitiesEvaluator.cs
- SQLDateTime.cs
- TableRowGroup.cs
- StateBag.cs
- ControlBuilderAttribute.cs
- EnvelopeVersion.cs
- DeviceSpecificDesigner.cs
- SizeChangedInfo.cs
- AttributeCollection.cs
- DeflateStream.cs
- ImageAnimator.cs
- WebScriptEnablingBehavior.cs
- TextParentUndoUnit.cs
- DocumentSchemaValidator.cs
- Transform3DGroup.cs
- ImageListDesigner.cs
- ProtocolsSection.cs
- IIS7WorkerRequest.cs
- PropertyPushdownHelper.cs
- Thread.cs
- ContextProperty.cs
- RoutedEventArgs.cs
- PersistenceMetadataNamespace.cs
- GeometryHitTestResult.cs
- CellTreeNode.cs
- RowBinding.cs
- TripleDESCryptoServiceProvider.cs
- TableTextElementCollectionInternal.cs
- ListViewDeleteEventArgs.cs
- SchemaImporter.cs
- SessionStateSection.cs
- DbProviderSpecificTypePropertyAttribute.cs
- HttpListenerContext.cs
- AttachedAnnotationChangedEventArgs.cs
- XmlNavigatorStack.cs
- RegexBoyerMoore.cs
- ConnectionManagementElement.cs
- BulletChrome.cs
- DeleteIndexBinder.cs
- SystemParameters.cs
- DataControlField.cs
- ExceptionUtil.cs
- ApplicationProxyInternal.cs
- SplineQuaternionKeyFrame.cs
- ObjectDataSourceEventArgs.cs
- ReadWriteObjectLock.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- DataControlImageButton.cs
- ThreadExceptionDialog.cs
- HMAC.cs
- TemplateParser.cs
- AppDomainAttributes.cs
- Helper.cs
- WebResourceUtil.cs
- XmlElementList.cs
- LinearQuaternionKeyFrame.cs
- ActivityDesignerLayoutSerializers.cs
- TracingConnectionInitiator.cs
- CriticalFinalizerObject.cs
- TransformerConfigurationWizardBase.cs
- AsynchronousChannel.cs
- MobileErrorInfo.cs
- RepeaterItem.cs
- JpegBitmapEncoder.cs
- SerTrace.cs
- HttpProtocolReflector.cs
- WebPartsPersonalizationAuthorization.cs
- System.Data.OracleClient_BID.cs
- EditorBrowsableAttribute.cs
- ByteStream.cs
- LocationSectionRecord.cs
- AutoScrollHelper.cs
- TextRunCache.cs
- InstanceData.cs
- NullableConverter.cs
- ToolstripProfessionalRenderer.cs
- ManualResetEventSlim.cs
- FileLoadException.cs
- PointLight.cs
- CodeEntryPointMethod.cs
- TextDecorationCollection.cs
- Pair.cs
- FillErrorEventArgs.cs
- FontStretch.cs
- DoubleStorage.cs
- XhtmlBasicTextViewAdapter.cs
- CryptoHelper.cs
- ImageConverter.cs
- CommandBinding.cs
- JsonFormatMapping.cs
- SpinLock.cs
- PropertyValueUIItem.cs
- Image.cs
- DriveNotFoundException.cs
- DiscoveryClientProtocol.cs
- Ipv6Element.cs
- PagerSettings.cs
- DocumentViewerBase.cs
- NavigationProperty.cs