1
This commit is contained in:
parent
4e36966bab
commit
57447c94f5
@ -96,16 +96,34 @@ static void SavePerfLog()
|
|||||||
|
|
||||||
bool App::Init(int argc, char* argv[])
|
bool App::Init(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
#if 1
|
#if 0
|
||||||
{
|
{
|
||||||
std::string data = "";
|
std::string data = "${master.name} [aa ]${image.id:1000} bb${}cc";
|
||||||
std::string pattern = R"(\$\{.*\})";
|
std::string pattern = R"(\$\{.*?\})";
|
||||||
std::regex re(pattern);
|
std::regex re(pattern, std::regex_constants::ECMAScript);
|
||||||
std::cmatch m;
|
std::cmatch m;
|
||||||
|
|
||||||
bool ret = std::regex_search(data.c_str(), m, re);
|
bool matched = true;
|
||||||
if (ret) {
|
const char* last_pos = data.c_str();
|
||||||
a8::XPrintf("str:%s", {m.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);
|
exit(1);
|
||||||
|
@ -419,6 +419,7 @@ enum KillTextFieldIdx
|
|||||||
kFieldIdxMasterName = 1000,
|
kFieldIdxMasterName = 1000,
|
||||||
kFieldIdxKillerName,
|
kFieldIdxKillerName,
|
||||||
kFieldIdxDeadName,
|
kFieldIdxDeadName,
|
||||||
|
kFieldIdxWeaponName,
|
||||||
kFieldIdxWeaponTextIcon,
|
kFieldIdxWeaponTextIcon,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#include <regex>
|
||||||
|
|
||||||
#include <a8/stringlist.h>
|
#include <a8/stringlist.h>
|
||||||
#include <a8/csvreader.h>
|
#include <a8/csvreader.h>
|
||||||
|
|
||||||
@ -19,15 +21,46 @@
|
|||||||
a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString();
|
a8::XValue(MetaMgr::Instance()->GetSysParamAsString(#field_name, def_val)).GetString();
|
||||||
|
|
||||||
static void ParseElemets(const std::string& text,
|
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();
|
auto parsevar_cb =
|
||||||
int state = 0;
|
[] (const std::string& var_name, std::vector<std::tuple<int, std::string>>& elements)
|
||||||
while (*p) {
|
{
|
||||||
if (*p == '$') {
|
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