/// <include file='../../docs.xml' /// path='docs/doc[@name="M:PeterO.Text.NormalizerInput.IsNormalized(PeterO.Text.ICharacterInput,PeterO.Text.Normalization)"]/*'/> public static bool IsNormalized( ICharacterInput chars, Normalization form) { if (chars == null) { throw new ArgumentNullException("chars"); } var listIndex = 0; var array = new int[16]; var haveNonQcs = false; while (true) { int c = chars.ReadChar(); if (c < 0) { break; } if ((c & 0x1ff800) == 0xd800) { return false; } bool isQcs = (c >= 0xf0000) ? true : UnicodeDatabase.IsQuickCheckStarter( c, form); if (isQcs) { if (haveNonQcs) { if (!NormalizeAndCheck( array, 0, listIndex, form)) { return false; } } listIndex = 0; haveNonQcs = false; } else { haveNonQcs = true; } if (listIndex >= array.Length) { var newArray = new int[array.Length * 2]; Array.Copy(array, 0, newArray, 0, listIndex); array = newArray; } array[listIndex++] = c; } if (haveNonQcs) { if (!NormalizeAndCheck( array, 0, listIndex, form)) { return false; } } return true; }
/// <include file='../../docs.xml' /// path='docs/doc[@name="M:PeterO.Text.NormalizingCharacterInput.IsNormalized(PeterO.Text.ICharacterInput,PeterO.Text.Normalization)"]/*'/> public static bool IsNormalized(ICharacterInput chars, Normalization form) { if (chars == null) { throw new ArgumentNullException("chars"); } IList<int> list = new List<int>(); var ch = 0; int mask = (form == Normalization.NFC) ? 0xff : 0x7f; var norm = true; while ((ch = chars.ReadChar()) >= 0) { if ((ch & 0x1ff800) == 0xd800) { return false; } if (norm && (ch & mask) != ch) { norm = false; } list.Add(ch); } return norm || IsNormalized(list, form); }