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
- ScriptControlManager.cs
- RectAnimation.cs
- LogPolicy.cs
- BindableTemplateBuilder.cs
- HwndAppCommandInputProvider.cs
- ParameterExpression.cs
- HtmlInputSubmit.cs
- ColumnCollection.cs
- LocalBuilder.cs
- OracleFactory.cs
- ObjectListItemCollection.cs
- LocalValueEnumerator.cs
- FlowNode.cs
- BitmapEffectInputData.cs
- CorrelationValidator.cs
- ExceptionNotification.cs
- ObjectDataSourceView.cs
- CustomWebEventKey.cs
- DynamicControl.cs
- TemplateBaseAction.cs
- CodeVariableReferenceExpression.cs
- XmlSerializerVersionAttribute.cs
- ReadWriteSpinLock.cs
- XamlPoint3DCollectionSerializer.cs
- Logging.cs
- HttpProfileGroupBase.cs
- RuleSettings.cs
- LineSegment.cs
- ExceptionRoutedEventArgs.cs
- WindowsUserNameCachingSecurityTokenAuthenticator.cs
- EventHandlerService.cs
- TransformerInfoCollection.cs
- ListDictionaryInternal.cs
- PrimitiveCodeDomSerializer.cs
- DecoderFallbackWithFailureFlag.cs
- TrustSection.cs
- HashMembershipCondition.cs
- ImageDrawing.cs
- ErrorFormatter.cs
- PngBitmapDecoder.cs
- SortedList.cs
- ProjectionPath.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- EditorPartCollection.cs
- ProtectedConfigurationSection.cs
- StringReader.cs
- CompositeControl.cs
- DefaultPrintController.cs
- XPathCompileException.cs
- DrawingBrush.cs
- Converter.cs
- MapPathBasedVirtualPathProvider.cs
- RawUIStateInputReport.cs
- CodeDirectionExpression.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- Rect3DConverter.cs
- SpecularMaterial.cs
- XmlDataSource.cs
- InputElement.cs
- DoubleCollectionValueSerializer.cs
- Crc32.cs
- GlyphRunDrawing.cs
- WebBrowserNavigatingEventHandler.cs
- GradientBrush.cs
- AutoResizedEvent.cs
- TextRangeSerialization.cs
- Animatable.cs
- DataSourceXmlAttributeAttribute.cs
- Form.cs
- ResourceWriter.cs
- InvalidWMPVersionException.cs
- AvTrace.cs
- DefaultHttpHandler.cs
- DivideByZeroException.cs
- ParameterModifier.cs
- TableLayoutCellPaintEventArgs.cs
- Column.cs
- SystemIPv4InterfaceProperties.cs
- GifBitmapDecoder.cs
- ContractMethodInfo.cs
- PolygonHotSpot.cs
- DocumentPageTextView.cs
- DataControlFieldCell.cs
- NotifyInputEventArgs.cs
- EntityViewGenerator.cs
- EntityUtil.cs
- HttpStaticObjectsCollectionBase.cs
- ProcessProtocolHandler.cs
- WebBrowserUriTypeConverter.cs
- RegisteredExpandoAttribute.cs
- FacetDescription.cs
- DocumentOrderComparer.cs
- MenuItem.cs
- Int32Collection.cs
- SimpleWorkerRequest.cs
- WorkflowOperationFault.cs
- RegexFCD.cs
- GlobalizationAssembly.cs
- BaseParser.cs
- SafeEventLogReadHandle.cs