Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- SafeLibraryHandle.cs
- HtmlTitle.cs
- KnownBoxes.cs
- MultiView.cs
- InputQueueChannel.cs
- SuppressMergeCheckAttribute.cs
- Dynamic.cs
- Size3D.cs
- ListViewAutomationPeer.cs
- ExtractedStateEntry.cs
- TextProperties.cs
- CaseInsensitiveOrdinalStringComparer.cs
- EventHandlersDesigner.cs
- BooleanExpr.cs
- GPStream.cs
- ThumbButtonInfo.cs
- FlowchartDesigner.xaml.cs
- WinInetCache.cs
- ListViewGroup.cs
- TextSpanModifier.cs
- DataBinder.cs
- MetaModel.cs
- ApplicationId.cs
- AssertFilter.cs
- XmlProcessingInstruction.cs
- XPathNode.cs
- LocationEnvironment.cs
- FactoryGenerator.cs
- ListViewCancelEventArgs.cs
- ToolStripRenderEventArgs.cs
- DispatcherObject.cs
- BridgeDataRecord.cs
- ListItemConverter.cs
- RightsManagementPermission.cs
- TreeView.cs
- AssemblyInfo.cs
- BindableTemplateBuilder.cs
- ConfigurationManagerHelperFactory.cs
- UserMapPath.cs
- ValidationPropertyAttribute.cs
- SqlUtil.cs
- ForEachAction.cs
- COAUTHIDENTITY.cs
- HTMLTextWriter.cs
- TextUtf8RawTextWriter.cs
- TablePatternIdentifiers.cs
- IPAddress.cs
- TextHintingModeValidation.cs
- DbXmlEnabledProviderManifest.cs
- COAUTHINFO.cs
- Accessible.cs
- XamlStyleSerializer.cs
- ThousandthOfEmRealDoubles.cs
- TablePatternIdentifiers.cs
- LayoutEvent.cs
- CompatibleComparer.cs
- HtmlInputButton.cs
- BitmapEffectInputData.cs
- PopupControlService.cs
- RedistVersionInfo.cs
- GAC.cs
- ListViewTableRow.cs
- ActionItem.cs
- PropertyBuilder.cs
- QilReplaceVisitor.cs
- PrePostDescendentsWalker.cs
- InvalidCastException.cs
- AlgoModule.cs
- WebPartZoneBase.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- NodeInfo.cs
- SimpleFieldTemplateFactory.cs
- ParseNumbers.cs
- XmlChoiceIdentifierAttribute.cs
- StreamedWorkflowDefinitionContext.cs
- DataGridViewRowCancelEventArgs.cs
- ProcessInfo.cs
- XmlSerializerFaultFormatter.cs
- DataGridViewElement.cs
- COM2PictureConverter.cs
- ServiceModelEnhancedConfigurationElementCollection.cs
- EventMappingSettingsCollection.cs
- ElementHostPropertyMap.cs
- XpsException.cs
- ListBoxItemAutomationPeer.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- PropertyInfo.cs
- ContentType.cs
- GZipStream.cs
- ListDesigner.cs
- IgnoreSection.cs
- LoginView.cs
- PlainXmlDeserializer.cs
- PartialCachingControl.cs
- ScriptReferenceBase.cs
- List.cs
- BufferedGraphics.cs
- DoubleCollection.cs
- DetailsView.cs
- ProtectedProviderSettings.cs