Commit 55671750 authored by nanahira's avatar nanahira

test regex

parent e8530165
......@@ -1477,7 +1477,7 @@ void ClientField::UpdateDeclarableCodeType(bool enter) {
return;
}
for(auto cit = dataManager._strings.begin(); cit != dataManager._strings.end(); ++cit) {
if(cit->second.name.find(pname) != std::wstring::npos) {
if(cit->second.name.find(pname) != std::wstring::npos || mainGame->CheckRegEx(cit->second.name, pname, true)) {
auto cp = dataManager.GetCodePointer(cit->first); //verified by _strings
//datas.alias can be double card names or alias
if(is_declarable(cp->second, declarable_type)) {
......@@ -1524,7 +1524,7 @@ void ClientField::UpdateDeclarableCodeOpcode(bool enter) {
return;
}
for(auto cit = dataManager._strings.begin(); cit != dataManager._strings.end(); ++cit) {
if(cit->second.name.find(pname) != std::wstring::npos) {
if(cit->second.name.find(pname) != std::wstring::npos || mainGame->CheckRegEx(cit->second.name, pname)) {
auto cp = dataManager.GetCodePointer(cit->first); //verified by _strings
//datas.alias can be double card names or alias
if(is_declarable(cp->second, opcode)) {
......
#include "data_manager.h"
#include "game.h"
#include <stdio.h>
namespace ygo {
......@@ -189,7 +190,7 @@ const wchar_t* DataManager::GetSetName(int code) {
unsigned int DataManager::GetSetCode(const wchar_t* setname) {
for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) {
auto xpos = csit->second.find_first_of(L'|');//setname|extra info
if(csit->second.compare(0, xpos, setname) == 0)
if(csit->second.compare(0, xpos, setname) == 0 || mainGame->CheckRegEx(csit->second, setname))
return csit->first;
}
return 0;
......
......@@ -944,6 +944,7 @@ void DeckBuilder::FilterCards() {
int trycode = BufferIO::GetVal(elements_iterator->c_str());
bool tryresult = dataManager.GetData(trycode, 0);
if(!tryresult && !CardNameContains(text.name.c_str(), elements_iterator->c_str()) && text.text.find(elements_iterator->c_str()) == std::wstring::npos
&& !mainGame->CheckRegEx(text.text, elements_iterator->c_str())
&& (!set_code_map[*elements_iterator] || !check_set_code(data, set_code_map[*elements_iterator]))) {
is_target = false;
break;
......@@ -1059,6 +1060,8 @@ bool DeckBuilder::CardNameContains(const wchar_t *haystack, const wchar_t *needl
if (!haystack) {
return false;
}
if(mainGame->CheckRegEx(haystack, needle))
return true;
int i = 0;
int j = 0;
while (haystack[i]) {
......
......@@ -10,6 +10,7 @@
#include "netserver.h"
#include "single_mode.h"
#include <sstream>
#include <regex>
unsigned short PRO_VERSION = 0x1346;
......@@ -2078,6 +2079,22 @@ void Game::takeScreenshot() {
} else
device->getLogger()->log(L"Failed to take screenshot.", irr::ELL_WARNING);
}
bool Game::CheckRegEx(const wchar_t* text, const wchar_t* exp, bool exact) {
//if(std::wregex(exp) == NULL)
// return false;
if(exact)
return !!std::regex_match(text, std::wregex(exp));
else
return !!std::regex_search(text, std::wregex(exp));
}
bool Game::CheckRegEx(std::wstring text, const wchar_t* exp, bool exact) {
//if(std::wregex(exp) == NULL)
// return false;
if(exact)
return !!std::regex_match(text, std::wregex(exp));
else
return !!std::regex_search(text, std::wregex(exp));
}
const char* Game::GetLocaleDir(const char* dir) {
if(!gameConf.locale || !wcscmp(gameConf.locale, L"default"))
return dir;
......
......@@ -170,6 +170,8 @@ public:
int LocalPlayer(int player);
const wchar_t* LocalName(int local_player);
const char* GetLocaleDir(const char* dir);
bool CheckRegEx(const wchar_t* text, const wchar_t* exp, bool exact = false);
bool CheckRegEx(std::wstring text, const wchar_t* exp, bool exact = false);
bool HasFocus(EGUI_ELEMENT_TYPE type) const {
irr::gui::IGUIElement* focus = env->getFocus();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment