Ларин (rusec) wrote,
Ларин
rusec

Category:

FB2 => HTML

Взято c Либрусека. Комментарии приветствуются.

В библиотеке появилось достаточно нормально сверстанных FB2, назрела необходимость в нормальном конверторе для онлайн-чтения.
К моему удивлению, поиск в интернете ничего не дал. Единственный как-то работающий вариант прост
(system "xsltproc -o $HTML FB2_2_html.xsl $FB2"), но не обрабатывает картинки. А карты иногда бывают полезны. Ужас.
Пришлось писать свой конвертер.

Для начала зарылся в глубь FB2_2_html.xsl (это как-бы официальное описание fb2-html, как я понял). Такое ощущение, что xsl разрабатывался роботами для роботов. Живому человеку там делать нечего. Так меня не тошнило лет десять, со времен изучения win32api.
Маленький пример. Надо нам добавить разрыв строки, <br> на html, он же <empty-line /> на fb2 (чем им <br> не угодил? Ну, там много необъяснимых странностей.)
На перле это выглядит примерно так:

print '<br>' if /<empty-line/;

На других вменяемых языках обработки текста чуть хуже, но в сущности похоже.
На xsl же:

<xsl:template match="fb:empty-line">
 <xsl:text disable-output-escaping="yes">&lt;br&gt;</xsl:text>
</xsl:template>

Как говорится, почуствуйте разницу - три строчки абракадабры вместо одной читабельной. Видимо, это слишком сложная для xsl операция - замена тэга.
Вывод - xsl для обработки xml абсолютно непригоден. Как, прости господи, фортран какой-нибудь. Вопрос. А зачем он вообще нужен-то?

В результате из 400 строк и 15 килобайт нечитаемого xsl получилось 200 строк перла, из которых половина - пустые, весом в 5 кило.

Теперь к делу.
Пока сделано так:
Аннотация выкидывается. Нечего ей делать внутри книжки, она нужна до чтения, для выбора книги, а не во время.
Оглавление располагается в конце книги. Идея расмещать оглавление в начале мне кажется порочной. В большинстве случаев оно не нужно, а если понадобилось - всегда можно нажать CtrlEnd.
Сноски опять же в конце. Кому понадобится - кликнет, кто и так понял - читает дальше. На то она и сноска, чтоб не отсвечивать.
Картинки вытаскиваются в отдельные файлы и в html проставляются абсолютные ссылки - даже если его утащить на локальный комп, картинки всё равно откроются.
Обложка вставляется в начало книги. Сильно сомневаюсь в её нужность, честно говоря.
Просьба ко всем - вдумчиво просмотреть что получается из сложносвёрстанных книг и об обнаруженных глюках доложиться.

Tags: lib.rus.ec, Функциональность
Subscribe

  • Продолжение планомерного развития

    Взято с Либрусека. 1. В списках книг (/new, /a/ID, /s/ID, /g/GENRE, /stat/, /polka) добавлены и расширены url-фильтры: 1.1 можно задавать…

  • Логотип

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

  • Добавление обложек

    Взято с Либрусека. Сделал кнопку (добавить обложку), около (создать/исправить аннотацию и тэги). Обложки можно добавлять из книги, если в ней…

  • Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 23 comments

  • Продолжение планомерного развития

    Взято с Либрусека. 1. В списках книг (/new, /a/ID, /s/ID, /g/GENRE, /stat/, /polka) добавлены и расширены url-фильтры: 1.1 можно задавать…

  • Логотип

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

  • Добавление обложек

    Взято с Либрусека. Сделал кнопку (добавить обложку), около (создать/исправить аннотацию и тэги). Обложки можно добавлять из книги, если в ней…