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
- BinaryVersion.cs
- TreePrinter.cs
- TempFiles.cs
- BatchStream.cs
- backend.cs
- isolationinterop.cs
- PointKeyFrameCollection.cs
- _HeaderInfoTable.cs
- DataGridSortCommandEventArgs.cs
- Int16AnimationBase.cs
- FileRegion.cs
- RadioButton.cs
- ItemCheckedEvent.cs
- ContourSegment.cs
- PixelShader.cs
- InputScope.cs
- figurelengthconverter.cs
- BrowsableAttribute.cs
- PageStatePersister.cs
- RawStylusInputReport.cs
- ConstNode.cs
- CheckBoxList.cs
- AttachmentCollection.cs
- RegisteredDisposeScript.cs
- PointValueSerializer.cs
- DataGridViewSortCompareEventArgs.cs
- DeviceContext2.cs
- FormsAuthenticationTicket.cs
- Int32AnimationBase.cs
- ADRoleFactoryConfiguration.cs
- X509CertificateInitiatorClientCredential.cs
- OleDbMetaDataFactory.cs
- Visual3D.cs
- SpeakInfo.cs
- BypassElementCollection.cs
- BitmapEffectInputData.cs
- AlphabeticalEnumConverter.cs
- ReadOnlyCollection.cs
- NavigationWindowAutomationPeer.cs
- SiteMap.cs
- CounterSampleCalculator.cs
- XsdDuration.cs
- Scanner.cs
- XmlQueryContext.cs
- TypeConverterHelper.cs
- WorkflowRuntime.cs
- CancellationState.cs
- CommandLibraryHelper.cs
- ClientSponsor.cs
- ErrorFormatterPage.cs
- XmlSchemaCollection.cs
- PinnedBufferMemoryStream.cs
- CapacityStreamGeometryContext.cs
- ComplexPropertyEntry.cs
- MouseGestureValueSerializer.cs
- CompatibleComparer.cs
- ChainOfResponsibility.cs
- FilePrompt.cs
- ToolStripTemplateNode.cs
- RequestQueue.cs
- SafeTimerHandle.cs
- OwnerDrawPropertyBag.cs
- UnsafeNetInfoNativeMethods.cs
- LogWriteRestartAreaState.cs
- AspNetSynchronizationContext.cs
- SemanticBasicElement.cs
- RegexCharClass.cs
- GeometryValueSerializer.cs
- ObfuscateAssemblyAttribute.cs
- Table.cs
- Schema.cs
- XmlSchemaAttribute.cs
- BaseDataListComponentEditor.cs
- AutomationIdentifier.cs
- DocumentGrid.cs
- DPCustomTypeDescriptor.cs
- LookupBindingPropertiesAttribute.cs
- XmlChildNodes.cs
- CommonXSendMessage.cs
- SQLBinary.cs
- TypeElementCollection.cs
- PathFigure.cs
- XmlHierarchyData.cs
- DataGridViewRowEventArgs.cs
- DocumentSequence.cs
- GlyphShapingProperties.cs
- SubtreeProcessor.cs
- ToolBarPanel.cs
- NonParentingControl.cs
- SecurityVersion.cs
- SecureStringHasher.cs
- _NestedSingleAsyncResult.cs
- ViewStateException.cs
- TextComposition.cs
- ValuePattern.cs
- ComponentDesigner.cs
- NativeRightsManagementAPIsStructures.cs
- WebDisplayNameAttribute.cs
- LinkedResource.cs
- InvalidComObjectException.cs