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

на главную

Жанры

Создание электронных книг в формате FictionBook 2.1: практическое руководство
Шрифт:

Выходной файл по умолчанию формируется в той же папке, что и исходный.

Чрезвычайно порадовало то, что, в отличие от продуктов, описанных выше, ExportToFB21 абсолютно не проявляет своеволия и не пытается самостоятельно структурировать документ (если он, конечно, предварительно не размечен стилями, конечно). Структурирование все-таки лучше делать в редакторе.

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

То, что получается на выходе достойно всяческих похвал. Файл прекрасно подходит как для чтения в FB2-читалке, так и для доводки в FB Editor. Это и неудивительно. Корректный экспорт самой разной структуры документа заявлен, как «самая главная фишка конвертора».

Как

следует из названия, программа поддерживает инновации формата FictionBook 2.1. Это <sub>, <sup>, <code> и таблицы. Картинки, правда, конвертор пока экспортировать не умеет, но аккуратно вставляет в соответствующие места тэги.

Более подробно все возможности, «фичи» и особенности конвертора описаны в офицальном руководстве к нему (п. 1.3.2–1.3.3).

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

Означенное совершенствование продолжается. За 2008 год проект претерпел серьезные изменения, трансформировшись в пакет OOoFBTools, который может не только создавать, но и корректировать FB2.

Peзюме. Хорошая вещь. 100% must have для тех, у кого на машине установлен OO Writer.

§ 3.7 Написание собственного конвертора

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

Решить эти проблемы может собственноручное написание конвертора. Помимо возможности тонкой настройки софта под конкретную задачу, этот метод имеет еще одну положительную сторону: претензии по поводу кривизны решений предъявлять просто некому. Кроме как самому себе…

Для написания конвертора наиболее подходящи скриптовые языки программирования, заточенные для работы с текстом и поддерживающие регулярные выражения. TCL, Java, Perl, Python… Лично я остановил свой выбор на самом молодом и многобещающем из них. Имеется в виду язык программирования Ruby.

Ruby был создан в середине 90-х японским программистом Юкихиро Мацумото. Это многогранный, элегантный и в то же время очень простой для изучения язык. Он вобрал все лучшее, что было у его предшественников: мощь регулярных выражений Perl, объектно-ориентированное программирование Java и Python, помноженные на феноменальные изящество и функциональность.

Установка Ruby

Скачать транслятор Ruby можно с официального сайта проекта www.rubylang.org.

Вариант Ruby для Win32 представлен в двух вариантах. Обычный инсталлятор (rubyxxx-xx.exe)и zip-архив — ruby-xxx-pxxx-i386-mswin32.zip, где xxx — номера версий и обновления. На момент написания этого текста была доступна стабильная версия 1.8.6.

Для наших целей вполне подойдет второй вариант — zip-архив.

Только нужно будет папку, где находится запускной файл интерпретатора добавить в список папок, доступных по умолчанию. Для этого щелкаем правой кнопкой мыши по иконке «My computer», на панели «Advanced» жмем кнопку «Environment Variables». В списке «System variables» находим переменную Path и щелкаем по кнопке «Edit». В открывшемся окошке в поле «Variable Value» через «;» без пробела добавляем путь к нужной папке. Например C:\TOOLS\RUBY\bin.

В принципе, для работы скрипта жизненно необходимы лишь два файла: exe-шник транслятора (ruby.exe) и служебная dll-ка (msvcrt-ruby18.dll). Поэтому, если не требуется использование библиотек, то можно просто забросить эти два файла в папку Windows, или любую другую, доступную по переменной Path. В крайнем случае, можно просто поместить их в ту же папку, где находятся скрипты.

Разумеется, описывать программирование на языке Ruby прямо здесь нет ни необходимости, ни возможности. Это тема для отдельной книги, которуя, с Божьей помощью, я, возможно, напишу. А здесь ограничимся комментариями в самих скриптах.

Если же вы не знаете, где взять документацию по Ruby, то вам прямая дорога на сайт www.flazx.com, где, среди множества другой ценной литературы, можно найти и исчерпывающую подборку книг по Ruby. Правда, англоязычных, но зато много и бесплатно. Из русскоязычных изданий могу посоветовать книгу М. Фицджеральда «Изучаем Ruby» (на момент написания книги была доступна только на бумаге), а также труд П. Фултона «Программирование на языке Ruby» (доступен в Сети).

Пример первый.
Конвертирование форматированного dos-текста

Данный скрипт размещается исключительно как классический пример. Так сказать для затравки.

Скрипт выполняет простейшее преобразование текста, вмешательство в структуру будущей fb2-книги сведено практически к нулю. Но его ничего не стоит доработать. Например, чтобы он выделял главы, подзаголовки, при этом структурируя будущий файл. Вообще, средствами Ruby можно организовать такую интеллектуальную обработку текста, которая оставит Any2FB2 далеко позади.

# Скрипт для конвертации форматированного текста DOS-866 в FB2

# (C) Юзич, апрель 2008 г.

#

# запускать из директории, где находится входной файл

# запуск: ruby dtxt_fb2.rb <input.txt>

#

# массив для перекодировки текста. Псевдографика заменяется на код 135,

# символы, отсутствующие в кодировке win-1251 - на код 138

doswin = [192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,

208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,

224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,

135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,

168, 184, 170, 186, 175, 191, 161, 162, 176, 149, 183, 138, 185, 164, 138, 138]

# считываем входной файл в одну строку

wtext=ARGF.readlines.to_s

ARGF.close

wtext.gsub!(/\n(\S)/,' \1') # склеиваем строки абзацев

wtext.squeeze!(" ") # убираем лишние пробелы

wtext.gsub!(/^ /,"") # убираем пробелы в начале строки

# перекодировка текста

for i in 0..(wtext.length-1)

case wtext[i]

when 20: wtext[i] = 182 # обработать символ "Пи"

when 21: wtext[i] = 167 # обработать символ "параграф"

when 128..255: wtext[i] = doswin[wtext[i]-128] # обработать все остальное

end

end

wtext.gsub!("...", (133).chr) # многоточие - в символ "многоточие"

wtext.gsub!(/(\s)-\s/,'\1'+(151).chr+" ") # компьютерное тире - в типографское

# порубим строку в массив

wtext = wtext.split(/\n/)

wtext.collect! do |line|

if line =="" then

line = "<empty-line/>" # пустая строка?

else

line=""+line+"" # нет, не пустая

end

end

# добавляем заголовок

wtext.insert(0,"<?xml version=\"1.0\" encoding=\"windows-1251\"?>

<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\" xmlns:l=\"http://www.w3.org/1999/xlink\">

<description>

<title-info>

<genre>nonfiction</genre>

<lang>ru</lang>

</title-info>

<document-info>

<program-used>Yuzich Ruby script (dostxt -> FB2)</program-used>

</document-info>

</description>

<body>

<section>")

# добавляем хвост

wtext << "</section>\n</body>\n</FictionBook>\n"

# сохраняем выходной файл

wfile = File.new(ARGF.filename.dup.gsub!(/\.txt/i,".fb2"),"w")

wfile.puts wtext

wfile.close

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

Месть бывшему. Замуж за босса

Россиус Анна
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть бывшему. Замуж за босса

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Последний попаданец

Зубов Константин
1. Последний попаданец
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Последний попаданец

Уязвимость

Рам Янка
Любовные романы:
современные любовные романы
7.44
рейтинг книги
Уязвимость

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Прометей: владыка моря

Рави Ивар
5. Прометей
Фантастика:
фэнтези
5.97
рейтинг книги
Прометей: владыка моря

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8

Титан империи 4

Артемов Александр Александрович
4. Титан Империи
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Титан империи 4

Прометей: каменный век II

Рави Ивар
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Прометей: каменный век II

Наизнанку

Юнина Наталья
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Наизнанку

Вечная Война. Книга VIII

Винокуров Юрий
8. Вечная Война
Фантастика:
боевая фантастика
юмористическая фантастика
космическая фантастика
7.09
рейтинг книги
Вечная Война. Книга VIII

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Сумеречный Стрелок 5

Карелин Сергей Витальевич
5. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 5