Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- PropertyExpression.cs
- storagemappingitemcollection.viewdictionary.cs
- NetPipeSectionData.cs
- MenuItemAutomationPeer.cs
- ImageSource.cs
- ObfuscateAssemblyAttribute.cs
- SortedDictionary.cs
- SQLBoolean.cs
- RpcResponse.cs
- Registration.cs
- CroppedBitmap.cs
- RepeaterItemCollection.cs
- AsyncOperationContext.cs
- util.cs
- CookieParameter.cs
- WorkflowApplicationEventArgs.cs
- TypeConverter.cs
- SR.cs
- URL.cs
- InternalConfigHost.cs
- commandenforcer.cs
- OutputWindow.cs
- ListMarkerLine.cs
- DivideByZeroException.cs
- XmlReader.cs
- Rotation3DAnimationBase.cs
- CompositeDuplexElement.cs
- JoinGraph.cs
- WebResourceAttribute.cs
- ErrorStyle.cs
- RemotingAttributes.cs
- WindowClosedEventArgs.cs
- PerfCounters.cs
- CompositeDataBoundControl.cs
- LineVisual.cs
- ConfigurationManager.cs
- FieldBuilder.cs
- NotSupportedException.cs
- RefExpr.cs
- PrivateFontCollection.cs
- AllowedAudienceUriElementCollection.cs
- DataBindingCollectionEditor.cs
- Visual3D.cs
- DataAdapter.cs
- OleDbDataAdapter.cs
- SubMenuStyle.cs
- ListViewDeleteEventArgs.cs
- CellParaClient.cs
- SqlCacheDependencyDatabase.cs
- SqlDataSourceSelectingEventArgs.cs
- EraserBehavior.cs
- DataKeyPropertyAttribute.cs
- RayMeshGeometry3DHitTestResult.cs
- infer.cs
- MetadataArtifactLoaderFile.cs
- ValueConversionAttribute.cs
- SystemIPGlobalStatistics.cs
- ComboBox.cs
- PublisherMembershipCondition.cs
- Baml2006ReaderSettings.cs
- ExceptionValidationRule.cs
- SpecialFolderEnumConverter.cs
- URLString.cs
- SBCSCodePageEncoding.cs
- UIElementParaClient.cs
- EventLogPermissionEntryCollection.cs
- SignatureHelper.cs
- SpnEndpointIdentityExtension.cs
- _DomainName.cs
- ConfigurationElementCollection.cs
- ValueChangedEventManager.cs
- Token.cs
- ImpersonateTokenRef.cs
- SessionParameter.cs
- ErrorWrapper.cs
- SqlUtil.cs
- DataBindingCollectionConverter.cs
- CompareValidator.cs
- SwitchCase.cs
- CheckBoxList.cs
- BuildProviderCollection.cs
- ExpandSegmentCollection.cs
- Delegate.cs
- RoleService.cs
- TabControlAutomationPeer.cs
- SignerInfo.cs
- peersecurityelement.cs
- Properties.cs
- GeneralTransform3DTo2DTo3D.cs
- DependentTransaction.cs
- SystemIcmpV6Statistics.cs
- Color.cs
- sqlstateclientmanager.cs
- TempEnvironment.cs
- RegisterResponseInfo.cs
- XmlObjectSerializerReadContextComplexJson.cs
- MouseGesture.cs
- ImpersonateTokenRef.cs
- ZoneMembershipCondition.cs
- SqlDataSource.cs