This commit is contained in:
13038267101 2023-01-31 16:44:28 +08:00
commit 4918baf072
1 changed files with 50 additions and 36 deletions

View File

@ -171,7 +171,7 @@ namespace local_utility
return str > bgn; return str > bgn;
} }
// 暂不支持科学计数<EFBFBD>?1.2e+10 // æšä¸<EFBFBD>支æŒ<EFBFBD>ç§å­¦è®¡æ•°æ³?1.2e+10
bool get_number(const char*& str, double& val) bool get_number(const char*& str, double& val)
{ {
const char* bgn = str; const char* bgn = str;
@ -331,6 +331,29 @@ namespace local_utility
cb_ui_parm_ = NULL; cb_ui_parm_ = NULL;
cb_auth_ = 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->unit = SANE_UNIT_NONE;
sod->size = values.size(); sod->size = values.size();
sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项 sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项
| SANE_CAP_AUTOMATIC; // 硬件可设置默认<EFBFBD>? | SANE_CAP_AUTOMATIC; // 硬件å<EFBFBD>¯è®¾ç½®é»˜è®¤å€?
if (values.size()) if (values.size())
{ {
sod->constraint_type = SANE_CONSTRAINT_STRING_LIST; 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->unit = SANE_UNIT_NONE;
sod->size = sizeof(SANE_Word); sod->size = sizeof(SANE_Word);
sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项 sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项
/*| SANE_CAP_AUTOMATIC*/; // 硬件可设置默认<EFBFBD>? /*| SANE_CAP_AUTOMATIC*/; // 硬件å<EFBFBD>¯è®¾ç½®é»˜è®¤å€?
if (values.size()) 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->unit = SANE_UNIT_NONE;
sod->size = sizeof(SANE_Word); sod->size = sizeof(SANE_Word);
sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项 sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT // 软件可设置选项
/*| SANE_CAP_AUTOMATIC*/; // 硬件可设置默认<EFBFBD>? /*| SANE_CAP_AUTOMATIC*/; // 硬件å<EFBFBD>¯è®¾ç½®é»˜è®¤å€?
if (values.size()) if (values.size())
{ {
@ -861,23 +884,8 @@ SANE_Option_Descriptor* hg_sane_middleware::from_json(scanner_handle h, const st
constraints.push_back(val); constraints.push_back(val);
while (range->next_child(val)) while (range->next_child(val))
{ {
pos = val.find("."); local_utility::trans_language_if_was_word_id(val);
if (pos != std::string::npos) constraints.push_back(val);
{
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);
} }
} }
delete range; 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) //if (jsn->get_value("enable", enabled) && !enabled)
// ret->cap |= SANE_CAP_INACTIVE; // ret->cap |= SANE_CAP_INACTIVE;
// 关联<EFBFBD>? // å…³è<EFBFBD>”é¡?
json* depend = NULL; json* depend = NULL;
SLAVEOP so; SLAVEOP so;
if (jsn->get_value("depend_or", depend)) 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 ... // initializing status ...
if (so.master.size()) if (so.master.size())
{ {
std::string master(get_option_json(h, (void *)so.master[0].name.c_str())); //std::string master(get_option_json(h, (void *)so.master[0].name.c_str()));
json* m = new json(); //json* m = new json();
if (m->attach_text(&master[0])) //if (m->attach_text(&master[0]))
{ //{
bool integer = false; // bool integer = false, str = false;
master = ""; // master = "";
m->get_value("type", master); // m->get_value("type", master);
integer = master == "int"; // integer = master == "int";
master = ""; // str = master == "string";
m->get_value_as_string("cur", master, integer); // 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); so.enable_now = so.is_enable(so.master, (*it)->cur_vals);
if (!so.enable_now) if (!so.enable_now)
ret->cap |= SANE_CAP_INACTIVE; ret->cap |= SANE_CAP_INACTIVE;
} //}
delete m; //delete m;
} }
(*it)->slaves.push_back(so); (*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) 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"); dev = (ScannerInfo*)local_utility::acquire_memory(sizeof(ScannerInfo) * count, "hg_sane_middleware::get_devices");
hgerr = hg_scanner_enum(dev, &count, local_only); hgerr = hg_scanner_enum(dev, &count, local_only);
if (hgerr != SCANNER_ERR_OK) if (hgerr != SCANNER_ERR_OK)
@ -1736,7 +1746,7 @@ bool hg_sane_middleware::is_ready(void)
} }
/// <summary> /// <summary>
/// 关联项处<EFBFBD>? /// å…³è<EFBFBD>”项处ç<EFBFBD>?
bool hg_sane_middleware::compare_val_equal(const char* cur_val, const char* limit_l, const char* limit_r) 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; 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); jsn->get_value("type", cv.type);
cv.name = name; cv.name = name;
jsn->get_value_as_string("cur", cv.val, cv.type == "int"); 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); dev->cur_vals.push_back(cv);
return false; return false;
@ -2040,6 +2052,8 @@ bool hg_sane_middleware::refresh_current_value(LPDEVINST dev, const char* name,
{ {
std::string old(it->val); std::string old(it->val);
jsn->get_value_as_string("cur", it->val, it->type == "int"); jsn->get_value_as_string("cur", it->val, it->type == "int");
if (it->type == "string")
local_utility::trans_language_if_was_word_id(it->val);
return old != it->val; return old != it->val;
} }