Юрий Карпов - Пишем программу для создания книг FB2.
Название: | Пишем программу для создания книг FB2. | |
Автор: | Юрий Карпов | |
Жанр: | Руководства и инструкции, Самиздат, сетевая литература, Литература ХXI века (эпоха Глобализации экономики), Книгоделие, Программирование: прочее, Pascal, Delphi, Lazarus и т.п. | |
Изадано в серии: | неизвестно | |
Издательство: | неизвестно | |
Год издания: | - | |
ISBN: | неизвестно | |
Отзывы: | Комментировать | |
Рейтинг: | ||
Поделись книгой с друзьями! Помощь сайту: донат на оплату сервера |
Краткое содержание книги "Пишем программу для создания книг FB2."
Подробный комментарий к исходному коду программы создающей книжку в формате FB2.
Читаем онлайн "Пишем программу для создания книг FB2.". [Страница - 4]
Программе для обработки структуры понадобится стек (напомню, стек - это список с правилом "последний пришел - первый вышел")
Полученный код 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('</section>'); // стили равны, ничего особенного делать не надо
1: SytleStack.Add(TObject(CurStyle)); // новый стиль больше, добавляем его в стек
// предыдущая секция не закончилась, т. к. новая будет в ее входить как матрешка
else // иначе, считаем что разность меньше нуля
begin
OutList.Add('</section>');
while CurStyle <>LastStyle do
begin
SytleStack.Delete(SytleStack.Count-1); // уменьшаем стек
OutList.Add('</section>'); // завершаем секции до тех пор пока
LastStyle:= TmyStyle(SytleStack.Last); // текущий стиль и стиль в стеке не сравняются.
end;
end;
end;// case
end;
OutList.Add('<section>'); // начинаем новую секцию
OutList.Add('<title>');
end;
OutList.Add('<p>'+s+'</p>'); // записываем заголовок секции
end; // StyleStucture;
// конец кода
Пожалуй, это самый тяжелый код в данном манускрипте, но он вроде работает, хотя я вижу в нем по крайней мере две неувязки, но что это, не скажу…
Ну вот с обработкой книги почти закончили, мелкие подробности увидите в исходнике.
Нажимаем пункт меню File - Save as FB2.
И - ничего не получается. Запланированная шутка. Вылезла надпись "Заполнить поля" и фокус перенаправлен на начальную закладку.
Напоминаю FB2 - это не только легкоусвояемый (легкоусваиваемый) текст, но и очень нужный и полезный заголовок книги.
Давайте посмотрим, все таки, что происходит при выборе пункта Save as FB2
// начало кода
procedure TForm1.SaveasFB21Click(Sender: TObject);
begin
if not BookHaveName then // проверяем, все ли в порядке в заголовке
begin // если нет, то происходит все то что Вы видели
PageControl1.ActivePageIndex:= 0;
ShowMessage('Fill the form.');
exit;
end;
SaveDialog1.FileName:= form1.FB2_file.Text;
if SaveDialog1.Execute then
Make_fb2(SaveDialog1.FileName);
end;
// конец кода
Посмотрим на процедуру BookHaveName
// начало кода
function BookHaveName: boolean;
begin
with Form1 do
result:= (book_title.Text <> '') and
(FB2_file.Text <> '') and
(GenresBox.Count > 0);
end;
// конец кода
Ничего особенного в этой функции нет. Единственно из-за чего я ее вытащил, это сказать, что Вы можете и скорее даже будете вынуждены, как-то изменить ее, чтобы контроль заполнения заголовка книги был более разумным.
А я пока вернусь к заполнению заголовка.
В программе Вы видите три закладки Title-info, Document-info и Publish-info. В формате FB2 есть еще кое-что, но я пока это игнорировал. Предоставляю Вам такую возможность. Код Вам в руки…
Итак Title-info
Поле Project - само заполнится при открытии текстового файла. При желании, Вы можете изменить, имя сохраняемого fb2 файла.
Поле book-title действительно обязательно надо заполнить
Теперь Genre - Жанр.
Ага, тут немного интереснее, есть о чем погуторить.
Нажимаем кнопку с тремя точками.
И открывается окошко Жанры.
Наша цель добавить один или несколько жанров в левый ListBox.
Выберите подходящий жанр в правом ListBoxсике и нажмите кнопку Add
В навигации по жанрам поможет верхний ComboBox
О коде в этом unit мне говорить лень, ничего особенного, рутина.
Интереснее, вот, что, информация для загрузки в эти Боксики находится в unit dm
Посмотрите на нее, и поругайте мою лень. Дело в том, что я не уверен, что этот список жанров правилен. Второе, этот список, очевидно, не окончателен. А значит он не должен быть жестко зафиксирован в программе.
Значит, так. Вам задание - --">Книги схожие с «Пишем программу для создания книг FB2.» по жанру, серии, автору или названию:
Александр Заика - Photoshop для начинающих Жанр: Руководства и инструкции Год издания: 2013 Серия: Компьютер – это просто |
Константин Промысловский - Пошаговое руководство для изучающих смешанные единоборства без тренера Жанр: Руководства и инструкции |
Юлия Тупикина - Как разбудить в себе Шекспира. Драмтренировка для первой пьесы Жанр: Литературоведение (Филология) Год издания: 2020 Серия: Мастер сцены |
Алексей Николаевич Клименко - Гроб для мертвого колдуна (СИ) Жанр: Фэнтези: прочее Год издания: 2015 |
Другие книги автора «Юрий Карпов»:
Юрий Карпов - Извлекаем архив из fb2 Жанр: Windows Серия: Решебник delphi |
Юрий Карпов - Рекурсия Жанр: Pascal, Delphi, Lazarus и т.п. Серия: Решебник delphi |