static private GetCombiningClass ( int c ) : byte | ||
c | int | |
return | byte |
private static void ReorderCanonical(string src, ref StringBuilder sb, int start) { if (sb == null) { for (int i = 1; i < src.Length; i++) { int num = (int)Normalization.GetCombiningClass((int)src[i]); if (num != 0) { if ((int)Normalization.GetCombiningClass((int)src[i - 1]) > num) { sb = new StringBuilder(src.Length); sb.Append(src, 0, src.Length); Normalization.ReorderCanonical(src, ref sb, i); return; } } } return; } for (int j = start; j < sb.Length; j++) { int num2 = (int)Normalization.GetCombiningClass((int)sb[j]); if (num2 != 0) { if ((int)Normalization.GetCombiningClass((int)sb[j - 1]) > num2) { char value = sb[j - 1]; sb[j - 1] = sb[j]; sb[j] = value; j--; } } } }
private unsafe static void Combine(StringBuilder sb, int start, int checkType) { for (int i = start; i < sb.Length; i++) { if (Normalization.QuickCheck(sb[i], checkType) != NormalizationCheck.Yes) { int num = i; while (i > 0) { if (Normalization.GetCombiningClass((int)sb[i]) == 0) { break; } i--; } int num2 = 0; while (i < num) { num2 = Normalization.GetPrimaryCompositeMapIndex(sb, (int)sb[i], i); if (num2 > 0) { break; } i++; } if (num2 == 0) { i = num; } else { int primaryCompositeFromMapIndex = Normalization.GetPrimaryCompositeFromMapIndex(num2); int normalizedStringLength = Normalization.GetNormalizedStringLength(primaryCompositeFromMapIndex); if (primaryCompositeFromMapIndex == 0 || normalizedStringLength == 0) { throw new SystemException("Internal error: should not happen. Input: " + sb); } int j = 0; sb.Insert(i++, (char)primaryCompositeFromMapIndex); while (j < normalizedStringLength) { if ((int)sb[i] == Normalization.mappedChars[num2 + j]) { sb.Remove(i, 1); j++; } else { i++; } } i = num - 1; } } } }
private static int GetPrimaryCompositeMapIndex(object o, int cur, int bufferPos) { if ((Normalization.PropValue(cur) & 64u) != 0u) { return(0); } if (Normalization.GetCombiningClass(cur) != 0) { return(0); } return(Normalization.GetPrimaryCompositeCharIndex(o, bufferPos)); }
public static bool IsNormalized(string source, int type) { int num = -1; for (int i = 0; i < source.Length; i++) { int num2 = (int)Normalization.GetCombiningClass((int)source[i]); if (num2 != 0 && num2 < num) { return(false); } num = num2; switch (Normalization.QuickCheck(source[i], type)) { case NormalizationCheck.No: return(false); case NormalizationCheck.Maybe: { switch (type) { case 0: case 2: return(source == Normalization.Normalize(source, type)); } int num3 = i; while (i > 0) { if (Normalization.GetCombiningClass((int)source[i]) == 0) { break; } i--; } while (i < num3) { if (Normalization.GetPrimaryCompositeCharIndex(source, i) != 0) { return(false); } i++; } break; } } } return(true); }
private unsafe static int GetPrimaryCompositeCharIndex(object chars, int start) { string text = chars as string; StringBuilder stringBuilder = chars as StringBuilder; char c = (text == null) ? stringBuilder[start] : text[start]; int num = (stringBuilder == null) ? text.Length : stringBuilder.Length; int num2 = Normalization.GetPrimaryCompositeHelperIndex((int)c); if (num2 == 0) { return(0); } while (Normalization.mappedChars[num2] == (int)c) { int num3 = 0; int num4 = 1; int num5 = 1; for (;;) { int num6 = num3; if (Normalization.mappedChars[num2 + num4] == 0) { return(num2); } if (start + num4 >= num) { return(0); } bool flag = false; char c2; do { c2 = ((text == null) ? stringBuilder[start + num5] : text[start + num5]); num3 = (int)Normalization.GetCombiningClass((int)c2); if (Normalization.mappedChars[num2 + num4] == (int)c2) { goto Block_7; } if (num3 < num6) { break; } }while (++num5 + start < num && num3 != 0); IL_105: if (!flag) { if (num6 >= num3) { break; } num5--; if (Normalization.mappedChars[num2 + num4] != (int)c2) { break; } } num4++; num5++; continue; Block_7: flag = true; goto IL_105; } while (Normalization.mappedChars[num4] != 0) { num4++; } num2 += num4 + 1; } return(0); }