Стилизация консольных приложений на базе Symfony, Laravel, Yii и других фреймворков c помощью Termage

Awilum

Новичок
Доброго Времени Суток!

Разрешите представить один свой небольшой опенсурс проект для консольных приложений - Termage (Terminal Mage)

Предыстория

В августе я начал работать над задачей, которая была на мне - это сделать CLI APP для функционала моей CMSки (https://github.com/flextype/flextype/issues/543).

Для реализации консольного приложения взял Symfony Сonsole.
Функционал Symfony Сonsole показался мне крайне бедным и неудобным для стилизации и форматирования вывода.

Ранее я уже засматривался на проект от лиги выдающихся джентельменов - CLImate (https://climate.thephpleague.com) он богаче Symfony Сonsole по функционалу стилизации и форматированию, но по умолчанию не совместим с Symfony Сonsole, да и проект CLImate честно говоря давно уже не развивается и просто стоит на месте.

Принял решение сделать свою библиотеку, которая была бы совместима с Symfony Сonsole приложениями.
Назвал свою библиотку CLIrad - но немного позже перименовал CLIrad в Termage (Terminal Mage).

Цель проекта Termage - это предоставить богатый и удобный функционал для стилизации и форматирования вывода любого, текста, html, markdown или логов в консольных приложениях любого фреймворка.

Вдохновители проекта Termage:
Для PYTHON есть библиотека Rich https://github.com/willmcgugan/rich
Для .NET есть библиотека SpectreConsole https://spectreconsole.net/
Для GO есть библиотека PTerm https://pterm.sh/

Подобных библиотек и с таким богатым функционалом для PHP нет!
Termage будет PHP аналогом таких библиотек как Rich (PYTHON), SpectreConsole (.NET), PTerm(GO).

Termage ceгодня:

+ независимый от PHP фреймворка рендеринг.
+ 250+ страниц документации, которую я постоянно улучшаю.
+ 12 базовых элементов (Div, Span, Anchor, Alert, Chart, Paragraph и др)
+ 10 базовых стилей (Italic, Bold, Underline, Strikethrough и др)
+ fluent api, магические методы и pipeline классы.
+ шорткоды.

Репозиторий: https://github.com/termage/termage
Документация: https://digital.flextype.org/termage

Планы на ближайшее будущее:
+ улучшать документацию
+ улучшать покрытие тестов.
+ написать конвертор/парсер HTML в ANSI
+ написать конвертор/парсер MARKDOWN в ANSI
+ написать парсер логов
+ добавить новые элементы
 
Последнее редактирование:

Фанат

oncle terrible
Команда форума
Выглядит красиво
Тут правда нет никого, предлагаю выставить на аудиторию побольше, например на Реддит
 

weregod

unserializer
Автор по всем вменяемым русскоязычным форумам распространил информацию, норм.
Е.аните "+"-ов на гитхабе, ни так уж и тяжко ))
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
нужны статьи на хаб и реддит, увидел только одно упоминание в phpdigest "еще одна библиотека для форматирования вывода" - маловато
 

Фанат

oncle terrible
Команда форума
Эх, не успел я сказать, что в доке очень не хватает анимированных гифак, которые показывают всю красоту.
 

Awilum

Новичок
Эх, не успел я сказать, что в доке очень не хватает анимированных гифак, которые показывают всю красоту.
нооо... я запарился и сделал 100% пиксел перфект превьюшки (на HTML&CSS) терминал-а.

а, впринципе согласен что нужно больше визульных примеров - видосов - гифок того как оно выглядит и почему проект действительно RAD.

И лендинг что гитхабовский что для сайта должен бы быть “более вкусный”
 

Awilum

Новичок
нужны статьи на хаб и реддит, увидел только одно упоминание в phpdigest "еще одна библиотека для форматирования вывода" - маловато
+ стикеры, футболки, мерч. MAKE TERMINAL GREAT AGAIN!
 
Последнее редактирование:

Awilum

Новичок
с улицы Лизюкова? :)

а что на счёт таблиц?
Сама цель Termage не является замена консолей фреймворков Symfony, Laravel, Yii, CakePHP и др.

Цель Termage это дополнить и улучшить функционал разработки консольных приложений.

Пример:
PHP:
// Output in Symfony Console
$output->writeln("          <bg=red;fg=green;options=bold;>" . "\e[3m" . "     Stay RAD!     " . "\e[23m" </>          ");

// Output in Symfony Console + Termage fluent interface.
$output->write(div('Stay RAD!')->px20()->mx10()->colorGreen()->bgRed()->bold()->italic());

// Output in Symfony Console + Termage magic classes pipeline.
$output->write(div('Stay RAD!', 'px-20 mx-10 color-green bg-red bold italic');
Но в будущем Termage будет предоставлять и свои варианты таблиц, прогресс баров и тд, пока доступны вот такие элементы https://digital.flextype.org/termage/documentation/elements

Termage можно использовать уже сейчас с теми компонентами/хелперами которые предоставляет Симфони Консоль

PHP:
use function Termage\span as li;

$io = new SymfonyStyle($input, $output);

$io->listing([
    li('[u]Element #1[/u] Lorem ipsum dolor sit amet', 'bold color-red'),
    li('[u]Element #2[/u] Lorem ipsum dolor sit amet', 'bold color-pink'),
    li('[u]Element #3[/u] Lorem ipsum dolor sit amet', 'bold color-blue'),
]);

$io->listing([
    li('[b]Element #1[/b] [color=red]Lorem ipsum dolor sit amet[/color]'),
    li('[b]Element #2[/b] [color=#0ff]Lorem ipsum dolor sit amet[/color]'),
    li('[b]Element #3[/b] [color=rgb(255,100,0)]Lorem ipsum dolor sit amet[/color]'),
]);
Результат:
 

Awilum

Новичок
Termage 0.9.0

+ Улучшена box model, она пока все еще одномерная но возможностей у нее уже больше.
+ Новая box model позволяет настраивать ширину элемента, положение текста и состояние отображения.
+ Новый метод `p` для установки внутренних отступов
+ Новый метод `m` для установки внешних отступов
+ Новый метод `d` для установки состояния отображения
+ Новый метод `textAlign` для позиционирования текста
+ Обновлена документация

Релиз:
 
Последнее редактирование:

Awilum

Новичок
Termage 0.10.0

+ Улучшена box model. Теперь она двумерная! Можем настраивать ширину, высоту, положение текста в элементе.
+ Добавлена возможность устанавливать положение текста в элементе по центру, слева, справа.
+ Добавлена возможность устанавливать внутренние размеры терминала с помощью новых методов width и height
+ Добавлена возможность устанавливать вертикальные внешние отступы элемента с помощью новых методов my, mt, mb
+ Добавлена возможность устанавливать вертикальные внутренние отступы элемента с помощью новых методов py, pt, pb
+ Добавлена возможность устанавливать высоту элемента с помощью нового метода h
+ Добавлена возможность устанавливать внешние отступы элемента с помощью обновленного метода m который принимает параметры top, right, bottom, left
+ Добавлена возможность устанавливать внешние отступы элемента с помощью обновленного метода p который принимает параметры top, right, bottom, left
+ Добавлены новые магические классы: strikethrough, my, py, mt, mb, pt, pb, h, m, p

Релиз:
 
Последнее редактирование:

Awilum

Новичок
Termage 0.11.0

+ Добавлена возможность создавать и настраивать границы (borders) элементов.
+ Добавлен новый функционал для работы с курсором.
+ Добавлен новый функционал для работы с стилями.
+ Добавлен новый функционал для работы с терминалом.
+ Добавлены новые методы getCsi, setCsi, getEsc, setEsc, getOsc, setOsc.
+ Добавлены новые магические классы: b, b-color

Релиз:
 
Сверху