Пишем программу для создания книг FB2 | страница 6
В FB2 структура задается тэгами
Программе для обработки структуры понадобится стек (напомню, стек - это список с правилом "последний пришел - первый вышел")
Полученный код FB2, как эталоном, я проверяю программой "FictionBook Editor". Так вот, экзаменатору не нравится такая структура:
// начало примера
H1 | Кальман Миксат. ОСАДА БЕСТЕРЦЕ
S| (История одного чудака)
H2 | ВВЕДЕНИЕ
// конец примера
Т.е. между секциями не должно быть ничего лишнего…
А вот так будет все нормально:
// начало примера
H1 | Кальман Миксат. ОСАДА БЕСТЕРЦЕ
H1 | (История одного чудака)
H2 | ВВЕДЕНИЕ
// конец примера
Итак, когда при обработке списка ListBox1 встречается строка с типом от H1 до H5 вызывается процедура StyleStucture;
// начало кода
procedure StyleStucture;
begin
if CurStyle <> oldStyle then
begin // пока предположим, что предыдущий стиль был не заголовок
if SytleStack.Count = 0 then // если стек пуст
begin // записываем стиль в стек
SytleStack.Add(TObject(CurStyle))
end
else // если в стеке что-то есть
begin // значит надо проверить последний из заголовков
LastStyle:= TmyStyle(SytleStack.Last); // считываем последний стиль
case SubStyle(CurStyle, LastStyle) of // вычисляем разность текущий стиль минус последний
0: OutList.Add(''); // стили равны, ничего особенного делать не надо
1: SytleStack.Add(TObject(CurStyle)); // новый стиль больше, добавляем его в стек
// предыдущая секция не закончилась, т. к. новая будет в ее входить как матрешка
else // иначе, считаем что разность меньше нуля
begin
OutList.Add('');
while CurStyle <>LastStyle do
begin
SytleStack.Delete(SytleStack.Count-1); // уменьшаем стек
OutList.Add(''); // завершаем секции до тех пор пока
LastStyle:= TmyStyle(SytleStack.Last); // текущий стиль и стиль в стеке не сравняются.
end;
end;
end;// case
end;
OutList.Add('
OutList.Add('
end;
OutList.Add('
'+s+'
'); // записываем заголовок секцииend; // StyleStucture;
// конец кода
Пожалуй, это самый тяжелый код в данном манускрипте, но он вроде работает, хотя я вижу в нем по крайней мере две неувязки, но что это, не скажу…
Ну вот с обработкой книги почти закончили, мелкие подробности увидите в исходнике.
Нажимаем пункт меню File - Save as FB2.
И - ничего не получается. Запланированная шутка. Вылезла надпись "Заполнить поля" и фокус перенаправлен на начальную закладку.