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
- RequestQueue.cs
- LazyTextWriterCreator.cs
- AnonymousIdentificationModule.cs
- BufferedGraphics.cs
- XmlDataSourceView.cs
- CollectionBase.cs
- IChannel.cs
- SmtpReplyReaderFactory.cs
- SignedXml.cs
- DataKey.cs
- DBCSCodePageEncoding.cs
- ToolStripSettings.cs
- ImageListUtils.cs
- InvalidPropValue.cs
- ReflectPropertyDescriptor.cs
- WinInetCache.cs
- RuleSettingsCollection.cs
- TypeExtensions.cs
- MetabaseSettings.cs
- ToolTipAutomationPeer.cs
- SQLBinary.cs
- PartBasedPackageProperties.cs
- KerberosRequestorSecurityToken.cs
- BitmapEffectDrawing.cs
- DSACryptoServiceProvider.cs
- MobileCapabilities.cs
- AnnotationResourceChangedEventArgs.cs
- SecurityCriticalDataForSet.cs
- ISessionStateStore.cs
- WindowsIdentity.cs
- WindowsIPAddress.cs
- AuthenticationSection.cs
- WindowsScrollBarBits.cs
- SoapAttributes.cs
- CqlParserHelpers.cs
- SmtpReplyReaderFactory.cs
- FaultCallbackWrapper.cs
- ContractSearchPattern.cs
- EntityClientCacheKey.cs
- ListControlDesigner.cs
- _RequestCacheProtocol.cs
- ButtonBase.cs
- DropDownButton.cs
- Root.cs
- Repeater.cs
- FormsIdentity.cs
- fixedPageContentExtractor.cs
- HScrollProperties.cs
- DetailsViewRowCollection.cs
- NamedPipeTransportBindingElement.cs
- DocumentPageTextView.cs
- BeginStoryboard.cs
- DoWorkEventArgs.cs
- JsonStringDataContract.cs
- PassportAuthenticationModule.cs
- TraceLevelStore.cs
- safelinkcollection.cs
- URI.cs
- ErrorInfoXmlDocument.cs
- InheritablePropertyChangeInfo.cs
- ExpressionNode.cs
- RegistryKey.cs
- ExpressionBuilder.cs
- Attribute.cs
- Path.cs
- _NegoState.cs
- TrackPointCollection.cs
- QilParameter.cs
- MembershipPasswordException.cs
- FamilyCollection.cs
- CellCreator.cs
- SqlRowUpdatingEvent.cs
- HttpHeaderCollection.cs
- CheckBoxPopupAdapter.cs
- Keyboard.cs
- EpmSyndicationContentDeSerializer.cs
- DbConnectionClosed.cs
- XPathNodePointer.cs
- Table.cs
- DecoderNLS.cs
- AnchoredBlock.cs
- PrinterSettings.cs
- IOThreadScheduler.cs
- ContentIterators.cs
- CellTreeNode.cs
- ToolBarPanel.cs
- AsyncPostBackErrorEventArgs.cs
- WindowsHyperlink.cs
- PngBitmapDecoder.cs
- DataGridItem.cs
- HighContrastHelper.cs
- DataMemberConverter.cs
- LocalizationCodeDomSerializer.cs
- ConfigXmlWhitespace.cs
- RequestTimeoutManager.cs
- SecurityContextTokenValidationException.cs
- BuilderPropertyEntry.cs
- StyleModeStack.cs
- COM2FontConverter.cs
- LinqDataSourceView.cs