mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-07 17:36:00 +00:00
76 lines
1.6 KiB
C++
76 lines
1.6 KiB
C++
/*
|
|
Copyright: © 2018 SIL International.
|
|
Description: Internal option key value map class and adaptor class for
|
|
the API.
|
|
Create Date: 7 Oct 2018
|
|
Authors: Tim Eves (TSE)
|
|
History: 7 Nov 2018 - TSE - Refactored into option.hpp & option.cpp.
|
|
*/
|
|
#include <algorithm>
|
|
|
|
#include "option.hpp"
|
|
#include "processor.hpp"
|
|
|
|
|
|
using namespace km::kbp;
|
|
|
|
namespace
|
|
{
|
|
constexpr char const * const scope_names_lut[] = {
|
|
u8"keyboard",
|
|
u8"environment"
|
|
};
|
|
}
|
|
|
|
// Forward declarations
|
|
|
|
|
|
option::option(km_kbp_option_scope s, char16_t const *k, char16_t const *v)
|
|
: option()
|
|
{
|
|
if (k && v)
|
|
{
|
|
auto n_k = std::char_traits<char16_t>::length(k)+1,
|
|
n_v = std::char_traits<char16_t>::length(v)+1;
|
|
auto _key = new km_kbp_cp[n_k],
|
|
_val = new km_kbp_cp[n_v];
|
|
std::copy_n(k, n_k, _key);
|
|
std::copy_n(v, n_v, _val);
|
|
|
|
key = _key;
|
|
value = _val;
|
|
scope = s;
|
|
}
|
|
}
|
|
|
|
// TODO: Relocate this and fix it
|
|
json & km::kbp::operator << (json &j, abstract_processor const &)
|
|
{
|
|
j << json::object;
|
|
// auto n = 0;
|
|
// for (auto scope: opts._scopes)
|
|
// {
|
|
// j << scope_names_lut[n++] << json::object;
|
|
// for (auto opt = scope; opt->key; ++opt)
|
|
// {
|
|
// j << opt->key << opt->value;
|
|
// }
|
|
// j << json::close;
|
|
// }
|
|
|
|
j << "saved" << json::object;
|
|
for (auto scope: {KM_KBP_OPT_KEYBOARD, KM_KBP_OPT_ENVIRONMENT})
|
|
{
|
|
j << scope_names_lut[scope-1] << json::object;
|
|
// for (auto & opt: opts._saved)
|
|
// {
|
|
// if (opt.scope != scope) continue;
|
|
// j << opt.key << opt.value;
|
|
// }
|
|
j << json::close;
|
|
}
|
|
j << json::close;
|
|
j << json::close;
|
|
|
|
return j;
|
|
}
|