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

Тут можно читать бесплатно Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство (pre-release). Жанр: Компьютеры и Интернет / Прочая околокомпьтерная литература, год неизвестен. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте «WorldBooks (МирКниг)» или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство (pre-release)

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

Прочтите описание перед тем, как прочитать онлайн книгу «Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство (pre-release)» бесплатно полную версию:
Книга предназначена для пользователей, желающих самостоятельно создавать и редактировать электронные книги в популярном формате FictionBook. Подробно описан сам формат FB и программные средства, предназначенные для работы с ним.

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

Михаил Кондратович - Создание электронных книг в формате FictionBook 2.1: практическое руководство (pre-release) - читать книгу онлайн бесплатно, автор Михаил Кондратович

Более близкое знакомство выявило следующее. Имеется  файл 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=/<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\/a\x9B/) {|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 в Проводнике и, щелкнув правой клавишей мыши, производить их верификацию прямо из Проводника. Правда, в Windows Vista они работать не будут.

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

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

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

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

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

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

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

Перейти на страницу:
Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.
Комментарии / Отзывы
    Ничего не найдено.