diff options
Diffstat (limited to 'src/string_utils.hh')
| -rw-r--r-- | src/string_utils.hh | 111 |
1 files changed, 2 insertions, 109 deletions
diff --git a/src/string_utils.hh b/src/string_utils.hh index 3034dfd5..9e245bcc 100644 --- a/src/string_utils.hh +++ b/src/string_utils.hh @@ -4,9 +4,9 @@ #include "string.hh" #include "enum.hh" #include "vector.hh" -#include "ranges.hh" #include "optional.hh" -#include "utils.hh" +#include "format.hh" +#include "array.hh" namespace Kakoune { @@ -66,116 +66,9 @@ bool subsequence_match(StringView str, StringView subseq); String expand_tabs(StringView line, ColumnCount tabstop, ColumnCount col = 0); -struct WrapView -{ - struct Iterator - { - using difference_type = ptrdiff_t; - using value_type = StringView; - using pointer = StringView*; - using reference = StringView&; - using iterator_category = std::forward_iterator_tag; - - Iterator(StringView text, ColumnCount max_width); - - Iterator& operator++(); - Iterator operator++(int) { auto copy = *this; ++(*this); return copy; } - - bool operator==(Iterator other) const { return m_remaining == other.m_remaining and m_current == other.m_current; } - StringView operator*() { return m_current; } - - private: - StringView m_current; - StringView m_remaining; - ColumnCount m_max_width; - }; - - Iterator begin() const { return {text, max_width}; } - Iterator end() const { return {{}, 1}; } - - StringView text; - ColumnCount max_width; -}; - -inline auto wrap_at(ColumnCount max_width) -{ - return ViewFactory{[=](StringView text) { - return WrapView{text, max_width}; - }}; -} - int str_to_int(StringView str); // throws on error Optional<int> str_to_int_ifp(StringView str); -template<size_t N> -struct InplaceString -{ - static_assert(N < 256, "InplaceString cannot handle sizes >= 256"); - - constexpr operator StringView() const { return {m_data, ByteCount{m_length}}; } - operator String() const { return {m_data, ByteCount{m_length}}; } - - unsigned char m_length{}; - char m_data[N]; -}; - -struct Hex { size_t val; }; -constexpr Hex hex(size_t val) { return {val}; } - -struct Grouped { size_t val; }; -constexpr Grouped grouped(size_t val) { return {val}; } - -InplaceString<15> to_string(int val); -InplaceString<15> to_string(unsigned val); -InplaceString<23> to_string(long int val); -InplaceString<23> to_string(unsigned long val); -InplaceString<23> to_string(long long int val); -InplaceString<23> to_string(Hex val); -InplaceString<23> to_string(Grouped val); -InplaceString<23> to_string(float val); -InplaceString<7> to_string(Codepoint c); - -template<typename RealType, typename ValueType> -decltype(auto) to_string(const StronglyTypedNumber<RealType, ValueType>& val) -{ - return to_string((ValueType)val); -} - -namespace detail -{ - -template<typename T> requires std::is_convertible_v<T, StringView> -StringView format_param(const T& val) { return val; } - -template<typename T> requires (not std::is_convertible_v<T, StringView>) -decltype(auto) format_param(const T& val) { return to_string(val); } - -} - -String format(StringView fmt, ArrayView<const StringView> params); - -template<typename... Types> -String format(StringView fmt, Types&&... params) -{ - return format(fmt, ArrayView<const StringView>{detail::format_param(std::forward<Types>(params))...}); -} - -StringView format_to(ArrayView<char> buffer, StringView fmt, ArrayView<const StringView> params); - -template<typename... Types> -StringView format_to(ArrayView<char> buffer, StringView fmt, Types&&... params) -{ - return format_to(buffer, fmt, ArrayView<const StringView>{detail::format_param(std::forward<Types>(params))...}); -} - -void format_with(FunctionRef<void (StringView)> append, StringView fmt, ArrayView<const StringView> params); - -template<typename... Types> -void format_with(FunctionRef<void (StringView)> append, StringView fmt, Types&&... params) -{ - return format_with(append, fmt, ArrayView<const StringView>{detail::format_param(std::forward<Types>(params))...}); -} - String double_up(StringView s, StringView characters); inline String quote(StringView s) |
