Exemplo n.º 1
0
 public static HtmlNameIndex LookupName(char[] nameBuffer, int nameOffset, int nameLength)
 {
     if (nameLength != 0 && nameLength <= 14)
     {
         short num  = (short)((ulong)(HashCode.CalculateLowerCase(nameBuffer, nameOffset, nameLength) ^ 221) % 601UL);
         int   num2 = (int)HtmlNameData.nameHashTable[(int)num];
         if (num2 > 0)
         {
             for (;;)
             {
                 string name = HtmlNameData.Names[num2].Name;
                 if (name.Length == nameLength && name[0] == ParseSupport.ToLowerCase(nameBuffer[nameOffset]))
                 {
                     int num3 = 0;
                     while (++num3 < name.Length && ParseSupport.ToLowerCase(nameBuffer[nameOffset + num3]) == name[num3])
                     {
                     }
                     if (num3 == name.Length)
                     {
                         break;
                     }
                 }
                 num2++;
                 if (HtmlNameData.Names[num2].Hash != num)
                 {
                     return(HtmlNameIndex.Unknown);
                 }
             }
             return((HtmlNameIndex)num2);
         }
     }
     return(HtmlNameIndex.Unknown);
 }
Exemplo n.º 2
0
        public static HtmlNameIndex LookupName(char[] nameBuffer, int nameOffset, int nameLength)
        {
            InternalDebug.Assert(nameLength >= 0);

            if (nameLength != 0 && nameLength <= HtmlNameData.MAX_NAME)
            {
                var nameHashValue = (short)(((uint)HashCode.CalculateLowerCase(nameBuffer, nameOffset, nameLength) ^ HtmlNameData.NAME_HASH_MODIFIER) % HtmlNameData.NAME_HASH_SIZE);

                var nameIndex = (int)HtmlNameData.nameHashTable[nameHashValue];

                if (nameIndex > 0)
                {
                    do
                    {
                        var name = HtmlNameData.names[nameIndex].name;

                        if (name.Length == nameLength &&
                            name[0] == ParseSupport.ToLowerCase(nameBuffer[nameOffset]))
                        {
                            var i = 0;

                            while (++i < name.Length)
                            {
                                InternalDebug.Assert(!ParseSupport.IsUpperCase(name[i]));

                                if (ParseSupport.ToLowerCase(nameBuffer[nameOffset + i]) != name[i])
                                {
                                    break;
                                }
                            }

                            if (i == name.Length)
                            {
                                return((HtmlNameIndex)nameIndex);
                            }
                        }

                        nameIndex++;
                    }while (HtmlNameData.names[nameIndex].hash == nameHashValue);
                }
            }

            return(HtmlNameIndex.Unknown);
        }