Читаем Пишем программу для создания книг FB2 (СИ) полностью

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

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

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

Norm,Epig,Citat: OutList.Add('

'+S+'

');

Poem: begin

if S = ''

then OutList.Add('')

else OutList.Add(''+S+'');

end;

// конец кода

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

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

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

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

begin

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

Poem: OutList.Add('');

Epig: OutList.Add('');

Citat: OutList.Add('');

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

end;

// конец кода

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

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

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

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

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

Внутри тэгов , и возможно указать автора соответственно стихотворения, цитаты или эпиграфа. Для этого служит тэг . Этот тэг должен стоять в самом конце родительского тэга, то есть непосредственно перед его закрытием.

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

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

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

Auth: begin

OutList.Add(''+S+'');

if oldStyle in [Poem, Epig, Citat]

then CurStyle:= oldStyle;

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

end;

// конец кода

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как на гранит

неговорящий

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

Читает нам… Но сердце бьется,

Надежду робкую тая -

Авось он, гордый, ошибется!

1857

Структура

Теперь, после лирического отступления, самое интересное: структурирование книги.

Книга может иметь разделение на части, главы, тома и книги, ну мало ли чего придумает автор…

В 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;

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих
1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих

Книга предоставляет полное описание приемов и методов работы с программой "1С:Управление небольшой фирмой 8.2". Показано, как автоматизировать управленческий учет всех основных операций, а также автоматизировать процессы организационного характера (маркетинг, построение кадровой политики и др.). Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, формировать разнообразные отчеты, выводить данные на печать. Материал подан в виде тематических уроков, в которых рассмотрены все основные аспекты деятельности современного предприятия. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов. Все приведенные в книге примеры и рекомендации основаны на реальных фактах и имеют практическое подтверждение.

Алексей Анатольевич Гладкий

Экономика / Программное обеспечение / Прочая компьютерная литература / Прочая справочная литература / Книги по IT / Словари и Энциклопедии
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT