2012-04-03 15:39:20 +02:00
|
|
|
#include "option_manager.hh"
|
|
|
|
|
|
|
|
#include <sstream>
|
|
|
|
|
|
|
|
namespace Kakoune
|
|
|
|
{
|
|
|
|
|
2012-04-14 03:17:09 +02:00
|
|
|
Option& OptionManager::operator[] (const String& name)
|
2012-04-03 20:25:27 +02:00
|
|
|
{
|
|
|
|
auto it = m_options.find(name);
|
|
|
|
if (it != m_options.end())
|
|
|
|
return it->second;
|
|
|
|
else
|
2012-06-12 20:28:25 +02:00
|
|
|
{
|
|
|
|
Option& res = m_options[name];
|
|
|
|
OptionManager* parent = m_parent;
|
|
|
|
while (parent)
|
|
|
|
{
|
|
|
|
auto parent_it = parent->m_options.find(name);
|
|
|
|
if (parent_it != parent->m_options.end())
|
|
|
|
{
|
|
|
|
res = parent_it->second;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
parent = parent->m_parent;
|
|
|
|
}
|
|
|
|
return res;
|
|
|
|
}
|
2012-04-03 20:25:27 +02:00
|
|
|
}
|
|
|
|
|
2012-04-14 03:17:09 +02:00
|
|
|
const Option& OptionManager::operator[] (const String& name) const
|
2012-04-03 20:25:27 +02:00
|
|
|
{
|
|
|
|
auto it = m_options.find(name);
|
|
|
|
if (it != m_options.end())
|
|
|
|
return it->second;
|
|
|
|
else if (m_parent)
|
|
|
|
return (*m_parent)[name];
|
|
|
|
else
|
|
|
|
throw option_not_found(name);
|
|
|
|
}
|
|
|
|
|
2012-04-14 03:17:09 +02:00
|
|
|
CandidateList OptionManager::complete_option_name(const String& prefix,
|
2012-04-03 20:25:27 +02:00
|
|
|
size_t cursor_pos)
|
|
|
|
{
|
2012-04-14 03:17:09 +02:00
|
|
|
String real_prefix = prefix.substr(0, cursor_pos);
|
2012-04-03 20:25:27 +02:00
|
|
|
CandidateList result;
|
|
|
|
if (m_parent)
|
|
|
|
result = m_parent->complete_option_name(prefix, cursor_pos);
|
|
|
|
for (auto& option : m_options)
|
|
|
|
{
|
|
|
|
if (option.first.substr(0, real_prefix.length()) == real_prefix and
|
|
|
|
not contains(result, option.first))
|
|
|
|
result.push_back(option.first);
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2012-04-03 15:39:20 +02:00
|
|
|
GlobalOptionManager::GlobalOptionManager()
|
|
|
|
: OptionManager()
|
|
|
|
{
|
|
|
|
(*this)["tabstop"] = 8;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|