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
- SolidColorBrush.cs
- XMLSyntaxException.cs
- externdll.cs
- WebPartDeleteVerb.cs
- IriParsingElement.cs
- EnumerationRangeValidationUtil.cs
- DependencyPropertyConverter.cs
- TemplatePartAttribute.cs
- GridViewDeletedEventArgs.cs
- TextFragmentEngine.cs
- StorageComplexTypeMapping.cs
- RectangleConverter.cs
- EdmScalarPropertyAttribute.cs
- HostedAspNetEnvironment.cs
- DoubleAnimation.cs
- CollectionConverter.cs
- CssTextWriter.cs
- DataServices.cs
- SafeNativeMethods.cs
- BitmapPalettes.cs
- ConfigurationSchemaErrors.cs
- Helper.cs
- Classification.cs
- XmlReflectionImporter.cs
- PropertyGridView.cs
- DataTableReader.cs
- ProcessModuleCollection.cs
- NameValuePermission.cs
- DbException.cs
- BasicExpandProvider.cs
- XmlResolver.cs
- CoreSwitches.cs
- EditorResources.cs
- DescriptionCreator.cs
- IDQuery.cs
- DataGridViewHitTestInfo.cs
- TypeContext.cs
- PropertyRef.cs
- HtmlInputPassword.cs
- FastEncoder.cs
- DockPatternIdentifiers.cs
- AnimationException.cs
- AppLevelCompilationSectionCache.cs
- WindowsScrollBar.cs
- WhileDesigner.cs
- WizardStepBase.cs
- ServicePoint.cs
- AppLevelCompilationSectionCache.cs
- XmlUnspecifiedAttribute.cs
- mactripleDES.cs
- AppDomainAttributes.cs
- ProcessHostFactoryHelper.cs
- XmlSchemaGroupRef.cs
- FixedPosition.cs
- BitmapVisualManager.cs
- TreeNodeConverter.cs
- BoundColumn.cs
- SoapServerMethod.cs
- ILGenerator.cs
- PagedDataSource.cs
- XmlJsonWriter.cs
- SafeRightsManagementPubHandle.cs
- DataGrid.cs
- SetterBase.cs
- SystemEvents.cs
- ImportContext.cs
- DebugTrace.cs
- DataGridViewSortCompareEventArgs.cs
- ScaleTransform.cs
- Intellisense.cs
- RefType.cs
- KnownColorTable.cs
- MatrixValueSerializer.cs
- CatchBlock.cs
- PerformanceCounter.cs
- DbSource.cs
- Int16AnimationBase.cs
- ByteStreamMessageEncoderFactory.cs
- Privilege.cs
- Int32CAMarshaler.cs
- basecomparevalidator.cs
- ToolStripSeparator.cs
- XmlSchemaSimpleTypeList.cs
- InvokeFunc.cs
- EventProperty.cs
- InkCanvasAutomationPeer.cs
- ObservableCollection.cs
- SpecularMaterial.cs
- ToolStripOverflow.cs
- IndexedDataBuffer.cs
- SystemDiagnosticsSection.cs
- TextServicesHost.cs
- DBParameter.cs
- CompareValidator.cs
- TextFindEngine.cs
- OracleTimeSpan.cs
- HtmlInputButton.cs
- SimpleTableProvider.cs
- RunClient.cs
- XmlMemberMapping.cs