Читать «Пишем программу для создания книг FB2.» онлайн

Юрий Карпов

Пишем программу (в Delphi) для создания книг FB2

Введение

В начале было слово, и слово было 2 байта…

Автор мне неизвестен.

Все началось с покупки электронной книжки LBook eReader V3.

Затем я убедился, что книги, лучше всего читаются в формате FB2.

Потом мне захотелось оцифровать книги моего любимого писателя Кальмана Миксата, и тут я увидел, что все не так просто…

Да я в этой «тусовке» недавно и возможно чёто не понимаю, но все свои проблемы я привык решать программным путем.

Состряпал программку, конечно еще сырую, а потом вспомнил опыт Линуса Торвальдса и подумал:

- А, кину я исходник в рунет, и может добрые люди выкормят, вырастят моего ребенка и выведут в люди.

Вы можете спросить, а чего же ты сам это не сделаешь? Во-первых, меня ждут другие "великие дела", во-вторых, я уверен, что коллективным разумом, можно сделать больше и быстрее…

Писал я в своем любимом Delphi (Delphi 6) - но думаю это не принципиально, перевести можно в любой язык.

Это не учебник Delphi и основы, я рассказывать не собираюсь, но постараюсь расписать как можно подробней.

В программе используются только стандартные компоненты Дельфи.

Начинаем

План работы:

* Берем текстовый файл

* Присваиваем строчкам стили

* Делаем файл FB2.

Общие принципы программы.

Содержание книги будет хранится в ListBox1.

Каждая строчка в ListBox1 будет содержать абзац текста и будет начинаться с идентификатора стиля абзаца, например:

// начало примера.

H1 | Кальман Миксат. ЧЕРНЫЙ ГОРОД

H2 | ЧАСТЬ ПЕРВАЯ

H3 | ГЛАВА ПЕРВАЯ.

S| В которой содержатся сведения и подробности, весьма важные для читателя

N| Пал Гёргей был самым примечательным вице-губернатором Спеша во времена Тёкёли

// конец примера.

Символ | отделяет информацию о стиле от строки текста. Теперь надо объяснить, что означают эти буковки.

С H1 по H5: заголовки разных уровней структуры книги (части, главы, разделы и т. п.), я посчитал, что 5 уровней более чем достаточно, мне пока требовалось только три.

S: Subtitle - подзаголовок.

N: Normal - обычный абзац.

Еще могут использоваться стили:

E: Epigraph - эпиграф

T: Text-author - автор цитаты / эпиграфа

P: Poem - стихи

-: None строка будет игнорироваться при записи FB2 файла.

Если потребуется Вы добавите еще…

Читаем текстовый файл

При чтении текстового файла, к каждой строчке прибавляется начало ' N| ' т. к. форматирование еще не сделано и все строки одинаково обычны.

// начало кода

procedure LoadTXT(FName: string);

var

L: TStringList;

i, j: integer;

s, ss: string;

begin

L:= TStringList.Create; // создаем временный список

L.LoadFromFile(fname); // читаем из файла // можно сделать грамотнее с помощью try

for i:= 0 to L.Count - 1 do// просматриваем текст

begin

s:= ''; ss:= L[i];

for j:= 1 to length(Ss) do

begin // просматриваем строку

case ss[j] of

'<': S:= S + '&#60;'; // знак < вызывает сбой в читалке. т. к. она думает что дальше следует тэг

'>': S:= S + '&#62;'; // заменяем, на всякий случай

'^': S:= S + '&#94;'; // этот символ будет использован в служебных целях

'~': S:= S + '&#126;'; // - // -