diff --git a/src/include/wxss.h b/src/include/wxss.h index 127a00b..2bfe99e 100644 --- a/src/include/wxss.h +++ b/src/include/wxss.h @@ -14,9 +14,11 @@ namespace WXSS int NewLintAndParseCSSList(std::map const&, std::vector &, std::string&, std::string&, int, bool, std::string const&, std::string const&); int LintAndParseCSSList(std::map const&, std::string&, std::string&, std::string&, int, bool, bool, bool, std::string const&); void LintAndParseCSS(std::string const&, std::string const&, std::string&, std::string&, bool, bool, bool, bool, std::string const&); - enum TokenType { - A, - }; + // enum TokenType { + // A, + // }; + using TokenType = int; + class Token { private: @@ -37,11 +39,7 @@ namespace WXSS private: /* data */ public: - struct STATE - { - /* data */ - }; - + using STATE = int; static int TT[26113]; static bool bInited; std::string offset_0; @@ -53,6 +51,23 @@ namespace WXSS void InitSubStrCheckingCaluseTable(void); WXSS::TokenType TryGetAnotherTypeByAnySubStr(char const*, uint, WXSS::Tokenizer::STATE, WXSS::TokenType); int GetTokens(std::vector &, std::string &, int); + class SubStrCheckingClause + { + private: + /* data */ + public: + static bool inited; + WXSS::Tokenizer::STATE offset_0; + int offset_4 = 0; + char offset_8[16]; + WXSS::TokenType offset_24; + SubStrCheckingClause(); + SubStrCheckingClause(WXSS::Tokenizer::STATE, char const*, WXSS::TokenType); + SubStrCheckingClause& operator=(SubStrCheckingClause const &); + }; + static SubStrCheckingClause SCC[5]; + + }; namespace CSSTreeLib diff --git a/src/wxss/tokenizer.cpp b/src/wxss/tokenizer.cpp index d63e7d5..91e0bfc 100644 --- a/src/wxss/tokenizer.cpp +++ b/src/wxss/tokenizer.cpp @@ -275,10 +275,26 @@ namespace WXSS } } + bool WXSS::Tokenizer::SubStrCheckingClause::inited = false; + WXSS::Tokenizer::SubStrCheckingClause WXSS::Tokenizer::SCC[5]; void Tokenizer::InitSubStrCheckingCaluseTable() { - + if (!SubStrCheckingClause::inited) + { + SubStrCheckingClause::inited = true; + SubStrCheckingClause v1(9, "url", 9); + WXSS::Tokenizer::SCC[0] = v1; + SubStrCheckingClause v2(9, "rpx", 9); + WXSS::Tokenizer::SCC[1] = v2; + SubStrCheckingClause v3(10, "url", 9); + WXSS::Tokenizer::SCC[2] = v3; + SubStrCheckingClause v4(10, "rpx", 9); + WXSS::Tokenizer::SCC[3] = v4; + SubStrCheckingClause v5(0, "", 0); + WXSS::Tokenizer::SCC[4] = v5; + } } + int Tokenizer::GetTokens(std::vector & a2, std::string & a3, int a4) { // GetTokens - 0 @@ -314,7 +330,7 @@ namespace WXSS v10 = 0; } int v11 = this->TT[1024 * v4 + 2 * 10]; - WXSS::TokenType AnotherTypeByAnySubStr = A; + // WXSS::TokenType AnotherTypeByAnySubStr; // AnotherTypeByAnySubStr = this->TryGetAnotherTypeByAnySubStr(this->offset_0.data(), v47, v42, AnotherTypeByAnySubStr); } @@ -329,4 +345,22 @@ namespace WXSS a3 = v66.str(); return 0; } + Tokenizer::SubStrCheckingClause::SubStrCheckingClause() + { + } + Tokenizer::SubStrCheckingClause::SubStrCheckingClause(WXSS::Tokenizer::STATE a2, char const* a3, WXSS::TokenType a4) + { + this->offset_0 = a2; + this->offset_4 = strlen(a3); + strcpy(this->offset_8, a3); + this->offset_24 = a4; + } + Tokenizer::SubStrCheckingClause& Tokenizer::SubStrCheckingClause::operator=(SubStrCheckingClause const & t) + { + this->offset_0 = t.offset_0; + this->offset_4 = t.offset_4; + memcpy(this->offset_8, t.offset_8, 16); + this->offset_24 = t.offset_24; + return *this; + } } \ No newline at end of file diff --git a/test/wcsc.disassembly.cpp b/test/wcsc.disassembly.cpp index ddf81d4..d9aeeed 100644 --- a/test/wcsc.disassembly.cpp +++ b/test/wcsc.disassembly.cpp @@ -12271,14 +12271,18 @@ int WXSS::Tokenizer::InitSubStrCheckingCaluseTable() if ( !WXSS::Tokenizer::InitSubStrCheckingCaluseTable(void)::inited ) { WXSS::Tokenizer::InitSubStrCheckingCaluseTable(void)::inited = 1; + // url WXSS::Tokenizer::SubStrCheckingClause::SubStrCheckingClause(v1, 9, (char *)Source, 9); qmemcpy(&WXSS::Tokenizer::SCC, v1, 0x1Cu); + // "rpx" WXSS::Tokenizer::SubStrCheckingClause::SubStrCheckingClause(v1, 9, (char *)off_50F508, 9); qmemcpy((char *)&WXSS::Tokenizer::SCC + 28, v1, 0x1Cu); WXSS::Tokenizer::SubStrCheckingClause::SubStrCheckingClause(v1, 10, (char *)Source, 9); qmemcpy((char *)&WXSS::Tokenizer::SCC + 56, v1, 0x1Cu); + // "rpx" WXSS::Tokenizer::SubStrCheckingClause::SubStrCheckingClause(v1, 10, (char *)off_50F508, 9); qmemcpy((char *)&WXSS::Tokenizer::SCC + 84, v1, 0x1Cu); + // "\0" result = WXSS::Tokenizer::SubStrCheckingClause::SubStrCheckingClause(v1, 0, (char *)&byte_50F50C, 0); qmemcpy((char *)&WXSS::Tokenizer::SCC + 112, v1, 0x1Cu); }