示例#1
0
        // Token: 0x0600190D RID: 6413 RVA: 0x000C7DFC File Offset: 0x000C5FFC
        public static bool IsIncludePictureField(ref ScratchBuffer scratch, out BufferString linkUrl)
        {
            int num    = 0;
            int length = scratch.Length;

            while (num != scratch.Length && ParseSupport.WhitespaceCharacter(ParseSupport.GetCharClass(scratch[num])))
            {
                num++;
            }
            if (scratch.Length - num > 15 && scratch[num] == 'I' && scratch[num + 1] == 'N' && scratch[num + 2] == 'C' && scratch[num + 3] == 'L' && scratch[num + 4] == 'U' && scratch[num + 5] == 'D' && scratch[num + 6] == 'E' && scratch[num + 7] == 'P' && scratch[num + 8] == 'I' && scratch[num + 9] == 'C' && scratch[num + 10] == 'T' && scratch[num + 11] == 'U' && scratch[num + 12] == 'R' && scratch[num + 13] == 'E' && scratch[num + 14] == ' ')
            {
                num += 15;
                int offset;
                int num2;
                int offset2;
                int num3;
                int fieldArgument = RtfSupport.GetFieldArgument(ref scratch, num, out offset, out num2, out offset2, out num3);
                while (num2 == 2 && scratch[offset] == '\\')
                {
                    num          += fieldArgument;
                    fieldArgument = RtfSupport.GetFieldArgument(ref scratch, num, out offset, out num2, out offset2, out num3);
                }
                if (num3 > 2)
                {
                    linkUrl = scratch.SubString(offset2, num3);
                    return(true);
                }
            }
            linkUrl = BufferString.Null;
            return(false);
        }
        public override List <PostItem> GetList(GachonUser guser, BoardType board)
        {
            List <PostItem>    result = new List <PostItem>();
            HtmlDocument       dom    = guser.VisitPage(board.url);
            HtmlNodeCollection sets   = dom.DocumentNode.SelectNodes("//div[@class='list']//table//tr");

            //timer.Print();
            if (sets != null)
            {
                foreach (HtmlNode node in sets)
                {
                    if (node.InnerText.IndexOf("No registered post") < 0 && node.InnerText.IndexOf("등록된 게시글이 없습니다") < 0 && node.ChildNodes["th"] == null)
                    {
                        HtmlNodeCollection datas = node.SelectNodes(".//td");
                        string             url   = ParseSupport.StringFromHtml(datas[1].ChildNodes["a"].Attributes["href"].Value);
                        result.Insert(0, new PostItem(board)
                        {
                            url       = url,
                            source    = this,
                            no        = Int32.Parse(datas[0].InnerText),
                            Title     = ParseSupport.StringFromHtml(datas[1].InnerText),
                            Publisher = datas[2].InnerText,
                            time      = DateTime.Parse(datas[3].InnerText)
                        });
                    }
                }
            }
            return(result);
        }
        public override void GetPage(GachonUser guser, PostItem post)
        {
            HtmlDocument dom = guser.VisitPage(post.url);

            post.Title   = ParseSupport.StringFromHtmlNode(dom.DocumentNode.SelectSingleNode("//div[@class='subject']"));
            post.Content = ParseSupport.StringFromHtmlNode(dom.DocumentNode.SelectSingleNode("//div[@class='ubboard']//div[contains(@class,'text_to_html')]"));
        }
示例#4
0
        public override void GetPage(GachonUser guser, PostItem post)
        {
            HtmlDocument dom = guser.VisitPage(post.url);

            post.Title   = ParseSupport.StringFromHtml(dom.DocumentNode.SelectSingleNode("//td[@class='tit']").InnerText);
            post.Content = ParseSupport.StringFromHtml(dom.DocumentNode.SelectSingleNode("//td[contains(@class,'text')]").InnerText);
        }
 public void Write(char[] buffer, int offset, int count)
 {
     if (IsActive)
     {
         int num = offset + count;
         while (offset < num)
         {
             if (urlPosition == 0)
             {
                 if (ParseSupport.WhitespaceCharacter(ParseSupport.GetCharClass(buffer[offset])))
                 {
                     offset++;
                     continue;
                 }
             }
             else if (urlPosition == url.Length)
             {
                 if (ParseSupport.WhitespaceCharacter(ParseSupport.GetCharClass(buffer[offset])))
                 {
                     offset++;
                     continue;
                 }
                 urlPosition = -1;
                 return;
             }
             if (buffer[offset] != url[urlPosition])
             {
                 urlPosition = -1;
                 return;
             }
             offset++;
             urlPosition++;
         }
     }
 }
 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);
 }
示例#7
0
        public void UrlQueryParserTest()
        {
            Assert.AreEqual(ParseSupport.UrlQueryParser("https://test.com/?id=1321&asd=342")["id"], "1321");
            Assert.AreEqual(ParseSupport.UrlQueryParser("https://test.com/?id=1321&asd=342")["asd"], "342");

            Assert.AreEqual(ParseSupport.UrlQueryParser("https://?id=1231&asds/?id=1321&asd=342")["id"], "1321");
        }
示例#8
0
        public void Write(int ucs32Char)
        {
            if (Token.LiteralLength(ucs32Char) != 1)
            {
                urlPosition = -1;
                return;
            }

            if (urlPosition == 0)
            {
                if (ParseSupport.WhitespaceCharacter(ParseSupport.GetCharClass((char)ucs32Char)))
                {
                    return;
                }
            }
            else if (urlPosition == url.Length)
            {
                if (ParseSupport.WhitespaceCharacter(ParseSupport.GetCharClass((char)ucs32Char)))
                {
                    return;
                }

                urlPosition = -1;
                return;
            }

            if ((char)ucs32Char != url[urlPosition])
            {
                urlPosition = -1;
                return;
            }

            urlPosition++;
        }
示例#9
0
        private void NormalizeAddNonspace(TokenRun run)
        {
            if (!lineStarted)
            {
                StartParagraphOrLine();
            }

            if (normalizerContext.hasSpace)
            {
                normalizerContext.hasSpace = false;



                if ('\0' == normalizerContext.lastCh || !normalizerContext.oneNL || !ParseSupport.TwoFarEastNonHanguelChars(normalizerContext.lastCh, run.FirstChar))
                {
                    output.OutputSpace(1);
                }
            }

            if (run.IsLiteral)
            {
                output.OutputNonspace(run.Literal, textMapping);
            }
            else
            {
                output.OutputNonspace(run.RawBuffer, run.RawOffset, run.RawLength, textMapping);
            }

            normalizerContext.eatSpace = false;
            normalizerContext.lastCh   = run.LastChar;
            normalizerContext.oneNL    = false;
        }
示例#10
0
        public void SetValueQuote(char ch)
        {
            InternalDebug.Assert(this.state == BuildStateTagAttrValue);
            InternalDebug.Assert(ParseSupport.QuoteCharacter(ParseSupport.GetCharClass(ch)));

            this.htmlToken.attributeList[this.htmlToken.attributeTail].IsAttrValueQuoted = true;
            this.htmlToken.attributeList[this.htmlToken.attributeTail].quoteChar         = (byte)ch;
        }
示例#11
0
 // Token: 0x0600190A RID: 6410 RVA: 0x000C7C2F File Offset: 0x000C5E2F
 public static int Unescape(byte b1, byte b2)
 {
     if (ParseSupport.HexCharacter(ParseSupport.GetCharClass((char)b1)) && ParseSupport.HexCharacter(ParseSupport.GetCharClass((char)b2)))
     {
         return(ParseSupport.CharToHex((char)b1) << 4 | ParseSupport.CharToHex((char)b2));
     }
     return(256);
 }
示例#12
0
        // Orphaned WPL code.
#if false
        public void SetPropertyValueQuote(char ch)
        {
            InternalDebug.Assert(this.state == BuildStatePropertyValue);
            InternalDebug.Assert(ParseSupport.QuoteCharacter(ParseSupport.GetCharClass(ch)));

            this.cssToken.propertyList[this.cssToken.propertyTail].IsPropertyValueQuoted = true;
            this.cssToken.propertyList[this.cssToken.propertyTail].quoteChar             = (byte)ch;
        }
示例#13
0
 public static CharClass GetCharClass(char ch)
 {
     if (ch > 'ÿ')
     {
         return(ParseSupport.GetHighCharClass(ch));
     }
     return(ParseSupport.lowCharClass[(int)ch]);
 }
示例#14
0
 public static char ToLowerCase(char ch)
 {
     if (!ParseSupport.IsUpperCase(ch))
     {
         return(ch);
     }
     return((char)(ch + ' '));
 }
示例#15
0
        public void CrawlingErrorDetectTest()
        {
            // 빈 값을 입력했을때 오류
            Assert.AreEqual(ParseSupport.Crawling(null), null);

            Assert.AreEqual(ParseSupport.Crawling(""), null);
            Assert.AreEqual(ParseSupport.Crawling("ftp://aeawe"), null);
        }
示例#16
0
 private char ScanTag(char ch, ref CharClass charClass, ref int parseCurrent)
 {
     while ((parseCurrent < this.parseEnd || !ParseSupport.InvalidUnicodeCharacter(charClass)) && ch != '>')
     {
         ch        = this.parseBuffer[++parseCurrent];
         charClass = ParseSupport.GetCharClass(ch);
     }
     return(ch);
 }
示例#17
0
 private char ScanText(char ch, ref CharClass charClass, ref int parseCurrent)
 {
     char[] array = this.parseBuffer;
     while (ParseSupport.HtmlTextCharacter(charClass))
     {
         ch        = array[++parseCurrent];
         charClass = ParseSupport.GetCharClass(ch);
     }
     return(ch);
 }
示例#18
0
 // Token: 0x06001891 RID: 6289 RVA: 0x000C4A65 File Offset: 0x000C2C65
 protected void SetCodePage(ushort codePage, TextMapping textMapping)
 {
     if (codePage != this.currentCodePage)
     {
         this.currentCodePage = codePage;
         this.leadMask        = ParseSupport.GetCodePageLeadMask((int)codePage);
     }
     if (textMapping != this.currentTextMapping)
     {
         this.currentTextMapping = textMapping;
     }
 }
示例#19
0
        // Token: 0x06001243 RID: 4675 RVA: 0x000832A8 File Offset: 0x000814A8
        internal static bool AttemptUnescape(char[] parseBuffer, int parseEnd, ref char ch, ref int parseCurrent)
        {
            if (ch != '\\' || parseCurrent == parseEnd)
            {
                return(false);
            }
            ch = parseBuffer[++parseCurrent];
            CharClass charClass = ParseSupport.GetCharClass(ch);
            int       num       = parseCurrent + 6;

            num = ((num < parseEnd) ? num : parseEnd);
            if (ParseSupport.HexCharacter(charClass))
            {
                int num2 = 0;
                do
                {
                    num2 <<= 4;
                    num2  |= ParseSupport.CharToHex(ch);
                    if (parseCurrent == num)
                    {
                        goto IL_C3;
                    }
                    ch        = parseBuffer[++parseCurrent];
                    charClass = ParseSupport.GetCharClass(ch);
                }while (ParseSupport.HexCharacter(charClass));
                if (ch == '\r' && parseCurrent != parseEnd)
                {
                    ch = parseBuffer[++parseCurrent];
                    if (ch == '\n')
                    {
                        charClass = ParseSupport.GetCharClass(ch);
                    }
                    else
                    {
                        parseCurrent--;
                    }
                }
                if (ch != ' ' && ch != '\t' && ch != '\r' && ch != '\n' && ch != '\f')
                {
                    parseCurrent--;
                }
IL_C3:
                ch = (char)num2;
                return(true);
            }
            if (ch >= ' ' && ch != '\u007f')
            {
                return(true);
            }
            parseCurrent--;
            ch = '\\';
            return(false);
        }
示例#20
0
        /// <summary>
        /// 공지사항, 자유게시판 등 메뉴를 읽어오는 함수입니다.
        /// </summary>
        /// <param name="guser"></param>
        public override void SearchMenu(GachonUser guser)
        {
            if (boards.Count == 0)// 값이 없을때만 실행
            {
                // 웹사이트의 메뉴부분의 주소를 읽어옵니다.
                Uri                baseuri = new Uri(SiteUrl + "board/list.jsp?Menu_seq=0&Forum_seq=" + ID);
                HtmlDocument       dom     = guser.VisitPage(baseuri);
                HtmlNodeCollection sets    = dom.DocumentNode.SelectNodes("//ul[@class='dep']/li/a");
                if (sets == null)
                {
                    throw new NoConnectPageError("연결이 정상적으로 이뤄지지 않음");
                }

                #region 각 메뉴의 종류를 분류하여 게시판 타입을 지정해줍니다.
                foreach (HtmlNode node in sets)
                {
                    string menu_title = node.InnerText;
                    string href       = ParseSupport.StringFromHtml(node.Attributes["href"].Value);

                    switch (menu_title)
                    {
                    case "공지사항":
                        boards.Add(new BoardType(BoardType.PostType.Notice, menu_title, new Uri(baseuri, href).AbsoluteUri));
                        break;

                    case "강의자료실":
                    case "토론/시험자료실":
                        boards.Add(new BoardType(BoardType.PostType.Lecture, menu_title, new Uri(baseuri, href).AbsoluteUri));
                        break;

                    case "레포트제출실":
                        boards.Add(new BoardType(BoardType.PostType.Homework, menu_title, new Uri(baseuri, href).AbsoluteUri));
                        break;

                    case "HOME":
                        break;

                    default:
                        boards.Add(new BoardType(BoardType.PostType.ETC, menu_title, new Uri(baseuri, href)));
                        break;
                    }
                }
                #endregion
            }
        }
示例#21
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);
        }
示例#22
0
        public HtmlNameIndex LookupTagName(int nameLength, Token.Fragment fragment)
        {
            if (nameLength > HtmlNameData.MAX_NAME)
            {
                return(HtmlNameIndex.Unknown);
            }

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

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

            return(HtmlNameIndex.Unknown);
        }
示例#23
0
        // Token: 0x0600190C RID: 6412 RVA: 0x000C7C8C File Offset: 0x000C5E8C
        public static bool IsHyperlinkField(ref ScratchBuffer scratch, out bool local, out BufferString linkUrl)
        {
            int num    = 0;
            int length = scratch.Length;

            while (num != scratch.Length && ParseSupport.WhitespaceCharacter(ParseSupport.GetCharClass(scratch[num])))
            {
                num++;
            }
            if (scratch.Length - num > 10 && scratch[num] == 'H' && scratch[num + 1] == 'Y' && scratch[num + 2] == 'P' && scratch[num + 3] == 'E' && scratch[num + 4] == 'R' && scratch[num + 5] == 'L' && scratch[num + 6] == 'I' && scratch[num + 7] == 'N' && scratch[num + 8] == 'K' && scratch[num + 9] == ' ')
            {
                num += 10;
                int num2;
                int num3;
                int num4;
                int num5;
                int fieldArgument = RtfSupport.GetFieldArgument(ref scratch, num, out num2, out num3, out num4, out num5);
                if (num3 == 2 && scratch[num2] == '\\' && scratch[num2 + 1] == 'l')
                {
                    local         = true;
                    num          += fieldArgument;
                    fieldArgument = RtfSupport.GetFieldArgument(ref scratch, num, out num2, out num3, out num4, out num5);
                }
                else
                {
                    local = false;
                }
                if (num5 != 0)
                {
                    if (local)
                    {
                        num4--;
                        num5++;
                        scratch[num4] = '#';
                    }
                    linkUrl = scratch.SubString(num4, num5);
                    return(true);
                }
            }
            local   = false;
            linkUrl = BufferString.Null;
            return(false);
        }
示例#24
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);
        }
        public override void SearchMenu(GachonUser guser)
        {
            Uri                baseuri = new Uri("http://cyber.gachon.ac.kr/mod/ubboard/index.php?id=" + ID);
            HtmlDocument       dom     = guser.VisitPage(baseuri);
            HtmlNodeCollection sets    = dom.DocumentNode.SelectNodes("//div[contains(@class,'boards')]//tr/td[1]");

            foreach (HtmlNode node in sets)
            {
                string menu_title = ParseSupport.StringFromHtml(node.InnerText);
                if (node.ChildNodes["a"] == null)
                {
                    continue;
                }
                string href = node.ChildNodes["a"].Attributes["href"].Value;
                if (menu_title.IndexOf("Announcements") >= 0 || menu_title.IndexOf("공지") >= 0)
                {
                    NewBoard(BoardType.PostType.Notice, menu_title, baseuri, href);
                }
            }
        }
示例#26
0
        public override void SearchMenu(GachonUser guser)
        {
            Uri                baseuri = new Uri("https://cafe.naver.com/" + ID);
            HtmlDocument       dom     = guser.VisitPage(baseuri, Encoding.Default);
            HtmlNodeCollection sets    = dom.DocumentNode.SelectNodes("//ul[@class='cafe-menu-list']//li");

            foreach (HtmlNode node in sets)
            {
                string menu_title = ParseSupport.StringFromHtml(node.InnerText);
                if (node.ChildNodes["a"] == null)
                {
                    continue;
                }
                string href = node.ChildNodes["a"].Attributes["href"].Value;
                if (menu_title.IndexOf("공모전") >= 0 || menu_title.IndexOf("공지") >= 0)
                {
                    NewBoard(BoardType.PostType.Notice, menu_title, baseuri, href);
                }
            }
        }
        // Token: 0x060012B5 RID: 4789 RVA: 0x00084EFC File Offset: 0x000830FC
        public HtmlNameIndex LookupTagName(int nameLength, Token.Fragment fragment)
        {
            if (nameLength > 14)
            {
                return(HtmlNameIndex.Unknown);
            }
            short num  = (short)((ulong)(this.token.CalculateHashLowerCase(fragment) ^ 221) % 601UL);
            int   num2 = (int)HtmlNameData.nameHashTable[(int)num];

            if (num2 > 0)
            {
                for (;;)
                {
                    string name = HtmlNameData.Names[num2].Name;
                    if (name.Length == nameLength)
                    {
                        if (fragment.Tail == fragment.Head + 1)
                        {
                            if (name[0] == ParseSupport.ToLowerCase(this.token.Buffer[fragment.HeadOffset]) && (nameLength == 1 || this.token.CaseInsensitiveCompareRunEqual(fragment.HeadOffset + 1, name, 1)))
                            {
                                break;
                            }
                        }
                        else if (this.token.CaseInsensitiveCompareEqual(ref fragment, name))
                        {
                            goto Block_6;
                        }
                    }
                    num2++;
                    if (HtmlNameData.Names[num2].Hash != num)
                    {
                        return(HtmlNameIndex.Unknown);
                    }
                }
                return((HtmlNameIndex)num2);

Block_6:
                return((HtmlNameIndex)num2);
            }
            return(HtmlNameIndex.Unknown);
        }
示例#28
0
        public HtmlNameIndex LookupName(int nameLength, ref HtmlToken.Fragment fragment)
        {
            if (nameLength > HtmlData.MAX_NAME || nameHashValue < 0)
            {
                return(HtmlNameIndex.Unknown);
            }



            int nameIndex = (int)HtmlData.nameHashTable[nameHashValue];

            if (nameIndex > 0)
            {
                do
                {
                    string name = HtmlData.names[nameIndex].name;

                    if (name.Length == nameLength)
                    {
                        if (fragment.tail == fragment.head + 1)
                        {
                            if (name[0] == ParseSupport.ToLowerCase(this.token.buffer[fragment.headOffset]))
                            {
                                if (nameLength == 1 || this.token.CaseInsensitiveCompareRunEqual(fragment.headOffset + 1, name, 1))
                                {
                                    return((HtmlNameIndex)nameIndex);
                                }
                            }
                        }
                        else if (this.token.CaseInsensitiveCompareEqual(ref fragment, name))
                        {
                            return((HtmlNameIndex)nameIndex);
                        }
                    }

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

            return(HtmlNameIndex.Unknown);
        }
        public CssNameIndex LookupName(int nameLength, Token.Fragment fragment)
        {
            if (nameLength > 26)
            {
                return(CssNameIndex.Unknown);
            }
            short num  = (short)((ulong)(token.CalculateHashLowerCase(fragment) ^ 2) % 329uL);
            int   num2 = (int)CssData.nameHashTable[(int)num];

            if (num2 > 0)
            {
                while (true)
                {
                    string name = CssData.names[num2].name;
                    if (name.Length == nameLength)
                    {
                        if (fragment.tail == fragment.head + 1)
                        {
                            if (name[0] == ParseSupport.ToLowerCase(token.buffer[fragment.headOffset]) && (nameLength == 1 || token.CaseInsensitiveCompareRunEqual(fragment.headOffset + 1, name, 1)))
                            {
                                break;
                            }
                        }
                        else if (token.CaseInsensitiveCompareEqual(ref fragment, name))
                        {
                            goto Block_6;
                        }
                    }
                    num2++;
                    if (CssData.names[num2].hash != num)
                    {
                        return(CssNameIndex.Unknown);
                    }
                }
                return((CssNameIndex)num2);

Block_6:
                return((CssNameIndex)num2);
            }
            return(CssNameIndex.Unknown);
        }
示例#30
0
        public CssNameIndex LookupName(int nameLength, CssToken.Fragment fragment)
        {
            if (nameLength > CssData.MAX_NAME)
            {
                return(CssNameIndex.Unknown);
            }

            short nameHashValue = (short)(((uint)this.token.CalculateHashLowerCase(fragment) ^ CssData.NAME_HASH_MODIFIER) % CssData.NAME_HASH_SIZE);
            int   nameIndex     = (int)CssData.nameHashTable[nameHashValue];

            if (nameIndex > 0)
            {
                do
                {
                    string name = CssData.names[nameIndex].name;

                    if (name.Length == nameLength)
                    {
                        if (fragment.tail == fragment.head + 1)
                        {
                            if (name[0] == ParseSupport.ToLowerCase(this.token.buffer[fragment.headOffset]))
                            {
                                if (nameLength == 1 || this.token.CaseInsensitiveCompareRunEqual(fragment.headOffset + 1, name, 1))
                                {
                                    return((CssNameIndex)nameIndex);
                                }
                            }
                        }
                        else if (this.token.CaseInsensitiveCompareEqual(ref fragment, name))
                        {
                            return((CssNameIndex)nameIndex);
                        }
                    }

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

            return(CssNameIndex.Unknown);
        }