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
- CallContext.cs
- StateManagedCollection.cs
- EncryptedHeaderXml.cs
- ActivityStatusChangeEventArgs.cs
- SqlWorkflowInstanceStoreLock.cs
- HttpChannelFactory.cs
- MergablePropertyAttribute.cs
- _Win32.cs
- EntitySqlQueryBuilder.cs
- BufferedGraphicsManager.cs
- SharedStream.cs
- ReadOnlyObservableCollection.cs
- ProxyGenerationError.cs
- TargetControlTypeAttribute.cs
- TextParentUndoUnit.cs
- DependencyPropertyDescriptor.cs
- WebEventTraceProvider.cs
- CodeCatchClause.cs
- SocketException.cs
- WebReferencesBuildProvider.cs
- input.cs
- DataGridClipboardCellContent.cs
- TreeNodeClickEventArgs.cs
- ValueUnavailableException.cs
- Expressions.cs
- NativeMethodsCLR.cs
- DataGridViewAutoSizeModeEventArgs.cs
- CaseInsensitiveHashCodeProvider.cs
- DataObject.cs
- DesignerActionVerbList.cs
- SQLBinaryStorage.cs
- ResXBuildProvider.cs
- CollectionChangeEventArgs.cs
- MarshalByRefObject.cs
- WebPartCollection.cs
- WebPartCatalogAddVerb.cs
- WindowsRebar.cs
- AudioFileOut.cs
- IntSecurity.cs
- BaseDataListDesigner.cs
- SR.Designer.cs
- TemplateBuilder.cs
- DeploymentSectionCache.cs
- CellConstant.cs
- StackOverflowException.cs
- WebBrowserEvent.cs
- VirtualDirectoryMappingCollection.cs
- VisualStyleTypesAndProperties.cs
- DataGridViewCellCancelEventArgs.cs
- SimpleWorkerRequest.cs
- UniformGrid.cs
- ShutDownListener.cs
- OutputBuffer.cs
- NameSpaceExtractor.cs
- HttpCapabilitiesSectionHandler.cs
- ImmutableClientRuntime.cs
- BaseAddressPrefixFilterElement.cs
- MouseActionValueSerializer.cs
- ItemCheckEvent.cs
- Cursor.cs
- MetadataSource.cs
- RegexParser.cs
- bidPrivateBase.cs
- SchemaNamespaceManager.cs
- TextFindEngine.cs
- ManualResetEvent.cs
- GroupBox.cs
- GrammarBuilderPhrase.cs
- SafeNativeMethods.cs
- MarkupWriter.cs
- DeviceContext2.cs
- DictionaryKeyPropertyAttribute.cs
- SqlUdtInfo.cs
- SchemaEntity.cs
- Int32Rect.cs
- FunctionDescription.cs
- StateDesigner.LayoutSelectionGlyph.cs
- cryptoapiTransform.cs
- DataGridViewAutoSizeColumnModeEventArgs.cs
- AppDomainFactory.cs
- CreateUserWizardStep.cs
- XsltFunctions.cs
- TreeNodeEventArgs.cs
- JavascriptCallbackBehaviorAttribute.cs
- OleDbFactory.cs
- RetrieveVirtualItemEventArgs.cs
- ToolStripOverflowButton.cs
- PropertyDescriptorComparer.cs
- SystemColorTracker.cs
- TrackBarRenderer.cs
- XPathArrayIterator.cs
- XsdCachingReader.cs
- TextEditorTyping.cs
- DataReaderContainer.cs
- PresentationTraceSources.cs
- JobInputBins.cs
- ComplusTypeValidator.cs
- DataReceivedEventArgs.cs
- DBConnection.cs
- JpegBitmapEncoder.cs