Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- CustomAssemblyResolver.cs
- CssStyleCollection.cs
- RemoteHelper.cs
- CornerRadius.cs
- SafeThemeHandle.cs
- ListView.cs
- ResourceManager.cs
- Menu.cs
- DispatcherSynchronizationContext.cs
- ExpressionNode.cs
- PingOptions.cs
- EnvironmentPermission.cs
- EventSetter.cs
- ByteAnimationUsingKeyFrames.cs
- InvokeSchedule.cs
- WebPartsPersonalization.cs
- FrameworkContentElement.cs
- BitmapEffectRenderDataResource.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- Int16Animation.cs
- EntityDataSourceEntityTypeFilterItem.cs
- DecimalConstantAttribute.cs
- HMACSHA256.cs
- FormsAuthenticationModule.cs
- MobileUserControlDesigner.cs
- InitializingNewItemEventArgs.cs
- MaterialCollection.cs
- DesignerGeometryHelper.cs
- _FixedSizeReader.cs
- ConsoleEntryPoint.cs
- ReadWriteObjectLock.cs
- TextSimpleMarkerProperties.cs
- FlowLayout.cs
- nulltextnavigator.cs
- DecimalAnimation.cs
- DocumentSequenceHighlightLayer.cs
- DictionaryBase.cs
- Translator.cs
- ITextView.cs
- AutomationElementCollection.cs
- WebPartTransformerCollection.cs
- ValuePatternIdentifiers.cs
- UnaryExpressionHelper.cs
- EdmComplexPropertyAttribute.cs
- SrgsOneOf.cs
- SqlProfileProvider.cs
- MetadataArtifactLoaderFile.cs
- ComponentManagerBroker.cs
- ClearTypeHintValidation.cs
- DesignTimeParseData.cs
- DecimalAnimation.cs
- ExtenderProvidedPropertyAttribute.cs
- WebHttpBinding.cs
- NestPullup.cs
- SiteMapDataSource.cs
- UTF8Encoding.cs
- SQLByteStorage.cs
- WebServiceFault.cs
- DynamicMetaObjectBinder.cs
- wmiprovider.cs
- BindingListCollectionView.cs
- DataGridViewCellLinkedList.cs
- Tool.cs
- DataGridColumnStyleMappingNameEditor.cs
- DoubleConverter.cs
- TextModifierScope.cs
- FigureParaClient.cs
- CodeCatchClauseCollection.cs
- WebPageTraceListener.cs
- Misc.cs
- Stacktrace.cs
- ToolboxCategoryItems.cs
- DeviceSpecificChoiceCollection.cs
- RichTextBoxDesigner.cs
- wpf-etw.cs
- SizeIndependentAnimationStorage.cs
- DrawingAttributesDefaultValueFactory.cs
- ColorAnimation.cs
- Mappings.cs
- SafeFileMappingHandle.cs
- CopyAction.cs
- SafeProcessHandle.cs
- ComPlusTypeLoader.cs
- OpacityConverter.cs
- DesignerForm.cs
- Boolean.cs
- BmpBitmapDecoder.cs
- ActivityScheduledQuery.cs
- PopOutPanel.cs
- TempEnvironment.cs
- JsonGlobals.cs
- WebPartActionVerb.cs
- WindowsFormsHelpers.cs
- EventLogEntryCollection.cs
- TextRangeSerialization.cs
- SetIterators.cs
- UIElement3DAutomationPeer.cs
- formatstringdialog.cs
- HandlerMappingMemo.cs
- _ReceiveMessageOverlappedAsyncResult.cs