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
- HtmlDocument.cs
- EntityContainerAssociationSetEnd.cs
- DataBoundControlAdapter.cs
- CharStorage.cs
- ConfigurationException.cs
- CalloutQueueItem.cs
- CodeAccessSecurityEngine.cs
- FieldBuilder.cs
- CodeSnippetTypeMember.cs
- CompatibleComparer.cs
- CodeGeneratorAttribute.cs
- GeometryDrawing.cs
- EditingContext.cs
- BitmapEffectGeneralTransform.cs
- VisualTreeHelper.cs
- ObjectDataSourceChooseTypePanel.cs
- sapiproxy.cs
- PointCollection.cs
- SystemIPInterfaceStatistics.cs
- QueryCursorEventArgs.cs
- HiddenField.cs
- MobileControlBuilder.cs
- DocumentEventArgs.cs
- OleDbTransaction.cs
- ReaderWriterLockWrapper.cs
- InputScopeConverter.cs
- TextRangeEditTables.cs
- RotateTransform3D.cs
- Byte.cs
- SignHashRequest.cs
- FileSecurity.cs
- DesignerSerializationOptionsAttribute.cs
- SqlMethods.cs
- TickBar.cs
- StructuredTypeEmitter.cs
- PropertyGridCommands.cs
- NTAccount.cs
- ScrollContentPresenter.cs
- ColumnResizeUndoUnit.cs
- SpellerInterop.cs
- SqlInternalConnectionSmi.cs
- WindowsComboBox.cs
- TextServicesHost.cs
- ToolStripStatusLabel.cs
- SqlNode.cs
- CacheModeValueSerializer.cs
- HotCommands.cs
- XmlValidatingReader.cs
- Bidi.cs
- ClientScriptItemCollection.cs
- relpropertyhelper.cs
- LZCodec.cs
- DataListAutoFormat.cs
- ResolveCriteria11.cs
- DictionaryItemsCollection.cs
- UseManagedPresentationBindingElementImporter.cs
- BitmapEffectInputConnector.cs
- TextRunProperties.cs
- MultipleViewPattern.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- StyleSelector.cs
- HMACMD5.cs
- HttpEncoderUtility.cs
- SerializationObjectManager.cs
- PersonalizableTypeEntry.cs
- CodeMemberField.cs
- DynamicDocumentPaginator.cs
- XamlClipboardData.cs
- RuleSettingsCollection.cs
- InvokeGenerator.cs
- ParserOptions.cs
- StringAttributeCollection.cs
- RegistryKey.cs
- filewebresponse.cs
- HashLookup.cs
- SmiContext.cs
- MachineKeyConverter.cs
- MaskedTextBox.cs
- _LocalDataStore.cs
- JapaneseCalendar.cs
- PanelStyle.cs
- EntitySqlQueryBuilder.cs
- Parser.cs
- SizeAnimationBase.cs
- Help.cs
- TdsParserStaticMethods.cs
- FileAuthorizationModule.cs
- ListCollectionView.cs
- WebPartManagerInternals.cs
- TemplateBindingExtensionConverter.cs
- RuntimeConfigLKG.cs
- ObjectDataSourceWizardForm.cs
- AmbientLight.cs
- TextServicesHost.cs
- ServiceOperation.cs
- ErrorLog.cs
- InfoCardCryptoHelper.cs
- ToolStripMenuItemDesigner.cs
- XmlWriterSettings.cs
- SyntaxCheck.cs