Code:
/ DotNET / DotNET / 8.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
- XPathNodeIterator.cs
- AssemblySettingAttributes.cs
- OperationBehaviorAttribute.cs
- NGCSerializationManagerAsync.cs
- TerminateSequenceResponse.cs
- ConvertersCollection.cs
- DiscoveryEndpoint.cs
- RoleBoolean.cs
- StylusButtonEventArgs.cs
- SafeMILHandle.cs
- unsafeIndexingFilterStream.cs
- TemplateControlBuildProvider.cs
- UrlAuthFailedErrorFormatter.cs
- ExpressionTable.cs
- Unit.cs
- HostingEnvironmentSection.cs
- XmlSchemaExternal.cs
- EngineSite.cs
- SerializationObjectManager.cs
- MissingSatelliteAssemblyException.cs
- DataListDesigner.cs
- C14NUtil.cs
- TextParagraphView.cs
- HttpCapabilitiesSectionHandler.cs
- PeerCollaboration.cs
- DataGridViewUtilities.cs
- CompensatableTransactionScopeActivityDesigner.cs
- ListViewGroup.cs
- StaticSiteMapProvider.cs
- FormClosingEvent.cs
- VisualStyleTypesAndProperties.cs
- MaskedTextProvider.cs
- ViewgenContext.cs
- HierarchicalDataTemplate.cs
- State.cs
- WorkflowApplicationAbortedException.cs
- HTMLTextWriter.cs
- BlobPersonalizationState.cs
- WebPartConnectionsCancelVerb.cs
- FamilyMapCollection.cs
- ActiveDocumentEvent.cs
- BindingValueChangedEventArgs.cs
- SystemColorTracker.cs
- PeerSecurityManager.cs
- AesCryptoServiceProvider.cs
- XPathNavigatorReader.cs
- NamespaceDisplay.xaml.cs
- ComponentEvent.cs
- ModelServiceImpl.cs
- DrawingCollection.cs
- EtwTrace.cs
- UDPClient.cs
- XmlSchemaObjectCollection.cs
- CapabilitiesRule.cs
- Double.cs
- BufferedGraphicsContext.cs
- CreateRefExpr.cs
- PropertyItem.cs
- MarkupExtensionParser.cs
- EncodedStreamFactory.cs
- ButtonStandardAdapter.cs
- TickBar.cs
- UpdatePanelTriggerCollection.cs
- ServiceHttpHandlerFactory.cs
- GregorianCalendarHelper.cs
- KeyGestureValueSerializer.cs
- PathStreamGeometryContext.cs
- MenuItemAutomationPeer.cs
- SerializerProvider.cs
- CqlParserHelpers.cs
- DataTableMapping.cs
- GradientStop.cs
- Paragraph.cs
- ResourceContainer.cs
- NumberSubstitution.cs
- NewItemsContextMenuStrip.cs
- ClientScriptManager.cs
- InputManager.cs
- StackOverflowException.cs
- ToolStripItemRenderEventArgs.cs
- ListDictionaryInternal.cs
- WebBrowserDocumentCompletedEventHandler.cs
- OperatingSystem.cs
- Screen.cs
- RemotingAttributes.cs
- ColumnWidthChangedEvent.cs
- MetadataWorkspace.cs
- TreeSet.cs
- CustomAssemblyResolver.cs
- SoapIncludeAttribute.cs
- AssociatedControlConverter.cs
- FieldDescriptor.cs
- ClientSession.cs
- PointAnimationUsingPath.cs
- CountdownEvent.cs
- PropertyCollection.cs
- Process.cs
- ValidationHelper.cs
- EventTask.cs
- RegexNode.cs