M>Фильтры и пайпы фильтров M>Также имеется возможность использовать фильтры (пайпы фильтров) для отформатированных значений. Фильтры могут быть как встроенными, так и передаваться, как функтор, в качестве аргумента. M>Встроенные фильтры: xml, xml-attr, xml-text, html, html-attr, html-text — это алиасы к одному и тому же фильтру. Фильтр sql — дублирует apos'ы M>Можно иметь до четырёх фильтров в пайпе.
Кстати, если кому интересно, можно добавить встроенных фильтров для JSON, YAML, TOML, если кому интересно. Надо только обсудить, как их сделать. Мне лень искать, по каким правилам там строки экранируются, мне это пока не особо нужно.
Можно ещё сишное экранирование добавить. Хотя, вроде, форматный символ '?' и так это должен делать, но его я пока обрабатываю, как 's'.
Здравствуйте, Marty, Вы писали:
M>Можно ещё сишное экранирование добавить. Хотя, вроде, форматный символ '?' и так это должен делать, но его я пока обрабатываю, как 's'.
И экранирование командной строки
Здравствуйте, kov_serg, Вы писали:
M>>Можно ещё сишное экранирование добавить. Хотя, вроде, форматный символ '?' и так это должен делать, но его я пока обрабатываю, как 's'. _>И экранирование командной строки
Да, в общем-то, нет проблем, у меня где-то уже даже реализовано
Правда, только под винду, под линупсами там другие правила
Здравствуйте, Kernan, Вы писали:
M>>Надо же как-то расти K>Чем это лучше fmtlib::fmt?
Я поюзал std::format из 20ых плюсов, саму fmtlib не ковырял. Но, полагаю, что в ней есть тот же недостаток, как и в std::format — он у меня отказался работать с динамическими строками. А все нужно в рантайме использовать — например, для форматирования локализованных сообщений.
Далее. Опять же, std::format, а не fmtlib (уверен, там аналогично) — нет поддержки именованных аргументов, только позиционные.
По предложениям трудящихся (и мне тоже показалось полезной идеей) — добавил фильтры — например, сделать экранирование HTML отформатированного значения.
Перетащил из питона некоторые фичи, например, добавил форматные символы '%', 'n' из питона. В целом, вообще сделал форматную строку совместимой с питоновской.
Добавил форматный символ '$' — форматирует валюту, при использовании локали символ валюты берётся из системы.
Добавил вывод bool как строк "TRUE/True/true" и тп.
В общем, допилил. На текущий момент всё необходимое есть.
Добавил поддержку локали (пока только винда, если кто подскажет, как сделать под линупс — можно добавить), подробнее — тут
Из локали берутся разделители разрядов, символ десятичной точки, символ процента, символ валюты, а также форматные строки для отрицательных/положительных значение чисел, процентов и валюты.
Локаль передаётся не как параметр шаблона, а как параметр функции.
Допилил форматирование плавучки. Она основана на std::to_chars, для GCC меньше 11го используются потоки std::ostringstream.
Добавил форматирование валюты (форматный символ '$').
Юзер-литералы — пока лень делать.
Пользовательские типы тоже пока заленился форматировать.
Присунул форматирование римскими цифрами — спецификаторы 'r'/'R'. Ноль выводится как строка 'NULLA', бесконечность (все числа больше 9999) — 'INFINITAS'.
Для вывода используются латинские буквы. Можно включить использование 'Unicode'-символов для римских цифр соответствующим флагом при вызове функции форматирования.
Можно обсудить, с какой величины число можно считать бесконечностью. С лимитом 9999 будет выведено девять цифр 'M', а при лимите в 65535 — цифр 'M' будет 65. Так как у римлян не было символов для 5000 и 10000, явно они не пользовались такими числами, и какие большие значения можно было бы вывести римскими цифрами — я хз.