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
- HwndTarget.cs
- VirtualPath.cs
- Mouse.cs
- DocumentReferenceCollection.cs
- Rotation3DKeyFrameCollection.cs
- RelativeSource.cs
- Knowncolors.cs
- OpCodes.cs
- WebPartPersonalization.cs
- WindowsToolbarAsMenu.cs
- LassoHelper.cs
- CheckBoxRenderer.cs
- TextStore.cs
- XPathSelfQuery.cs
- ValueTypeFixupInfo.cs
- NamespaceCollection.cs
- PlainXmlSerializer.cs
- TextServicesCompartment.cs
- querybuilder.cs
- StrokeNodeOperations2.cs
- pingexception.cs
- TextServicesHost.cs
- XmlParserContext.cs
- DynamicAttribute.cs
- BaseAutoFormat.cs
- MiniLockedBorderGlyph.cs
- HierarchicalDataBoundControlAdapter.cs
- BrowserCapabilitiesCodeGenerator.cs
- TypeDescriptionProvider.cs
- CompilationUnit.cs
- DragEvent.cs
- XmlQuerySequence.cs
- SetStateDesigner.cs
- GeneralTransformGroup.cs
- QilDataSource.cs
- MarkupCompilePass1.cs
- DataRelationCollection.cs
- TemplatedEditableDesignerRegion.cs
- GridView.cs
- PngBitmapDecoder.cs
- recordstatescratchpad.cs
- ListViewContainer.cs
- SqlTypeSystemProvider.cs
- PresentationAppDomainManager.cs
- MessageSecurityOverHttp.cs
- RtfToXamlReader.cs
- InvalidAsynchronousStateException.cs
- SynchronizationLockException.cs
- AttachmentCollection.cs
- SelfSignedCertificate.cs
- NativeStructs.cs
- InternalBase.cs
- _ChunkParse.cs
- KnownTypesHelper.cs
- WebPart.cs
- ModelPerspective.cs
- JournalEntryListConverter.cs
- LoadWorkflowCommand.cs
- RbTree.cs
- LocatorPart.cs
- wgx_render.cs
- IISMapPath.cs
- FilterQuery.cs
- safesecurityhelperavalon.cs
- FileClassifier.cs
- DataSourceControlBuilder.cs
- WebPartsPersonalization.cs
- DataObjectFieldAttribute.cs
- CornerRadius.cs
- PreDigestedSignedInfo.cs
- Activity.cs
- XmlReflectionMember.cs
- HtmlLink.cs
- DataColumnMapping.cs
- DPAPIProtectedConfigurationProvider.cs
- CodeValidator.cs
- HierarchicalDataTemplate.cs
- DispatcherProcessingDisabled.cs
- OverflowException.cs
- IdentitySection.cs
- SequenceRangeCollection.cs
- CorrelationValidator.cs
- HttpPostedFile.cs
- RegistrationServices.cs
- ResourceDictionaryCollection.cs
- FlowchartStart.xaml.cs
- ComponentChangingEvent.cs
- ApplicationTrust.cs
- LogEntryUtils.cs
- ForceCopyBuildProvider.cs
- FileCodeGroup.cs
- ZoomComboBox.cs
- WebPartRestoreVerb.cs
- InvalidDataException.cs
- xsdvalidator.cs
- PenThreadWorker.cs
- ChineseLunisolarCalendar.cs
- DeviceContext2.cs
- CollectionConverter.cs
- DelegatingTypeDescriptionProvider.cs