Fix textprocessor testing and bump version

This commit is contained in:
IRBorisov 2024-06-14 20:30:09 +03:00
parent a210de14ff
commit 6ddd6389bd
5 changed files with 36 additions and 20 deletions

View File

@ -1,3 +1,7 @@
14.06.2024 Экстеор 4.9.3
• Грамматика: разрешено использование одного аргумента для мультифильтра - Fi1,2[X1*X1](S1)
• исправлена ошибка, приводившая к некорректному вычислению типизаций рекурсии с пустым множеством
• использование cctext без встраивания кода (через pip)
13.05.2024 Экстеор 4.9.2 13.05.2024 Экстеор 4.9.2
• Грамматика: разрешено использование пустого множества как литерала с типизацией B(R0) • Грамматика: разрешено использование пустого множества как литерала с типизацией B(R0)
• Грамматика: разрешено объявление кортежем в императивных блоках • Грамматика: разрешено объявление кортежем в императивных блоках

View File

@ -1182,8 +1182,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 4,9,2,1000 FILEVERSION 4,9,3,1000
PRODUCTVERSION 4,9,2,1000 PRODUCTVERSION 4,9,3,1000
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -1201,13 +1201,13 @@ BEGIN
VALUE "Comments", "Ýêñïëèêàòîð òåîðèé " VALUE "Comments", "Ýêñïëèêàòîð òåîðèé "
VALUE "CompanyName", "ÍÏ ÖÈÂÒ ÊÎÍÖÅÏÒ" VALUE "CompanyName", "ÍÏ ÖÈÂÒ ÊÎÍÖÅÏÒ"
VALUE "FileDescription", "Ýêñòåîð 4.9" VALUE "FileDescription", "Ýêñòåîð 4.9"
VALUE "FileVersion", "4.9.2.1000" VALUE "FileVersion", "4.9.3.1000"
VALUE "InternalName", "Ýêñòåîð 4.9" VALUE "InternalName", "Ýêñòåîð 4.9"
VALUE "LegalCopyright", "Copyright © NPMP CIHT CONCEPT 1994-2024" VALUE "LegalCopyright", "Copyright © NPMP CIHT CONCEPT 1994-2024"
VALUE "LegalTrademarks", "Ýêñòåîð™" VALUE "LegalTrademarks", "Ýêñòåîð™"
VALUE "OriginalFilename", "Exteor.exe" VALUE "OriginalFilename", "Exteor.exe"
VALUE "ProductName", "Ýêñòåîð 4.9" VALUE "ProductName", "Ýêñòåîð 4.9"
VALUE "ProductVersion", "4.9.2.1000" VALUE "ProductVersion", "4.9.3.1000"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -14,8 +14,10 @@ public:
[[nodiscard]] std::string Inflect(const std::string& target, const ccl::lang::Morphology& form) const override; [[nodiscard]] std::string Inflect(const std::string& target, const ccl::lang::Morphology& form) const override;
[[nodiscard]] std::string InflectDependant(const std::string& dependant, const std::string& main) const override; [[nodiscard]] std::string InflectDependant(const std::string& dependant, const std::string& main) const override;
[[nodiscard]] bool IsSubstr(const std::string& needle, [[nodiscard]] bool IsSubstr(
const std::string& haystack) const override; const std::string& needle,
const std::string& haystack
) const override;
}; };
} // namespace xtr::core } // namespace xtr::core

View File

@ -151,26 +151,35 @@ void PyCore::Stop() noexcept {
} }
} }
bool PyCore::LoadModule(const std::string& moduleName, const std::string& pyFileName) { bool PyCore::LoadModule(const std::string& moduleName, const std::string& pyImport) {
if (!IsRunning()) { if (!IsRunning()) {
return false; return false;
} else if (moduleName.empty()) { } else if (moduleName.empty()) {
return false; return false;
} else if (modules.contains(moduleName)) { } else if (modules.contains(moduleName)) {
return true; return true;
} else if (auto nameObj = Object::FromNew(PyUnicode_FromString(pyFileName.c_str()));
nameObj == nullptr) {
return false;
} else if (auto moduleObj = Object::FromNew(PyImport_Import(nameObj.get()));
moduleObj == nullptr) {
return false;
} else if (auto dictionaryObj = Object::FromBorrowed(PyModule_GetDict(moduleObj.get()));
dictionaryObj == nullptr) {
return false;
} else {
modules.insert(std::pair(moduleName, Module{ .pyModule = moduleObj, .pyDictionary = std::move(dictionaryObj) }));
return true;
} }
auto nameObj = Object::FromNew(PyUnicode_FromString(pyImport.c_str()));
if (nameObj == nullptr) {
return false;
}
auto moduleObj = Object::FromNew(PyImport_Import(nameObj.get()));
if (moduleObj == nullptr) {
return false;
}
auto dictionaryObj = Object::FromBorrowed(PyModule_GetDict(moduleObj.get()));
if (dictionaryObj == nullptr) {
return false;
}
modules.insert(std::pair(
moduleName,
Module{ .pyModule = moduleObj, .pyDictionary = std::move(dictionaryObj) }
));
return true;
} }
Callable PyCore::PyFunction(const std::string& moduleName, const std::string& funcName) const { Callable PyCore::PyFunction(const std::string& moduleName, const std::string& funcName) const {

View File

@ -20,8 +20,9 @@ protected:
std::unique_ptr<PyTextProcessor> processor{ nullptr }; std::unique_ptr<PyTextProcessor> processor{ nullptr };
void SetUp() override { void SetUp() override {
ASSERT_TRUE(python.Start()); static CString path{ "C:\\Program Files\\Python312\\" };
python.LoadModule("cctext", "cctext"); ASSERT_TRUE(python.Start(path));
ASSERT_TRUE(python.LoadModule("cctext", "cctext"));
processor = std::make_unique<PyTextProcessor>(); processor = std::make_unique<PyTextProcessor>();
processor->InitModule("cctext"); processor->InitModule("cctext");
} }