Repository :
https://github.com/FarGroup/FarManager
On branch : master
Link :
https://github.com/FarGroup/FarManager/commit/8413a0e1fc717163c392b4ea33b3f611830e9f8b
>---------------------------------------------------------------
commit 8413a0e1fc717163c392b4ea33b3f611830e9f8b
Author: Alex Alabuzhev <
alab...@gmail.com>
Date: Mon Dec 1 20:54:28 2025 +0000
Refactoring
>---------------------------------------------------------------
8413a0e1fc717163c392b4ea33b3f611830e9f8b
far/datetime.cpp | 20 ++++++++++++--------
far/fileedit.cpp | 34 ++++++++++++++++++----------------
far/format.hpp | 2 --
far/help.cpp | 5 +----
4 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/far/datetime.cpp b/far/datetime.cpp
index 090c6a22f..9e3edf32e 100644
--- a/far/datetime.cpp
+++ b/far/datetime.cpp
@@ -82,7 +82,9 @@ static string st_time(const tm& Time, const locale_names& Names, bool const is_d
Time.tm_year + 1900);
}
- const auto Format = [&](const auto FormatString)
+ using date_format_string = far::format_string<wchar_t, int, int, int>;
+
+ const auto Format = [&](date_format_string const& FormatString)
{
return far::format(FormatString, DateSeparator, Time.tm_mday, Time.tm_mon + 1, Time.tm_year + 1900);
};
@@ -90,9 +92,9 @@ static string st_time(const tm& Time, const locale_names& Names, bool const is_d
switch(locale.date_format())
{
default:
- case date_type::ymd: return Format(FSTR(L"{3:4}{0}{2:02}{0}{1:02}"sv));
- case date_type::dmy: return Format(FSTR(L"{1:02}{0}{2:02}{0}{3:4}"sv));
- case date_type::mdy: return Format(FSTR(L"{2:02}{0}{1:02}{0}{3:4}"sv));
+ case date_type::ymd: return Format(L"{3:4}{0}{2:02}{0}{1:02}"sv);
+ case date_type::dmy: return Format(L"{1:02}{0}{2:02}{0}{3:4}"sv);
+ case date_type::mdy: return Format(L"{2:02}{0}{1:02}{0}{3:4}"sv);
}
}
@@ -584,7 +586,9 @@ std::tuple<string, string> time_point_to_string(os::chrono::time_point const Poi
if (TextMonth)
{
- const auto Format = [&](const auto FormatString)
+ using date_format_string = far::format_string<uint8_t, string, int>;
+
+ const auto Format = [&](date_format_string const& FormatString)
{
DateText = far::format(FormatString, LocalTime.Day, locale.LocalNames().Months[LocalTime.Month - 1].Short, Year);
};
@@ -592,9 +596,9 @@ std::tuple<string, string> time_point_to_string(os::chrono::time_point const Poi
switch (CurDateFormat)
{
default:
- case date_type::ymd: Format(FSTR(L"{2:02} {1:3.3} {0:2}"sv)); break;
- case date_type::dmy: Format(FSTR(L"{0:2} {1:3.3} {2:02}"sv)); break;
- case date_type::mdy: Format(FSTR(L"{1:3.3} {0:2} {2:02}"sv)); break;
+ case date_type::ymd: Format(L"{2:02} {1:3.3} {0:2}"sv); break;
+ case date_type::dmy: Format(L"{0:2} {1:3.3} {2:02}"sv); break;
+ case date_type::mdy: Format(L"{1:3.3} {0:2} {2:02}"sv); break;
}
}
else
diff --git a/far/fileedit.cpp b/far/fileedit.cpp
index 9556f2f15..c307dec8c 100644
--- a/far/fileedit.cpp
+++ b/far/fileedit.cpp
@@ -2169,7 +2169,9 @@ string FileEditor::GetTitle() const
static std::pair<string, size_t> char_code(std::optional<char32_t> const& Char, int const Codebase)
{
- const auto process = [&](const auto Format, string_view const Max)
+ using char_format_string = far::format_string<uint32_t>;
+
+ const auto process = [&](char_format_string const& Format, string_view const Max)
{
auto Result = std::pair{ Char.has_value()? far::format(Format, static_cast<uint32_t>(*Char)) : L""s, Max.size()};
Result.second = std::max(Result.first.size(), Result.second);
@@ -2179,22 +2181,24 @@ static std::pair<string, size_t> char_code(std::optional<char32_t> const& Char,
switch (Codebase)
{
case 0:
- return process(FSTR(L"0{:o}"sv), L"0177777"sv);
+ return process(L"0{:o}"sv, L"0177777"sv);
case 2:
- return process(FSTR(L"{:X}h"sv), L"FFFFh"sv);
+ return process(L"{:X}h"sv, L"FFFFh"sv);
case 1:
default:
- return process(FSTR(L"{}"sv), L"65535"sv);
+ return process(L"{}"sv, L"65535"sv);
}
}
static std::pair<string, size_t> ansi_char_code(std::optional<char32_t> const& Char, int const Codebase, uintptr_t const Codepage)
{
- const auto process = [&](const auto Format, string_view const Max)
+ using char_format_string = far::format_string<uint8_t>;
+
+ const auto process = [&](char_format_string const& Format, string_view const Max)
{
- std::optional<unsigned> CharCode;
+ std::optional<uint8_t> CharCode;
char Buffer;
encoding::diagnostics Diagnostics;
@@ -2203,10 +2207,9 @@ static std::pair<string, size_t> ansi_char_code(std::optional<char32_t> const& C
const auto Ch = static_cast<wchar_t>(*Char);
if (encoding::get_bytes(Codepage, { &Ch, 1 }, { &Buffer, 1 }, &Diagnostics) == 1 && !Diagnostics.ErrorPosition)
{
- const unsigned AnsiCode = Buffer;
- if (AnsiCode != *Char)
+ if (static_cast<char32_t>(Buffer) != *Char)
{
- CharCode = AnsiCode;
+ CharCode = Buffer;
}
}
}
@@ -2217,14 +2220,14 @@ static std::pair<string, size_t> ansi_char_code(std::optional<char32_t> const& C
switch (Codebase)
{
case 0:
- return process(FSTR(L"0{:<3o}"sv), L"0377"sv);
+ return process(L"0{:<3o}"sv, L"0377"sv);
case 2:
- return process(FSTR(L"{:02X}h"sv), L"FFh"sv);
+ return process(L"{:02X}h"sv, L"FFh"sv);
case 1:
default:
- return process(FSTR(L"{:<3}"sv), L"255"sv);
+ return process(L"{:<3}"sv, L"255"sv);
}
}
@@ -2271,11 +2274,10 @@ void FileEditor::ShowStatus() const
}
//предварительный расчет
- const auto LinesFormat = FSTR(L"{}/{}"sv);
- const auto SizeLineStr = far::format(LinesFormat, m_editor->Lines.size(), m_editor->Lines.size()).size();
- const auto strLineStr = far::format(LinesFormat, m_editor->m_it_CurLine.Number() + 1, m_editor->Lines.size());
+ const auto SizeLineStr = far::format(L"{}/{}"sv, m_editor->Lines.size(), m_editor->Lines.size()).size();
+ const auto strLineStr = far::format(L"{}/{}"sv, m_editor->m_it_CurLine.Number() + 1, m_editor->Lines.size());
const auto strAttr = *AttrStr? L"│"s + AttrStr : L""s;
- auto StatusLine = far::format(FSTR(L"│{}{}│{:5.5}│{:.3} {:>{}}│{:.3} {:<3}│{:.3} {:<3}{}│{}"sv),
+ auto StatusLine = far::format(L"│{}{}│{:5.5}│{:.3} {:>{}}│{:.3} {:<3}│{:.3} {:<3}{}│{}"sv,
m_editor->m_Flags.Check(Editor::FEDITOR_MODIFIED)?L'*':L' ',
m_editor->m_Flags.Check(Editor::FEDITOR_LOCKMODE)? L'-' : m_editor->m_Flags.Check(Editor::FEDITOR_PROCESSCTRLQ)? L'"' : L' ',
ShortReadableCodepageName(m_codepage),
diff --git a/far/format.hpp b/far/format.hpp
index ee5e6014f..408eca45a 100644
--- a/far/format.hpp
+++ b/far/format.hpp
@@ -108,8 +108,6 @@ namespace far
}
}
-#define FSTR(str) FMT_STRING_IMPL(str, fmt::detail::compile_string)
-
auto str(const auto& Value)
{
return fmt::to_wstring(Value);
diff --git a/far/help.cpp b/far/help.cpp
index 618bcade6..761333470 100644
--- a/far/help.cpp
+++ b/far/help.cpp
@@ -128,9 +128,6 @@ public:
static bool OpenURL(string_view URLPath);
-static const auto HelpFormatLink = FSTR(L"<{}\\>{}"sv);
-static const auto HelpFormatLinkModule = FSTR(L"<{}>{}"sv);
-
struct StackHelpData
{
string strHelpMask; // значение маски
@@ -2227,7 +2224,7 @@ namespace help
return string(HelpTopic.substr(1));
auto Topic = pPlugin && HelpTopic.front() != HelpBeginLink?
- far::format(HelpFormatLinkModule, pPlugin->ModuleName(), HelpTopic) :
+ far::format(L"<{}>{}"sv, pPlugin->ModuleName(), HelpTopic) :
string(HelpTopic);
if (!Topic.starts_with(HelpBeginLink))