1
This commit is contained in:
parent
4e36966bab
commit
57447c94f5
@ -96,16 +96,34 @@ static void SavePerfLog()
|
||||
|
||||
bool App::Init(int argc, char* argv[])
|
||||
{
|
||||
#if 1
|
||||
#if 0
|
||||
{
|
||||
std::string data = "";
|
||||
std::string pattern = R"(\$\{.*\})";
|
||||
std::regex re(pattern);
|
||||
std::string data = "${master.name} [aa ]${image.id:1000} bb${}cc";
|
||||
std::string pattern = R"(\$\{.*?\})";
|
||||
std::regex re(pattern, std::regex_constants::ECMAScript);
|
||||
std::cmatch m;
|
||||
|
||||
bool ret = std::regex_search(data.c_str(), m, re);
|
||||
if (ret) {
|
||||
a8::XPrintf("str:%s", {m.str()});
|
||||
bool matched = true;
|
||||
const char* last_pos = data.c_str();
|
||||
const char* end_pos = data.c_str() + data.length();
|
||||
while (last_pos < end_pos) {
|
||||
matched = std::regex_search(last_pos, m, re);
|
||||
if (matched) {
|
||||
if (m.position() > 0) {
|
||||
a8::XPrintf("raw_str:%s\n",
|
||||
{std::string(last_pos, m.position())});
|
||||
}
|
||||
|
||||
a8::XPrintf("str:%s pos:%d len:%d\n",
|
||||
{m.str(),
|
||||
m.position(),
|
||||
m.length()});
|
||||
last_pos += m.position() + m.length();
|
||||
} else {
|
||||
a8::XPrintf("raw_str2:%s\n",
|
||||
{std::string(last_pos, end_pos - last_pos)});
|
||||
last_pos = end_pos;
|
||||
}
|
||||
}
|
||||
|
||||
exit(1);
|
||||
|
@ -419,6 +419,7 @@ enum KillTextFieldIdx
|
||||
kFieldIdxMasterName = 1000,
|
||||
kFieldIdxKillerName,
|
||||
kFieldIdxDeadName,
|
||||
kFieldIdxWeaponName,
|
||||
kFieldIdxWeaponTextIcon,
|
||||
};
|
||||
|
||||
|
@ -3,6 +3,8 @@
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include <regex>
|
||||
|
||||
#include <a8/stringlist.h>
|
||||
#include <a8/csvreader.h>
|
||||
|
||||
@ -19,15 +21,46 @@
|
||||
a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString();
|
||||
|
||||
static void ParseElemets(const std::string& text,
|
||||
std::vector<std::tuple<int, std::string>>& elemets)
|
||||
std::vector<std::tuple<int, std::string>>& elements)
|
||||
{
|
||||
const char* p = text.c_str();
|
||||
int state = 0;
|
||||
while (*p) {
|
||||
if (*p == '$') {
|
||||
auto parsevar_cb =
|
||||
[] (const std::string& var_name, std::vector<std::tuple<int, std::string>>& elements)
|
||||
{
|
||||
if (var_name == "${master.name}") {
|
||||
elements.push_back(std::make_tuple(kFieldIdxMasterName, ""));
|
||||
} else if (var_name == "${killer.name}") {
|
||||
elements.push_back(std::make_tuple(kFieldIdxKillerName, ""));
|
||||
} else if (var_name == "${dead.name}") {
|
||||
elements.push_back(std::make_tuple(kFieldIdxDeadName, ""));
|
||||
} else if (var_name == "${weapon.name}") {
|
||||
elements.push_back(std::make_tuple(kFieldIdxWeaponName, ""));
|
||||
} else if (var_name == "${weapon.text_icon}") {
|
||||
elements.push_back(std::make_tuple(kFieldIdxWeaponTextIcon, ""));
|
||||
} else if (var_name.find("${image.id:") == 0) {
|
||||
} else {
|
||||
abort();
|
||||
}
|
||||
};
|
||||
|
||||
std::regex re(R"(\$\{.*?\})", std::regex_constants::ECMAScript);
|
||||
|
||||
const char* pcurr = text.c_str();
|
||||
const char* pend = text.c_str() + text.length();
|
||||
while (pcurr < pend) {
|
||||
std::cmatch m;
|
||||
if (std::regex_search(pcurr, m, re)) {
|
||||
if (m.position() > 0) {
|
||||
auto& e = a8::FastAppend(elements);
|
||||
e = std::make_tuple(kTextElement, std::string(pcurr, m.position()));
|
||||
}
|
||||
|
||||
parsevar_cb(m.str(), elements);
|
||||
pcurr += m.position() + m.length();
|
||||
} else {
|
||||
auto& e = a8::FastAppend(elements);
|
||||
e = std::make_tuple(kTextElement, std::string(pcurr, pend - pcurr));
|
||||
pcurr = pend;
|
||||
}
|
||||
++p;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user