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
- ScriptingWebServicesSectionGroup.cs
- TextSelection.cs
- EventLogTraceListener.cs
- QilGeneratorEnv.cs
- TraceLevelStore.cs
- CalendarDay.cs
- WhiteSpaceTrimStringConverter.cs
- TableCell.cs
- FlagsAttribute.cs
- DataGridViewColumn.cs
- SqlReorderer.cs
- StackBuilderSink.cs
- InternalBase.cs
- PropertyGrid.cs
- FrameworkTemplate.cs
- Group.cs
- Delay.cs
- DBConcurrencyException.cs
- CancelRequestedQuery.cs
- TargetParameterCountException.cs
- SafeRightsManagementHandle.cs
- ParagraphVisual.cs
- StreamingContext.cs
- SystemIPv6InterfaceProperties.cs
- Version.cs
- FrameworkElementAutomationPeer.cs
- _AcceptOverlappedAsyncResult.cs
- SoapInteropTypes.cs
- OleServicesContext.cs
- EventQueueState.cs
- MiniAssembly.cs
- JoinSymbol.cs
- ProviderSettings.cs
- exports.cs
- SoapCodeExporter.cs
- ListItemParagraph.cs
- InputGestureCollection.cs
- WebHttpDispatchOperationSelector.cs
- FormViewUpdateEventArgs.cs
- TreeView.cs
- SimpleMailWebEventProvider.cs
- SecurityContext.cs
- BamlWriter.cs
- TrustLevel.cs
- DirectionalLight.cs
- BaseParaClient.cs
- CharacterHit.cs
- OracleTransaction.cs
- MissingManifestResourceException.cs
- UserPreference.cs
- CaseCqlBlock.cs
- FixedStringLookup.cs
- StateManagedCollection.cs
- WebPartConnectionsCloseVerb.cs
- PaintValueEventArgs.cs
- DBDataPermission.cs
- HandlerBase.cs
- PrivateFontCollection.cs
- BaseParaClient.cs
- InternalRelationshipCollection.cs
- StrongNameMembershipCondition.cs
- PeerName.cs
- HtmlEncodedRawTextWriter.cs
- XmlnsPrefixAttribute.cs
- TaiwanCalendar.cs
- ImmutableObjectAttribute.cs
- CopyAttributesAction.cs
- TraceListeners.cs
- WebConfigurationManager.cs
- StrokeSerializer.cs
- GenericEnumConverter.cs
- DataMisalignedException.cs
- SQLMoney.cs
- ReplacementText.cs
- CommandHelpers.cs
- RefType.cs
- EmptyControlCollection.cs
- StringDictionary.cs
- XmlCharCheckingWriter.cs
- CodeLinePragma.cs
- AppendHelper.cs
- TrailingSpaceComparer.cs
- WebGetAttribute.cs
- LinearQuaternionKeyFrame.cs
- VSWCFServiceContractGenerator.cs
- AttachedAnnotationChangedEventArgs.cs
- TransportChannelFactory.cs
- OpacityConverter.cs
- ItemAutomationPeer.cs
- SafeLocalMemHandle.cs
- Debug.cs
- RefreshEventArgs.cs
- ImageSource.cs
- GeneralTransform.cs
- NamespaceTable.cs
- BCryptSafeHandles.cs
- SqlConnectionString.cs
- BackgroundWorker.cs
- AffineTransform3D.cs
- ObjectComplexPropertyMapping.cs