示例#1
0
        /// <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);
 }