feat: ToAttrContent

This commit is contained in:
msojocs 2023-06-21 17:29:09 +08:00
parent 00d7fb6fb0
commit 2a5e556538
2 changed files with 87 additions and 10 deletions

View File

@ -91,11 +91,13 @@ namespace WXML
{
private:
/* data */
std::string offset_0;
int offset_16;
int offset_20;
std::string offset_0; // content
int offset_16; // pos
int offset_20; // size
bool offset_28;
std::string offset_32;
bool offset_84;
std::string offset_88;
public:
Token(/* args */);
Token(WXML::DOMLib::Token&&);

View File

@ -7,12 +7,12 @@ namespace WXML
{
/*
Token
00 B6 BF 00 80 CC BF 00 01 00 00 00(?) 01 00 00 00(?)
01 00 00 00(pos) 04 00 00 00(size) 00 00 00 00 00 F6 97 00
38 F0 97 00 00 00 00 00 00 CC FA 00 CC F0 97 00
00 00 BF 00 00 00 00 00 FF FF FF FF 54 F0 97 00
00 00 00 00 00 3A 53 00 00 00 00 00 78 F0 97 00
00 00 00 00 00 F2 97 00 70 F0 97 00 00 00 00 00
00 B6 BF 00 80 CC BF 00 01 00 00 00(?) 01 00 00 00(?) // 15
01 00 00 00(pos) 04 00 00 00(size) 00 00 00 00 00 F6 97 00 // 31
38 F0 97 00 00 00 00 00 00 CC FA 00 CC F0 97 00 // 47
00 00 BF 00 00 00 00 00 FF FF FF FF 54 F0 97 00 // 63
00 00 00 00 00 3A 53 00 00 00 00 00 78 F0 97 00 // 79
00 00 00 00 00(?) F2 97 00 70 F0 97 00 00 00 00 00
00 00 00 00 62 00 00 40 F8 F1 97 00 7A 15 46 00
*/
Token::Token(/* args */)
@ -30,6 +30,7 @@ namespace WXML
Token::~Token()
{
}
int Token::GetTemplateContent(std::string const& templateStr, std::string& result)
{
int v2 = 0;
@ -74,10 +75,83 @@ namespace WXML
return -1;
}
std::string Token::ToAttrContent()
{
return "";
// 有缓存offset_84直接返回
if( this->offset_0.size() == 0 || this->offset_84)
return this->offset_88;
char * v6 = &this->offset_0[0] + this->offset_16;
int v8 = this->offset_20;
int v7 = *v6 == '\''/*39*/ || *v6 == '"'/*34*/;
if ( v8 > 0 )
{
char v1 = v6[v8 - 1];
if ( v1 == '"'/*34*/ || v1 == '\''/*39*/ )
--v8;
}
int v2 = 0;
int v3 = 0;
char Src[30];
// 重写
for (; v7 < v8; v7++)
{
char v4 = v6[v7];
if ( v4 == '\\'/*92*/ )
{
if ( !v2 )
{
v2 = 1;
continue;
}
}
else if ( v2 )
{
switch ( v4 )
{
case 'n':
Src[v3] = 10;// \n "\\n" -> "\n"
break;
case 't':
Src[v3] = 9; // \t "\\t" -> "\t"
break;
case 'r':
Src[v3] = 13; // \r "\\r" -> "\r"
break;
}
}
else
{
Src[v3] = v4;
}
++v3;
v2 = 0;
Src[v3] = 0;
if ( v3 == 30 ) // buffer
{
// v10[0] = v11;
// std::string::_M_construct<char const*>(v10, Src, (size_t)&Size);
// std::string::append((_DWORD *)(a1 + 88), (int)v10);
// std::string::_M_dispose(v10);
this->offset_88.append(Src, v3);
Src[0] = 0;
v2 = 0;
v3 = 0;
}
}
if ( v3 )
{
// v10[0] = v11;
// std::string::_M_construct<char const*>(v10, Src, (size_t)&Src[v3]);
// std::string::append((_DWORD *)(a1 + 88), (int)v10);
// std::string::_M_dispose(v10);
this->offset_88.append(Src, v3);
}
this->offset_84 = true;
return this->offset_88;
}
bool Token::IsValidVariableName(std::string const& a1)
{
char v1 = a1[0];
@ -119,6 +193,7 @@ namespace WXML
}
return false;
}
std::string Token::ToString()
{
std::string v4 = this->offset_32;