Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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); } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- BitmapEffectrendercontext.cs
- ADMembershipUser.cs
- DoubleLink.cs
- EntityDataSourceQueryBuilder.cs
- ListViewPagedDataSource.cs
- GetRecipientRequest.cs
- SoapExtensionImporter.cs
- WsatServiceCertificate.cs
- IndentTextWriter.cs
- IResourceProvider.cs
- CatalogZoneBase.cs
- MetadataItemSerializer.cs
- PrimitiveType.cs
- QualifierSet.cs
- PolicyDesigner.cs
- SetStateDesigner.cs
- designeractionbehavior.cs
- XmlRawWriterWrapper.cs
- ValidationError.cs
- DtcInterfaces.cs
- XDRSchema.cs
- SingleAnimation.cs
- BCLDebug.cs
- NotImplementedException.cs
- ToolStripDesigner.cs
- ComEventsInfo.cs
- EventLogger.cs
- BasicCellRelation.cs
- BindingsCollection.cs
- ModelPropertyImpl.cs
- URIFormatException.cs
- HuffModule.cs
- DesignerDataConnection.cs
- CharAnimationUsingKeyFrames.cs
- MenuTracker.cs
- ListViewInsertEventArgs.cs
- MsiStyleLogWriter.cs
- DispatcherHooks.cs
- DesignerEditorPartChrome.cs
- StylusButtonEventArgs.cs
- LayoutEngine.cs
- HandlerBase.cs
- OutputCacheModule.cs
- EventProviderTraceListener.cs
- TdsParser.cs
- M3DUtil.cs
- DataBoundControlHelper.cs
- SystemParameters.cs
- Directory.cs
- ServicesUtilities.cs
- TabItemAutomationPeer.cs
- ByteAnimation.cs
- MostlySingletonList.cs
- SqlReferenceCollection.cs
- RoutingTable.cs
- UrlSyndicationContent.cs
- LinqExpressionNormalizer.cs
- EnumBuilder.cs
- NativeMethods.cs
- FieldNameLookup.cs
- ConnectionManagementElementCollection.cs
- TextViewSelectionProcessor.cs
- Camera.cs
- QueryContinueDragEventArgs.cs
- PropertySet.cs
- ToolStripStatusLabel.cs
- ExtensionQuery.cs
- invalidudtexception.cs
- AndCondition.cs
- DataSysAttribute.cs
- OneWayChannelFactory.cs
- CacheChildrenQuery.cs
- CompositionTarget.cs
- RecommendedAsConfigurableAttribute.cs
- GridViewUpdatedEventArgs.cs
- IdentityReference.cs
- FlowDocumentView.cs
- Label.cs
- GeneralTransform3DTo2DTo3D.cs
- UMPAttributes.cs
- Int32CollectionValueSerializer.cs
- HttpPostProtocolReflector.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- DataGridViewHeaderCell.cs
- FixedFindEngine.cs
- StandardToolWindows.cs
- KeyInterop.cs
- DayRenderEvent.cs
- SoapEnumAttribute.cs
- PenLineJoinValidation.cs
- XmlNamespaceMappingCollection.cs
- UserInitiatedRoutedEventPermission.cs
- ErrorTableItemStyle.cs
- DescriptionAttribute.cs
- RNGCryptoServiceProvider.cs
- WindowsEditBox.cs
- CapacityStreamGeometryContext.cs
- SimpleBitVector32.cs
- SystemFonts.cs
- XmlSerializerAssemblyAttribute.cs