Kniga-Online.club
» » » » Юрий Карпов - Пишем программу для создания книг FB2.

Юрий Карпов - Пишем программу для создания книг FB2.

Читать бесплатно Юрий Карпов - Пишем программу для создания книг FB2.. Жанр: Программы издательство неизвестно, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Название:
Пишем программу для создания книг FB2.
Издательство:
неизвестно
ISBN:
нет данных
Год:
неизвестен
Дата добавления:
3 июль 2019
Количество просмотров:
409
Возрастные ограничения:
(18+) Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту для удаления материала.
Читать онлайн
Юрий Карпов - Пишем программу для создания книг FB2.
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего согласия.
Напишите нам, и мы в срочном порядке примем меры.

Юрий Карпов - Пишем программу для создания книг FB2. краткое содержание

Юрий Карпов - Пишем программу для создания книг FB2. - описание и краткое содержание, автор Юрий Карпов, читайте бесплатно онлайн на сайте электронной библиотеки kniga-online.club
Подробный комментарий к исходному коду программы создающей книжку в формате FB2.

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

Пишем программу для создания книг FB2. - читать книгу онлайн, автор Юрий Карпов
Назад 1 2 3 4 5 ... 8 Вперед
Перейти на страницу:

Пишем программу (в 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;'; // - // -

'&': S:= S + '&#38;';

else S:= S + ss[j]; // иначе, претензий нет, символ добавляем к строке

end; // case

end; // обработка строки завершена

L[i]:= ' N| ' + S; // в начало каждой строки вводим указатель стиля Normal

end; // обработка текста завершена

Form1.ListBox1.Items.Assign(L); // сбрасываем список в ListBox

L.Free; // удаляем временный список

end;

// конец кода

Если файл считан, теперь мы можем его форматировать.

Просматриваем текст книги, выделяем нужную строку, выбираем необходимый стиль и нажимаем кнопку

[>]

При этом вызывается процедура ChangeStyle(TmyStyle(RG.itemindex));

Как параметр она получает стиль из радио - списка RG.

К сожалению это все делать надо ручками. Конечно, возможна некая автоматизация, но пока идет речь об упрощенной программе…

Процедура считывает выделенную строку из списка ListBox1, удаляет сведения о типе и записывает строку на старое место с новым стилем.

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

procedure ChangeStyle(LStyle: TmyStyle);

var

n, curIndex: integer;

S: string;

begin

with Form1.ListBox1 do

begin

curIndex:= ItemIndex; // читаем текущий индекс в списке ListBox

if curIndex = -1 then exit; // если ничего не выделено выходим

S:= Items[curIndex]; // считываем текущую строку

n:= pos('|', s); // находим разделитель

/ / хотя это лишнее, n всегда = 4 / когда писал это еще не было ясно, утрясался формат…

// в окончательном варианте n можно удалить

delete(S, 1, n+1); // удаляем информацию о стиле

// Записывается строка с новым стилем. Приводить SetStyle не буду, она очень простенькая

Items[curIndex]:= SetStyle1(LStyle)+ S;

if ItemIndex < Items.Count - 1

then ItemIndex:= ItemIndex+1;

SetFocus; // активным снова становится список с содержимым книги.

end;

end;

// конец кода

(Одно предложение: можно, и не трудно, предоставить пользователю возможность возврата старого стиля)

Теперь о расстановке заголовков

Для этой работы предназначены три кнопки: [+] [H1] [-]. Вообще-то средняя кнопка будем менять свое название, и показывать этим текущий (в данном месте текста) стиль заголовка.

Посмотрим, как это делается:

При любом клике на ListBox вызывается процедура ShowHeadStyle ее параметром является индекс выделенной строки.

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

procedure ShowHeadStyle(n: integer);

var

LStyle: TmyStyle;

begin

LStyle:= ScanUpStyle(n); // получаем тип заголовка к которому относится эта строка

Form1.Button2.Caption:= SetStyle(LStyle); // меняем название кнопки

Form1.Button2.Tag:= integer(LStyle); // запоминаем этот стиль, чтобы потом меньше возиться.

end;

// конец кода

Теперь посмотрим, как мы получаем информацию о стиле.

Элементарно, Ватсон!

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

function ScanUpStyle(n: integer):TmyStyle;

var

i: integer;

LStyle: TmyStyle;

begin

with Form1.ListBox1 do

for i:= n downto 0 do

begin // просматриваем список от заданной строки вверх

GetStyle(Items[i], LStyle); // получаем стиль строки

if LStyle in [H1..H5] then

begin // если стиль строки заголовочный

result:= LStyle; // записываем его в результат

exit; // и выходим, нечего больше время терять!

end;

end; // если дошли до начала списка, а заголовков не найдено…

result:= H1; // присваиваем тип заголовка H1

end;

// конец кода

Устанавливаем стиль заголовка

Выбираем строку в тексте

И если указанный на кнопке стиль подходит, нажимаем ее.

При этом вызывается процедура ChangeStyle(TmyStyle(Button2.Tag));

Параметром ее будет ранее сохраненные сведения о текущем стиле заголовка.

Процедура ChangeStyle описана ранее.

Теперь кнопки [+] и [-]

Код процедур аналогичен, разница только в одной строчке

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

procedure TForm1.Button5Click(Sender: TObject);

var // кнопка плюс

LStyle: TmyStyle;

begin

LStyle:= TmyStyle(Button2.Tag); // получаем текущий стиль

if LStyle < H5 then ChangeStyle(Succ(LStyle)); // если он не слишком велик, прибавляем единицу

// а для кнопки минус, вот эта строчка. Вычитается единичка, если есть откуда вычитать

// if LStyle > H1 then ChangeStyle(Pred(LStyle));

end;

// конец кода

Редактирование строки

Двойной щелчок на строке и открывается окно редактирования

Текст можно исправить или строку разбить на несколько. После нажатия ОК все содержимое записывается в книгу с сохранением старого стиля.

Нажатием кнопок Bold и Italic можно получить соответствующее оформление выделенного текста

(т. е. если текст не выделен ничего не произойдет).

Тут два замечания: отмена такого форматирования возможна только вручную удалением соответствующих тегов, второе, не допустимо форматирование такого вида:

<strong> <emphasis> какой либо текст </strong></emphasis>. Можно конечно отслеживать такую ошибку и программным путем, но небольшое облегчение жизни пользователя, резко усложняет жизнь программиста.

Концевые сноски.

Книга может содержать концевые сноски. Я поленился и сделал пока так: необходимые сноски записываются в файл EndNotes.txt и этот файл должен находится в папке программы.

Внимание! Каждая сноска - одна строка в файле.

В тексте книги в местах сносок надо расставить значки тильды - ~

Ударения.

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

Создание FB2

Наконец добрались.

Казалось бы, что проще, бери строку за строкой и вперед…

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

with Form1.ListBox1 do

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

Назад 1 2 3 4 5 ... 8 Вперед
Перейти на страницу:

Юрий Карпов читать все книги автора по порядку

Юрий Карпов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Пишем программу для создания книг FB2. отзывы

Отзывы читателей о книге Пишем программу для создания книг FB2., автор: Юрий Карпов. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*