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
- CodeDomConfigurationHandler.cs
- FunctionParameter.cs
- WinEventWrap.cs
- MatrixTransform.cs
- CompositeActivityDesigner.cs
- PersonalizablePropertyEntry.cs
- SymLanguageType.cs
- DtrList.cs
- StandardOleMarshalObject.cs
- CssClassPropertyAttribute.cs
- BinaryWriter.cs
- DashStyle.cs
- panel.cs
- XmlNamespaceMappingCollection.cs
- Socket.cs
- Base64WriteStateInfo.cs
- ScriptHandlerFactory.cs
- EditorZoneBase.cs
- DesignUtil.cs
- TextEditorContextMenu.cs
- SizeAnimation.cs
- TransactionManager.cs
- RectangleGeometry.cs
- ViewPort3D.cs
- basecomparevalidator.cs
- PanelDesigner.cs
- SQLChars.cs
- InvalidWMPVersionException.cs
- XmlArrayItemAttributes.cs
- BevelBitmapEffect.cs
- EdmProperty.cs
- NamespaceImport.cs
- EnumerableRowCollection.cs
- DefaultAuthorizationContext.cs
- SqlConnectionHelper.cs
- AccessText.cs
- SystemIPGlobalStatistics.cs
- XmlElement.cs
- HtmlTableRowCollection.cs
- AlignmentXValidation.cs
- WeakReference.cs
- CannotUnloadAppDomainException.cs
- safesecurityhelperavalon.cs
- MulticastOption.cs
- TreeViewAutomationPeer.cs
- HashMembershipCondition.cs
- TextReader.cs
- CngKeyCreationParameters.cs
- Int32Rect.cs
- PersistenceProviderDirectory.cs
- LongSumAggregationOperator.cs
- Expression.cs
- IteratorDescriptor.cs
- SerializableAttribute.cs
- BitmapFrameEncode.cs
- PathGradientBrush.cs
- MailWebEventProvider.cs
- ObjectSecurity.cs
- NativeMethodsOther.cs
- PermissionSet.cs
- WebRequestModuleElementCollection.cs
- VarInfo.cs
- ActivityDesignerHighlighter.cs
- SafeCertificateContext.cs
- ParserExtension.cs
- ClientSettingsStore.cs
- XsdValidatingReader.cs
- SponsorHelper.cs
- EngineSiteSapi.cs
- StyleCollection.cs
- QilGenerator.cs
- SafeCryptContextHandle.cs
- AccessText.cs
- EmptyQuery.cs
- DataBindingExpressionBuilder.cs
- CdpEqualityComparer.cs
- Floater.cs
- CodeDefaultValueExpression.cs
- ColorPalette.cs
- TransactedReceiveScope.cs
- TableCellAutomationPeer.cs
- BaseCodePageEncoding.cs
- SchemaCollectionCompiler.cs
- SafeUserTokenHandle.cs
- DataGridSortCommandEventArgs.cs
- ProcessHost.cs
- PropertyOverridesDialog.cs
- HwndMouseInputProvider.cs
- SymbolEqualComparer.cs
- XmlnsCompatibleWithAttribute.cs
- Int32RectConverter.cs
- WSFederationHttpSecurityMode.cs
- _HeaderInfo.cs
- BookmarkNameHelper.cs
- WindowsPrincipal.cs
- BaseContextMenu.cs
- MetadataItemEmitter.cs
- SqlVersion.cs
- SiteIdentityPermission.cs
- ConfigXmlElement.cs