Use more std::* for string handling
This commit is contained in:
parent
56ab33c9d6
commit
26f0fd4cc6
|
@ -20,7 +20,7 @@ private:
|
||||||
|
|
||||||
void on_assert_failed(const char* message)
|
void on_assert_failed(const char* message)
|
||||||
{
|
{
|
||||||
String debug_info = "pid: " + int_to_str(getpid());
|
String debug_info = "pid: " + to_string(getpid());
|
||||||
int res = system(("xmessage -buttons 'quit:0,ignore:1' '"_str +
|
int res = system(("xmessage -buttons 'quit:0,ignore:1' '"_str +
|
||||||
message + "\n[Debug Infos]\n" + debug_info + "'").c_str());
|
message + "\n[Debug Infos]\n" + debug_info + "'").c_str());
|
||||||
switch (res)
|
switch (res)
|
||||||
|
|
|
@ -28,7 +28,7 @@ String ClientManager::generate_name() const
|
||||||
{
|
{
|
||||||
for (int i = 0; true; ++i)
|
for (int i = 0; true; ++i)
|
||||||
{
|
{
|
||||||
String name = "unnamed" + int_to_str(i);
|
String name = "unnamed" + to_string(i);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (auto& client : m_clients)
|
for (auto& client : m_clients)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
#include "exception.hh"
|
#include "exception.hh"
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -22,7 +20,7 @@ Color str_to_color(const String& color)
|
||||||
static const Regex rgb_regex{"rgb:[0-9a-fA-F]{6}"};
|
static const Regex rgb_regex{"rgb:[0-9a-fA-F]{6}"};
|
||||||
if (boost::regex_match(color, rgb_regex))
|
if (boost::regex_match(color, rgb_regex))
|
||||||
{
|
{
|
||||||
long int l = strtol(color.c_str() + 4, NULL, 16);
|
long l = stol(color.substr(ByteCount{4}), NULL, 16);
|
||||||
return { (unsigned char)((l >> 16) & 0xFF),
|
return { (unsigned char)((l >> 16) & 0xFF),
|
||||||
(unsigned char)((l >> 8) & 0xFF),
|
(unsigned char)((l >> 8) & 0xFF),
|
||||||
(unsigned char)(l & 0xFF) };
|
(unsigned char)(l & 0xFF) };
|
||||||
|
|
|
@ -79,9 +79,9 @@ bool is_horizontal_blank(char c)
|
||||||
|
|
||||||
struct unterminated_string : parse_error
|
struct unterminated_string : parse_error
|
||||||
{
|
{
|
||||||
unterminated_string(const String& open, const String& close, int nest = 0)
|
unterminated_string(const std::string& open, const std::string& close, int nest = 0)
|
||||||
: parse_error{"unterminated string '" + open + "..." + close + "'" +
|
: parse_error{"unterminated string '" + open + "..." + close + "'" +
|
||||||
(nest > 0 ? "(nesting: " + int_to_str(nest) + ")" : "")}
|
(nest > 0 ? "(nesting: " + to_string(nest) + ")" : "")}
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -125,9 +125,9 @@ void edit(const CommandParameters& params, Context& context)
|
||||||
|
|
||||||
if (param_count > 1)
|
if (param_count > 1)
|
||||||
{
|
{
|
||||||
int line = std::max(0, str_to_int(parser[1]) - 1);
|
int line = std::max(0, stoi(parser[1]) - 1);
|
||||||
int column = param_count > 2 ?
|
int column = param_count > 2 ?
|
||||||
std::max(0, str_to_int(parser[2]) - 1) : 0;
|
std::max(0, stoi(parser[2]) - 1) : 0;
|
||||||
|
|
||||||
context.editor().select(context.buffer().iterator_at({ line, column }));
|
context.editor().select(context.buffer().iterator_at({ line, column }));
|
||||||
if (context.has_window())
|
if (context.has_window())
|
||||||
|
@ -427,12 +427,12 @@ void define_command(const CommandParameters& params, Context& context)
|
||||||
completer = [=](const Context& context, const CommandParameters& params,
|
completer = [=](const Context& context, const CommandParameters& params,
|
||||||
size_t token_to_complete, ByteCount pos_in_token)
|
size_t token_to_complete, ByteCount pos_in_token)
|
||||||
{
|
{
|
||||||
EnvVarMap vars = {
|
EnvVarMap vars = {
|
||||||
{"token_to_complete", int_to_str(token_to_complete) },
|
{ "token_to_complete", to_string(token_to_complete) },
|
||||||
{ "pos_in_token", int_to_str((int)pos_in_token) }
|
{ "pos_in_token", to_string(pos_in_token) }
|
||||||
};
|
};
|
||||||
String output = ShellManager::instance().eval(shell_cmd, context, params, vars);
|
String output = ShellManager::instance().eval(shell_cmd, context, params, vars);
|
||||||
return split(output, '\n');
|
return split(output, '\n');
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
CommandManager::instance().register_command(cmd_name, cmd, completer);
|
CommandManager::instance().register_command(cmd_name, cmd, completer);
|
||||||
|
|
|
@ -134,9 +134,9 @@ HighlighterAndId colorize_regex_factory(const HighlighterParameters params, cons
|
||||||
throw runtime_error("wrong colorspec: '" + *it +
|
throw runtime_error("wrong colorspec: '" + *it +
|
||||||
"' expected <capture>:<fgcolor>[,<bgcolor>]");
|
"' expected <capture>:<fgcolor>[,<bgcolor>]");
|
||||||
|
|
||||||
int capture = str_to_int(String(res[1].first, res[1].second));
|
int capture = stoi(res[1].str());
|
||||||
const ColorPair*& color = colors[capture];
|
const ColorPair*& color = colors[capture];
|
||||||
color = &get_color(String(res[2].first, res[2].second));
|
color = &get_color(res[2].str());
|
||||||
}
|
}
|
||||||
|
|
||||||
String id = "colre'" + params[0] + "'";
|
String id = "colre'" + params[0] + "'";
|
||||||
|
|
|
@ -536,18 +536,17 @@ static BufferCompletion complete_opt(const BufferIterator& pos, OptionManager& o
|
||||||
boost::smatch match;
|
boost::smatch match;
|
||||||
if (boost::regex_match(desc.begin(), desc.end(), match, re))
|
if (boost::regex_match(desc.begin(), desc.end(), match, re))
|
||||||
{
|
{
|
||||||
BufferCoord coord{ str_to_int({match[1].first, match[1].second}) - 1,
|
BufferCoord coord{ stoi(match[1].str()) - 1, stoi(match[2].str()) - 1 };
|
||||||
str_to_int({match[2].first, match[2].second}) - 1 };
|
|
||||||
if (not pos.buffer().is_valid(coord))
|
if (not pos.buffer().is_valid(coord))
|
||||||
return {};
|
return {};
|
||||||
BufferIterator beg{pos.buffer(), coord};
|
BufferIterator beg{pos.buffer(), coord};
|
||||||
BufferIterator end = beg;
|
BufferIterator end = beg;
|
||||||
if (match[3].matched)
|
if (match[3].matched)
|
||||||
{
|
{
|
||||||
ByteCount len = str_to_int({match[3].first, match[3].second});
|
ByteCount len = stoi(match[3].str());
|
||||||
end = beg + len;
|
end = beg + len;
|
||||||
}
|
}
|
||||||
size_t timestamp = (size_t)str_to_int(String(match[4].first, match[4].second));
|
size_t timestamp = (size_t)stoi(match[4].str());
|
||||||
|
|
||||||
size_t longest_completion = 0;
|
size_t longest_completion = 0;
|
||||||
for (auto it = opt.begin() + 1; it != opt.end(); ++it)
|
for (auto it = opt.begin() + 1; it != opt.end(); ++it)
|
||||||
|
|
14
src/main.cc
14
src/main.cc
|
@ -64,7 +64,7 @@ void register_env_vars()
|
||||||
{ return context.buffer().display_name(); });
|
{ return context.buffer().display_name(); });
|
||||||
shell_manager.register_env_var("timestamp",
|
shell_manager.register_env_var("timestamp",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ return int_to_str(context.buffer().timestamp()); });
|
{ return to_string(context.buffer().timestamp()); });
|
||||||
shell_manager.register_env_var("selection",
|
shell_manager.register_env_var("selection",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ return context.editor().main_selection().content(); });
|
{ return context.editor().main_selection().content(); });
|
||||||
|
@ -90,21 +90,21 @@ void register_env_vars()
|
||||||
{ return ClientManager::instance().get_client(context).name(); });
|
{ return ClientManager::instance().get_client(context).name(); });
|
||||||
shell_manager.register_env_var("cursor_line",
|
shell_manager.register_env_var("cursor_line",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ return int_to_str((int)context.editor().main_selection().last().line() + 1); });
|
{ return to_string(context.editor().main_selection().last().line() + 1); });
|
||||||
shell_manager.register_env_var("cursor_column",
|
shell_manager.register_env_var("cursor_column",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ return int_to_str((int)context.editor().main_selection().last().column() + 1); });
|
{ return to_string(context.editor().main_selection().last().column() + 1); });
|
||||||
shell_manager.register_env_var("selection_desc",
|
shell_manager.register_env_var("selection_desc",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ auto& sel = context.editor().main_selection();
|
{ auto& sel = context.editor().main_selection();
|
||||||
auto beg = sel.begin();
|
auto beg = sel.begin();
|
||||||
return int_to_str((int)beg.line() + 1) + ':' + int_to_str((int)beg.column() + 1) + '+' + int_to_str((int)(sel.end() - beg)); });
|
return to_string(beg.line() + 1) + ':' + to_string(beg.column() + 1) + '+' + to_string((sel.end() - beg)); });
|
||||||
shell_manager.register_env_var("window_width",
|
shell_manager.register_env_var("window_width",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ return int_to_str((int)context.window().dimensions().column); });
|
{ return to_string(context.window().dimensions().column); });
|
||||||
shell_manager.register_env_var("window_height",
|
shell_manager.register_env_var("window_height",
|
||||||
[](const String& name, const Context& context)
|
[](const String& name, const Context& context)
|
||||||
{ return int_to_str((int)context.window().dimensions().line); });
|
{ return to_string(context.window().dimensions().line); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_registers()
|
void register_registers()
|
||||||
|
@ -223,7 +223,7 @@ int main(int argc, char* argv[])
|
||||||
register_filters();
|
register_filters();
|
||||||
|
|
||||||
write_debug("*** This is the debug buffer, where debug info will be written ***");
|
write_debug("*** This is the debug buffer, where debug info will be written ***");
|
||||||
write_debug("pid: " + int_to_str(getpid()));
|
write_debug("pid: " + to_string(getpid()));
|
||||||
write_debug("utf-8 test: é á ï");
|
write_debug("utf-8 test: é á ï");
|
||||||
|
|
||||||
Server server;
|
Server server;
|
||||||
|
|
|
@ -320,7 +320,8 @@ void use_selection_as_search_pattern(Context& context)
|
||||||
void yank(Context& context)
|
void yank(Context& context)
|
||||||
{
|
{
|
||||||
RegisterManager::instance()['"'] = context.editor().selections_content();
|
RegisterManager::instance()['"'] = context.editor().selections_content();
|
||||||
context.print_status({ "yanked " + int_to_str(context.editor().selections().size()) + " selections", get_color("Information") });
|
context.print_status({ "yanked " + to_string(context.editor().selections().size()) +
|
||||||
|
" selections", get_color("Information") });
|
||||||
}
|
}
|
||||||
|
|
||||||
void cat_yank(Context& context)
|
void cat_yank(Context& context)
|
||||||
|
@ -331,7 +332,7 @@ void cat_yank(Context& context)
|
||||||
str += sel;
|
str += sel;
|
||||||
RegisterManager::instance()['"'] = memoryview<String>(str);
|
RegisterManager::instance()['"'] = memoryview<String>(str);
|
||||||
context.print_status({ "concatenated and yanked " +
|
context.print_status({ "concatenated and yanked " +
|
||||||
int_to_str(sels.size()) + " selections", get_color("Information") });
|
to_string(sels.size()) + " selections", get_color("Information") });
|
||||||
}
|
}
|
||||||
|
|
||||||
void erase(Context& context)
|
void erase(Context& context)
|
||||||
|
@ -496,7 +497,7 @@ void deindent(Context& context)
|
||||||
auto restore_sels = on_scope_end([&]{ editor.select((SelectionList)std::move(sels)); });
|
auto restore_sels = on_scope_end([&]{ editor.select((SelectionList)std::move(sels)); });
|
||||||
editor.select(select_whole_lines);
|
editor.select(select_whole_lines);
|
||||||
editor.multi_select(std::bind(select_all_matches, _1,
|
editor.multi_select(std::bind(select_all_matches, _1,
|
||||||
Regex{"^\\h{1," + int_to_str(width) + "}"}));
|
Regex{"^\\h{1," + to_string(width) + "}"}));
|
||||||
editor.erase();
|
editor.erase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,8 +15,8 @@ namespace Kakoune
|
||||||
inline String option_to_string(const String& opt) { return opt; }
|
inline String option_to_string(const String& opt) { return opt; }
|
||||||
inline void option_from_string(const String& str, String& opt) { opt = str; }
|
inline void option_from_string(const String& str, String& opt) { opt = str; }
|
||||||
|
|
||||||
inline String option_to_string(int opt) { return int_to_str(opt); }
|
inline String option_to_string(int opt) { return to_string(opt); }
|
||||||
inline void option_from_string(const String& str, int& opt) { opt = str_to_int(str); }
|
inline void option_from_string(const String& str, int& opt) { opt = stoi(str); }
|
||||||
inline bool option_add(int& opt, int val) { opt += val; return val != 0; }
|
inline bool option_add(int& opt, int val) { opt += val; return val != 0; }
|
||||||
|
|
||||||
inline String option_to_string(bool opt) { return opt ? "true" : "false"; }
|
inline String option_to_string(bool opt) { return opt ? "true" : "false"; }
|
||||||
|
@ -145,16 +145,19 @@ void option_from_string(const String& str, std::tuple<Types...>& opt)
|
||||||
TupleOptionDetail<sizeof...(Types)-1, Types...>::from_string(elems, opt);
|
TupleOptionDetail<sizeof...(Types)-1, Types...>::from_string(elems, opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename RealType, typename ValueType = int>
|
template<typename RealType, typename ValueType>
|
||||||
inline String option_to_string(const StronglyTypedNumber<RealType, ValueType>& opt) { return int_to_str((int)opt); }
|
inline String option_to_string(const StronglyTypedNumber<RealType, ValueType>& opt)
|
||||||
|
|
||||||
template<typename RealType, typename ValueType = int>
|
|
||||||
inline void option_from_string(const String& str, StronglyTypedNumber<RealType, ValueType>& opt)
|
|
||||||
{
|
{
|
||||||
opt = StronglyTypedNumber<RealType, ValueType>{str_to_int(str)};
|
return to_string(opt);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename RealType, typename ValueType = int>
|
template<typename RealType, typename ValueType>
|
||||||
|
inline void option_from_string(const String& str, StronglyTypedNumber<RealType, ValueType>& opt)
|
||||||
|
{
|
||||||
|
opt = StronglyTypedNumber<RealType, ValueType>{stoi(str)};
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename RealType, typename ValueType>
|
||||||
inline bool option_add(StronglyTypedNumber<RealType, ValueType>& opt,
|
inline bool option_add(StronglyTypedNumber<RealType, ValueType>& opt,
|
||||||
StronglyTypedNumber<RealType, ValueType> val)
|
StronglyTypedNumber<RealType, ValueType> val)
|
||||||
{
|
{
|
||||||
|
|
|
@ -242,12 +242,12 @@ private:
|
||||||
RemoteUI::RemoteUI(int socket)
|
RemoteUI::RemoteUI(int socket)
|
||||||
: m_socket_watcher(socket, [this](FDWatcher&) { if (m_input_callback) m_input_callback(); })
|
: m_socket_watcher(socket, [this](FDWatcher&) { if (m_input_callback) m_input_callback(); })
|
||||||
{
|
{
|
||||||
write_debug("remote client connected: " + int_to_str(m_socket_watcher.fd()));
|
write_debug("remote client connected: " + to_string(m_socket_watcher.fd()));
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoteUI::~RemoteUI()
|
RemoteUI::~RemoteUI()
|
||||||
{
|
{
|
||||||
write_debug("remote client disconnected: " + int_to_str(m_socket_watcher.fd()));
|
write_debug("remote client disconnected: " + to_string(m_socket_watcher.fd()));
|
||||||
close(m_socket_watcher.fd());
|
close(m_socket_watcher.fd());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -504,7 +504,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
Server::Server()
|
Server::Server()
|
||||||
: m_filename{"/tmp/kak-" + int_to_str(getpid())}
|
: m_filename{"/tmp/kak-" + to_string(getpid())}
|
||||||
{
|
{
|
||||||
int listen_sock = socket(AF_UNIX, SOCK_STREAM, 0);
|
int listen_sock = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
fcntl(listen_sock, F_SETFD, FD_CLOEXEC);
|
fcntl(listen_sock, F_SETFD, FD_CLOEXEC);
|
||||||
|
|
|
@ -43,7 +43,7 @@ String ShellManager::pipe(const String& input,
|
||||||
close(read_pipe[1]);
|
close(read_pipe[1]);
|
||||||
close(error_pipe[1]);
|
close(error_pipe[1]);
|
||||||
|
|
||||||
memoryview<char> data = input.data();
|
auto data = input.data();
|
||||||
write(write_pipe[1], data.pointer(), data.size());
|
write(write_pipe[1], data.pointer(), data.size());
|
||||||
close(write_pipe[1]);
|
close(write_pipe[1]);
|
||||||
|
|
||||||
|
|
|
@ -5,33 +5,6 @@
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
String int_to_str(int value)
|
|
||||||
{
|
|
||||||
const bool negative = value < 0;
|
|
||||||
if (negative)
|
|
||||||
value = -value;
|
|
||||||
|
|
||||||
char buffer[16];
|
|
||||||
size_t pos = sizeof(buffer);
|
|
||||||
buffer[--pos] = 0;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
buffer[--pos] = '0' + (value % 10);
|
|
||||||
value /= 10;
|
|
||||||
}
|
|
||||||
while (value);
|
|
||||||
|
|
||||||
if (negative)
|
|
||||||
buffer[--pos] = '-';
|
|
||||||
|
|
||||||
return String(buffer + pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
int str_to_int(const String& str)
|
|
||||||
{
|
|
||||||
return atoi(str.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<String> split(const String& str, char separator)
|
std::vector<String> split(const String& str, char separator)
|
||||||
{
|
{
|
||||||
auto begin = str.begin();
|
auto begin = str.begin();
|
||||||
|
|
|
@ -64,6 +64,16 @@ inline String operator+(const char* lhs, const String& rhs)
|
||||||
return String(lhs) + rhs;
|
return String(lhs) + rhs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline String operator+(const std::string& lhs, const String& rhs)
|
||||||
|
{
|
||||||
|
return String(lhs) + rhs;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline String operator+(const String& lhs, const std::string& rhs)
|
||||||
|
{
|
||||||
|
return lhs + String(rhs);
|
||||||
|
}
|
||||||
|
|
||||||
inline String operator+(char lhs, const String& rhs)
|
inline String operator+(char lhs, const String& rhs)
|
||||||
{
|
{
|
||||||
return String(lhs) + rhs;
|
return String(lhs) + rhs;
|
||||||
|
@ -74,9 +84,6 @@ inline String operator+(Codepoint lhs, const String& rhs)
|
||||||
return String(lhs) + rhs;
|
return String(lhs) + rhs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String int_to_str(int value);
|
|
||||||
int str_to_int(const String& str);
|
|
||||||
std::vector<String> split(const String& str, char separator);
|
std::vector<String> split(const String& str, char separator);
|
||||||
|
|
||||||
inline String operator"" _str(const char* str, size_t)
|
inline String operator"" _str(const char* str, size_t)
|
||||||
|
@ -94,6 +101,15 @@ inline String codepoint_to_str(Codepoint cp)
|
||||||
String option_to_string(const Regex& re);
|
String option_to_string(const Regex& re);
|
||||||
void option_from_string(const String& str, Regex& re);
|
void option_from_string(const String& str, Regex& re);
|
||||||
|
|
||||||
|
|
||||||
|
using std::to_string;
|
||||||
|
|
||||||
|
template<typename RealType, typename ValueType>
|
||||||
|
std::string to_string(const StronglyTypedNumber<RealType, ValueType>& val)
|
||||||
|
{
|
||||||
|
return to_string((ValueType)val);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace std
|
namespace std
|
||||||
|
|
|
@ -99,10 +99,6 @@ void test_utf8()
|
||||||
|
|
||||||
void test_string()
|
void test_string()
|
||||||
{
|
{
|
||||||
kak_assert(int_to_str(124) == "124");
|
|
||||||
kak_assert(int_to_str(-129) == "-129");
|
|
||||||
kak_assert(int_to_str(0) == "0");
|
|
||||||
|
|
||||||
kak_assert(String("youpi ") + "matin" == "youpi matin");
|
kak_assert(String("youpi ") + "matin" == "youpi matin");
|
||||||
|
|
||||||
std::vector<String> splited = split("youpi:matin::tchou", ':');
|
std::vector<String> splited = split("youpi:matin::tchou", ':');
|
||||||
|
|
Loading…
Reference in New Issue
Block a user