Простой статический генератор сайтов.
Программа принимает на вход два пути к директориям. Первую директорию будем называть входной директорией, а вторую — выходной.
Генератор обходит все файлы и поддиректории входной директории и выполнить для них следующее:
Для каждой поддиректории входной директории создается соответствующая ей поддиректория в выходной директории.
Каждый файл с расширением .gmi
из входной директории транслируется в соответствующий .html
файл в выходной директории.
Трансляция осуществляться в соответствии с форматом разметки gemtext.
Каждый файл с расширением отличным от .gmi из входной директории копируется в соответствующее ему место выходной директории
или ее поддиректорий.
Благодаря простоте формата gemtext
, парсить файл можно построчно. Таким образом, входной поток разбирается строка за строкой.
Каждая строка gemtext
однозначно преобразуется в строку html
благодаря наличию префикса, обозначающего тип строки.
Однако, необходимо учитывать необходимость отслеживать два возможных состояния:
- Состояние обработки элементов списка (Для правильной генерации
<ul></ul>
). - Состояние обработки преформатированного текста.
Отслеживание этих состояний можно организовать в виде двух логических переменных и переключать их в зависимости от входной строки из потока.
Для создания программы была создана библиотека с набором классов. Классы типа транслятор переводят входной поток из одного формата в другой. Клас типа поисковика в файловой структуре позволяет найти все необходимые файлы. Классы генераторы должны преобразовывать файлы входной директории в файлы выходной, используя трансляторы и поисковики. Каждый из этих типов классов поставляет соответствующий задачам класса интерфейс, а саму логику реализуют уже конкретные классы. Так, для поставленной задачи используется генератор GemtextGenerator.
Более подробно со структурой программы можно ознакомиться в директории doc
, там представленая uml диаграмма классов
библиотеки.
В данном репозитории находится несколько директорий.
doc
- справочная информацияtools
- вспомогательные скриптыproject
- исходники проектаtests
- тесты