diff --git a/src/include/wxml.h b/src/include/wxml.h index 75a98a7..6b27589 100644 --- a/src/include/wxml.h +++ b/src/include/wxml.h @@ -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&&); diff --git a/src/wxml/dom_lib/token.cpp b/src/wxml/dom_lib/token.cpp index d05c418..1212d31 100644 --- a/src/wxml/dom_lib/token.cpp +++ b/src/wxml/dom_lib/token.cpp @@ -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(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(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;