修复引入语言包后依赖项处理BUG

This commit is contained in:
gb 2023-01-31 16:23:21 +08:00
parent 397f919b1d
commit bb2706781f
1 changed files with 50 additions and 36 deletions

View File

@ -171,7 +171,7 @@ namespace local_utility
return str > bgn;
}
// 暂不支持科学计数<EFBFBD>?1.2e+10
// æšä¸<EFBFBD>支æŒ<EFBFBD>ç§å­¦è®¡æ•°æ³?1.2e+10
bool get_number(const char*& str, double& val)
{
const char* bgn = str;
@ -331,6 +331,29 @@ namespace local_utility
cb_ui_parm_ = NULL;
cb_auth_ = NULL;
}
static void trans_language_if_was_word_id(std::string& val)
{
size_t pos = val.find(".");
if (pos != std::string::npos)
{
bool num = true;
for (size_t i = pos + 1; i < val.length(); ++i)
{
if (val[i] != '0')
{
num = false;
break;
}
}
if (num && std::to_string(atoi(val.c_str())) == val.substr(0, pos))
{
val = lang_load_string(atoi(val.c_str()), nullptr);
}
}
}
}
@ -557,7 +580,7 @@ SANE_Option_Descriptor* hg_sane_middleware::string_option_to_SANE_descriptor(con
sod->unit = SANE_UNIT_NONE;
sod->size = values.size();
sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项
| SANE_CAP_AUTOMATIC; // 硬件可设置默认<EFBFBD>?
| SANE_CAP_AUTOMATIC; // 硬件å<EFBFBD>¯è®¾ç½®é»˜è®¤å€?
if (values.size())
{
sod->constraint_type = SANE_CONSTRAINT_STRING_LIST;
@ -678,7 +701,7 @@ SANE_Option_Descriptor* hg_sane_middleware::number_option_to_SANE_descriptor(con
sod->unit = SANE_UNIT_NONE;
sod->size = sizeof(SANE_Word);
sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项
/*| SANE_CAP_AUTOMATIC*/; // 硬件可设置默认<EFBFBD>?
/*| SANE_CAP_AUTOMATIC*/; // 硬件å<EFBFBD>¯è®¾ç½®é»˜è®¤å€?
if (values.size())
{
@ -728,7 +751,7 @@ SANE_Option_Descriptor* hg_sane_middleware::number_option_to_SANE_descriptor(con
sod->unit = SANE_UNIT_NONE;
sod->size = sizeof(SANE_Word);
sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项
/*| SANE_CAP_AUTOMATIC*/; // 硬件可设置默认<EFBFBD>?
/*| SANE_CAP_AUTOMATIC*/; // 硬件å<EFBFBD>¯è®¾ç½®é»˜è®¤å€?
if (values.size())
{
@ -861,23 +884,8 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
constraints.push_back(val);
while (range->next_child(val))
{
pos = val.find(".");
if (pos != std::string::npos)
{
for (size_t i = val.length() - 1; i > pos; --i)
{
if (val[i] != '0')
{
pos = i + 1;
break;
}
}
val.erase(pos);
}
if (std::to_string(atoi(val.c_str())) == val)
constraints.push_back(lang_load_string(atoi(val.c_str()), (int*)&lower));
else
constraints.push_back(val);
local_utility::trans_language_if_was_word_id(val);
constraints.push_back(val);
}
}
delete range;
@ -1004,7 +1012,7 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
//if (jsn->get_value("enable", enabled) && !enabled)
// ret->cap |= SANE_CAP_INACTIVE;
// 关联<EFBFBD>?
// å…³è<EFBFBD>”é¡?
json* depend = NULL;
SLAVEOP so;
if (jsn->get_value("depend_or", depend))
@ -1026,22 +1034,24 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
// initializing status ...
if (so.master.size())
{
std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
json* m = new json();
if (m->attach_text(&master[0]))
{
bool integer = false;
//std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
//json* m = new json();
//if (m->attach_text(&master[0]))
//{
// bool integer = false, str = false;
master = "";
m->get_value("type", master);
integer = master == "int";
master = "";
m->get_value_as_string("cur", master, integer);
// master = "";
// m->get_value("type", master);
// integer = master == "int";
// str = master == "string";
// master = "";
// m->get_value_as_string("cur", master, integer);
// local_utility::trans_language_if_was_word_id(val);
so.enable_now = so.is_enable(so.master, (*it)->cur_vals);
if (!so.enable_now)
ret->cap |= SANE_CAP_INACTIVE;
}
delete m;
//}
//delete m;
}
(*it)->slaves.push_back(so);
}
@ -1358,7 +1368,7 @@ SANE_Status hg_sane_middleware::get_devices(const SANE_Device*** device_list, SA
if (hgerr == SCANNER_ERR_INSUFFICIENT_MEMORY)
{
count += 4; // 为两次hg_scanner_enum间隙可能新增的设备预留空<EFBFBD>?
count += 4; // 为两次hg_scanner_enumé—´éš™å<EFBFBD>¯èƒ½æ°å¢žçš„设备预留空é—?
dev = (ScannerInfo*)local_utility::acquire_memory(sizeof(ScannerInfo) * count, "hg_sane_middleware::get_devices");
hgerr = hg_scanner_enum(dev, &count, local_only);
if (hgerr != SCANNER_ERR_OK)
@ -1736,7 +1746,7 @@ bool hg_sane_middleware::is_ready(void)
}
/// <summary>
/// 关联项处<EFBFBD>?
/// å…³è<EFBFBD>”项处ç<EFBFBD>?
bool hg_sane_middleware::compare_val_equal(const char* cur_val, const char* limit_l, const char* limit_r)
{
return strcmp(cur_val, limit_l) == 0;
@ -2032,6 +2042,8 @@ bool hg_sane_middleware::refresh_current_value(LPDEVINST dev, const char* name,
jsn->get_value("type", cv.type);
cv.name = name;
jsn->get_value_as_string("cur", cv.val, cv.type == "int");
if (cv.type == "string")
local_utility::trans_language_if_was_word_id(cv.val);
dev->cur_vals.push_back(cv);
return false;
@ -2040,6 +2052,8 @@ bool hg_sane_middleware::refresh_current_value(LPDEVINST dev, const char* name,
{
std::string old(it->val);
jsn->get_value_as_string("cur", it->val, it->type == "int");
if (it->val == "string")
local_utility::trans_language_if_was_word_id(it->val);
return old != it->val;
}