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
- ISAPIRuntime.cs
- DynamicMethod.cs
- XmlSerializationWriter.cs
- TraceSection.cs
- ImageBrush.cs
- HexParser.cs
- DataGridViewDataConnection.cs
- _ContextAwareResult.cs
- ContainerControl.cs
- InvalidEnumArgumentException.cs
- CngUIPolicy.cs
- ClockController.cs
- PieceNameHelper.cs
- WindowsStartMenu.cs
- QueryableDataSourceEditData.cs
- XomlCompilerHelpers.cs
- SchemaType.cs
- WebRequestModuleElementCollection.cs
- CheckBoxFlatAdapter.cs
- MaskedTextBoxTextEditor.cs
- TemplateControlCodeDomTreeGenerator.cs
- TransformGroup.cs
- WmlImageAdapter.cs
- EventsTab.cs
- DesignTimeData.cs
- WmpBitmapEncoder.cs
- DrawingBrush.cs
- AppSecurityManager.cs
- GenericIdentity.cs
- ListBoxItemAutomationPeer.cs
- FtpRequestCacheValidator.cs
- BulletDecorator.cs
- Point3DAnimationUsingKeyFrames.cs
- NetTcpSecurityElement.cs
- GridSplitterAutomationPeer.cs
- ContainerParagraph.cs
- WindowsToolbarAsMenu.cs
- WindowsTokenRoleProvider.cs
- Underline.cs
- XmlObjectSerializerReadContext.cs
- ScrollItemPattern.cs
- TreeViewImageKeyConverter.cs
- RowsCopiedEventArgs.cs
- HtmlInputFile.cs
- InputProcessorProfiles.cs
- WebPartMovingEventArgs.cs
- BCLDebug.cs
- AddressAccessDeniedException.cs
- Version.cs
- Converter.cs
- OleDbParameterCollection.cs
- SelectorAutomationPeer.cs
- Baml6ConstructorInfo.cs
- CacheMemory.cs
- CompensateDesigner.cs
- Transform3DGroup.cs
- XmlAtomicValue.cs
- ExpressionVisitor.cs
- SMSvcHost.cs
- ManagedIStream.cs
- OutputCacheSection.cs
- AbsoluteQuery.cs
- SecurityState.cs
- EnumType.cs
- XmlILAnnotation.cs
- webclient.cs
- WebUtil.cs
- Profiler.cs
- ToolStripInSituService.cs
- DesignTable.cs
- SecurityContextSecurityTokenResolver.cs
- WebPartZone.cs
- HMACMD5.cs
- SpeechSeg.cs
- ExtenderHelpers.cs
- XmlSchemaComplexContent.cs
- AnonymousIdentificationModule.cs
- DataIdProcessor.cs
- NullableIntMinMaxAggregationOperator.cs
- SafeUserTokenHandle.cs
- ApplicationDirectoryMembershipCondition.cs
- FormatVersion.cs
- AttachedAnnotationChangedEventArgs.cs
- RawStylusInputCustomDataList.cs
- FontCacheLogic.cs
- StreamWriter.cs
- TouchDevice.cs
- BindingMAnagerBase.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- Module.cs
- DataSourceDescriptorCollection.cs
- EarlyBoundInfo.cs
- SiteMapDataSourceDesigner.cs
- WrappedIUnknown.cs
- ValidationErrorCollection.cs
- PagerSettings.cs
- TabItemAutomationPeer.cs
- SymbolResolver.cs
- DSASignatureFormatter.cs
- ErrorStyle.cs