Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / MS / Internal / TextFormatting / LexicalChunk.cs / 1305600 / 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
- XmlDataSourceView.cs
- RepeaterDesigner.cs
- TextAdaptor.cs
- DataGridCaption.cs
- CodeTypeConstructor.cs
- InternalTypeHelper.cs
- GetLedgerEntryForRecipientRequest.cs
- XmlSchemaComplexType.cs
- DbParameterCollectionHelper.cs
- ManagementEventWatcher.cs
- TextServicesHost.cs
- TagPrefixInfo.cs
- ItemList.cs
- PathFigureCollection.cs
- ListControlActionList.cs
- WmfPlaceableFileHeader.cs
- BreadCrumbTextConverter.cs
- DataGridRelationshipRow.cs
- XmlStringTable.cs
- PowerStatus.cs
- TrustLevelCollection.cs
- LZCodec.cs
- ThousandthOfEmRealDoubles.cs
- TextPointerBase.cs
- DocumentReferenceCollection.cs
- Region.cs
- Convert.cs
- GreenMethods.cs
- DesignRelation.cs
- HttpApplicationFactory.cs
- Pair.cs
- BindingOperations.cs
- MessageLoggingElement.cs
- CrossAppDomainChannel.cs
- MediaElementAutomationPeer.cs
- DebugManager.cs
- URI.cs
- SQLBoolean.cs
- BindingsSection.cs
- ScriptRegistrationManager.cs
- CodeNamespaceImport.cs
- TimeStampChecker.cs
- ClonableStack.cs
- TemplatePropertyEntry.cs
- XmlSchemaSequence.cs
- TransportChannelFactory.cs
- UnsafeNativeMethodsPenimc.cs
- ControlsConfig.cs
- RuleSettings.cs
- XPathConvert.cs
- DataGridViewTextBoxCell.cs
- Helper.cs
- VBIdentifierDesigner.xaml.cs
- FrameDimension.cs
- PersonalizationStateQuery.cs
- ExpandCollapseProviderWrapper.cs
- WebBrowserSiteBase.cs
- EmptyStringExpandableObjectConverter.cs
- ClassHandlersStore.cs
- RequestResizeEvent.cs
- ObjectListFieldCollection.cs
- Bold.cs
- DrawingVisualDrawingContext.cs
- DeclaredTypeElement.cs
- FrameworkContentElement.cs
- DataGridViewCheckBoxCell.cs
- NonBatchDirectoryCompiler.cs
- ChildrenQuery.cs
- ExtensionQuery.cs
- InOutArgumentConverter.cs
- EntityDataSourceMemberPath.cs
- QueryableDataSource.cs
- DataSourceGeneratorException.cs
- UriTemplate.cs
- ExpressionEditorAttribute.cs
- DynamicValidator.cs
- UdpMessageProperty.cs
- StylusPlugin.cs
- ErrorFormatterPage.cs
- TileBrush.cs
- HandleCollector.cs
- CodeNamespace.cs
- FixUp.cs
- DataGridState.cs
- DrawTreeNodeEventArgs.cs
- DateTimePicker.cs
- DataControlPagerLinkButton.cs
- CodeGotoStatement.cs
- CalendarDateRange.cs
- RegexFCD.cs
- CodeTypeDelegate.cs
- SafeCancelMibChangeNotify.cs
- RootBrowserWindowProxy.cs
- WCFModelStrings.Designer.cs
- Interfaces.cs
- PackWebResponse.cs
- TransportContext.cs
- MatrixTransform3D.cs
- PreservationFileReader.cs
- BidOverLoads.cs