Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ModelFunction.cs
- InternalSafeNativeMethods.cs
- LayoutExceptionEventArgs.cs
- Style.cs
- DataGridItemEventArgs.cs
- DataServiceClientException.cs
- UserControlDesigner.cs
- FileSystemInfo.cs
- ProxyGenerationError.cs
- ExtensionFile.cs
- SrgsRulesCollection.cs
- TransformerInfoCollection.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- CompareInfo.cs
- PointAnimationBase.cs
- ResolvedKeyFrameEntry.cs
- Queue.cs
- PersonalizableTypeEntry.cs
- BroadcastEventHelper.cs
- TimersDescriptionAttribute.cs
- MessageLogger.cs
- MachineKeySection.cs
- AsymmetricAlgorithm.cs
- TextTreeInsertUndoUnit.cs
- XamlClipboardData.cs
- XmlEncodedRawTextWriter.cs
- TypeInitializationException.cs
- Overlapped.cs
- ReferentialConstraint.cs
- NullReferenceException.cs
- StructuredTypeEmitter.cs
- SimpleRecyclingCache.cs
- VariableExpressionConverter.cs
- MetadataLocation.cs
- BaseInfoTable.cs
- AudioException.cs
- Compiler.cs
- PersistChildrenAttribute.cs
- IntranetCredentialPolicy.cs
- PixelFormats.cs
- hebrewshape.cs
- AssemblyInfo.cs
- HttpChannelBindingToken.cs
- Function.cs
- ExpressionConverter.cs
- ClientRoleProvider.cs
- ForwardPositionQuery.cs
- QuestionEventArgs.cs
- SchemaImporterExtensionElementCollection.cs
- lengthconverter.cs
- XmlSerializationWriter.cs
- KnownBoxes.cs
- SafeRightsManagementQueryHandle.cs
- XamlHttpHandlerFactory.cs
- XmlILStorageConverter.cs
- WindowsListView.cs
- ParenthesizePropertyNameAttribute.cs
- ListBindableAttribute.cs
- SimpleRecyclingCache.cs
- LocalFileSettingsProvider.cs
- X509ChainElement.cs
- invalidudtexception.cs
- ResourceSet.cs
- DataColumnMapping.cs
- ThemeableAttribute.cs
- UnsafeNativeMethodsPenimc.cs
- IPHostEntry.cs
- TransportConfigurationTypeElementCollection.cs
- assemblycache.cs
- SqlConnectionFactory.cs
- ProjectionCamera.cs
- RuntimeResourceSet.cs
- FunctionUpdateCommand.cs
- TextTreeTextNode.cs
- XmlElementAttributes.cs
- GridLength.cs
- TextParagraphView.cs
- TransactionTraceIdentifier.cs
- sqlpipe.cs
- XsdDataContractImporter.cs
- WebPartMinimizeVerb.cs
- DbInsertCommandTree.cs
- EventListenerClientSide.cs
- bindurihelper.cs
- SocketStream.cs
- RegexCapture.cs
- ApplicationFileParser.cs
- SamlSecurityTokenAuthenticator.cs
- BatchStream.cs
- Restrictions.cs
- ToolStripPanelRenderEventArgs.cs
- WindowHideOrCloseTracker.cs
- PointLightBase.cs
- InplaceBitmapMetadataWriter.cs
- UIElement3D.cs
- XmlSchemaInfo.cs
- CodeMemberMethod.cs
- TextTreeTextNode.cs
- FontStretchConverter.cs
- Util.cs