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
- NavigationProperty.cs
- WebPartExportVerb.cs
- InheritanceContextChangedEventManager.cs
- AuthenticationModulesSection.cs
- ProviderCollection.cs
- ProjectionPruner.cs
- FirstMatchCodeGroup.cs
- DetailsViewInsertEventArgs.cs
- SchemaTypeEmitter.cs
- WaitHandleCannotBeOpenedException.cs
- IPPacketInformation.cs
- WindowInteractionStateTracker.cs
- AddInBase.cs
- CipherData.cs
- BitmapEffectDrawing.cs
- VariableQuery.cs
- MouseBinding.cs
- ControlBuilder.cs
- GeometryHitTestResult.cs
- Renderer.cs
- Int32Storage.cs
- _HTTPDateParse.cs
- FormsIdentity.cs
- CreateInstanceBinder.cs
- StateItem.cs
- HtmlInputReset.cs
- HighlightVisual.cs
- WebControlAdapter.cs
- XmlSchemas.cs
- Context.cs
- ToolStripSplitButton.cs
- GC.cs
- EventDriven.cs
- ListViewSortEventArgs.cs
- WebPartDisplayMode.cs
- MarshalDirectiveException.cs
- FontDriver.cs
- CircleHotSpot.cs
- SessionStateUtil.cs
- RawKeyboardInputReport.cs
- DataContractSerializer.cs
- TableLayoutRowStyleCollection.cs
- ProfileProvider.cs
- AccessKeyManager.cs
- BlockCollection.cs
- XmlAtomicValue.cs
- TcpSocketManager.cs
- SwitchElementsCollection.cs
- IRCollection.cs
- ReferenceEqualityComparer.cs
- HostingEnvironment.cs
- OptimizerPatterns.cs
- NameTable.cs
- ErrorHandlingAcceptor.cs
- HttpInputStream.cs
- ApplicationProxyInternal.cs
- HandledMouseEvent.cs
- MemoryMappedViewAccessor.cs
- DateTimeValueSerializer.cs
- ClientConfigurationHost.cs
- DtdParser.cs
- OleDbReferenceCollection.cs
- QilXmlReader.cs
- SessionSwitchEventArgs.cs
- InstanceHandle.cs
- sqlcontext.cs
- EntityModelBuildProvider.cs
- SkewTransform.cs
- GcHandle.cs
- BitmapEffectDrawing.cs
- DependentList.cs
- SecurityBindingElement.cs
- DataServiceExpressionVisitor.cs
- WebPartZone.cs
- PerformanceCounter.cs
- Exceptions.cs
- XmlSchemaObjectCollection.cs
- HtmlElement.cs
- Atom10FormatterFactory.cs
- ShaderRenderModeValidation.cs
- WindowsListViewScroll.cs
- relpropertyhelper.cs
- TextRangeSerialization.cs
- ParseHttpDate.cs
- Stylesheet.cs
- _Win32.cs
- CorruptingExceptionCommon.cs
- QueryStack.cs
- sqlstateclientmanager.cs
- SecurityUtils.cs
- SeekableReadStream.cs
- OdbcDataAdapter.cs
- SchemaImporterExtensionElement.cs
- ChangeBlockUndoRecord.cs
- HiddenField.cs
- HttpProfileGroupBase.cs
- PageHandlerFactory.cs
- StringUtil.cs
- Property.cs
- SmtpNegotiateAuthenticationModule.cs