예제 #1
0
        public HtmlNameIndex LookupName(int nameLength, Token.LexicalUnit unit)
        {
            InternalDebug.Assert(nameLength >= 0);

            if (nameLength != 0 && nameLength <= HtmlNameData.MAX_NAME)
            {
                var nameHashValue = (short)(((uint)token.CalculateHashLowerCase(unit) ^ 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)
                        {
                            if (token.IsContiguous(unit))
                            {
                                if (name[0] == ParseSupport.ToLowerCase(token.buffer[unit.headOffset]))
                                {
                                    if (nameLength == 1 || token.CaseInsensitiveCompareRunEqual(unit.headOffset + 1, name, 1))
                                    {
                                        return((HtmlNameIndex)nameIndex);
                                    }
                                }
                            }
                            else if (token.CaseInsensitiveCompareEqual(unit, name))
                            {
                                return((HtmlNameIndex)nameIndex);
                            }
                        }

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

            return(HtmlNameIndex.Unknown);
        }
예제 #2
0
        public HtmlNameIndex LookupName(int nameLength, Token.LexicalUnit unit)
        {
            if (nameLength != 0 && nameLength <= 14)
            {
                short num  = (short)((ulong)(token.CalculateHashLowerCase(unit) ^ 221) % 601uL);
                int   num2 = (int)HtmlNameData.nameHashTable[(int)num];
                if (num2 > 0)
                {
                    while (true)
                    {
                        string name = HtmlNameData.names[num2].name;
                        if (name.Length == nameLength)
                        {
                            if (token.IsContiguous(unit))
                            {
                                if (name[0] == ParseSupport.ToLowerCase(token.buffer[unit.headOffset]) && (nameLength == 1 || token.CaseInsensitiveCompareRunEqual(unit.headOffset + 1, name, 1)))
                                {
                                    break;
                                }
                            }
                            else if (token.CaseInsensitiveCompareEqual(unit, name))
                            {
                                goto Block_7;
                            }
                        }
                        num2++;
                        if (HtmlNameData.names[num2].hash != num)
                        {
                            return(HtmlNameIndex.Unknown);
                        }
                    }
                    return((HtmlNameIndex)num2);

Block_7:
                    return((HtmlNameIndex)num2);
                }
            }
            return(HtmlNameIndex.Unknown);
        }