KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Прочая околокомпьтерная литература » Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство (beta 4)

Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство (beta 4)

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Михаил Кондратович, "Создание электронных книг в формате FictionBook 2.1: практическое руководство (beta 4)" бесплатно, без регистрации.
Перейти на страницу:

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

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

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

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

#

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

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

#

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

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

ltext=wfile.readlines.to_s

wfile.close

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

fbtitle=/<SPAN CLASS="titleSet">(.+)<font color="#FF0000">(#d{1,3})</font>(.+)</SPAN>/.match(ltext).captures

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

filtr=/<SPAN CLASS="minSet">(.+)</SPAN>|<a href="(d{3}/d.htm)">(.+)</a>/

lmas = ltext.grep(filtr)

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

outtext="<title>

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

</title>n"

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

annotation="

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

n"

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

flagSect=false

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

lmas.each do |line|

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

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

    /<SPAN CLASS="minSet">(.+)</SPAN>/.match(line) # выгрызаем разделитель...

    outtext=outtext+"<section>n<title>

"+$1+"

</title>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+"<section>n" # открыли секцию...

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

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

      wfile=File.open(pathf)

      wtext=wfile.readlines.to_s

      wfile.close

      wtext[/<html>.+?</p>/m]="" # чик! головка...

      wtext[/<center>.+</html>/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+"</section>n" # закрываем секцию

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

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

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

outtext.gsub!("

<big><big><big><strong>","<title>

")

outtext.gsub!("</strong></big></big></big>

","

</title>")

outtext.gsub!("

<big><strong>","<epigraph>

")

outtext.gsub!("</strong></big>

","

</epigraph>")

outtext.gsub!("&nbsp;",(160).chr)

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

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

outtext.gsub!("<br>","

")

outtext.gsub!("<br>","

")

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

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

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

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

outtext.gsub!(/(

)(.*)(</p>)/) 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="<strong>"+$1+"</strong>"}

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

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

outtext.gsub!("

-", "

x97")

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

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

outtext="<?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>

<author>

<nickname>Редакция журнала</nickname>

</author>

<book-title>"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"</book-title>

<annotation>n"+annotation+"</annotation>

<date>"+fbtitle[2][-7,4]+"</date>

<lang>ru</lang>

<sequence name=""+fbtitle[0]+"" number=""+fbtitle[1][1,2]+""/>

</title-info>

<document-info>

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

<src-url>http://www.wisesoft.ru</src-url>

</document-info>

</description>

<body>n"+outtext

if flagSect then outtext=outtext+"</section>" end # если надо, закроем последнюю секцию раздела

outtext=outtext+"</body>n</FictionBook>n" # добавляем хвост

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

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.

Часть IV

Редактирование книг. FB Editor

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

Для этого существует программа FB Editor, входящая в пакет FB Tools. Разумеется, это далеко не единственное стредство редактирования FB2-книг.

Данное описание соответствует оригинальной версии FB Editor 1.0 от 23 февраля 2005 года.

Автор FB Editor, Михаил Мацнев, не стал утруждать себя написанием help-а, не без основания считая, что разобраться, как работать с программой, можно и без такового.

Однако, судя по количеству вопросов на форумах fictionbook.org  и прочих, описание программы все-таки требуется.

§ 4.1 Установка программы

Для работы FB Tools требуется операционная система семейства Windows NT: лучше всего Windows 2000 или Windows XP.

Также понадобится MSXML 4.0 SP2 и Internet Explorer версии не ниже 5.5 и (внимание!) не выше 6.0 SP1.

Скачать MSXML 4.0 можно с официального сайта Micro$oft. При этом проверка Windows на легальность не производится :).

==ВАЖНО========================

Если у вас установлен Internet Explorer 7.0 и выше, ставить FB Editor, не стоит и пытаться — работать не будет. Вам придется воспользоваться альтернативной разработкой — FB Writer или версией FBE от «ЛитРес».

===============================

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

Наконец, все нужные компоненты закачаны, программа установлена. Можно приступать к работе.

§ 4.2 Описание функций и основные приемы работы

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

Механизм работы редактора не так прост, как может показаться на первый взгляд.  Кроме непосредственно exe-файла существуют еще два Java-скрипта, с помощью которых реализована часть функций редактирования. При WYSIWYG-редактировании контент книги преобразуется в динамический HTML, с которым и работают основные и дополнительные Java-скрипты.

После запуска FictionBook Editor появляется рабочее окно.

Вверху находится стандартное меню и панель инструментов. Под ними располагается панель линков, с помощью которой можно присваивать имена (метки) элементам книги, а также делать ссылки и сноски.

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

Слева от главного окна находится панель Document Tree, в котром отображается древовидная структура документа. С помощью ее можно быстро перейти в нужный элемент книги.

И, внизу, служебная строка. Там выводится структура текущего редактируемого элемента (например: body/section/p) или сообщения валидатора.

Пройдемся по пунктам меню.

В меню File, кроме стандартных New, Open, Save, есть команда Validate (F8). При вызове ее документ проверяется на соответствие спецификации schema. Если при этом были обнаружены ошибки, то программа автоматически переходит в режим редактирования исходника (Source), устанавливая курсор на 1–2 строки ниже «проблемной» строки.

Маленькое замечание по поводу сохранения файла. Пункт Save предлагает довольно большой выбор кодировок. Но при всем богатстве выбора, альтернатива сводится к двум вариантам: utf-8 и windows-1251.

Cчитается, что UTF-8 обеспечивает книге бОльшую кроссплатформеннность, нежели windows-1251, но, при этом, архив с книгой «весит» заметно больше. Процентов этак на 10–15.

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