Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Globalization / TextElementEnumerator.cs / 1 / TextElementEnumerator.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== //////////////////////////////////////////////////////////////////////////// // // Class: TextElementEnumerator // // Purpose: // // Date: [....] 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. // // ==--== //////////////////////////////////////////////////////////////////////////// // // Class: TextElementEnumerator // // Purpose: // // Date: [....] 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SchemaEntity.cs
- TransformerInfo.cs
- OletxResourceManager.cs
- xmlfixedPageInfo.cs
- BatchWriter.cs
- ButtonColumn.cs
- ProxyWebPart.cs
- SQLInt32Storage.cs
- ServiceProviders.cs
- NumericUpDown.cs
- ObjectListCommandCollection.cs
- ImmComposition.cs
- QueryParameter.cs
- UnhandledExceptionEventArgs.cs
- PassportAuthenticationModule.cs
- ChtmlTextWriter.cs
- HtmlControlDesigner.cs
- Context.cs
- WebPartEditVerb.cs
- DependencyPropertyChangedEventArgs.cs
- WebPartConnectVerb.cs
- HttpConfigurationContext.cs
- _BaseOverlappedAsyncResult.cs
- QilGeneratorEnv.cs
- BaseTemplateParser.cs
- InputLanguageSource.cs
- SecurityIdentifierElementCollection.cs
- DataServiceProcessingPipeline.cs
- DetailsViewUpdatedEventArgs.cs
- SynchronizedMessageSource.cs
- MergeFailedEvent.cs
- NominalTypeEliminator.cs
- AnnotationService.cs
- URLIdentityPermission.cs
- CultureTableRecord.cs
- DispatcherFrame.cs
- TextTrailingCharacterEllipsis.cs
- ExpressionBuilder.cs
- DbConnectionPoolOptions.cs
- SoapFaultCodes.cs
- AtlasWeb.Designer.cs
- Track.cs
- MailMessage.cs
- AppDomainGrammarProxy.cs
- WsatAdminException.cs
- HttpPostedFileBase.cs
- SiteOfOriginPart.cs
- ParserContext.cs
- WriteTimeStream.cs
- LinearQuaternionKeyFrame.cs
- EnumMemberAttribute.cs
- DataRelationPropertyDescriptor.cs
- HandoffBehavior.cs
- RelationshipWrapper.cs
- ManualWorkflowSchedulerService.cs
- Html32TextWriter.cs
- Socket.cs
- CompilerLocalReference.cs
- TableDetailsRow.cs
- Themes.cs
- QueryableDataSourceView.cs
- UnmanagedMemoryStreamWrapper.cs
- ChildrenQuery.cs
- FilteredReadOnlyMetadataCollection.cs
- ScriptingAuthenticationServiceSection.cs
- AppDomainFactory.cs
- DataTableMapping.cs
- DatatypeImplementation.cs
- SkipStoryboardToFill.cs
- Row.cs
- ResourceSetExpression.cs
- LinearKeyFrames.cs
- ProcessRequestArgs.cs
- PreviewPageInfo.cs
- ObjectConverter.cs
- Switch.cs
- OleDbDataReader.cs
- coordinator.cs
- MultitargetUtil.cs
- TextFindEngine.cs
- StringReader.cs
- WorkItem.cs
- HyperLinkColumn.cs
- M3DUtil.cs
- NotifyIcon.cs
- ResourcesBuildProvider.cs
- LostFocusEventManager.cs
- EntryPointNotFoundException.cs
- CheckBoxList.cs
- Monitor.cs
- WorkflowMarkupSerializationManager.cs
- XmlSchemaAll.cs
- PropertyGeneratedEventArgs.cs
- RTLAwareMessageBox.cs
- TreeNodeConverter.cs
- SQLConvert.cs
- TreeNodeStyleCollectionEditor.cs
- ECDiffieHellmanCngPublicKey.cs
- ApplicationBuildProvider.cs
- WindowsStartMenu.cs