Резюме. Если автору хватит терпения и энтузиазма довести разработку до конца, мы получим весьма приличный инструмент для наведения порядка в коллекции fb2-книг.
§ 7.4 Программа-библиотекарь MyHomeLib
Еще один библиотекарь для FB2-книг написали Алексей Пеньков и Николай Рыманов. Программа динамично развивалась, благополучно доросла до релиза и не собирается на этом останавливаться.
От других наработок эту софтину выгодно отличают простой и понятный, не перегруженный лишними функциями, интерфейс, стабильность работы, отменное быстродействие.
Книги можно сортировать по авторам, сериям и жанрам. Наличествует продвинутый поиск (закладка «Фильтр») по семи параметрам, с применением квази-SQL запросов. И, конечно же, полюбившиеся произведения можно отобрать в «Избранное». А впоследних версиях программы добавлиась возможность создавать пользовательские группы.
Но самая выдающаяся «фича» МyHomeLib — это, разумеется, управление коллекциями книг с известного сайта «Русская библиотека в Эквадоре» («Либрусек»). Администрация этой замечательной библиотеки настолько любезна, что предоставляет возможность скачивания всей коллекции книг в архивах, правда, немаленьких, по 5000-10000 книг. Вот с этими-то архивами и работает MyHomeLib.
Для этого в комплекте с инсталлятором программы поставляются файлы, с помощью которых можно легко воссоздать базу всех FB2-книг, входящих в библиотеку Либрусек. На момент написания книги эта библиотека включала около 115 000 книг более чем 20 000 авторов, общим «весом» за 20 гигабайт!
И, даже если у вас нет возможности скачать такой колоссальный объем данных, МyHomeLib может работать непосредственно с Либрусеком, on-line. Нужные книги будут скачиваться по мере необходимости.
Прилагающийся к программе подробный help исчерпывающе описывает все функции софтины. Что, кроме всего прочего, позволяет автору этой книги не утяжелять ее файл еще одним «самотужным» руководством пользователя.
Поражает, с какой взвешенностью авторы подходят к добавлению новых функций в свое детище. Ничего лишнего, только действительно необходимое.
Некоторый недостаток функционала прекрасно компенсируется возможностью создания пользовательских скриптов.
В общем, перед нами отличный пример продуманного, сбалансированного, и, главное, стопроцентно отвечающего своему назначению программного продукта.
§ 7.5 FB2Fix
Как следует из названия, основная задача этой утилиты — полная проверка FB2-файлов на валидность с возможностью их коррекции. Кроме того, автор, скрывшийся под претенциозным псевдонимом Gremlin II, наделил программу «талантами» работать с архивами, в том числе RAR и вложенными ZIP, использовать пользовательские спецификации XSD, транслитерировать имена файлов и переименовывать их по шаблону, заменять «непечатные» символов, автоматически конвертировать жанры из версии 2.0 в версию 2.1, и даже перекодировать книжки. Отдельным пунктом значится приведение в порядок невалидных книг из библиотеки Либрусек.
Возможна обработка как отдельных файлов, так и целых каталогов.
Утилита выполняет полную проверку на соответстие xml-файла книги спецификации (schema) FB2. Если книга не проходит проверку на валидность, FB2Fix пытается исправить ее. Это производится следующим образом. Вначале производится проверка всех тэгов. Не закрытые (или же лишенные открывающего дескриптора) тэги — закрываются. Также софтина пытается разобраться, с «висящими» в тексте символами «<» и «>» на предмет, элементы ли это тэгов или же просто огрехи работы конвертора. При этом программа, как и все «ишкуштвенные интилекты» не застрахована от ошибок. Отсюда мораль: после правки «проблемного» файла не пожалеть пару минут на сличение результата с оригиналом.
Все признанные огрехами «<» и «>» в тексте заменяются на < и >, как и положено по спецификации. Символы с кодами от 01 до 08 заменяются на «-», символы 0b, 0c и 0e — 0x1f на « ».
Сама утилита представляет собой консольное приложение. То есть, запуск ее возможен посредством использования командной строки («Command Prompt») с передачей рабочих параметров через нее.
Несмотря на это, для работы FB2Fix требуется наличие в системе Micro$oft .NET Framework 2.0. Также софтина может работать под Linux (с установленным Mono и пакет(ами) libmono-i18n{1,2}.0-cil).
Давайте познакомимся с FB2Fix поближе.
Скачайте и распакуйте архив в папку, Например, C:\FB2TOOLS\FB2FIX.
Создайте на диске (лучше в корне) две рабочие папки. Например INBOOK и OUTBOOK.
Войдите в папку FB2FIX. Для удобства, лучше все эти операции проделывать в каком-нибудь консольном файл-менеджере, например, Far Manager.
Забросьте в папку INBOOK с десяток книг FB2.
Теперь давайте запустим FB2Fix.
Вот так:
FB2Fix.exe D:\INBOOK /output:D:\OUTBOOK
Когда утилита отработает, загляните в папку OUTBOOK. Вы обнаружите там две папки — Bad и Good. Как нетрудно догадаться, первая предназначена для книг, которые не прошли проверку и, к тому же, их не удалось исправить. В папку Good отправляются все остальные.
Итак, алгоритм работы в общих чертах ясен. Кладем книги, нуждающиеся в проверке, в папку INBOOK и запускаем программу. Кстати, выходную папку можно и не указывать, тогда директории Bad и Good будут созданы в той же папке, где находится FB2Fix.
К сожалению, для тестирования программы мне просто неоткуда было взять подходящее количество невалидных книг, так что пришлось импровизировать. То есть создавать файлы с ошибками вручную.
Незакрытый тэг body оказался проге не по зубам. Тэги descripion и cite она «исправила», вставив закрывающий тэг в самый конец файла. И перед удаленным открывающим тэгом <p> корректор спасовал. А вот с конструкцией <strong><emphasis></strong></emphasis> программа справилась «на ура». Незакрытые тэги <stanza> <p> FB2Fix также исправил как положено. А незакрытый тэг <i> софтина просто удалила.
В то же время FB2Fix позволяет себе «не замечать» некритичные ошибки. Например, неправильно оформленные сноски, когда метка поставлена не на секцию, а на ее заголовок, или вообще абзац.
В description успешно прошедшей проверку книги добавляется строка
<custom-info info-type="fb2fix-status">Passed</custom-info>
а в случае внесения правок версия книги увеличивается на 0.1. Правда, почему-то не всегда.
При повторном прогоне все работает корректно: строка в custom-info «размножаться» не будет.
В общем, если сделать скидку на «искусственность» тестирования (ну какой такой конвертор создаст fb-шку c незакрытым body или description) то можно признать, что со своими обязанностями корректор справляется вполне успешно.
Теперь пройдемся по ключам программы. Их не так уж и много, но все же может показаться, что больше, чем нужно. Некоторые ключи имеют сокращенную форму.
Ключ /compress[+|-] (сокращенная форма /c) — позволяет разрешить/запретить сжатие книжек «на выходе» алгоритмом ZIP. По умолчанию сжатие разрешено. Таким образом
FB2Fix.exe D:\INBOOK /c-
заставит FB2Fix записывать прошедшие обработку книжки в неупакованном виде.
Просматривая обработанные книжки, вы можете заметить, что заголовок книги отформатирован отступами. За эту фичу отвечает ключ /indentheader[+|-]. Как можно догадаться, по умолчанию опция включена.
Можно также заставить FB2Fix аналогично форматировать body книги. При помощи ключа /indentbody[+|-]. Само собой, со значением «+».
FB2Fix.exe D:\INBOOK\mybook2.fb2 /indentbody+
Как уже говорилось, версия документа, в случае внесения правок, увеличивается на 0.1. Если понадобится отключить эту опцию, то вам поможет ключ /incversion[+|-]. С модификатором «-».