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
- Interop.cs
- MappingException.cs
- SiteIdentityPermission.cs
- DotAtomReader.cs
- BrowserInteropHelper.cs
- IndicFontClient.cs
- SchemaRegistration.cs
- FileLevelControlBuilderAttribute.cs
- TaskFileService.cs
- Themes.cs
- DictionaryEditChange.cs
- XmlCharType.cs
- ProjectionPath.cs
- NameTable.cs
- DispatcherObject.cs
- SQLChars.cs
- EmptyCollection.cs
- VectorCollection.cs
- XmlILModule.cs
- ScriptReferenceBase.cs
- BrowserDefinitionCollection.cs
- DoubleLink.cs
- DbParameterHelper.cs
- CustomBindingElement.cs
- UnionCqlBlock.cs
- PrinterUnitConvert.cs
- MimeFormatExtensions.cs
- Verify.cs
- HtmlControl.cs
- IxmlLineInfo.cs
- ConfigUtil.cs
- DesignerCategoryAttribute.cs
- ContentElementCollection.cs
- ReleaseInstanceMode.cs
- XmlReflectionImporter.cs
- DataChangedEventManager.cs
- CalendarDay.cs
- ListViewDeletedEventArgs.cs
- ProfilePropertyNameValidator.cs
- SecurityContextSecurityTokenResolver.cs
- ConfigurationCollectionAttribute.cs
- DocumentPageTextView.cs
- Table.cs
- Stylus.cs
- SafeCoTaskMem.cs
- MissingManifestResourceException.cs
- DoubleLink.cs
- ScopelessEnumAttribute.cs
- ImageMapEventArgs.cs
- OutputCacheEntry.cs
- ListParagraph.cs
- Roles.cs
- MailHeaderInfo.cs
- StorageMappingItemCollection.cs
- ListViewHitTestInfo.cs
- TextSpan.cs
- FieldDescriptor.cs
- SafeCloseHandleCritical.cs
- SoapSchemaImporter.cs
- EncryptedKey.cs
- StateDesignerConnector.cs
- Application.cs
- CustomGrammar.cs
- ToolStripOverflow.cs
- BamlRecords.cs
- ExceptionHelpers.cs
- StandardOleMarshalObject.cs
- TypeListConverter.cs
- mongolianshape.cs
- ArrayElementGridEntry.cs
- CaseInsensitiveOrdinalStringComparer.cs
- BrowserDefinition.cs
- DelegateHelpers.cs
- ConfigurationPropertyAttribute.cs
- CryptoApi.cs
- BaseProcessor.cs
- BitmapMetadataBlob.cs
- AutomationPropertyInfo.cs
- DbBuffer.cs
- X509Certificate2Collection.cs
- CodeAssignStatement.cs
- QilInvokeLateBound.cs
- RemoteX509AsymmetricSecurityKey.cs
- UIAgentMonitor.cs
- UpdateRecord.cs
- DataRelationCollection.cs
- XmlSchemaExporter.cs
- VisualBrush.cs
- DiagnosticsConfigurationHandler.cs
- EventLogPermission.cs
- Native.cs
- DictionarySectionHandler.cs
- CompModSwitches.cs
- Util.cs
- ImageKeyConverter.cs
- DeviceSpecificDialogCachedState.cs
- FileLogRecord.cs
- TlsnegoTokenAuthenticator.cs
- ZipIORawDataFileBlock.cs
- WebServicesInteroperability.cs