Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / clr / src / BCL / System / Globalization / TextElementEnumerator.cs / 1 / TextElementEnumerator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //////////////////////////////////////////////////////////////////////////// // // Class: TextElementEnumerator // // Purpose: // // Date: March 31, 1999 // //////////////////////////////////////////////////////////////////////////// using System.Runtime.Serialization; namespace System.Globalization { using System.Collections; // // This is public because GetTextElement() is public. // [Serializable] [System.Runtime.InteropServices.ComVisible(true)] public class TextElementEnumerator: IEnumerator { private String str; private int index; private int startIndex; [NonSerialized] private int strLen; // This is the length of the total string, counting from the beginning of string. [NonSerialized] private int currTextElementLen; // The current text element lenght after MoveNext() is called. [OptionalField(VersionAdded = 2)] private UnicodeCategory uc; [OptionalField(VersionAdded = 2)] private int charLen; // The next abstract char to look at after MoveNext() is called. It could be 1 or 2, depending on if it is a surrogate or not. internal TextElementEnumerator(String str, int startIndex, int strLen) { BCLDebug.Assert(str != null, "TextElementEnumerator(): str != null"); BCLDebug.Assert(startIndex >= 0 && strLen >= 0, "TextElementEnumerator(): startIndex >= 0 && strLen >= 0"); BCLDebug.Assert(strLen >= startIndex, "TextElementEnumerator(): strLen >= startIndex"); this.str = str; this.startIndex = startIndex; this.strLen = strLen; Reset(); } #region Serialization // the following fields is defined to keep the compatibility with Everett. // don't change/remove the names/types of these fields. private int endIndex; private int nextTextElementLen; [OnDeserializing] private void OnDeserializing(StreamingContext ctx) { charLen = -1; } [OnDeserialized] private void OnDeserialized(StreamingContext ctx) { strLen = endIndex + 1; currTextElementLen = nextTextElementLen; if (charLen == -1) { uc = CharUnicodeInfo.InternalGetUnicodeCategory(str, index, out charLen); } } [OnSerializing] private void OnSerializing(StreamingContext ctx) { endIndex = strLen - 1; nextTextElementLen = currTextElementLen; } #endregion Serialization public bool MoveNext() { if (index >= strLen) { // Make the index to be greater than strLen so that we can throw exception if GetTextElement() is called. index = strLen + 1; return (false); } currTextElementLen = StringInfo.GetCurrentTextElementLen(str, index, strLen, ref uc, ref charLen); index += currTextElementLen; return (true); } // // Get the current text element. // public Object Current { get { return (GetTextElement()); } } // // Get the current text element. // public String GetTextElement() { if (index == startIndex) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted")); } if (index > strLen) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumEnded")); } return (str.Substring(index - currTextElementLen, currTextElementLen)); } // // Get the starting index of the current text element. // public int ElementIndex { get { if (index == startIndex) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_EnumNotStarted")); } return (index - currTextElementLen); } } public void Reset() { index = startIndex; if (index < strLen) { // If we have more than 1 character, get the category of the current char. uc = CharUnicodeInfo.InternalGetUnicodeCategory(str, index, out charLen); } } } } // 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
- ResizeGrip.cs
- Shape.cs
- RegexCapture.cs
- GregorianCalendarHelper.cs
- RawStylusInputCustomData.cs
- CreatingCookieEventArgs.cs
- OLEDB_Enum.cs
- EntityDataSourceContextCreatedEventArgs.cs
- WebPartDisplayModeCollection.cs
- MetadataFile.cs
- OrCondition.cs
- CommentEmitter.cs
- SourceItem.cs
- SqlCacheDependencyDatabaseCollection.cs
- Rfc2898DeriveBytes.cs
- XmlNodeChangedEventArgs.cs
- WsiProfilesElementCollection.cs
- SHA256.cs
- SqlDependencyUtils.cs
- XmlSchemaCollection.cs
- TriggerBase.cs
- SiteMapSection.cs
- Crc32.cs
- ToolStripItemCollection.cs
- PublisherMembershipCondition.cs
- StylusButtonEventArgs.cs
- DispatcherExceptionEventArgs.cs
- ListItemCollection.cs
- HtmlSelect.cs
- ParameterToken.cs
- CompilerScopeManager.cs
- ConstrainedGroup.cs
- DataGridViewRowPostPaintEventArgs.cs
- PopOutPanel.cs
- RTLAwareMessageBox.cs
- ClientSettingsProvider.cs
- HtmlLabelAdapter.cs
- SmtpNegotiateAuthenticationModule.cs
- DependsOnAttribute.cs
- ToolBar.cs
- QilReplaceVisitor.cs
- ListViewItemEventArgs.cs
- SqlTypeSystemProvider.cs
- EntityContainerEntitySet.cs
- AQNBuilder.cs
- WebEvents.cs
- TrustLevelCollection.cs
- XmlSchemaImport.cs
- PageTextBox.cs
- xsdvalidator.cs
- UnmanagedBitmapWrapper.cs
- SqlConnectionStringBuilder.cs
- RawStylusInputCustomDataList.cs
- DnsPermission.cs
- BuildResult.cs
- XNameConverter.cs
- FixedDocumentPaginator.cs
- PartManifestEntry.cs
- Typeface.cs
- ItemChangedEventArgs.cs
- RegexMatchCollection.cs
- SvcFileManager.cs
- QilXmlWriter.cs
- DocumentPageView.cs
- LogEntrySerialization.cs
- DetailsViewRow.cs
- FtpRequestCacheValidator.cs
- GifBitmapEncoder.cs
- GridToolTip.cs
- ListenerUnsafeNativeMethods.cs
- XmlException.cs
- HttpPostedFileWrapper.cs
- HostedTransportConfigurationBase.cs
- ObjectStorage.cs
- SemaphoreFullException.cs
- ProvideValueServiceProvider.cs
- SafeReadContext.cs
- FormViewInsertEventArgs.cs
- SafeNativeMethods.cs
- serverconfig.cs
- SortFieldComparer.cs
- HttpHeaderCollection.cs
- SetState.cs
- MultiSelector.cs
- NullableConverter.cs
- CanonicalFontFamilyReference.cs
- PaintValueEventArgs.cs
- FileLogRecordHeader.cs
- CmsInterop.cs
- EntityTypeEmitter.cs
- CacheRequest.cs
- ListItemConverter.cs
- DefaultSerializationProviderAttribute.cs
- TimeZone.cs
- ProgressChangedEventArgs.cs
- TextBounds.cs
- RoleGroupCollectionEditor.cs
- UnmanagedHandle.cs
- DictionaryBase.cs
- XmlSchemaAnnotation.cs