Учебный проект на C++23 (без модулей).
Консольное приложение, конвертирующее CSV-файлы в таблицы, оформленные в Markdown или HTML.
Поддерживаемые компиляторы:
- g++ 15.2 (Linux/Windows)
- MSVC 2022 (v.17.14 или новее)
Первоначально предполагалось использовать модули C++ и import std, но это приводит к затруднениям при сборке и работе. В итоге, было решено отказаться от использования модулей и вернуться к "традиционной" схеме заголовочных файлов (hpp) и единиц трансляции (cpp).
Сборка:
- При использовании MSVC можно открыть RenderCSV.sln из директории проекта и работать там.
- Meson. Если Meson установлен, можно осуществить сборку проекта и тестов и запуск тестов вызовом build.cmd (Windows).
В процессе работы требуется выполнить три действия:
- Прочитать конфигурацию (постановка задачи конвертирования).
- Прочитать исходные CSV-файлы.
- Записать результирующий MD или HTML-файл (и, возможно, CSS-файл)
Для данной задачи достаточно передавать всю конфигурацию параметрами командной строки. Предполагается поддержка следующих параметров:
без параметров — вывод сообщения с предложением ввести параметр --help;
--help — вывод справочной информации;
--version — вывод информации о версии и репозитории размещения;
--md — режим генерации Markdown (по умолчанию GFM);
--md=gfm — режим Github Flavored Markdown;
--html — режим генерации HTML, эквивалентен --html=full;
--html=part — генерация только кода таблиц HTML, не добавлять обрамление;
--html=full — генерация полного файла HTML, который можно открыть в браузере;
--html=full-styled — генерация полного файла HTML с внедрением CSS.
HTMLv5. Все эти параметры взаимоисключающие.
--overwrite — перезаписать целевой файл;
--append — дописать результат в конец целевого файла;
--prepend — приписать результат к началу целевого файла.
Если ни один из этих параметров не задан, а целевой файл существует, то сообщаем ошибку. Из этих параметров может быть задано не более одного.
-c caption или --caption caption — задать заголовок следующей таблицы;
-i input или --in input — задать входной CSV-файл, input — имя файла; должно быть не менее одного файла;
--many — указать перед параметром ввода, если далее стоит несколько входных файлов и мы хотим их все записать в один целевой файл — открыть группу, закрываемую выходным файлом; если данный параметр не указать, то каждый вводный файл будет записываться в отдельный целевой файл, имя которого то же, что и у входного файла с заменой расширеня на .md или .html;
-o output или --out output — опциональный параметр, задающий целевой файл output; должен стоять после входного файла;
-h header или --head header — вставить содержимое заданного файла header перед таблицами в вывод;
-m middle или --mid middle — вставлять содержимого заданного файла middle между таблицами в вывод, если комбинируется несколько входных файлов в один целевой;
-f footer или --foot footer — вставить содержимое заданного файла footer после таблиц в вывод;
--css style — использовать стилевой файл style в режиме HTML (по ссылке или внедрить).