Чтение онлайн

на главную

Жанры

Пишем программу для создания книг FB2
Шрифт:

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

begin

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

Ss:= GetStyle(S, CurStyle); // получаем чистую строку и стиль

s:= ''; // подготавливаемся к преобразованию строки

if ss <> '' then

for j:= 1 to length(Ss) do

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

case ss[j] of

'~': begin // если это концевая сноска

S:= S + '<a l: href="#" type="note">'

+IntToStr(EndNotes_count)+'</a>';

inc(EndNotes_count); // увеличиваем

счетчик сносок

end;

'^': S:= S + ''; // ставим ударение

else S:= S + ss[j]; // иначе записываем символ в итоговую строку

end; // case

end;

// тут я пока немножко пропущу

// анализ стилей

case CurStyle of // в зависимости от стиля абзаца

Norm,Epig,Citat: OutList.Add(''+S+'');

H1..H5: StyleStucture; // Heading

Sub: OutList.Add('<subtitle>'+s+'</subtitle>'); // Subtitle

// конец кода

Давайте рассмотрим все по порядку:

Начнем со стихов. В стандарте FB2 используется три тега для работы со стихами, я использую только один стиль "P".

Для разделения стихов на строфы я предлагаю использовать пустые строки помеченные стилем "P".

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

if (CurStyle <> oldStyle) then // если предыдущий стиль отличен от текущего

begin // а нынешний стиль есть в данном списке, то значит надо начинать нужный блок.

case CurStyle of // начало блока

Poem: OutList.Add('<poem><stanza>');

Epig: OutList.Add('<epigraph>');

Citat: OutList.Add('<cite>');

end; // case начало блока

end;

// конец кода

А для обработки стиля используется следующие строки

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

case CurStyle of // в зависимости от стиля абзаца

Norm,Epig,Citat: OutList.Add(''+S+'');

Poem: begin

if S = ''

then OutList.Add('</stanza><stanza>')

else OutList.Add('<v>'+S+'</v>');

end;

// конец кода

В случае Нормальное стиля, Эпиграфа и Цитаты, просто добавляются абзацы, а для стихов еще отслеживается пустая строка…

Как видите блоки не завершены. Эту функцию выполняет следующий код.

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

if (CurStyle <> oldStyle) and (CurStyle <> Auth) then

begin

case oldStyle of // завершение предыдущего блока

Poem: OutList.Add('</stanza></poem>');

Epig: OutList.Add('</epigraph>');

Citat: OutList.Add('</cite>');

end; // case завершение предыдущего блока

end;

// конец кода

Но как Вы увидите в исходнике последний программный кусок находится выше предыдущего (и вообще все немного не так), но в данном тексте, мне пришлось расположить их так для последовательного, логичного объяснения, а в программе: сначала проверяется завершенность предыдущих блоков, затем при необходимости начинается другой, а затем обрабатываем текущий стиль.

В данном сочинении, я часто буду пользоваться таким приемом, отступлением от порядка следования текста в исходнике, что делать, человеческая логика и машинная не совсем совпадают.

Если Вы внимательно следите за процессом, то заметили " and (CurStyle <> Auth) " в предыдущем кусочке о начале блока, я это дело опустил, что бы не затуманивать описание.

Это достаточно забавный код призван выполнить требования формата:

// начало цитаты

Внутри тэгов <poem>, <cite> и <epigraph> возможно указать автора соответственно стихотворения, цитаты или эпиграфа. Для этого служит тэг <text-author>. Этот тэг должен стоять в самом конце родительского тэга, то есть непосредственно перед его закрытием.

// конец цитаты

А теперь как это я сделал.

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

Auth: begin

OutList.Add('<text-author>'+S+'</text-author>');

if oldStyle in [Poem, Epig, Citat]

then CurStyle:= oldStyle;

// т. е. корректно отработается закрытие родительских блоков

end;

// конец кода

Т.к. естественно я сделаю эту брошюрку с помощью своей программки. Опробуем вышеизложенные методы форматирования на следующем оптимистичном стихотворении.

ДОПОТОПНАЯ КОСТЬ[1]

Аполлон Майков

Я с содроганием смотрел

На эту кость иного века…

И нас такой же ждет удел:

Пройдет и время человека…

Умолкнет славы нашей шум;

Умрут о людях и преданья;

Всё, чем могуч и горд наш ум,

В иные не войдет созданья.

Оледенелою звездой

Или потухнувшим волканом

Помчится, как корабль пустой,

Земля небесным океаном.

И, странствуя между миров,

Воссядет дух мимолетящий

На остов наших городов,

Как на гранит

неговорящий

Так разум в тайнах бытия

Поделиться:
Популярные книги

Приручитель женщин-монстров. Том 3

Дорничев Дмитрий
3. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 3

На границе империй. Том 8. Часть 2

INDIGO
13. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8. Часть 2

Заплатить за все

Зайцева Мария
Не смей меня хотеть
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Заплатить за все

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Гром над Империей. Часть 1

Машуков Тимур
5. Гром над миром
Фантастика:
фэнтези
5.20
рейтинг книги
Гром над Империей. Часть 1

Идеальный мир для Социопата 7

Сапфир Олег
7. Социопат
Фантастика:
боевая фантастика
6.22
рейтинг книги
Идеальный мир для Социопата 7

Газлайтер. Том 3

Володин Григорий
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Защитник

Астахов Евгений Евгеньевич
7. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Защитник

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Приручитель женщин-монстров. Том 4

Дорничев Дмитрий
4. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 4

Попаданка в деле, или Ваш любимый доктор - 2

Марей Соня
2. Попаданка в деле, или Ваш любимый доктор
Любовные романы:
любовно-фантастические романы
7.43
рейтинг книги
Попаданка в деле, или Ваш любимый доктор - 2

Генерал Империи

Ланцов Михаил Алексеевич
4. Безумный Макс
Фантастика:
альтернативная история
5.62
рейтинг книги
Генерал Империи

Машенька и опер Медведев

Рам Янка
1. Накосячившие опера
Любовные романы:
современные любовные романы
6.40
рейтинг книги
Машенька и опер Медведев