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
- ILGenerator.cs
- StateManagedCollection.cs
- CounterCreationDataCollection.cs
- ScrollChangedEventArgs.cs
- AddInToken.cs
- EncoderBestFitFallback.cs
- DefaultSection.cs
- CodeSubDirectoriesCollection.cs
- WebPermission.cs
- XmlRawWriterWrapper.cs
- GC.cs
- ToolStripItemEventArgs.cs
- UnitySerializationHolder.cs
- NavigationProgressEventArgs.cs
- ElementMarkupObject.cs
- PixelShader.cs
- MultitargetUtil.cs
- PeerNameRecord.cs
- MeshGeometry3D.cs
- ConditionalBranch.cs
- HttpFileCollection.cs
- ResourcesGenerator.cs
- DataGridViewDataConnection.cs
- Completion.cs
- MenuStrip.cs
- HttpCachePolicyWrapper.cs
- _ChunkParse.cs
- Privilege.cs
- Types.cs
- ThreadStateException.cs
- SharedPersonalizationStateInfo.cs
- ThemeableAttribute.cs
- TextStore.cs
- ControlPaint.cs
- OdbcParameterCollection.cs
- Int32AnimationUsingKeyFrames.cs
- AppearanceEditorPart.cs
- EntitySqlQueryBuilder.cs
- PackageDigitalSignature.cs
- ToolStripManager.cs
- IntSecurity.cs
- TextRangeProviderWrapper.cs
- AxHost.cs
- tibetanshape.cs
- CodeNamespace.cs
- MenuStrip.cs
- ArrayTypeMismatchException.cs
- TransactionScope.cs
- TranslateTransform.cs
- ToolStripContainerActionList.cs
- XmlSchemaGroupRef.cs
- SqlFunctions.cs
- StickyNoteHelper.cs
- PageAsyncTaskManager.cs
- QueryCacheKey.cs
- streamingZipPartStream.cs
- ColumnResult.cs
- Activator.cs
- TableItemProviderWrapper.cs
- SessionState.cs
- Int32EqualityComparer.cs
- EntityDataSourceWrapperPropertyDescriptor.cs
- TableRowCollection.cs
- ReadContentAsBinaryHelper.cs
- StandardCommands.cs
- DllNotFoundException.cs
- DropShadowBitmapEffect.cs
- HttpResponseInternalWrapper.cs
- RectAnimationBase.cs
- NullableLongAverageAggregationOperator.cs
- SwitchCase.cs
- DataContractSet.cs
- Cursor.cs
- DynamicILGenerator.cs
- InkCanvasAutomationPeer.cs
- CommandBindingCollection.cs
- ResourceIDHelper.cs
- QilUnary.cs
- TextRange.cs
- GrammarBuilderBase.cs
- ArrayWithOffset.cs
- KeySpline.cs
- TextParentUndoUnit.cs
- FormsAuthentication.cs
- XComponentModel.cs
- EdmConstants.cs
- Literal.cs
- ZoomPercentageConverter.cs
- TagPrefixAttribute.cs
- HttpHeaderCollection.cs
- AppliedDeviceFiltersEditor.cs
- DependencyPropertyValueSerializer.cs
- MenuAutoFormat.cs
- CharacterMetricsDictionary.cs
- Message.cs
- DataServiceQuery.cs
- graph.cs
- MethodBuilderInstantiation.cs
- ConfigurationProperty.cs
- SiteMapNodeItem.cs