52610.fb2
// начало кода
Procedure Make_fb2(S: string);
begin //
if Form1.ListBox1.Items.Count = 0 then exit;
SytleStack.Clear; // подготовка стека стилей
OutList.Clear; // подготовка выходного списка
SaveDescription;
SaveBodyFB2; // это мы уже в общем рассмотрели
SaveEndnotes;
OutList.Add('</FictionBook>'); // закрываем книгу
OutList.SaveToFile(S); // Запись в файл
showMessage('Done.'); // Сообщаем об удачном завершении
end;
// конец кода
Как видите мы еще не рассмотрели две процедуры.
// начало кода
procedure SaveDescription;
const
max = 5; // может я захочу изменить число строк в массиве, тогда я изменю только одну цифру
mas: array[1.. max] of string =
(// массив для заголовочной части FB2 файла
'<?xml version="1.0" encoding="windows-1251"?>', // как видите я делаю файл в кодировке Win
// я не вижу смысла в применении юникода, но если речь идет не о русском языке,
// то сделайте здесь изменение.
'<FictionBook xmlns=""',
' xmlns: l="http://www.w3.org/1999/xlink">',
' <description>',
' <title-info>'
);
var i: byte;
begin
// Выводим в выходной файл начало FB2 файла
for i:= 1 to max do
OutList.Add(Mas[i]);
// конец кода
Дальше просматриваем списки Жанров, Автором и Переводчиков и выводим оттуда информацию (если она там есть).
Т.е. проверяем все заполненные поля форм описывающих книгу и выводим информацию в соответствующие секции заголовка книги.
Будем считать, что с Description - покончили.
Осталось только
// начало кода
procedure SaveEndnotes;
var
S: string;
i: integer;
begin
if Form1.EndNotesList.Items.Count = 0 then exit;
OutList.Add('<body name="notes"><title><p>Примечания</p></title>');
for i:= 0 to Form1.EndNotesList.Items.Count - 1 do
begin