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
- WindowsTreeView.cs
- GlobalizationSection.cs
- SelectionChangedEventArgs.cs
- Icon.cs
- SqlEnums.cs
- DeleteCardRequest.cs
- XmlnsPrefixAttribute.cs
- Operator.cs
- HttpProtocolReflector.cs
- AppDomainUnloadedException.cs
- IpcServerChannel.cs
- SafeHandles.cs
- GridViewAutomationPeer.cs
- SSmlParser.cs
- RouteValueDictionary.cs
- OraclePermissionAttribute.cs
- BindingContext.cs
- Stroke2.cs
- SingleAnimationUsingKeyFrames.cs
- SendMailErrorEventArgs.cs
- RegexReplacement.cs
- FileLogRecordStream.cs
- CqlWriter.cs
- remotingproxy.cs
- PasswordTextNavigator.cs
- MimeReturn.cs
- HeaderedContentControl.cs
- WorkflowEnvironment.cs
- XmlTypeMapping.cs
- ModelUtilities.cs
- ObjectListShowCommandsEventArgs.cs
- DirectoryInfo.cs
- WindowAutomationPeer.cs
- SmtpClient.cs
- DiscoveryUtility.cs
- FuncCompletionCallbackWrapper.cs
- DiscoveryMessageProperty.cs
- DataGridViewCellMouseEventArgs.cs
- ExpressionBindings.cs
- ReachPrintTicketSerializerAsync.cs
- DirectoryNotFoundException.cs
- TraceContextRecord.cs
- SecurityRuntime.cs
- ADMembershipUser.cs
- EmissiveMaterial.cs
- XsltArgumentList.cs
- Quad.cs
- NativeMethods.cs
- ObjectManager.cs
- MenuItem.cs
- Shared.cs
- XmlAttributes.cs
- IdentitySection.cs
- ModelPerspective.cs
- BooleanToVisibilityConverter.cs
- TypeConverterValueSerializer.cs
- HotSpotCollection.cs
- ToolStripRenderEventArgs.cs
- DataRecordInternal.cs
- GradientStop.cs
- OdbcTransaction.cs
- TransactionScope.cs
- DataControlFieldCell.cs
- NullableDoubleSumAggregationOperator.cs
- PermissionListSet.cs
- XmlDictionaryString.cs
- Root.cs
- PageContentAsyncResult.cs
- DataFieldConverter.cs
- URL.cs
- GridViewEditEventArgs.cs
- DecoderFallback.cs
- SystemIPGlobalProperties.cs
- SQLBinaryStorage.cs
- Margins.cs
- GridErrorDlg.cs
- StrokeCollection.cs
- Brush.cs
- ColumnMapVisitor.cs
- MsmqAppDomainProtocolHandler.cs
- CorrelationManager.cs
- ContextMarshalException.cs
- StringKeyFrameCollection.cs
- TypeSemantics.cs
- precedingquery.cs
- TrustManager.cs
- PrintingPermissionAttribute.cs
- BackoffTimeoutHelper.cs
- FormViewDeleteEventArgs.cs
- WebPartZone.cs
- ApplicationException.cs
- ContentTextAutomationPeer.cs
- JavaScriptString.cs
- ByeMessage11.cs
- DesignSurface.cs
- WebPartTransformerCollection.cs
- TemplateColumn.cs
- TraceHandlerErrorFormatter.cs
- CustomAttribute.cs
- StrokeCollection.cs