Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- NamedPipeChannelListener.cs
- DefaultPrintController.cs
- XmlChildNodes.cs
- HttpPostedFile.cs
- DesignerDataStoredProcedure.cs
- RelatedPropertyManager.cs
- LabelEditEvent.cs
- DataBoundControlHelper.cs
- Page.cs
- AnnotationComponentManager.cs
- ConfigurationSectionCollection.cs
- Evaluator.cs
- Win32KeyboardDevice.cs
- DynamicMethod.cs
- XmlSchemaDatatype.cs
- Globals.cs
- EntityCommandExecutionException.cs
- StackSpiller.Bindings.cs
- StackOverflowException.cs
- MLangCodePageEncoding.cs
- ToolStripRenderEventArgs.cs
- PolicyUnit.cs
- FixedSOMTableCell.cs
- SqlConnection.cs
- AmbiguousMatchException.cs
- FlowLayoutPanelDesigner.cs
- Win32SafeHandles.cs
- TabPageDesigner.cs
- RenderingEventArgs.cs
- TextTrailingWordEllipsis.cs
- Parser.cs
- TranslateTransform3D.cs
- COM2Enum.cs
- QueueProcessor.cs
- ListViewDeletedEventArgs.cs
- CorrelationTokenTypeConvertor.cs
- ManipulationLogic.cs
- Label.cs
- ProxyHelper.cs
- BitFlagsGenerator.cs
- BamlRecordHelper.cs
- EngineSiteSapi.cs
- PromptStyle.cs
- EntryIndex.cs
- GridViewPageEventArgs.cs
- VideoDrawing.cs
- WindowHideOrCloseTracker.cs
- ComEventsMethod.cs
- ResumeStoryboard.cs
- LinearQuaternionKeyFrame.cs
- Rect.cs
- COM2DataTypeToManagedDataTypeConverter.cs
- XmlWriterDelegator.cs
- SqlDataSourceStatusEventArgs.cs
- ExpressionBuilder.cs
- AuthenticationModuleElement.cs
- InvokerUtil.cs
- ListViewContainer.cs
- XomlSerializationHelpers.cs
- TextCharacters.cs
- ScrollChrome.cs
- XmlSerializationWriter.cs
- PageRanges.cs
- TabControlCancelEvent.cs
- DataBindingCollection.cs
- ZipIOFileItemStream.cs
- KeyToListMap.cs
- Polygon.cs
- WaitHandleCannotBeOpenedException.cs
- AutomationIdentifier.cs
- Contracts.cs
- ObjectViewListener.cs
- InvalidProgramException.cs
- DocumentOrderQuery.cs
- UserPrincipalNameElement.cs
- MsdtcWrapper.cs
- ComponentCommands.cs
- OLEDB_Enum.cs
- SafePEFileHandle.cs
- MeasureData.cs
- CachedPathData.cs
- DataGridPagerStyle.cs
- AssemblyResourceLoader.cs
- DataTrigger.cs
- ParserContext.cs
- ParserHooks.cs
- XmlExtensionFunction.cs
- ConfigurationSectionGroup.cs
- InvalidComObjectException.cs
- DataGridTextBox.cs
- QuerySubExprEliminator.cs
- EntityFunctions.cs
- FlowDocumentReader.cs
- DnsPermission.cs
- BitmapEncoder.cs
- HostProtectionException.cs
- ConfigUtil.cs
- CFGGrammar.cs
- Label.cs
- Script.cs