18 Commits
v2.1 ... v2.3

Author SHA1 Message Date
Pranav Srinivas Kumar
26d39ad8fb Bumped to version v2.3 2023-02-15 07:17:27 -08:00
Pranav Srinivas Kumar
bfe95fee17 Updated single_include to support mbstowcs_s Windows impl 2023-02-15 07:11:53 -08:00
Pranav
11c60675d5 Merge pull request #119 from jsttzsf/bugfix/mbstowcs_deprecation
Replaced mbstowcs with mbstowcs_s
2023-02-15 09:09:54 -06:00
Julian Schiedel
98f6e50af9 Added preprocesser fork to account for missing mbstowcs_s on linux 2023-02-15 15:48:37 +01:00
Julian Schiedel
dcfaebf9d9 Replaced mbstowcs with mbstowcs_s to fix fix compiler warning about deprecation 2023-02-15 10:36:38 +01:00
Pranav
f03feacc0b Merge pull request #118 from p-ranav/bugfix/codecvt
Removed deprecated codecvt
2023-02-14 10:10:32 -06:00
Pranav Srinivas Kumar
15c180b113 Removed unused vector header 2023-02-14 08:09:46 -08:00
Pranav Srinivas Kumar
80b822c576 Removed deprecated codecvt 2023-02-14 08:07:50 -08:00
Pranav
f38bf229eb Merge pull request #115 from aengusjiang/master
fix the bug of has_include error with g++4.8.5
2023-01-12 07:56:57 -06:00
Aengus.Jiang
0cce8d7326 fix the bug of has_include error with g++4.8.5 2023-01-12 17:34:05 +08:00
Pranav
a5bc05f32a Merge pull request #103 from SheepGoMeh/master
Fix Windows support for DynamicProgress
2021-10-28 18:43:20 -05:00
Dragon
40b99f6b04 Generate single header 2021-10-28 23:55:59 +03:00
Dragon
9f3b0247f5 Fix Windows support for DynamicProgress 2021-10-28 23:47:55 +03:00
Pranav
cdcff01339 Merge pull request #101 from Chuvi-w/Fix_Windows_h_min_max
Fix #define min/max problem from Windows.h
2021-07-12 10:17:20 -05:00
Chuvi
28a81289a6 Fix #define min/max problem from Windows.h 2021-07-12 09:56:08 +03:00
Pranav Srinivas Kumar
e34840ab0d Closes #93 - Defined _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING to remove codecvt warning 2021-05-03 17:34:59 -05:00
Pranav Srinivas Kumar
6432875ef4 Bumped to v2.2 2021-05-03 09:38:25 -05:00
Pranav Srinivas Kumar
276d476d4d Fixed the NOMINMAX issue for Windows build with latest termcolor #76, replaced #pragma once with #ifndef-define pairs 2021-05-03 09:37:44 -05:00
20 changed files with 526 additions and 1726 deletions

View File

@@ -5,14 +5,14 @@ if(DEFINED PROJECT_NAME)
endif() endif()
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.12") if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.12")
project(indicators VERSION 2.1.0 LANGUAGES CXX project(indicators VERSION 2.3.0 LANGUAGES CXX
HOMEPAGE_URL "https://github.com/p-ranav/indicators" HOMEPAGE_URL "https://github.com/p-ranav/indicators"
DESCRIPTION "Activity Indicators for Modern C++") DESCRIPTION "Activity Indicators for Modern C++")
elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "3.9") elseif(CMAKE_VERSION VERSION_GREATER_EQUAL "3.9")
project(indicators VERSION 2.1.0 LANGUAGES CXX project(indicators VERSION 2.3.0 LANGUAGES CXX
DESCRIPTION "Activity Indicators for Modern C++") DESCRIPTION "Activity Indicators for Modern C++")
else() else()
project(indicators VERSION 2.1.0 LANGUAGES CXX) project(indicators VERSION 2.3.0 LANGUAGES CXX)
endif() endif()
if(EXISTS "${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") if(EXISTS "${CMAKE_BINARY_DIR}/conanbuildinfo.cmake")

View File

@@ -12,7 +12,7 @@
<a href="https://github.com/p-ranav/indicators/blob/master/LICENSE"> <a href="https://github.com/p-ranav/indicators/blob/master/LICENSE">
<img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="license"/> <img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="license"/>
</a> </a>
<img src="https://img.shields.io/badge/version-2.1-blue.svg?cacheSeconds=2592000" alt="version"/> <img src="https://img.shields.io/badge/version-2.3-blue.svg?cacheSeconds=2592000" alt="version"/>
</p> </p>

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_BLOCK_PROGRESS_BAR
#define INDICATORS_BLOCK_PROGRESS_BAR
#include <indicators/color.hpp> #include <indicators/color.hpp>
#include <indicators/details/stream_helper.hpp> #include <indicators/details/stream_helper.hpp>
@@ -121,7 +122,7 @@ public:
size_t current() { size_t current() {
std::lock_guard<std::mutex> lock{mutex_}; std::lock_guard<std::mutex> lock{mutex_};
return std::min(static_cast<size_t>(progress_), return (std::min)(static_cast<size_t>(progress_),
size_t(get_value<details::ProgressBarOption::max_progress>())); size_t(get_value<details::ProgressBarOption::max_progress>()));
} }
@@ -178,7 +179,7 @@ private:
auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(now - start_time_point_); auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(now - start_time_point_);
if (get_value<details::ProgressBarOption::show_percentage>()) { if (get_value<details::ProgressBarOption::show_percentage>()) {
os << " " << std::min(static_cast<size_t>(progress_ / max_progress * 100.0), size_t(100)) os << " " << (std::min)(static_cast<size_t>(progress_ / max_progress * 100.0), size_t(100))
<< "%"; << "%";
} }
@@ -285,3 +286,5 @@ public:
}; };
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,6 +1,9 @@
#pragma once #ifndef INDICATORS_COLOR
#define INDICATORS_COLOR
namespace indicators { namespace indicators {
enum class Color { grey, red, green, yellow, blue, magenta, cyan, white, unspecified }; enum class Color { grey, red, green, yellow, blue, magenta, cyan, white, unspecified };
} }
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_CURSOR_CONTROL
#define INDICATORS_CURSOR_CONTROL
#if defined(_MSC_VER) #if defined(_MSC_VER)
#if !defined(NOMINMAX) #if !defined(NOMINMAX)
@@ -25,12 +26,41 @@ static inline void show_console_cursor(bool const show) {
SetConsoleCursorInfo(out, &cursorInfo); SetConsoleCursorInfo(out, &cursorInfo);
} }
static inline void erase_line() {
auto hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
if (!hStdout)
return;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
COORD cursor;
cursor.X = 0;
cursor.Y = csbiInfo.dwCursorPosition.Y;
DWORD count = 0;
FillConsoleOutputCharacterA(hStdout, ' ', csbiInfo.dwSize.X, cursor, &count);
FillConsoleOutputAttribute(hStdout, csbiInfo.wAttributes, csbiInfo.dwSize.X,
cursor, &count);
SetConsoleCursorPosition(hStdout, cursor);
}
#else #else
static inline void show_console_cursor(bool const show) { static inline void show_console_cursor(bool const show) {
std::fputs(show ? "\033[?25h" : "\033[?25l", stdout); std::fputs(show ? "\033[?25h" : "\033[?25l", stdout);
} }
static inline void erase_line() {
std::fputs("\r\033[K", stdout);
}
#endif #endif
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_CURSOR_MOVEMENT
#define INDICATORS_CURSOR_MOVEMENT
#if defined(_MSC_VER) #if defined(_MSC_VER)
#if !defined(NOMINMAX) #if !defined(NOMINMAX)
@@ -45,3 +46,5 @@ static inline void move_left(int cols) { std::cout << "\033[" << cols << "D"; }
#endif #endif
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_STREAM_HELPER
#define INDICATORS_STREAM_HELPER
#include <indicators/display_width.hpp> #include <indicators/display_width.hpp>
#include <indicators/setting.hpp> #include <indicators/setting.hpp>
@@ -109,7 +110,7 @@ public:
std::ostream &write(float progress) { std::ostream &write(float progress) {
std::string fill_text{""}; std::string fill_text{""};
std::vector<std::string> lead_characters{" ", "", "", "", "", "", "", ""}; std::vector<std::string> lead_characters{" ", "", "", "", "", "", "", ""};
auto value = std::min(1.0f, std::max(0.0f, progress / 100.0f)); auto value = (std::min)(1.0f, (std::max)(0.0f, progress / 100.0f));
auto whole_width = std::floor(value * bar_width); auto whole_width = std::floor(value * bar_width);
auto remainder_width = fmod((value * bar_width), 1.0f); auto remainder_width = fmod((value * bar_width), 1.0f);
auto part_width = std::floor(remainder_width * lead_characters.size()); auto part_width = std::floor(remainder_width * lead_characters.size());
@@ -218,3 +219,5 @@ private:
} // namespace details } // namespace details
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,10 +1,8 @@
#pragma once #ifndef INDICATORS_DISPLAY_WIDTH
#define INDICATORS_DISPLAY_WIDTH
#include <clocale> #include <clocale>
#if __has_include(<codecvt>)
#include <codecvt>
#define INDICATORS_HAVE_CODECVT 1
#endif
#include <cstdlib> #include <cstdlib>
#include <locale> #include <locale>
#include <string> #include <string>
@@ -12,7 +10,6 @@
namespace unicode { namespace unicode {
#if INDICATORS_HAVE_CODECVT
namespace details { namespace details {
/* /*
@@ -137,42 +134,54 @@ static inline int mk_wcwidth(wchar_t ucs) {
/* sorted list of non-overlapping intervals of non-spacing characters */ /* sorted list of non-overlapping intervals of non-spacing characters */
/* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
static const struct interval combining[] = { static const struct interval combining[] = {
{0x0300, 0x036F}, {0x0483, 0x0486}, {0x0488, 0x0489}, {0x0591, 0x05BD}, {0x0300, 0x036F}, {0x0483, 0x0486}, {0x0488, 0x0489},
{0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x0591, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2},
{0x0600, 0x0603}, {0x0610, 0x0615}, {0x064B, 0x065E}, {0x0670, 0x0670}, {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x0600, 0x0603},
{0x06D6, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x070F, 0x070F}, {0x0610, 0x0615}, {0x064B, 0x065E}, {0x0670, 0x0670},
{0x0711, 0x0711}, {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, {0x06D6, 0x06E4}, {0x06E7, 0x06E8}, {0x06EA, 0x06ED},
{0x0901, 0x0902}, {0x093C, 0x093C}, {0x0941, 0x0948}, {0x094D, 0x094D}, {0x070F, 0x070F}, {0x0711, 0x0711}, {0x0730, 0x074A},
{0x0951, 0x0954}, {0x0962, 0x0963}, {0x0981, 0x0981}, {0x09BC, 0x09BC}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, {0x0901, 0x0902},
{0x09C1, 0x09C4}, {0x09CD, 0x09CD}, {0x09E2, 0x09E3}, {0x0A01, 0x0A02}, {0x093C, 0x093C}, {0x0941, 0x0948}, {0x094D, 0x094D},
{0x0A3C, 0x0A3C}, {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0951, 0x0954}, {0x0962, 0x0963}, {0x0981, 0x0981},
{0x0A70, 0x0A71}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC}, {0x0AC1, 0x0AC5}, {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, {0x09CD, 0x09CD},
{0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0B01, 0x0B01}, {0x09E2, 0x09E3}, {0x0A01, 0x0A02}, {0x0A3C, 0x0A3C},
{0x0B3C, 0x0B3C}, {0x0B3F, 0x0B3F}, {0x0B41, 0x0B43}, {0x0B4D, 0x0B4D}, {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D},
{0x0B56, 0x0B56}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0}, {0x0BCD, 0x0BCD}, {0x0A70, 0x0A71}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC},
{0x0C3E, 0x0C40}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD},
{0x0CBC, 0x0CBC}, {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD}, {0x0AE2, 0x0AE3}, {0x0B01, 0x0B01}, {0x0B3C, 0x0B3C},
{0x0CE2, 0x0CE3}, {0x0D41, 0x0D43}, {0x0D4D, 0x0D4D}, {0x0DCA, 0x0DCA}, {0x0B3F, 0x0B3F}, {0x0B41, 0x0B43}, {0x0B4D, 0x0B4D},
{0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0B56, 0x0B56}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0},
{0x0E47, 0x0E4E}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC}, {0x0BCD, 0x0BCD}, {0x0C3E, 0x0C40}, {0x0C46, 0x0C48},
{0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0CBC, 0x0CBC},
{0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD},
{0x0F90, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, {0x0CE2, 0x0CE3}, {0x0D41, 0x0D43}, {0x0D4D, 0x0D4D},
{0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059}, {0x0DCA, 0x0DCA}, {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6},
{0x1160, 0x11FF}, {0x135F, 0x135F}, {0x1712, 0x1714}, {0x1732, 0x1734}, {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E},
{0x1752, 0x1753}, {0x1772, 0x1773}, {0x17B4, 0x17B5}, {0x17B7, 0x17BD}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EB9}, {0x0EBB, 0x0EBC},
{0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD}, {0x180B, 0x180D}, {0x0EC8, 0x0ECD}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35},
{0x18A9, 0x18A9}, {0x1920, 0x1922}, {0x1927, 0x1928}, {0x1932, 0x1932}, {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F71, 0x0F7E},
{0x1939, 0x193B}, {0x1A17, 0x1A18}, {0x1B00, 0x1B03}, {0x1B34, 0x1B34}, {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0F90, 0x0F97},
{0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42}, {0x1B6B, 0x1B73}, {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030},
{0x1DC0, 0x1DCA}, {0x1DFE, 0x1DFF}, {0x200B, 0x200F}, {0x202A, 0x202E}, {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039},
{0x2060, 0x2063}, {0x206A, 0x206F}, {0x20D0, 0x20EF}, {0x302A, 0x302F}, {0x1058, 0x1059}, {0x1160, 0x11FF}, {0x135F, 0x135F},
{0x3099, 0x309A}, {0xA806, 0xA806}, {0xA80B, 0xA80B}, {0xA825, 0xA826}, {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753},
{0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F}, {0xFE20, 0xFE23}, {0xFEFF, 0xFEFF}, {0x1772, 0x1773}, {0x17B4, 0x17B5}, {0x17B7, 0x17BD},
{0xFFF9, 0xFFFB}, {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, {0x17DD, 0x17DD},
{0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x1D167, 0x1D169}, {0x1D173, 0x1D182}, {0x180B, 0x180D}, {0x18A9, 0x18A9}, {0x1920, 0x1922},
{0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0xE0001, 0xE0001}, {0x1927, 0x1928}, {0x1932, 0x1932}, {0x1939, 0x193B},
{0xE0020, 0xE007F}, {0xE0100, 0xE01EF}}; {0x1A17, 0x1A18}, {0x1B00, 0x1B03}, {0x1B34, 0x1B34},
{0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42},
{0x1B6B, 0x1B73}, {0x1DC0, 0x1DCA}, {0x1DFE, 0x1DFF},
{0x200B, 0x200F}, {0x202A, 0x202E}, {0x2060, 0x2063},
{0x206A, 0x206F}, {0x20D0, 0x20EF}, {0x302A, 0x302F},
{0x3099, 0x309A}, {0xA806, 0xA806}, {0xA80B, 0xA80B},
{0xA825, 0xA826}, {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F},
{0xFE20, 0xFE23}, {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB},
{0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F},
{0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x1D167, 0x1D169},
{0x1D173, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD},
{0x1D242, 0x1D244}, {0xE0001, 0xE0001}, {0xE0020, 0xE007F},
{0xE0100, 0xE01EF}};
/* test for 8-bit control characters */ /* test for 8-bit control characters */
if (ucs == 0) if (ucs == 0)
@@ -186,16 +195,19 @@ static inline int mk_wcwidth(wchar_t ucs) {
/* if we arrive here, ucs is not a combining or C0/C1 control character */ /* if we arrive here, ucs is not a combining or C0/C1 control character */
return 1 + (ucs >= 0x1100 && return 1 +
(ucs >= 0x1100 &&
(ucs <= 0x115f || /* Hangul Jamo init. consonants */ (ucs <= 0x115f || /* Hangul Jamo init. consonants */
ucs == 0x2329 || ucs == 0x232a || ucs == 0x2329 || ucs == 0x232a ||
(ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f) || /* CJK ... Yi */ (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f) || /* CJK ... Yi */
(ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */
(ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ (ucs >= 0xf900 &&
ucs <= 0xfaff) || /* CJK Compatibility Ideographs */
(ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */
(ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */
(ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */
(ucs >= 0xffe0 && ucs <= 0xffe6) || (ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0xffe0 && ucs <= 0xffe6) ||
(ucs >= 0x20000 && ucs <= 0x2fffd) ||
(ucs >= 0x30000 && ucs <= 0x3fffd))); (ucs >= 0x30000 && ucs <= 0x3fffd)));
} }
@@ -224,38 +236,58 @@ static inline int mk_wcwidth_cjk(wchar_t ucs) {
/* sorted list of non-overlapping intervals of East Asian Ambiguous /* sorted list of non-overlapping intervals of East Asian Ambiguous
* characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
static const struct interval ambiguous[] = { static const struct interval ambiguous[] = {
{0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8}, {0x00AA, 0x00AA}, {0x00AE, 0x00AE}, {0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},
{0x00B0, 0x00B4}, {0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6}, {0x00D0, 0x00D0}, {0x00AA, 0x00AA}, {0x00AE, 0x00AE}, {0x00B0, 0x00B4},
{0x00D7, 0x00D8}, {0x00DE, 0x00E1}, {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED}, {0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},
{0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA}, {0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
{0x0101, 0x0101}, {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B}, {0x0126, 0x0127}, {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},
{0x012B, 0x012B}, {0x0131, 0x0133}, {0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144}, {0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},
{0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153}, {0x0166, 0x0167}, {0x016B, 0x016B}, {0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},
{0x01CE, 0x01CE}, {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, {0x01D6, 0x01D6}, {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
{0x01D8, 0x01D8}, {0x01DA, 0x01DA}, {0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261}, {0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},
{0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB}, {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},
{0x02D8, 0x02DB}, {0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},
{0x03B1, 0x03C1}, {0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F}, {0x0451, 0x0451}, {0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
{0x2010, 0x2010}, {0x2013, 0x2016}, {0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022}, {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},
{0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033}, {0x2035, 0x2035}, {0x203B, 0x203B}, {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},
{0x203E, 0x203E}, {0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084}, {0x20AC, 0x20AC}, {0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},
{0x2103, 0x2103}, {0x2105, 0x2105}, {0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116}, {0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
{0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B}, {0x2153, 0x2154}, {0x215B, 0x215E}, {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},
{0x2160, 0x216B}, {0x2170, 0x2179}, {0x2190, 0x2199}, {0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0391, 0x03A1},
{0x21D4, 0x21D4}, {0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203}, {0x2207, 0x2208}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1}, {0x03C3, 0x03C9},
{0x220B, 0x220B}, {0x220F, 0x220F}, {0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A}, {0x0401, 0x0401}, {0x0410, 0x044F}, {0x0451, 0x0451},
{0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225}, {0x2227, 0x222C}, {0x222E, 0x222E}, {0x2010, 0x2010}, {0x2013, 0x2016}, {0x2018, 0x2019},
{0x2234, 0x2237}, {0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C}, {0x2252, 0x2252}, {0x201C, 0x201D}, {0x2020, 0x2022}, {0x2024, 0x2027},
{0x2260, 0x2261}, {0x2264, 0x2267}, {0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283}, {0x2030, 0x2030}, {0x2032, 0x2033}, {0x2035, 0x2035},
{0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299}, {0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x203B, 0x203B}, {0x203E, 0x203E}, {0x2074, 0x2074},
{0x2312, 0x2312}, {0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573}, {0x2580, 0x258F}, {0x207F, 0x207F}, {0x2081, 0x2084}, {0x20AC, 0x20AC},
{0x2592, 0x2595}, {0x25A0, 0x25A1}, {0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7}, {0x2103, 0x2103}, {0x2105, 0x2105}, {0x2109, 0x2109},
{0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8}, {0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x2113, 0x2113}, {0x2116, 0x2116}, {0x2121, 0x2122},
{0x25E2, 0x25E5}, {0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609}, {0x260E, 0x260F}, {0x2126, 0x2126}, {0x212B, 0x212B}, {0x2153, 0x2154},
{0x2614, 0x2615}, {0x261C, 0x261C}, {0x261E, 0x261E}, {0x2640, 0x2640}, {0x2642, 0x2642}, {0x215B, 0x215E}, {0x2160, 0x216B}, {0x2170, 0x2179},
{0x2660, 0x2661}, {0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D}, {0x266F, 0x266F}, {0x2190, 0x2199}, {0x21B8, 0x21B9}, {0x21D2, 0x21D2},
{0x273D, 0x273D}, {0x2776, 0x277F}, {0xE000, 0xF8FF}, {0xFFFD, 0xFFFD}, {0xF0000, 0xFFFFD}, {0x21D4, 0x21D4}, {0x21E7, 0x21E7}, {0x2200, 0x2200},
{0x100000, 0x10FFFD}}; {0x2202, 0x2203}, {0x2207, 0x2208}, {0x220B, 0x220B},
{0x220F, 0x220F}, {0x2211, 0x2211}, {0x2215, 0x2215},
{0x221A, 0x221A}, {0x221D, 0x2220}, {0x2223, 0x2223},
{0x2225, 0x2225}, {0x2227, 0x222C}, {0x222E, 0x222E},
{0x2234, 0x2237}, {0x223C, 0x223D}, {0x2248, 0x2248},
{0x224C, 0x224C}, {0x2252, 0x2252}, {0x2260, 0x2261},
{0x2264, 0x2267}, {0x226A, 0x226B}, {0x226E, 0x226F},
{0x2282, 0x2283}, {0x2286, 0x2287}, {0x2295, 0x2295},
{0x2299, 0x2299}, {0x22A5, 0x22A5}, {0x22BF, 0x22BF},
{0x2312, 0x2312}, {0x2460, 0x24E9}, {0x24EB, 0x254B},
{0x2550, 0x2573}, {0x2580, 0x258F}, {0x2592, 0x2595},
{0x25A0, 0x25A1}, {0x25A3, 0x25A9}, {0x25B2, 0x25B3},
{0x25B6, 0x25B7}, {0x25BC, 0x25BD}, {0x25C0, 0x25C1},
{0x25C6, 0x25C8}, {0x25CB, 0x25CB}, {0x25CE, 0x25D1},
{0x25E2, 0x25E5}, {0x25EF, 0x25EF}, {0x2605, 0x2606},
{0x2609, 0x2609}, {0x260E, 0x260F}, {0x2614, 0x2615},
{0x261C, 0x261C}, {0x261E, 0x261E}, {0x2640, 0x2640},
{0x2642, 0x2642}, {0x2660, 0x2661}, {0x2663, 0x2665},
{0x2667, 0x266A}, {0x266C, 0x266D}, {0x266F, 0x266F},
{0x273D, 0x273D}, {0x2776, 0x277F}, {0xE000, 0xF8FF},
{0xFFFD, 0xFFFD}, {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}};
/* binary search in table of non-spacing characters */ /* binary search in table of non-spacing characters */
if (bisearch(ucs, ambiguous, sizeof(ambiguous) / sizeof(struct interval) - 1)) if (bisearch(ucs, ambiguous, sizeof(ambiguous) / sizeof(struct interval) - 1))
@@ -277,16 +309,33 @@ static inline int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) {
} }
// convert UTF-8 string to wstring // convert UTF-8 string to wstring
static inline std::wstring utf8_decode(const std::string &str) { #ifdef _MSC_VER
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv; static inline std::wstring utf8_decode(const std::string& s) {
return myconv.from_bytes(str); std::string curLocale = setlocale(LC_ALL, "");
const char* _Source = s.c_str();
size_t _Dsize = std::strlen(_Source) + 1;
wchar_t* _Dest = new wchar_t[_Dsize];
size_t _Osize;
mbstowcs_s(&_Osize, _Dest, _Dsize, _Source, _Dsize);
std::wstring result = _Dest;
delete[] _Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
} }
#else
// convert wstring to UTF-8 string static inline std::wstring utf8_decode(const std::string& s) {
static inline std::string utf8_encode(const std::wstring &str) { std::string curLocale = setlocale(LC_ALL, "");
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv; const char* _Source = s.c_str();
return myconv.to_bytes(str); size_t _Dsize = mbstowcs(NULL, _Source, 0) + 1;
wchar_t* _Dest = new wchar_t[_Dsize];
wmemset(_Dest, 0, _Dsize);
mbstowcs(_Dest, _Source, _Dsize);
std::wstring result = _Dest;
delete[] _Dest;
setlocale(LC_ALL, curLocale.c_str());
return result;
} }
#endif
} // namespace details } // namespace details
@@ -299,16 +348,6 @@ static inline int display_width(const std::wstring &input) {
return details::mk_wcswidth(input.c_str(), input.size()); return details::mk_wcswidth(input.c_str(), input.size());
} }
#else } // namespace unicode
static inline int display_width(const std::string &input) {
return input.length();
}
static inline int display_width(const std::wstring &input) {
return input.length();
}
#endif #endif
} // namespace unicode

View File

@@ -1,9 +1,13 @@
#pragma once #ifndef INDICATORS_DYNAMIC_PROGRESS
#define INDICATORS_DYNAMIC_PROGRESS
#include <atomic> #include <atomic>
#include <functional> #include <functional>
#include <indicators/color.hpp> #include <indicators/color.hpp>
#include <indicators/setting.hpp> #include <indicators/setting.hpp>
#include <indicators/cursor_control.hpp>
#include <indicators/cursor_movement.hpp>
#include <indicators/details/stream_helper.hpp> #include <indicators/details/stream_helper.hpp>
#include <iostream> #include <iostream>
#include <mutex> #include <mutex>
@@ -81,8 +85,11 @@ public:
if (hide_bar_when_complete) { if (hide_bar_when_complete) {
// Hide completed bars // Hide completed bars
if (started_) { if (started_) {
for (size_t i = 0; i < incomplete_count_; ++i) for (size_t i = 0; i < incomplete_count_; ++i) {
std::cout << "\033[A\r\033[K" << std::flush; move_up(1);
erase_line();
std::cout << std::flush;
}
} }
incomplete_count_ = 0; incomplete_count_ = 0;
for (auto &bar : bars_) { for (auto &bar : bars_) {
@@ -96,10 +103,8 @@ public:
started_ = true; started_ = true;
} else { } else {
// Don't hide any bars // Don't hide any bars
if (started_) { if (started_)
for (size_t i = 0; i < total_count_; ++i) move_up(static_cast<int>(total_count_));
std::cout << "\x1b[A";
}
for (auto &bar : bars_) { for (auto &bar : bars_) {
bar.get().print_progress(true); bar.get().print_progress(true);
std::cout << "\n"; std::cout << "\n";
@@ -113,3 +118,5 @@ public:
}; };
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,5 +1,9 @@
#pragma once #ifndef INDICATORS_FONT_STYLE
#define INDICATORS_FONT_STYLE
namespace indicators { namespace indicators {
enum class FontStyle { bold, dark, italic, underline, blink, reverse, concealed, crossed }; enum class FontStyle { bold, dark, italic, underline, blink, reverse, concealed, crossed };
} }
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_INDETERMINATE_PROGRESS_BAR
#define INDICATORS_INDETERMINATE_PROGRESS_BAR
#include <indicators/details/stream_helper.hpp> #include <indicators/details/stream_helper.hpp>
@@ -232,3 +233,5 @@ public:
}; };
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_MULTI_PROGRESS
#define INDICATORS_MULTI_PROGRESS
#include <atomic> #include <atomic>
#include <functional> #include <functional>
#include <iostream> #include <iostream>
@@ -77,3 +78,5 @@ public:
}; };
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_PROGRESS_BAR
#define INDICATORS_PROGRESS_BAR
#include <indicators/details/stream_helper.hpp> #include <indicators/details/stream_helper.hpp>
@@ -165,7 +166,7 @@ public:
size_t current() { size_t current() {
std::lock_guard<std::mutex> lock{mutex_}; std::lock_guard<std::mutex> lock{mutex_};
return std::min( return (std::min)(
progress_, progress_,
size_t(get_value<details::ProgressBarOption::max_progress>())); size_t(get_value<details::ProgressBarOption::max_progress>()));
} }
@@ -230,7 +231,7 @@ private:
if (get_value<details::ProgressBarOption::show_percentage>()) { if (get_value<details::ProgressBarOption::show_percentage>()) {
os << " " os << " "
<< std::min(static_cast<size_t>(static_cast<float>(progress_) / << (std::min)(static_cast<size_t>(static_cast<float>(progress_) /
max_progress * 100), max_progress * 100),
size_t(100)) size_t(100))
<< "%"; << "%";
@@ -355,3 +356,5 @@ public:
}; };
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_PROGRESS_SPINNER
#define INDICATORS_PROGRESS_SPINNER
#include <indicators/details/stream_helper.hpp> #include <indicators/details/stream_helper.hpp>
@@ -122,7 +123,7 @@ public:
size_t current() { size_t current() {
std::lock_guard<std::mutex> lock{mutex_}; std::lock_guard<std::mutex> lock{mutex_};
return std::min(progress_, size_t(get_value<details::ProgressBarOption::max_progress>())); return (std::min)(progress_, size_t(get_value<details::ProgressBarOption::max_progress>()));
} }
bool is_completed() const { return get_value<details::ProgressBarOption::completed>(); } bool is_completed() const { return get_value<details::ProgressBarOption::completed>(); }
@@ -222,3 +223,5 @@ public:
}; };
} // namespace indicators } // namespace indicators
#endif

View File

@@ -1,6 +1,9 @@
#pragma once #ifndef INDICATORS_PROGRESS_TYPE
#define INDICATORS_PROGRESS_TYPE
namespace indicators { namespace indicators {
enum class ProgressType { incremental, decremental }; enum class ProgressType { incremental, decremental };
} }
#endif

View File

@@ -25,7 +25,8 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE. SOFTWARE.
*/ */
#pragma once #ifndef INDICATORS_SETTING
#define INDICATORS_SETTING
#include <cstddef> #include <cstddef>
#include <indicators/color.hpp> #include <indicators/color.hpp>
@@ -217,3 +218,5 @@ using ProgressType = details::Setting<ProgressType, details::ProgressBarOption::
using Stream = details::Setting<std::ostream &, details::ProgressBarOption::stream>; using Stream = details::Setting<std::ostream &, details::ProgressBarOption::stream>;
} // namespace option } // namespace option
} // namespace indicators } // namespace indicators
#endif

View File

@@ -40,6 +40,11 @@
#if defined(TERMCOLOR_TARGET_POSIX) #if defined(TERMCOLOR_TARGET_POSIX)
# include <unistd.h> # include <unistd.h>
#elif defined(TERMCOLOR_TARGET_WINDOWS) #elif defined(TERMCOLOR_TARGET_WINDOWS)
#if defined(_MSC_VER)
#if !defined(NOMINMAX)
#define NOMINMAX
#endif
#endif
# include <io.h> # include <io.h>
# include <windows.h> # include <windows.h>
#endif #endif

View File

@@ -1,5 +1,6 @@
#pragma once #ifndef INDICATORS_TERMINAL_SIZE
#define INDICATORS_TERMINAL_SIZE
#include <utility> #include <utility>
@@ -40,3 +41,4 @@ static inline size_t terminal_width() { return terminal_size().second; }
#endif #endif
#endif

File diff suppressed because it is too large Load Diff

View File

@@ -62,7 +62,7 @@ class Amalgamation(object):
return None return None
def __init__(self, args): def __init__(self, args):
with open(args.config, 'r', encoding="utf8") as f: with open(args.config, 'r') as f:
config = json.loads(f.read()) config = json.loads(f.read())
for key in config: for key in config:
setattr(self, key, config[key]) setattr(self, key, config[key])
@@ -77,7 +77,7 @@ class Amalgamation(object):
amalgamation = "" amalgamation = ""
if self.prologue: if self.prologue:
with open(self.prologue, 'r', encoding="utf8") as f: with open(self.prologue, 'r') as f:
amalgamation += datetime.datetime.now().strftime(f.read()) amalgamation += datetime.datetime.now().strftime(f.read())
if self.verbose: if self.verbose:
@@ -92,7 +92,7 @@ class Amalgamation(object):
# actual_path = self.actual_path(file_path) # actual_path = self.actual_path(file_path)
print(" - processing \"{0}\"".format(file_path)) print(" - processing \"{0}\"".format(file_path))
t = TranslationUnit(file_path, self, True) t = TranslationUnit(file_path, self, True)
amalgamation += t.content amalgamation += t.content + "\n\n"
with open(self.target, 'w', encoding="utf8") as f: with open(self.target, 'w', encoding="utf8") as f:
f.write(amalgamation) f.write(amalgamation)