Горыныч
Система литературного программирования



<< Назад | Оглавление | Вперёд >>

Генерация кода

Целью операции является получение физических файлов, содержащих актуальную версию исходного кода "литературной" программы. Операция вызывается из меню Файл командой Сгенерировать код (горячая клавиша F5).

При старте операции программа:

  1. Проверяет все редакторы на наличие несохранённых изменений. Если есть - применяет. Запрос на сохранение не выдаётся.
  2. Убеждается в отсутствии ошибок. Если есть хотя бы одна ошибка - прерывает операцию и активирует панель ошибок.
  3. Сохраняет хранилище.

По ходу операции программа поочерёдно обрабатывает все файлы, содержащиеся в хранилище. Для каждого файла:

  1. Определяет целевую папку для записи файла. Целевая папка должна существовать, потому что генератор кода не умеет создавать папки.
  2. Создаёт в ней временный файл (он имеет имя, содержащее случайный набор букв и цифр).
  3. Выполняет рекурсивное "раскрытие" ссылок в исходном коде файла и в исходном коде всех вставленных в него фрагментов. Раскрытие ссылки - это замена ссылки на исходный код того элемента, на который она указывает. В результате рекурсивного раскрытия ссылок формируется целевой код, очищенный от ссылок.
  4. Сбрасывает во временный файл полученное содержимое в заданной кодировке.
  5. Побайтно сравнивает временный файл с исходным (если последний существует). Исходный файл - это файл, сформированный при предыдущем запуске генератора. Если в результате сравнения выявлено несовпадение хотя бы одного байта, исходный файл заменяется временным. Если отличий нет, временный файл удаляется. Такое решение позволяет собирать программы с помощью инстументов типа MAKE, которые ориентируются на время изменения файла.
  6. Если исходный файл отсутствует, программа просто переименовывает временный файл.

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

Во время генерации кода возможно появление ошибок:

При обнаружении первой же ошибки генерация кода прерывается, а программа выдаёт диагностическое сообщение.

См. также

<< Назад | Оглавление | Вперёд >>