412 000 произведений, 108 200 авторов.

Электронная библиотека книг » Михаил Кондратович » Создание электронных книг в формате FictionBook 2.1: практическое руководство » Текст книги (страница 5)
Создание электронных книг в формате FictionBook 2.1: практическое руководство
  • Текст добавлен: 6 октября 2016, 23:47

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


Автор книги: Михаил Кондратович



сообщить о нарушении

Текущая страница: 5 (всего у книги 15 страниц)

§ 3.3 ExportXML

Программа представляет собой макрос M$ Word, предназначенный для преобразования в FB2 файлов DOC прямо из M$ Word.

Макрос нормально запускается в M$ Word XP и 2003.

Установка макроса заключается в копировании файла ExportXML.dot в папку автоматически запускаемых макросов Word. Обычно это папка C:Program FilesMicrosoft OfficeOffice10Startup. (Здесь и далее для M$ Office 2003 вместо «Office10» будет «Office11»).

Затем нужно разрешить запуск макросов. Меню «СервисПараметры», закладка «Безопасность», кнопка «Защита от макросов». На закладке «Уровень безопасности» установите переключатель-радиокнопку в положение «Средняя. Решение о запуске потенциально опасных макросов принимается пользователем». Правда, теперь при каждом запуске Word будет выскакивать надоедливое сообщение, не нужно ли отключить макросы.

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

Для этого макрос необходимо подписать.

Вначале нужно создать сертификат. Запускаем программку selfcert.exe из директории MS Office (C:Program FilesMicrosoft OfficeOffice10). В поле «Ваше имя» вводим какое-нибудь слово и жмем OK. Все, сертификат создан. Правда, он не подтвержден Micro$oft, но нам этого и не требуется.

Теперь запускаем Word (макрос ExportXML.dot должен находиться в папке Startup). Запускаем редактор Visual Basic (СервисМакросРедактор Visual Basic). В окошке Project выбираем группу ExportXML.

Затем вызывем команду ToolsDigital Signature. В окошке «Цифровая подпись» жмем кнопку «Выбрать», выбираем сертификат и жмем «OK».

Закрываем редактор, выходим из Word. На запрос, надо ли сохранить изменения в документе ExportXML, отвечаем утвердительно.

При следующем запуске Word сообщит, что файл ExportXML.dot содержит макросы, подписанные автором [имя вашего сертификата]. Ставим галочку напротив «Всегда доверять макросам из данного источника» и жмем ставшую активной кнопку «Не отключать макросы».

Все! При последующих запусках Word будет прилежно запускать ExportXML, не докучая вам запросами.

В меню «Файл» появилось подменю «FictionBook2» содержащее два пункта: «Export as Fictionboок2 xml…» и «Edit Fictionbook2 properties…»

Последний пункт, как нетрудно догадаться, позволяет редактировать описание (description) будущего FB2-файла.

Кнопочки «+» и «-» внизу позволяют соответственно добавлять копии полей или удалять оные. Чтобы отредактировать поле, выделите его и нажмите клавишу F2.

Непосредственно экспорт производится предельно просто. Вводим путь и имя файла. Затем макрос предложит заполнить description. При этои можно выбрать кодировку файла (выпадающий список внизу «Export encoding»). По умолчанию текст экспортируется в utf-8.

Макрос нормально обрабатывает полужирный шрифт, курсив, и даже Word-овские сноски. Пытается разбить книгу на секции, что чаще всего получается некоректно.

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

Внимание, картинки, если они есть, не экспортируются!

Макрос позволяет «помочь» ему и выделить некоторые элементы непосредственно в Word.

Для этого в нем есть стили, которые так и называются: Annotation, Cite, Cite Author, Epigraph, Epigraph Author, Poem Title, Stanza.

Если они автоматически не появились в списке стилей после установки макроса, придется каждый раз добавлять их в документ вручную. Для этого файл ExportXML.dot должен быть скопирован в директорию C:Documents and SettingsИмя текущего пользователяApplication DataMicrosoftШаблоны.

Открыв нужный файл, выбираем команду меню ФорматТема. В появившемся окошке жмем кнопку «Библиотека стилей». В списке стилей выбираем ExportXML и жмем «OK».

Резюме: отвечающий своему назначению, но незаконченный продукт. Использовать рекомендуется лишь в отдельных случаях. Например, для преобразования документов, напичканных сносками.

§ 3.4 doc2fb

Приложение doc2fb предназначено для преобразования в FB2 файлов RTF и M$ Word DOC.

Чтобы утилита могла работать, на ПК должен быть установлен M$ Word 2003. Также должен наличествовать JavaScript версии не ниже 5 (входит в состав IE).

Собственно утилита представляет собой XSL-скрипт и оболочку – HTA-приложение. [3.1]3.1
  HTA-приложение – приложение, выполняющееся средствами браузера. Фактически, это скрипт.


[Закрыть]

Интерфейс оболочки прост и понятен. Сразу бросается в глаза, что программка рассчитана на пакетное преобразование. То есть выбрать можно не конкретный файл, а только папку.

Утилита умеет выделять главы и подглавы, жирный шрифт и курсив, сноски и ссылки, а также добавляет картинки.

При этом векторные картинки Word, например, WMF, в итоговый файл не попадают. Растровые картинки, отличные от формата JPEG, преобразуются в PNG.

Меню программки состоит из трех пунктов: «Файлы», «Настройки» и «Инфо»

Пункт «Файлы» позволяет вызвать главную рабочую страницу оболочки (активна сразу после запуска). В строке «Папка» щелкаем кнопку с изображением «>>» и выбираем папку, которая содержит нужные DOC-файлы.

После этого становится активной кнопка «преобразовывать».

Нажимаем ее. Файлы тихо и быстро конвертируются в FB2.

Ход операции отображается в области «Журнал», которая находится под кнопкой «преобразовывать».

Настройки оболочки весьма немногочисленны.

«Показывать MS Word при преобразовании», «Закрывать doc2fb после преобразования», «Удалять пустые строки» – назначение этих опций ясно без дополнительных комментариев.

«Заменять Line-break на Paragraph-break» – заменяет коды принудительные разрывы строки на коды конца абзаца.

Что есть такое принудительный разрыв строки? Обратимся к документации M$ Word.

При вставке принудительного разрыва строки текущая строка обрывается, и текст продолжается на следующей строке. Предположим, например, что стиль абзаца включает в себя отступ перед первой строкой. Чтобы избежать появления отступа перед короткими строками текста (допустим, в написании адреса или в стихотворении), каждый раз, когда нужно начать новую строку, вместо того чтобы нажимать клавишу ENTER, вставляйте принудительный разрыв строки.

Укажите место разрыва строки. Нажмите клавиши SHIFT+ENTER.

«Определять сноски как <регулярное выражение>» и «Определять пояснения как... <регулярное выражение>» – перед конвертацией в FB2 M$ Word преобразует описанное регулярными выражениями в сноски и пояснения.

«Сохранять изменения как версию документа» –  в процессе конвертации в документ вносятся изменения. Если опция включена, то эти изменения будут сохранены в документе как версия редактирования.

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

Как и в ExportXML, чтобы помочь программе найти элементы, документ можно дополнительно разметить. На страничке автора программы можно найти dot-файл с соответствующими стилями. Добавляются они в рабочий файл точно так же, как и стили ExportXML.

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

§ 3.5 Перенос через буфер обмена

Простой, но незаслуженно игнорируемый способ. Он, как нетрудно понять, заключается в выделении фрагмента текста, или же текста целиком, копировании его в буфер обмена Windows, и последующей вставке в FB Editor.

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

Таким образом можно переносить тексты из MS Word, Интернет-браузера. Не обременяя машину дополнительными программными пакетами и dll-ками.

Кроме того, при таком способе конвертирования наиболее удобно использовать заготовки-шаблоны, с частично заполненным description.

Разумеется, затем текст надо полностью структурировать вручную. Но, по моему скромному мнению, гораздо удобнее структурировать файл «с нуля», чем исправлять огрехи программы конвертирования.

Недостаток у переноса через буфер, кроме повышенных временных затрат на структурирование, в общем-то один – некорректная обработка форматирования исходного документа. Чаще всего пропадают пустые строки. Сдвоенные пустые строки превращаются в одинарные в девяти случаях из десяти. Еще при этом в выходной документ могут попасть нежелательные элементы, например, картинки, (редакторы FB2 не поддерживают вставку картинок из буфера, там работа с ними организована совершенно по-другому) которые потом приходится вычищать.

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

§ 3.6 Конвертор ExportToFB21 для Open Office

Пакет Open Office создавался как бесплатная альтернатива M$ Office. В последние годы разработчикам удалось довести его до ума, и Open Office (далее OO) начал потихоньку набирать популярность и отвоевывать пользователей у разработки Micro$oft.

Поэтому нет ничего удивительного, что и для него появился конвертор в FB2. Тем более, что формат документов OO, как и в последней версии M$ Office представляет собой пачку XML-документов.

Программка представляет из себя пакет макросов для  OpenOffice Writer. Естественно, она платформeнно-независима, т.е. работает на всех ОС, которые поддерживет OO.

Программа прекрасно документирована, на сайте разработчика есть иллюстрированные руководства в формате OO Writer, а также PDF. Поэтому, во избежание плагиата, ограничимся общими советами и замечаниями.

Данное описание справедливо для версии 2.2.

На сайте разработчика ExportToFB21 существует в двух ипостасях: ExportToFB21_version2.2.zip и ExportToFB21_version2.2.oxt.zip. Отличаются они тем, что во втором случае пакет макросов упакован в специальный формат OO – .oxt, и его придется перед установкой доставать из архива.

Итак, архив с конвертором загружен. Запускаем OO Writer и вызываем команду «СервисУправление расширениями». Щелкаем кнопку «Добавить» и открываем zip-архив или пакет .oxt.

 Теперь нужно создать кнопку для запуска макроса. Вызываем команду меню «СервисНастройка» и активируем закладку «Панели инструментов». В выпадающем меню «Панель инструментов» выбираем панель, на которую будет помещена кнопка. Руководство рекомендует создать новую, но, на мой взгляд, это излишество.

Жмем кнопку «Добавить». В открывшемся окне в дереве «Категория» в самом низу находим группу «Макрос OpenOffice.org» и разворачивем ветку «Мои макросы» (или «Макросы OpenOffice.org», если при установке в окне «Управление расширениями» был активен пункт «Расширения OpenOffice.org»). Находим ветку ExportToFictionBook и раскрываем ее.

Теперь щелкаем по группе «ExportToFB21» и в окне справа выбираем команду «ExportToFB21». Жмем кнопку «Добавить». Все!

Как и макросы для M$ Office ExportToFB21 позволяет предварительно разметить документ при помощи стилей. Для этого на сайте имееется специальный файл стилей – fb21_styles.ott_2.0.zip. Как установить его в OO Writer подробно описано в руководстве.

После вызова макрос может предложить вначале сохранить документ.

Затем появится окно заполнения заголовка. Пусть вас не смущает обилие полей – обязательны к заполнению лишь некоторые из них. Также, обратите внимание, что хотя графы и можно дублировать (кнопки «Добавить» и «+»), вернуться к ним уже не получиться.

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

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

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

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

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

Более подробно все возможности, «фичи» и особенности конвертора описаны в офицальном руководстве к нему (п. 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.ruby-lang.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:TOOLSRUBYbin.

В принципе, для работы скрипта жизненно необходимы лишь два файла: 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

#

# массив для перекодировки текста. Псевдографика заменяется на код 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 = "" # пустая строка?

  else

    line="

"+line+"

" # нет, не пустая

  end

end

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

wtext.insert(0,"

nonfiction

ru

Yuzich Ruby script (dostxt -> FB2)

")

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

wtext << "

nnn"

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

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

wfile.puts wtext

wfile.close

После того, как скрипт отработает, в директории появится файл <имя_исходного_файла>.fb2. Небольшая правка в FB Editor и он будет полностью готов к распространению.

Пример второй.
Конвертирование журналов c WiseSoft.ru

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

На ресурсе http://www.wisesoft.ru находится множество различных журналов. Форматы в котором они представлены, различаются, Но один из них особо привлекателен для преобразования в FB2. Я говорю о журналах которые представлены в виде пачки html-файлов («Хакер», «Хакер-спец», «Мобильные компьютеры», «Хулиган» и др.). При всей простоте, конвертированию стандартными средствами этот способ хранения данных поддается с трудом.

Более близкое знакомство выявило следующее. Имеется  файл index.htm с оглавлением. Статьи представляют собой кучки html-файлов, разбитые по папкам. Текст представляет собой обычные абзацы, обрамленные тэгами «

». Оформление html-ок везде стандартное.

К сожалению, такая лафа наблюдается не везде. С декабря 2006 года формат журналов начал эволюционировать. Статьи стали вмещаться в одну html-ку, появились списки, картинки, дополнительные стили. Хотя и не во всех журналах. Основная масса изданий представлена именно в таком виде, как описано выше. Поэтому сосредочимся именно на них.

Наша задача заключается в том, чтобы вырезать куски текста из html-файлов, склеить их в один файл.

Скрипт, представленный ниже, не только блестяще справляется с этим, но и выдает на выходе вполне приличный FB2, с заполненным заголовком, готовой аннотацией и разбитый на секции.

# Скрипт для конвертации журналов с WiseSoft.ru в FB2

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

#

# поддерживаемый формат файлов: пачка html, журналы сделанные c ноября 2003 г. по ноябрь 2006 г. включительно.

# примечание: изменения в декабре 2006 и марте 2007 – некритичные

# теоретически должен обрабатывать журналы сделанные по июль 2007 включительно

# но уже с мая 2007 в тексте могут попадаться дополнительные тэги, мешающие правильной конвертации

# хотя все это касается, в основном, журнала "Хакер" ("Хакер-спец").

# "Мобильные компьютеры", к примеру, по-прежнему, как шли, так и идут в старом формате

# да и чтобы обрабатывать журналы, сделанные до ноября 2003, достаточно подправить ключевые фразы

#

# запускать из директории, где находится файл-оглавление журнала (index.htm)

# запуск: ruby ws_j_cnv.rb

#

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

wfile=File.open("index.htm")

ltext=wfile.readlines.to_s

wfile.close

# выгрызаем заголовок

fbtitle=/(.+)(#d{1,3})(.+)/.match(ltext).captures

# выгрызаем ссылки на статьи и разделители

filtr=/(.+)|(.+)/

lmas = ltext.grep(filtr)

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

outtext="<p>"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"</p>n"

# начинаем формировать аннотацию

annotation="

Содержание номера:

n"

# флажок открытой секции раздела

flagSect=false

# прокручиваем список ссылок

lmas.each do |line|

  if line.include? "SPAN" then     # ССЫЛКА ИЛИ РАЗДЕЛИТЕЛЬ?

    if flagSect then outtext=outtext+"n" end # РАЗДЕЛИТЕЛЬ. Секцию закрывать надо?

    /(.+)/.match(line) # выгрызаем разделитель...

    outtext=outtext+"

n<p>"+$1+"</p>n" # открываем секцию раздела

    annotation=annotation+"

"+$1+":

n" # и дополняем аннотацию

    flagSect=true # секция осталась открыта...

  else # НЕ-ЕТ, ВСЕ-ТАКИ ССЫЛКА...

    filtr.match(line)

    pathf = $2 # берем путь к первому файлу статьи...

    annotation=annotation+"

"+(149).chr+" "+$3+"

n" # дополняем аннотацию...

    puts pathf[0..2] # это чтобы не скучно было ждать...

    outtext=outtext+"

n" # открыли секцию...

    while File::exists?(pathf) do # обрабатываем статью

      # считали файлик в текстовую строку...

      wfile=File.open(pathf)

      wtext=wfile.readlines.to_s

      wfile.close

      wtext[/.+?

/m]="" # чик! головка...

      wtext[/

.+/m]="" # чик! хвостик...

      # заголовок статьи оставлять?

      wtext = pathf[4,2].to_i == 1 ? wtext.sub(/.*n(.*n.*n).*n.*n/,' 1') : wtext.sub(/.*n.*n.*n.*n.*n/,' 1')

      outtext=outtext+wtext  # оставшийся текст – к основному массиву

      # модифицируем имя файла

      if pathf[4,2].to_i >= 10

        pathf[4,2] = (pathf[4,2].to_i + 1).to_s

      else

        pathf[4] = (pathf[4,2].to_i + 1).to_s

      end

    end # конец цикла

    outtext=outtext+"

n" # закрываем секцию

  end # усе. статью оформили...

end # все статьи собрали в одну строку...

# модифицируем выходной текст под FB2

outtext.gsub!("

","<p>")</p> <p>outtext.gsub!("</strong></big></big></big></p>","</p>")

outtext.gsub!("

","

")

outtext.gsub!("

","

")

outtext.gsub!(" ",(160).chr)

outtext.gsub!(/&(?!lt;|gt;)/,"&")

annotation.gsub!(/&(?!lt;|gt;)/,"&")

outtext.gsub!("
","

")

outtext.gsub!("
","

")

# чистим мусор

outtext.gsub!(/x01|x12|x18|x1E/, "?")  # удаляем непечатные символы

# корректируем неправильное использование "<" и ">"

# заодно прибиваем ненужные тэги

outtext.gsub!(/(

)(.*)(

)/) do |line|

  subl1,subl2,subl3 = $1,$2,$3

  subl2.gsub!("<","x8b")

  subl2.gsub!(">","x9b")

  line=subl1+subl2+subl3

end

# а линки выделим жирным

outtext.gsub!(/x8Ba href.+?x9B(.*?)x8B/ax9B/) {|line| line=""+$1+""}

# компьютерное тире – в типографское

outtext.gsub!(/s-s/," x97 ")

outtext.gsub!("

-", "

x97")

annotation.gsub!(/s-s/," x97 ")

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

outtext="

nonfiction

Редакция журнала

"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"

n"+annotation+"

"+fbtitle[2][-7,4]+"

ru

Yuzich Ruby script (WiseSoft -> FB2)

http://www.wisesoft.ru

n"+outtext

if flagSect then outtext=outtext+"

" end # если надо, закроем последнюю секцию раздела

outtext=outtext+"nn" # добавляем хвост

# в имени выходного файла не должно быть двоеточия

fbtitle[0].gsub!(":","-")

# и типографские кавычки – это не есть хорошо

fbtitle[0].gsub!((171).chr,"`")

fbtitle[0].gsub!((187).chr,"`")

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

wfile = File.new(fbtitle[0]+fbtitle[1]+".fb2","w")

wfile.puts outtext

wfile.close

Вам останется только загрузить готовый FB2-файл в FB Editor и доделать, то, с чем не справился скрипт: вставить обложку, разметить подзаголовки и цитаты,  подправить эпиграфы. Но это не должно отнять много времени. Основную часть работы проделал скрипт.

Рабочие версии этих скриптов вы можете взять с моего сайта http://yuzzich.narod.ru.


    Ваша оценка произведения:

Популярные книги за неделю