Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ToolStripRendererSwitcher.cs
- ColorConvertedBitmapExtension.cs
- DataGridViewLinkColumn.cs
- DataViewSetting.cs
- FeatureSupport.cs
- WebSysDescriptionAttribute.cs
- Event.cs
- ScriptRegistrationManager.cs
- ErrorFormatterPage.cs
- peernodestatemanager.cs
- XmlElement.cs
- RelatedCurrencyManager.cs
- MarshalByValueComponent.cs
- Journal.cs
- CodePrimitiveExpression.cs
- SafeFileMappingHandle.cs
- MetadataSerializer.cs
- EFColumnProvider.cs
- QilName.cs
- AesCryptoServiceProvider.cs
- SqlUDTStorage.cs
- HandleExceptionArgs.cs
- GeneralTransform3DTo2D.cs
- IDQuery.cs
- UrlParameterReader.cs
- WorkflowDesignerMessageFilter.cs
- CustomErrorCollection.cs
- TreeViewHitTestInfo.cs
- NetMsmqSecurityElement.cs
- Native.cs
- ContextProperty.cs
- Trace.cs
- versioninfo.cs
- MetaModel.cs
- DetailsViewRow.cs
- DataTableReader.cs
- SessionEndedEventArgs.cs
- WebBrowserSiteBase.cs
- followingquery.cs
- _NegoState.cs
- DocumentPageViewAutomationPeer.cs
- DataGridPagerStyle.cs
- ColorPalette.cs
- relpropertyhelper.cs
- ControlCodeDomSerializer.cs
- TraceInternal.cs
- Type.cs
- CodeIndexerExpression.cs
- ConnectionConsumerAttribute.cs
- LayoutSettings.cs
- FileLoadException.cs
- BrushValueSerializer.cs
- Speller.cs
- QilReplaceVisitor.cs
- SqlTriggerContext.cs
- BookmarkTable.cs
- MeasureItemEvent.cs
- ProfileInfo.cs
- Clock.cs
- CorrelationManager.cs
- RTLAwareMessageBox.cs
- URI.cs
- DataGridViewCellCancelEventArgs.cs
- XslTransform.cs
- PageRequestManager.cs
- StatusBarItemAutomationPeer.cs
- SearchForVirtualItemEventArgs.cs
- ManifestResourceInfo.cs
- StringBlob.cs
- dataobject.cs
- DashStyles.cs
- EventArgs.cs
- PolicyChain.cs
- QueryException.cs
- SiteOfOriginContainer.cs
- EditingContext.cs
- Interlocked.cs
- SelectQueryOperator.cs
- ActionMessageFilterTable.cs
- UIElementAutomationPeer.cs
- Setter.cs
- State.cs
- JapaneseLunisolarCalendar.cs
- TransportContext.cs
- BoundColumn.cs
- AxHostDesigner.cs
- SpnegoTokenAuthenticator.cs
- DispatchWrapper.cs
- RelationalExpressions.cs
- WebPartZoneAutoFormat.cs
- TypeGeneratedEventArgs.cs
- SQLSingle.cs
- DrawingContextDrawingContextWalker.cs
- StackBuilderSink.cs
- DesignerDataStoredProcedure.cs
- MasterPageCodeDomTreeGenerator.cs
- UserControl.cs
- _DigestClient.cs
- SQLSingleStorage.cs
- SettingsPropertyNotFoundException.cs