An open API service indexing awesome lists of open source software.

https://github.com/newyaroslav/consolix

Consolix is a header-only C++ library providing components and utilities for developing console applications.
https://github.com/newyaroslav/consolix

ansi-colors cli configuration-management console-application console-applications cp866 cpp cpp17 cxxopts header-only library logging logging-library logit utf-8-support utf8

Last synced: over 1 year ago
JSON representation

Consolix is a header-only C++ library providing components and utilities for developing console applications.

Awesome Lists containing this project

README

          

# Consolix

```bash
█████████ ████ ███
███░░░░░███ ░░███ ░░░
███ ░░░ ██████ ████████ █████ ██████ ░███ ████ █████ █████
░███ ███░░███░░███░░███ ███░░ ███░░███ ░███ ░░███ ░░███ ░░███
░███ ░███ ░███ ░███ ░███ ░░█████ ░███ ░███ ░███ ░███ ░░░█████░
░░███ ███░███ ░███ ░███ ░███ ░░░░███░███ ░███ ░███ ░███ ███░░░███
░░█████████ ░░██████ ████ █████ ██████ ░░██████ █████ █████ █████ █████
░░░░░░░░░ ░░░░░░ ░░░░ ░░░░░ ░░░░░░ ░░░░░░ ░░░░░ ░░░░░ ░░░░░ ░░░░░
```

**Consolix** — это `header-only` C++ библиотека, предоставляющая компоненты и утилиты для разработки консольных приложений.

## Особенности

- **Компонентная архитектура:** Легко подключаемые модули, такие как логирование, управление конфигурациями и обработка командной строки.
- **Глобальный локатор сервисов:** Удобный механизм для управления зависимостями и сервисами.
- **Поддержка UTF-8:**
- Заголовок программы (`TitleComponent`) поддерживает установку текста в `UTF-8` с автоматической конвертацией в `UTF-16` для Windows и использованием `ANSI escape` последовательностей на POSIX-системах.
- Вывод в консоль (`LoggerComponent`) поддерживает `UTF-8` с автоматической конвертацией в `CP866` на Windows для совместимости с устаревшими кодировками.
- **Кастомизируемые циклы выполнения:** Поддержка структурированных циклов для выполнения пользовательских задач.
- **Расширенное логирование:** Интеграция с [LogIt](https://github.com/NewYaroslav/log-it-cpp).
- **Поддержка JSON с комментариями:** Загрузка конфигураций JSON с комментариями благодаря [nlohmann/json](https://github.com/nlohmann/json).
- **Кроссплатформенность:** Работа на Windows и POSIX-совместимых системах. *(Для POSIX не протестировано)*.
- **Совместимость с C++17:** Требует компилятора с поддержкой стандарта C++17 (GCC 7.1+, Clang 5.0+, MSVC 15.3+).

## Установка

**Consolix** — это `header-only` библиотека. Для начала работы просто добавьте её в ваш проект:

1. Скачайте библиотеку или клонируйте репозиторий:
```bash
git clone https://github.com/yourusername/Consolix.git
```

2. Добавьте путь к заголовочным файлам в настройки вашего проекта:
```
Consolix/include
```

3. Подключите заголовок в вашем коде:
```
#include
```

### Зависимости

Consolix поддерживает интеграцию с внешними библиотеками через макросы, которые можно включать или отключать в зависимости от ваших нужд:

- **LogIt** (включается через устанвоку макроса `CONSOLIX_USE_LOGIT 1`):
- Используется для логирования.
- LogIt на [GitHub](https://github.com/NewYaroslav/log-it-cpp.git).
- Зависит от библиотеки [time-shield](https://github.com/NewYaroslav/time-shield-cpp.git).
- Обе библиотеки являются *header-only*, поэтому достаточно добавить их заголовки в проект.
- **cxxopts** (включается через устанвоку макроса `CONSOLIX_USE_CXXOPTS 1`):
- Используется для обработки аргументов командной строки.
- cxxopts на [GitHub](https://github.com/jarro2783/cxxopts.git).
- *header-only* библиотека.
- **nlohmann/json** (включается через устанвоку макроса `CONSOLIX_USE_JSON 1`):
- Используется для работы с JSON, включая поддержку комментариев.
- nlohmann/json на [GitHub](https://github.com/nlohmann/json.git).
- *header-only* библиотека.

Чтобы указать, какие зависимости использовать, задайте соответствующие макросы перед подключением Consolix:

```cpp
// Отключение LogIt и cxxopts, но включение nlohmann/json
#define CONSOLIX_USE_LOGIT 0
#define CONSOLIX_USE_CXXOPTS 0
#define CONSOLIX_USE_JSON 1

#include
```

Для включения зависимостей добавьте пути к их заголовкам в ваш проект:

```
log-it-cpp/include
time-shield-cpp/include
cxxopts/include
nlohmann-json/include
```

## Пример использования

```cpp
#include

int main(int argc, char* argv[]) {
// Добавление заголовка программы
consolix::add(u8"Consolix - консольное приложение");

// Добавление логгера
consolix::add();

// Вывод ASCII-логотипа в консоль
consolix::add(consolix::TextColor::DarkYellow);

// Обработка аргументов командной строки
consolix::add("MyApp", "Описание программы", [](auto& options) {
options.add_options()("debug", "Включить режим отладки");
}, argc, argv);

// Загрузка конфигурации из JSON
consolix::add>("config.json");

// Выполнение главного цикла
consolix::run([]() {
CONSOLIX_STREAM() << "Выполнение главного цикла...";
});

return 0;
}
```

## Модули

### Основные модули
- **ServiceLocator:** Управление глобальными сервисами.
- **ConsoleApplication:** Фреймворк для управления консольными приложениями.

### Компоненты
- **TitleComponent:** Управление заголовком окна консоли. Поддерживает UTF-8.
- **LoggerComponent:** Централизованное логирование. Поддерживает UTF-8 с конвертацией в CP866.
- **CliComponent:** Упрощённая работа с аргументами командной строки.
- **ConfigComponent:** Работа с конфигурациями JSON с комментариями.
- **LogoComponent:** Вывод ASCII-логотипов.
- **LoopComponent:** Поддержка пользовательских циклов выполнения.

### Утилиты
- **path_utils.hpp:** Работа с путями и директориями.
- **json_utils.hpp:** Удаление комментариев и работа с JSON.
- **ColorManipulator.hpp:** Стилизация текста в консоли.

## Документация

Полная документация доступна [здесь](https://newyaroslav.github.io/Consolix/). Она включает руководство по установке, описания модулей, примеры использования и многое другое.

## Лицензия
Consolix распространяется под лицензией MIT. Полный текст лицензии доступен в файле LICENSE.