From bb2706781ff128c0c03edb3d87ffbc5961b7465d Mon Sep 17 00:00:00 2001 From: gb <741021719@qq.com> Date: Tue, 31 Jan 2023 16:23:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=95=E5=85=A5=E8=AF=AD?= =?UTF-8?q?=E8=A8=80=E5=8C=85=E5=90=8E=E4=BE=9D=E8=B5=96=E9=A1=B9=E5=A4=84?= =?UTF-8?q?=E7=90=86BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hgsane/sane_hg_mdw.cpp | 86 ++++++++++++++++++++++++------------------ 1 file changed, 50 insertions(+), 36 deletions(-) diff --git a/hgsane/sane_hg_mdw.cpp b/hgsane/sane_hg_mdw.cpp index 32bbe62..9163b50 100644 --- a/hgsane/sane_hg_mdw.cpp +++ b/hgsane/sane_hg_mdw.cpp @@ -171,7 +171,7 @@ namespace local_utility return str > bgn; } - // 暂不支持科学计数�?1.2e+10 + // 暂不支持科学计数?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; // 硬件可设置默认�? + | SANE_CAP_AUTOMATIC; // 硬件可设置默认? 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*/; // 硬件可设置默认�? + /*| SANE_CAP_AUTOMATIC*/; // 硬件可设置默认? 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*/; // 硬件可设置默认�? + /*| SANE_CAP_AUTOMATIC*/; // 硬件可设置默认? 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; - // 关联�? + // 关联? 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间隙可能新增的设备预留空�? + count += 4; // 为两次hg_scanner_enum间隙可能新增的设备预留空? 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) } /// -/// 关联项处�? +/// 关联项处? 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; }