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
- PreviewPrintController.cs
- COM2TypeInfoProcessor.cs
- ButtonBaseAutomationPeer.cs
- PropertyMap.cs
- TextElementAutomationPeer.cs
- MD5CryptoServiceProvider.cs
- tibetanshape.cs
- Repeater.cs
- ObjectItemNoOpAssemblyLoader.cs
- odbcmetadatacolumnnames.cs
- NonPrimarySelectionGlyph.cs
- CacheEntry.cs
- HashHelper.cs
- TransformerTypeCollection.cs
- XmlSchemaParticle.cs
- CompiledRegexRunnerFactory.cs
- StringArrayConverter.cs
- XmlLoader.cs
- WorkflowServiceInstance.cs
- SpellerError.cs
- SocketPermission.cs
- WebPartManager.cs
- MethodImplAttribute.cs
- DbDeleteCommandTree.cs
- XmlILModule.cs
- BoolExpr.cs
- JsonQueryStringConverter.cs
- BindingExpressionBase.cs
- SHA384.cs
- MatrixUtil.cs
- SystemPens.cs
- FileController.cs
- Menu.cs
- GetTokenRequest.cs
- WpfXamlLoader.cs
- WindowClosedEventArgs.cs
- IndicFontClient.cs
- DependencyObjectType.cs
- PowerStatus.cs
- ComNativeDescriptor.cs
- DataPagerCommandEventArgs.cs
- CodeParameterDeclarationExpression.cs
- UIElementCollection.cs
- DirectionalLight.cs
- OdbcDataAdapter.cs
- CallbackHandler.cs
- XPathPatternBuilder.cs
- HtmlForm.cs
- ItemType.cs
- TiffBitmapDecoder.cs
- ProviderSettingsCollection.cs
- EpmCustomContentSerializer.cs
- SmiEventStream.cs
- HGlobalSafeHandle.cs
- OperationPickerDialog.cs
- XmlNamespaceDeclarationsAttribute.cs
- StringTraceRecord.cs
- FrameworkContentElement.cs
- TraceListeners.cs
- ContractNamespaceAttribute.cs
- FormatterServices.cs
- AttributeConverter.cs
- FullTrustAssemblyCollection.cs
- AutomationProperties.cs
- EntityDataSourceWizardForm.cs
- XmlCharacterData.cs
- RoutedEventConverter.cs
- TransactionBridge.cs
- HttpResponseWrapper.cs
- ProgressBar.cs
- ChameleonKey.cs
- ProfileModule.cs
- Mapping.cs
- CodeAccessPermission.cs
- TabControl.cs
- TextServicesCompartmentEventSink.cs
- PageRouteHandler.cs
- HttpResponse.cs
- UniqueIdentifierService.cs
- KnowledgeBase.cs
- DeflateEmulationStream.cs
- DocumentViewerConstants.cs
- HttpCapabilitiesSectionHandler.cs
- TextEditorSpelling.cs
- InfoCardBaseException.cs
- Clipboard.cs
- UIElementCollection.cs
- Thickness.cs
- ListBindingConverter.cs
- TCPClient.cs
- UIElement3D.cs
- WebPartHelpVerb.cs
- RecipientInfo.cs
- TargetParameterCountException.cs
- SystemSounds.cs
- XmlWriterSettings.cs
- xml.cs
- AppDomainAttributes.cs
- PointCollectionValueSerializer.cs
- StateMachineDesignerPaint.cs