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
- Byte.cs
- CultureTable.cs
- OLEDB_Enum.cs
- TdsParameterSetter.cs
- DoubleLinkListEnumerator.cs
- GuidConverter.cs
- WebResourceUtil.cs
- CompositeFontFamily.cs
- FormatSelectingMessageInspector.cs
- EntityContainerEmitter.cs
- ImagingCache.cs
- SmiMetaDataProperty.cs
- TouchesCapturedWithinProperty.cs
- SimpleMailWebEventProvider.cs
- GuidTagList.cs
- SeekStoryboard.cs
- BooleanAnimationUsingKeyFrames.cs
- RequestCacheEntry.cs
- XmlNamespaceDeclarationsAttribute.cs
- RequestCacheEntry.cs
- securitycriticaldataClass.cs
- SelectionPatternIdentifiers.cs
- ValueType.cs
- InkCollectionBehavior.cs
- DataControlButton.cs
- SystemParameters.cs
- DownloadProgressEventArgs.cs
- ListViewGroupItemCollection.cs
- StylusSystemGestureEventArgs.cs
- VBIdentifierName.cs
- FormsAuthenticationUser.cs
- HelloMessageApril2005.cs
- EventQueueState.cs
- DataGridViewColumnStateChangedEventArgs.cs
- ThemeableAttribute.cs
- SupportingTokenSecurityTokenResolver.cs
- Rectangle.cs
- ReadContentAsBinaryHelper.cs
- Int32Converter.cs
- DocumentViewerAutomationPeer.cs
- InfoCardMetadataExchangeClient.cs
- cryptoapiTransform.cs
- ScrollBar.cs
- FileLogRecordEnumerator.cs
- SymbolType.cs
- HostingPreferredMapPath.cs
- ColorBlend.cs
- CompositeFontInfo.cs
- TransformerInfoCollection.cs
- ToolStripGripRenderEventArgs.cs
- SourceFilter.cs
- StylusEditingBehavior.cs
- JsonUriDataContract.cs
- PolyBezierSegmentFigureLogic.cs
- TypeExtensionConverter.cs
- Set.cs
- CultureTable.cs
- Int16Storage.cs
- PersonalizationProviderCollection.cs
- DeobfuscatingStream.cs
- PageFunction.cs
- TabControl.cs
- LockCookie.cs
- BaseResourcesBuildProvider.cs
- BreakRecordTable.cs
- ApplicationTrust.cs
- PenThread.cs
- InvokeBase.cs
- UidManager.cs
- TextEditorTables.cs
- ReachPageContentCollectionSerializer.cs
- Popup.cs
- addressfiltermode.cs
- ColorBlend.cs
- FormViewDesigner.cs
- XmlSchemaComplexContent.cs
- Evidence.cs
- VisualBasicExpressionConverter.cs
- RadioButton.cs
- LogLogRecord.cs
- XslException.cs
- DateTimeParse.cs
- GeneralTransform3DGroup.cs
- DependencyPropertyAttribute.cs
- TraceSection.cs
- FormatException.cs
- XamlSerializerUtil.cs
- SvcMapFileSerializer.cs
- SystemFonts.cs
- CodeNamespaceCollection.cs
- GridProviderWrapper.cs
- WebEventCodes.cs
- EventArgs.cs
- SqlWorkflowPersistenceService.cs
- UriSection.cs
- OdbcDataAdapter.cs
- ItemsPanelTemplate.cs
- StreamWriter.cs
- XmlCharType.cs
- HtmlInputImage.cs