Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ConditionCollection.cs
- RichTextBoxAutomationPeer.cs
- PropertyManager.cs
- PermissionSet.cs
- SqlTypeSystemProvider.cs
- externdll.cs
- ColorInterpolationModeValidation.cs
- DefaultShape.cs
- Compilation.cs
- XmlQueryStaticData.cs
- HtmlMobileTextWriter.cs
- HttpCacheVary.cs
- WebPartCloseVerb.cs
- ObjectDisposedException.cs
- TextEffectCollection.cs
- HttpServerVarsCollection.cs
- SharedUtils.cs
- TableParaClient.cs
- TreeIterators.cs
- CLSCompliantAttribute.cs
- XmlCodeExporter.cs
- ElementMarkupObject.cs
- GACMembershipCondition.cs
- UDPClient.cs
- TableCell.cs
- DataGridViewTextBoxColumn.cs
- RegexRunner.cs
- PersistenceParticipant.cs
- SQLInt16.cs
- WindowsRebar.cs
- CollectionView.cs
- ScriptControlDescriptor.cs
- querybuilder.cs
- KernelTypeValidation.cs
- DocumentSequenceHighlightLayer.cs
- DoubleAnimationBase.cs
- KnownTypes.cs
- CompositionAdorner.cs
- NetworkInformationException.cs
- BrowsableAttribute.cs
- ModuleBuilderData.cs
- DataSvcMapFile.cs
- MemoryPressure.cs
- HttpListener.cs
- PerformanceCounter.cs
- ListBindingConverter.cs
- PanelDesigner.cs
- DataSysAttribute.cs
- ListBox.cs
- MsmqBindingElementBase.cs
- ForceCopyBuildProvider.cs
- ConnectionInterfaceCollection.cs
- OracleLob.cs
- RelatedView.cs
- ServiceNotStartedException.cs
- BoundField.cs
- ContentIterators.cs
- DisplayInformation.cs
- XmlSchemaNotation.cs
- BasicExpressionVisitor.cs
- NativeMethods.cs
- GradientStop.cs
- Crypto.cs
- WindowsFormsLinkLabel.cs
- Aes.cs
- _ConnectionGroup.cs
- UnsafeNativeMethods.cs
- DataStreamFromComStream.cs
- CharStorage.cs
- Cell.cs
- WeakReadOnlyCollection.cs
- HostedAspNetEnvironment.cs
- sqlpipe.cs
- AsyncCallback.cs
- SqlDataSourceStatusEventArgs.cs
- ResolveMatchesMessage11.cs
- BindingMAnagerBase.cs
- ResourceDescriptionAttribute.cs
- safemediahandle.cs
- DbConnectionOptions.cs
- ReliableSessionBindingElement.cs
- ManagementObjectCollection.cs
- QilUnary.cs
- NativeMethods.cs
- GPStream.cs
- ProtocolElement.cs
- ThemeInfoAttribute.cs
- AndMessageFilterTable.cs
- WindowsFormsSynchronizationContext.cs
- securitycriticaldata.cs
- ActivitiesCollection.cs
- StyleBamlTreeBuilder.cs
- HttpChannelHelper.cs
- WorkItem.cs
- UndoUnit.cs
- RoutingConfiguration.cs
- GuidConverter.cs
- BindingContext.cs
- ModelUIElement3D.cs
- HTMLTagNameToTypeMapper.cs