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
- RemotingAttributes.cs
- EncoderBestFitFallback.cs
- CompositeScriptReferenceEventArgs.cs
- AsyncResult.cs
- Compilation.cs
- ADMembershipUser.cs
- ConfigPathUtility.cs
- Quack.cs
- XPathMessageFilter.cs
- NegationPusher.cs
- SiteMapDataSourceView.cs
- FilteredReadOnlyMetadataCollection.cs
- HwndSubclass.cs
- ToolStripTextBox.cs
- TrackingStringDictionary.cs
- HtmlAnchor.cs
- X509CertificateChain.cs
- EntityDataSourceDataSelection.cs
- InkCanvas.cs
- IndexerReference.cs
- TemplatedWizardStep.cs
- GridViewRowEventArgs.cs
- MetaType.cs
- ParameterCollection.cs
- HandlerBase.cs
- MulticastIPAddressInformationCollection.cs
- NavigationCommands.cs
- DelegateSerializationHolder.cs
- ClickablePoint.cs
- PersonalizablePropertyEntry.cs
- SqlError.cs
- DesignerLoader.cs
- ThreadExceptionEvent.cs
- HttpClientProtocol.cs
- XmlSerializerAssemblyAttribute.cs
- RequiredFieldValidator.cs
- PointLight.cs
- TypeViewSchema.cs
- StrongNameUtility.cs
- HttpPostProtocolImporter.cs
- LinkLabelLinkClickedEvent.cs
- ObjectQuery.cs
- CompilerErrorCollection.cs
- ZipIOExtraFieldPaddingElement.cs
- NamespaceQuery.cs
- X509CertificateTokenFactoryCredential.cs
- IntegrationExceptionEventArgs.cs
- FormsAuthenticationCredentials.cs
- SignalGate.cs
- DurableServiceAttribute.cs
- TraceContextRecord.cs
- ConfigurationValues.cs
- shaper.cs
- StatusBar.cs
- MonitoringDescriptionAttribute.cs
- FieldBuilder.cs
- DLinqDataModelProvider.cs
- SortKey.cs
- ExcludePathInfo.cs
- OdbcErrorCollection.cs
- MarshalDirectiveException.cs
- DropShadowEffect.cs
- MarkupCompilePass1.cs
- Site.cs
- TemplateBindingExtension.cs
- WebPartDisplayModeEventArgs.cs
- WindowsListView.cs
- TextDecoration.cs
- ConfigurationPermission.cs
- NavigationWindowAutomationPeer.cs
- TextLineBreak.cs
- LineInfo.cs
- RefreshPropertiesAttribute.cs
- AmbientValueAttribute.cs
- CLRBindingWorker.cs
- KeyConstraint.cs
- AutomationAttributeInfo.cs
- DataGridTemplateColumn.cs
- BoundsDrawingContextWalker.cs
- XmlSchemaInclude.cs
- TextContainerChangedEventArgs.cs
- BitmapEffectGroup.cs
- TransactionFlowProperty.cs
- TimeEnumHelper.cs
- GridViewUpdateEventArgs.cs
- NativeMethods.cs
- TrustLevelCollection.cs
- BitmapData.cs
- PersonalizationProvider.cs
- PropertyConverter.cs
- DocumentViewerHelper.cs
- SecurityDocument.cs
- MessageQueueInstaller.cs
- SqlServer2KCompatibilityCheck.cs
- MaskInputRejectedEventArgs.cs
- SessionPageStatePersister.cs
- RelationalExpressions.cs
- DbParameterCollectionHelper.cs
- _ConnectOverlappedAsyncResult.cs
- NavigateUrlConverter.cs