using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Text; namespace System.Globalization { /// Defines text properties and behaviors, such as casing, that are specific to a writing system. // Token: 0x0200019A RID: 410 [ComVisible(true)] [MonoTODO("IDeserializationCallback isn't implemented.")] [Serializable] public class TextInfo : ICloneable, IDeserializationCallback { // Token: 0x060014D6 RID: 5334 RVA: 0x00050068 File Offset: 0x0004E268 internal unsafe TextInfo(CultureInfo ci, int lcid, void* data, bool read_only) { this.m_isReadOnly = read_only; this.m_win32LangID = lcid; this.ci = ci; if (data != null) { this.data = *(TextInfo.Data*)data; } else { this.data = default(TextInfo.Data); this.data.list_sep = 44; } CultureInfo cultureInfo = ci; while (cultureInfo.Parent != null && cultureInfo.Parent.LCID != 127 && cultureInfo.Parent != cultureInfo) { cultureInfo = cultureInfo.Parent; } if (cultureInfo != null) { int lcid2 = cultureInfo.LCID; if (lcid2 == 31 || lcid2 == 44) { this.handleDotI = true; } } } // Token: 0x060014D7 RID: 5335 RVA: 0x0005012C File Offset: 0x0004E32C private TextInfo(TextInfo textInfo) { this.m_win32LangID = textInfo.m_win32LangID; this.m_nDataItem = textInfo.m_nDataItem; this.m_useUserOverride = textInfo.m_useUserOverride; this.m_listSeparator = textInfo.ListSeparator; this.customCultureName = textInfo.CultureName; this.ci = textInfo.ci; this.handleDotI = textInfo.handleDotI; this.data = textInfo.data; } /// Raises the deserialization event when deserialization is complete. /// The source of the deserialization event. // Token: 0x060014D8 RID: 5336 RVA: 0x000501A0 File Offset: 0x0004E3A0 [MonoTODO] void IDeserializationCallback.OnDeserialization(object sender) { } /// Gets the American National Standards Institute (ANSI) code page used by the writing system represented by the current . /// The ANSI code page used by the writing system represented by the current . // Token: 0x170003B1 RID: 945 // (get) Token: 0x060014D9 RID: 5337 RVA: 0x000501A4 File Offset: 0x0004E3A4 public virtual int ANSICodePage { get { return this.data.ansi; } } /// Gets the Extended Binary Coded Decimal Interchange Code (EBCDIC) code page used by the writing system represented by the current . /// The EBCDIC code page used by the writing system represented by the current . // Token: 0x170003B2 RID: 946 // (get) Token: 0x060014DA RID: 5338 RVA: 0x000501C0 File Offset: 0x0004E3C0 public virtual int EBCDICCodePage { get { return this.data.ebcdic; } } /// Gets the culture identifier for the culture associated with the current object. /// A number that identifies the culture from which the current object was created. // Token: 0x170003B3 RID: 947 // (get) Token: 0x060014DB RID: 5339 RVA: 0x000501DC File Offset: 0x0004E3DC [ComVisible(false)] public int LCID { get { return this.m_win32LangID; } } /// Gets or sets the string that separates items in a list. /// The string that separates items in a list. /// The value in a set operation is null. /// In a set operation, the current object is read-only. // Token: 0x170003B4 RID: 948 // (get) Token: 0x060014DC RID: 5340 RVA: 0x000501E4 File Offset: 0x0004E3E4 // (set) Token: 0x060014DD RID: 5341 RVA: 0x00050220 File Offset: 0x0004E420 public virtual string ListSeparator { get { if (this.m_listSeparator == null) { this.m_listSeparator = ((char)this.data.list_sep).ToString(); } return this.m_listSeparator; } [ComVisible(false)] set { this.m_listSeparator = value; } } /// Gets the Macintosh code page used by the writing system represented by the current . /// The Macintosh code page used by the writing system represented by the current . // Token: 0x170003B5 RID: 949 // (get) Token: 0x060014DE RID: 5342 RVA: 0x0005022C File Offset: 0x0004E42C public virtual int MacCodePage { get { return this.data.mac; } } /// Gets the original equipment manufacturer (OEM) code page used by the writing system represented by the current . /// The OEM code page used by the writing system represented by the current . // Token: 0x170003B6 RID: 950 // (get) Token: 0x060014DF RID: 5343 RVA: 0x00050248 File Offset: 0x0004E448 public virtual int OEMCodePage { get { return this.data.oem; } } /// Gets the name of the culture associated with the current object. /// The name of a culture. // Token: 0x170003B7 RID: 951 // (get) Token: 0x060014E0 RID: 5344 RVA: 0x00050264 File Offset: 0x0004E464 [ComVisible(false)] public string CultureName { get { if (this.customCultureName == null) { this.customCultureName = this.ci.Name; } return this.customCultureName; } } /// Gets a value indicating whether the current object is read-only. /// true if the current object is read-only; otherwise, false. // Token: 0x170003B8 RID: 952 // (get) Token: 0x060014E1 RID: 5345 RVA: 0x00050294 File Offset: 0x0004E494 [ComVisible(false)] public bool IsReadOnly { get { return this.m_isReadOnly; } } /// Gets a value indicating whether the current object represents a writing system where text flows from right to left. /// true if text flows from right to left; otherwise, false. // Token: 0x170003B9 RID: 953 // (get) Token: 0x060014E2 RID: 5346 RVA: 0x0005029C File Offset: 0x0004E49C [ComVisible(false)] public bool IsRightToLeft { get { int win32LangID = this.m_win32LangID; return win32LangID == 1 || win32LangID == 13 || win32LangID == 32 || win32LangID == 41 || win32LangID == 90 || win32LangID == 101 || win32LangID == 1025 || win32LangID == 1037 || win32LangID == 1056 || win32LangID == 1065 || win32LangID == 1114 || win32LangID == 1125 || win32LangID == 2049 || win32LangID == 3073 || win32LangID == 4097 || win32LangID == 5121 || win32LangID == 6145 || win32LangID == 7169 || win32LangID == 8193 || win32LangID == 9217 || win32LangID == 10241 || win32LangID == 11265 || win32LangID == 12289 || win32LangID == 13313 || win32LangID == 14337 || win32LangID == 15361 || win32LangID == 16385; } } /// Determines whether the specified object represents the same writing system as the current object. /// true if represents the same writing system as the current ; otherwise, false. /// The object to compare with the current . // Token: 0x060014E3 RID: 5347 RVA: 0x000503D0 File Offset: 0x0004E5D0 public override bool Equals(object obj) { if (obj == null) { return false; } TextInfo textInfo = obj as TextInfo; return textInfo != null && textInfo.m_win32LangID == this.m_win32LangID && textInfo.ci == this.ci; } /// Serves as a hash function for the current , suitable for hashing algorithms and data structures, such as a hash table. /// A hash code for the current . // Token: 0x060014E4 RID: 5348 RVA: 0x0005041C File Offset: 0x0004E61C public override int GetHashCode() { return this.m_win32LangID; } /// Returns a string that represents the current . /// A string that represents the current . // Token: 0x060014E5 RID: 5349 RVA: 0x00050424 File Offset: 0x0004E624 public override string ToString() { return "TextInfo - " + this.m_win32LangID; } /// Converts the specified string to titlecase. /// The specified string converted to titlecase. /// The string to convert to titlecase. /// /// is null. // Token: 0x060014E6 RID: 5350 RVA: 0x0005043C File Offset: 0x0004E63C public string ToTitleCase(string str) { if (str == null) { throw new ArgumentNullException("str"); } StringBuilder stringBuilder = null; int i = 0; int num = 0; while (i < str.Length) { if (char.IsLetter(str[i++])) { i--; char c = this.ToTitleCase(str[i]); bool flag = true; if (c == str[i]) { flag = false; bool flag2 = true; int num2 = i; while (++i < str.Length) { if (char.IsWhiteSpace(str[i])) { break; } c = this.ToTitleCase(str[i]); if (c != str[i]) { flag2 = false; break; } } if (flag2) { continue; } i = num2; while (++i < str.Length) { if (char.IsWhiteSpace(str[i])) { break; } if (this.ToLower(str[i]) != str[i]) { flag = true; i = num2; break; } } } if (flag) { if (stringBuilder == null) { stringBuilder = new StringBuilder(str.Length); } stringBuilder.Append(str, num, i - num); stringBuilder.Append(this.ToTitleCase(str[i])); num = i + 1; while (++i < str.Length) { if (char.IsWhiteSpace(str[i])) { break; } stringBuilder.Append(this.ToLower(str[i])); } num = i; } } } if (stringBuilder != null) { stringBuilder.Append(str, num, str.Length - num); } return (stringBuilder == null) ? str : stringBuilder.ToString(); } /// Converts the specified character to lowercase. /// The specified character converted to lowercase. /// The character to convert to lowercase. // Token: 0x060014E7 RID: 5351 RVA: 0x0005060C File Offset: 0x0004E80C public virtual char ToLower(char c) { if (c < '@' || ('`' < c && c < '\u0080')) { return c; } if ('A' <= c && c <= 'Z' && (!this.handleDotI || c != 'I')) { return c + ' '; } if (this.ci == null || this.ci.LCID == 127) { return char.ToLowerInvariant(c); } switch (c) { case 'Dž': return 'dž'; default: switch (c) { case 'ϒ': return 'υ'; case 'ϓ': return 'ύ'; case 'ϔ': return 'ϋ'; default: if (c != 'I') { if (c == 'İ') { return 'i'; } if (c == 'Nj') { return 'nj'; } if (c == 'Dz') { return 'dz'; } } else if (this.handleDotI) { return 'ı'; } return char.ToLowerInvariant(c); } break; case 'Lj': return 'lj'; } } /// Converts the specified character to uppercase. /// The specified character converted to uppercase. /// The character to convert to uppercase. // Token: 0x060014E8 RID: 5352 RVA: 0x00050730 File Offset: 0x0004E930 public virtual char ToUpper(char c) { if (c < '`') { return c; } if ('a' <= c && c <= 'z' && (!this.handleDotI || c != 'i')) { return c - ' '; } if (this.ci == null || this.ci.LCID == 127) { return char.ToUpperInvariant(c); } switch (c) { case 'ϐ': return 'Β'; case 'ϑ': return 'Θ'; default: switch (c) { case 'Dž': return 'DŽ'; default: if (c == 'ϰ') { return 'Κ'; } if (c != 'ϱ') { if (c != 'i') { if (c == 'ı') { return 'I'; } if (c == 'Nj') { return 'NJ'; } if (c == 'Dz') { return 'DZ'; } if (c == 'ΐ') { return 'Ϊ'; } if (c == 'ΰ') { return 'Ϋ'; } } else if (this.handleDotI) { return 'İ'; } return char.ToUpperInvariant(c); } return 'Ρ'; case 'Lj': return 'LJ'; } break; case 'ϕ': return 'Φ'; case 'ϖ': return 'Π'; } } // Token: 0x060014E9 RID: 5353 RVA: 0x0005089C File Offset: 0x0004EA9C private char ToTitleCase(char c) { switch (c) { case 'DŽ': case 'Dž': case 'dž': return 'Dž'; case 'LJ': case 'Lj': case 'lj': return 'Lj'; case 'NJ': case 'Nj': case 'nj': return 'Nj'; default: switch (c) { case 'DZ': case 'Dz': case 'dz': return 'Dz'; default: if (('ⅰ' <= c && c <= 'ⅿ') || ('ⓐ' <= c && c <= 'ⓩ')) { return c; } return this.ToUpper(c); } break; } } /// Converts the specified string to lowercase. /// The specified string converted to lowercase. /// The string to convert to lowercase. /// /// is null. // Token: 0x060014EA RID: 5354 RVA: 0x00050948 File Offset: 0x0004EB48 public unsafe virtual string ToLower(string str) { if (str == null) { throw new ArgumentNullException("str"); } if (str.Length == 0) { return string.Empty; } string text = string.InternalAllocateStr(str.Length); fixed (string text2 = str) { fixed (char* ptr = text2 + RuntimeHelpers.OffsetToStringData / 2) { fixed (string text3 = text) { fixed (char* ptr2 = text3 + RuntimeHelpers.OffsetToStringData / 2) { char* ptr3 = ptr2; char* ptr4 = ptr; for (int i = 0; i < str.Length; i++) { *ptr3 = this.ToLower(*ptr4); ptr4++; ptr3++; } text2 = null; text3 = null; return text; } } } } } /// Converts the specified string to uppercase. /// The specified string converted to uppercase. /// The string to convert to uppercase. /// /// is null. // Token: 0x060014EB RID: 5355 RVA: 0x000509DC File Offset: 0x0004EBDC public unsafe virtual string ToUpper(string str) { if (str == null) { throw new ArgumentNullException("str"); } if (str.Length == 0) { return string.Empty; } string text = string.InternalAllocateStr(str.Length); fixed (string text2 = str) { fixed (char* ptr = text2 + RuntimeHelpers.OffsetToStringData / 2) { fixed (string text3 = text) { fixed (char* ptr2 = text3 + RuntimeHelpers.OffsetToStringData / 2) { char* ptr3 = ptr2; char* ptr4 = ptr; for (int i = 0; i < str.Length; i++) { *ptr3 = this.ToUpper(*ptr4); ptr4++; ptr3++; } text2 = null; text3 = null; return text; } } } } } /// Returns a read-only version of the specified object. /// The object specified by the parameter, if is read-only.-or-A read-only memberwise clone of the object specified by , if is not read-only. /// A object. /// /// is null. // Token: 0x060014EC RID: 5356 RVA: 0x00050A70 File Offset: 0x0004EC70 [ComVisible(false)] public static TextInfo ReadOnly(TextInfo textInfo) { if (textInfo == null) { throw new ArgumentNullException("textInfo"); } return new TextInfo(textInfo) { m_isReadOnly = true }; } /// Creates a new object that is a copy of the current object. /// A new instance of that is the memberwise clone of the current object. // Token: 0x060014ED RID: 5357 RVA: 0x00050AA0 File Offset: 0x0004ECA0 [ComVisible(false)] public virtual object Clone() { return new TextInfo(this); } // Token: 0x040005E6 RID: 1510 private string m_listSeparator; // Token: 0x040005E7 RID: 1511 private bool m_isReadOnly; // Token: 0x040005E8 RID: 1512 private string customCultureName; // Token: 0x040005E9 RID: 1513 [NonSerialized] private int m_nDataItem; // Token: 0x040005EA RID: 1514 private bool m_useUserOverride; // Token: 0x040005EB RID: 1515 private int m_win32LangID; // Token: 0x040005EC RID: 1516 [NonSerialized] private readonly CultureInfo ci; // Token: 0x040005ED RID: 1517 [NonSerialized] private readonly bool handleDotI; // Token: 0x040005EE RID: 1518 [NonSerialized] private readonly TextInfo.Data data; // Token: 0x0200019B RID: 411 private struct Data { // Token: 0x040005EF RID: 1519 public int ansi; // Token: 0x040005F0 RID: 1520 public int ebcdic; // Token: 0x040005F1 RID: 1521 public int mac; // Token: 0x040005F2 RID: 1522 public int oem; // Token: 0x040005F3 RID: 1523 public byte list_sep; } } }