mirror of
https://github.com/msojocs/wx-compiler.git
synced 2025-07-19 00:00:04 +08:00
feat: XCompiler的方法
This commit is contained in:
parent
1ea4517c86
commit
d53812d2ae
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
@ -72,5 +72,6 @@
|
|||||||
"--background-index",
|
"--background-index",
|
||||||
//"--query-driver=/bin/arm-buildroot-linux-gnueabihf-g++", //for cross compile usage
|
//"--query-driver=/bin/arm-buildroot-linux-gnueabihf-g++", //for cross compile usage
|
||||||
"--compile-commands-dir=${workspaceFolder}/build/"
|
"--compile-commands-dir=${workspaceFolder}/build/"
|
||||||
]
|
],
|
||||||
|
"cmake.sourceDirectory": "/root/github/wx-compiler"
|
||||||
}
|
}
|
@ -169,7 +169,7 @@ namespace WXSS
|
|||||||
int GetWellFormattedJSCompiled(std::string const&, std::string&);
|
int GetWellFormattedJSCompiled(std::string const&, std::string&);
|
||||||
void GenExpr(std::shared_ptr<WXSS::CSSTreeLib::CSSSyntaxTree>, std::stringstream &, std::string &);
|
void GenExpr(std::shared_ptr<WXSS::CSSTreeLib::CSSSyntaxTree>, std::stringstream &, std::string &);
|
||||||
int GetPageCss(std::string const&, std::string&, uint);
|
int GetPageCss(std::string const&, std::string&, uint);
|
||||||
void MarkImported(std::string const&);
|
int MarkImported(std::string const&);
|
||||||
int GetCommHead(std::vector<std::string> &, std::string&, bool, std::string const&);
|
int GetCommHead(std::vector<std::string> &, std::string&, bool, std::string const&);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -416,12 +416,195 @@ namespace WXSS
|
|||||||
}
|
}
|
||||||
return this->offset_0;
|
return this->offset_0;
|
||||||
}
|
}
|
||||||
void XCompiler::MarkImported(std::string const&)
|
int XCompiler::MarkImported(std::string const& a2)
|
||||||
{
|
{
|
||||||
|
if (this->offset_32.count(a2))
|
||||||
|
{
|
||||||
|
std::vector<std::string> v15;
|
||||||
|
v15.push_back(a2);
|
||||||
|
while (v15.begin() != v15.end())
|
||||||
|
{
|
||||||
|
throw "not implement";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
throw "not implement";
|
throw "not implement";
|
||||||
}
|
}
|
||||||
int XCompiler::GetCommHead(std::vector<std::string> &, std::string&, bool, std::string const&)
|
int XCompiler::GetCommHead(std::vector<std::string> & a2, std::string& a3, bool a4, std::string const& a5)
|
||||||
{
|
{
|
||||||
throw "not implement";
|
if (a4 && this->offset_32.count(a5))
|
||||||
|
{
|
||||||
|
a2.push_back(a5);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < a2.size(); i++)
|
||||||
|
{
|
||||||
|
int t = this->MarkImported(a2[i]);
|
||||||
|
if (t)
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
std::stringstream v37;
|
||||||
|
for (auto j = this->offset_32.rbegin(); j != this->offset_32.rend(); j++)
|
||||||
|
{
|
||||||
|
if (this->offset_128[j->first] > 1)
|
||||||
|
{
|
||||||
|
this->offset_152[j->first] = j->first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto k = this->offset_32.rbegin(); k != this->offset_32.rend(); k++)
|
||||||
|
{
|
||||||
|
if (this->offset_128[k->first] > 1)
|
||||||
|
{
|
||||||
|
auto v9 = this->offset_152[k->first];
|
||||||
|
v37 << "if (!__COMMON_STYLESHEETS__.hasOwnProperty('";
|
||||||
|
v37 << WXML::Rewrite::ToStringCode2(v9);
|
||||||
|
v37 << "'))__COMMON_STYLESHEETS__['";
|
||||||
|
v37 << WXML::Rewrite::ToStringCode2(v9);
|
||||||
|
v37 << "']=[";
|
||||||
|
|
||||||
|
std::string v33;
|
||||||
|
auto v29 = k->second;
|
||||||
|
this->GenExpr(v29, v37, v33);
|
||||||
|
if (v33.length())
|
||||||
|
{
|
||||||
|
this->DealRPX(v33, v37);
|
||||||
|
}
|
||||||
|
v37 << "];";
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::string v26;
|
||||||
|
if (a4)
|
||||||
|
{
|
||||||
|
this->GetPageCss(a5, v26, 1);
|
||||||
|
if (v26.length())
|
||||||
|
{
|
||||||
|
v26.append("();");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::string v29;
|
||||||
|
this->GetHostRule(v29);
|
||||||
|
if (v29.length())
|
||||||
|
{
|
||||||
|
v29 += "();";
|
||||||
|
}
|
||||||
|
std::string v33 = v37.str();
|
||||||
|
int v23 = v33.length() + 3022;
|
||||||
|
char buf[v23];
|
||||||
|
snprintf(buf, v23, "var BASE_DEVICE_WIDTH = 750;\n"
|
||||||
|
"var isIOS=navigator.userAgent.match(\"iPhone\");\n"
|
||||||
|
"var deviceWidth = window.screen.width || 375;\n"
|
||||||
|
"var deviceDPR = window.devicePixelRatio || 2;\n"
|
||||||
|
"var checkDeviceWidth = window.__checkDeviceWidth__ || function() {\n"
|
||||||
|
"var newDeviceWidth = window.screen.width || 375\n"
|
||||||
|
"var newDeviceDPR = window.devicePixelRatio || 2\n"
|
||||||
|
"var newDeviceHeight = window.screen.height || 375\n"
|
||||||
|
"if (window.screen.orientation && /^landscape/.test(window.screen.orientation.type || '')) newDeviceWidth = newD"
|
||||||
|
"eviceHeight\n"
|
||||||
|
"if (newDeviceWidth !== deviceWidth || newDeviceDPR !== deviceDPR) {\n"
|
||||||
|
"deviceWidth = newDeviceWidth\n"
|
||||||
|
"deviceDPR = newDeviceDPR\n"
|
||||||
|
"}\n"
|
||||||
|
"}\n"
|
||||||
|
"checkDeviceWidth()\n"
|
||||||
|
"var eps = 1e-4;\n"
|
||||||
|
"var transformRPX = window.__transformRpx__ || function(number, newDeviceWidth) {\n"
|
||||||
|
"if ( number === 0 ) return 0;\n"
|
||||||
|
"number = number / BASE_DEVICE_WIDTH * ( newDeviceWidth || deviceWidth );\n"
|
||||||
|
"number = Math.floor(number + eps);\n"
|
||||||
|
"if (number === 0) {\n"
|
||||||
|
"if (deviceDPR === 1 || !isIOS) {\n"
|
||||||
|
"return 1;\n"
|
||||||
|
"} else {\n"
|
||||||
|
"return 0.5;\n"
|
||||||
|
"}\n"
|
||||||
|
"}\n"
|
||||||
|
"return number;\n"
|
||||||
|
"}\n"
|
||||||
|
"window.__rpxRecalculatingFuncs__ = window.__rpxRecalculatingFuncs__ || [];\n"
|
||||||
|
"var __COMMON_STYLESHEETS__ = __COMMON_STYLESHEETS__||{}\n"
|
||||||
|
"%s\n"
|
||||||
|
"var setCssToHead = function(file, _xcInvalid, info) {\n"
|
||||||
|
"var Ca = {};\n"
|
||||||
|
"var css_id;\n"
|
||||||
|
"var info = info || {};\n"
|
||||||
|
"var _C = __COMMON_STYLESHEETS__\n"
|
||||||
|
"function makeup(file, opt) {\n"
|
||||||
|
"var _n = typeof(file) === \"string\";\n"
|
||||||
|
"if ( _n && Ca.hasOwnProperty(file)) return \"\";\n"
|
||||||
|
"if ( _n ) Ca[file] = 1;\n"
|
||||||
|
"var ex = _n ? _C[file] : file;\n"
|
||||||
|
"var res=\"\";\n"
|
||||||
|
"for (var i = ex.length - 1; i >= 0; i--) {\n"
|
||||||
|
"var content = ex[i];\n"
|
||||||
|
"if (typeof(content) === \"object\")\n"
|
||||||
|
"{\n"
|
||||||
|
"var op = content[0];\n"
|
||||||
|
"if ( op == 0 )\n"
|
||||||
|
"res = transformRPX(content[1], opt.deviceWidth) + \"px\" + res;\n"
|
||||||
|
"else if ( op == 1)\n"
|
||||||
|
"res = opt.suffix + res;\n"
|
||||||
|
"else if ( op == 2 )\n"
|
||||||
|
"res = makeup(content[1], opt) + res;\n"
|
||||||
|
"}\n"
|
||||||
|
"else\n"
|
||||||
|
"res = content + res\n"
|
||||||
|
"}\n"
|
||||||
|
"return res;\n"
|
||||||
|
"}\n"
|
||||||
|
"var styleSheetManager = window.__styleSheetManager2__\n"
|
||||||
|
"var rewritor = function(suffix, opt, style){\n"
|
||||||
|
"opt = opt || {};\n"
|
||||||
|
"suffix = suffix || \"\";\n"
|
||||||
|
"opt.suffix = suffix;\n"
|
||||||
|
"if ( opt.allowIllegalSelector != undefined && _xcInvalid != undefined )\n"
|
||||||
|
"{\n"
|
||||||
|
"if ( opt.allowIllegalSelector )\n"
|
||||||
|
"console.warn( \"For developer:\" + _xcInvalid );\n"
|
||||||
|
"else\n"
|
||||||
|
"{\n"
|
||||||
|
"console.error( _xcInvalid );\n"
|
||||||
|
"}\n"
|
||||||
|
"}\n"
|
||||||
|
"Ca={};\n"
|
||||||
|
"css = makeup(file, opt);\n"
|
||||||
|
"if (styleSheetManager) {\n"
|
||||||
|
"var key = (info.path || Math.random()) + ':' + suffix\n"
|
||||||
|
"if (!style) {\n"
|
||||||
|
"styleSheetManager.addItem(key, info.path);\n"
|
||||||
|
"window.__rpxRecalculatingFuncs__.push(function(size){\n"
|
||||||
|
"opt.deviceWidth = size.width;\n"
|
||||||
|
"rewritor(suffix, opt, true);\n"
|
||||||
|
"});\n"
|
||||||
|
"}\n"
|
||||||
|
"styleSheetManager.setCss(key, css);\n"
|
||||||
|
"return;\n"
|
||||||
|
"}\n"
|
||||||
|
"if ( !style )\n"
|
||||||
|
"{\n"
|
||||||
|
"var head = document.head || document.getElementsByTagName('head')[0];\n"
|
||||||
|
"style = document.createElement('style');\n"
|
||||||
|
"style.type = 'text/css';\n"
|
||||||
|
"style.setAttribute( \"wxss:path\", info.path );\n"
|
||||||
|
"head.appendChild(style);\n"
|
||||||
|
"window.__rpxRecalculatingFuncs__.push(function(size){\n"
|
||||||
|
"opt.deviceWidth = size.width;\n"
|
||||||
|
"rewritor(suffix, opt, style);\n"
|
||||||
|
"});\n"
|
||||||
|
"}\n"
|
||||||
|
"if (style.styleSheet) {\n"
|
||||||
|
"style.styleSheet.cssText = css;\n"
|
||||||
|
"} else {\n"
|
||||||
|
"if ( style.childNodes.length == 0 )\n"
|
||||||
|
"style.appendChild(document.createTextNode(css));\n"
|
||||||
|
"else\n"
|
||||||
|
"style.childNodes[0].nodeValue = css;\n"
|
||||||
|
"}\n"
|
||||||
|
"}\n"
|
||||||
|
"return rewritor;\n"
|
||||||
|
"}\n",
|
||||||
|
v33);
|
||||||
|
std::string v32 = buf + v29;
|
||||||
|
a3 = v32.append(v26);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
} // namespace WXSS
|
} // namespace WXSS
|
@ -8419,6 +8419,7 @@ int __thiscall WXSS::XCompiler::MarkImported(int this, int a2)
|
|||||||
{
|
{
|
||||||
v15[1] = (void *)8;
|
v15[1] = (void *)8;
|
||||||
v15[0] = operator new(0x20u);
|
v15[0] = operator new(0x20u);
|
||||||
|
|
||||||
v2 = operator new(0x1F8u);
|
v2 = operator new(0x1F8u);
|
||||||
Block = v2;
|
Block = v2;
|
||||||
v21 = v2;
|
v21 = v2;
|
||||||
@ -8428,7 +8429,7 @@ int __thiscall WXSS::XCompiler::MarkImported(int this, int a2)
|
|||||||
v16 = (void **)v2;
|
v16 = (void **)v2;
|
||||||
v20 = (void **)v2;
|
v20 = (void **)v2;
|
||||||
v23 = v3;
|
v23 = v3;
|
||||||
v18 = (int)v2 + 504;
|
v18 = (int)v2 + 504; // v2->offset_504
|
||||||
v22 = (int)v2 + 504;
|
v22 = (int)v2 + 504;
|
||||||
std::deque<std::string>::push_back(v15, a2);
|
std::deque<std::string>::push_back(v15, a2);
|
||||||
while ( v16 != v20 )
|
while ( v16 != v20 )
|
||||||
@ -8543,8 +8544,8 @@ void *__thiscall WXSS::XCompiler::GetCommHead(int this, char **a2, _DWORD *a3, c
|
|||||||
Blocka = (void *)(j + 16);
|
Blocka = (void *)(j + 16);
|
||||||
if ( (unsigned int)*std::map<std::string,unsigned int>::operator[]((void **)(this + 128), j + 16) > 1 )
|
if ( (unsigned int)*std::map<std::string,unsigned int>::operator[]((void **)(this + 128), j + 16) > 1 )
|
||||||
{
|
{
|
||||||
std::string::basic_string((char *)&v33, (int)Blocka);
|
std::string::basic_string((char *)&v33, (int)Blocka); // first
|
||||||
std::string::basic_string((char *)v36, (int)Blocka);
|
std::string::basic_string((char *)v36, (int)Blocka); // first
|
||||||
Blockb = (void **)operator new(0x40u);
|
Blockb = (void **)operator new(0x40u);
|
||||||
std::string::basic_string(Blockb + 4, &v33);
|
std::string::basic_string(Blockb + 4, &v33);
|
||||||
std::string::basic_string(Blockb + 10, v36);
|
std::string::basic_string(Blockb + 10, v36);
|
||||||
@ -8587,8 +8588,8 @@ void *__thiscall WXSS::XCompiler::GetCommHead(int this, char **a2, _DWORD *a3, c
|
|||||||
v12 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v38, "__COMMON_STYLESHEETS__['");
|
v12 = std::operator<<<std::char_traits<char>>((std::ostream::sentry *)v38, "__COMMON_STYLESHEETS__['");
|
||||||
v13 = std::operator<<<char>(v12, v32);
|
v13 = std::operator<<<char>(v12, v32);
|
||||||
std::operator<<<std::char_traits<char>>(v13, "']=[");
|
std::operator<<<std::char_traits<char>>(v13, "']=[");
|
||||||
|
v33 = &v35; // std::string
|
||||||
v34 = 0;
|
v34 = 0;
|
||||||
v33 = &v35;
|
|
||||||
v35 = 0;
|
v35 = 0;
|
||||||
std::__shared_ptr<WXSS::CSSTreeLib::CSSSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
|
std::__shared_ptr<WXSS::CSSTreeLib::CSSSyntaxTree,(__gnu_cxx::_Lock_policy)2>::__shared_ptr(
|
||||||
&v29,
|
&v29,
|
||||||
@ -8602,8 +8603,8 @@ void *__thiscall WXSS::XCompiler::GetCommHead(int this, char **a2, _DWORD *a3, c
|
|||||||
std::string::_M_dispose((void **)v32);
|
std::string::_M_dispose((void **)v32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
v26 = &v28; // std::String
|
||||||
v27 = 0;
|
v27 = 0;
|
||||||
v26 = &v28;
|
|
||||||
v28 = 0;
|
v28 = 0;
|
||||||
if ( a4 )
|
if ( a4 )
|
||||||
{
|
{
|
||||||
@ -8616,8 +8617,8 @@ void *__thiscall WXSS::XCompiler::GetCommHead(int this, char **a2, _DWORD *a3, c
|
|||||||
std::string::_M_dispose((void **)v32);
|
std::string::_M_dispose((void **)v32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
v29 = (int)&v31; // std::string
|
||||||
v30 = 0;
|
v30 = 0;
|
||||||
v29 = (int)&v31;
|
|
||||||
v31 = 0;
|
v31 = 0;
|
||||||
WXSS::XCompiler::GetHostRule((_DWORD *)this, &v29);
|
WXSS::XCompiler::GetHostRule((_DWORD *)this, &v29);
|
||||||
if ( v30 )
|
if ( v30 )
|
||||||
|
Loading…
x
Reference in New Issue
Block a user