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
- WinFormsComponentEditor.cs
- SimpleWebHandlerParser.cs
- ListViewItem.cs
- TracePayload.cs
- BaseCAMarshaler.cs
- FileUtil.cs
- SqlBuilder.cs
- VersionedStream.cs
- SQLMoney.cs
- BitmapData.cs
- WorkflowInspectionServices.cs
- CompilerWrapper.cs
- FilterableAttribute.cs
- SplitterPanel.cs
- IgnoreFlushAndCloseStream.cs
- MetadataArtifactLoaderComposite.cs
- BamlLocalizableResource.cs
- TimeStampChecker.cs
- EntityWrapperFactory.cs
- EditorAttributeInfo.cs
- ToolStripItemCollection.cs
- BinaryNegotiation.cs
- ZipPackage.cs
- DtdParser.cs
- ReachDocumentSequenceSerializer.cs
- DataGridViewCellCollection.cs
- RadialGradientBrush.cs
- PriorityQueue.cs
- SizeAnimationUsingKeyFrames.cs
- util.cs
- FocusChangedEventArgs.cs
- InspectionWorker.cs
- PathGeometry.cs
- DropShadowEffect.cs
- ResourceReferenceExpressionConverter.cs
- SchemaInfo.cs
- Crypto.cs
- XmlDownloadManager.cs
- DataExpression.cs
- DPAPIProtectedConfigurationProvider.cs
- SafeProcessHandle.cs
- AssociationTypeEmitter.cs
- MissingMethodException.cs
- RtfFormatStack.cs
- ISAPIRuntime.cs
- ComponentEditorForm.cs
- Bits.cs
- OleDbConnectionFactory.cs
- ICspAsymmetricAlgorithm.cs
- IImplicitResourceProvider.cs
- XmlSchemaSubstitutionGroup.cs
- HtmlInputButton.cs
- TypeExtensionConverter.cs
- SpoolingTaskBase.cs
- ServiceModelEnumValidatorAttribute.cs
- sqlpipe.cs
- TextDecorationLocationValidation.cs
- WebPartConnectionsConfigureVerb.cs
- DataGridViewRowConverter.cs
- CookieHandler.cs
- ToolStripItemTextRenderEventArgs.cs
- HtmlGenericControl.cs
- HttpCookie.cs
- DbMetaDataCollectionNames.cs
- Lasso.cs
- OrderByExpression.cs
- TextControl.cs
- XPathNodePointer.cs
- DirectoryNotFoundException.cs
- DataSourceCacheDurationConverter.cs
- ToggleButtonAutomationPeer.cs
- PrinterUnitConvert.cs
- CallContext.cs
- WindowsStatusBar.cs
- AffineTransform3D.cs
- GACMembershipCondition.cs
- DataGridViewCellFormattingEventArgs.cs
- TraceRecord.cs
- ArithmeticException.cs
- StringHelper.cs
- Int32Converter.cs
- AddInSegmentDirectoryNotFoundException.cs
- DataSpaceManager.cs
- LinkDescriptor.cs
- WindowsAuthenticationEventArgs.cs
- GeometryValueSerializer.cs
- SafeEventHandle.cs
- Perspective.cs
- EntityDataSourceMemberPath.cs
- SoapAttributeOverrides.cs
- ResourceCategoryAttribute.cs
- RemoveStoryboard.cs
- XmlSerializableReader.cs
- EpmTargetPathSegment.cs
- PathSegmentCollection.cs
- SimpleWorkerRequest.cs
- TableRowsCollectionEditor.cs
- TextProviderWrapper.cs
- FileResponseElement.cs
- COM2TypeInfoProcessor.cs