My favorites | Sign in
Project Home Downloads Wiki Issues Source
Project Information
Members
Featured
Downloads

О программе FB2 Toolbox

Программа предназначена для эффективного переименования, перемещения и перекодирования файлов fb2. Изначально была написана "для себя", но впоследствии я решил поделиться ей с друзьями, слегка доработав и протестировав на огромном количестве книг.

ВНИМАНИЕ: Теперь за обновлениями можно следить в Фейсбуке. Там же можно оставлять комментарии. Официальная страница: http://www.facebook.com/FictionBookToolbox

Что умеет делать FB2 Toolbox:

  • Быстрое распознавание метаданных файлов FB2 (считывается только заголовок)
  • Возможность работы с вложенными каталогами
  • Поддержка неограниченного количества профилей для копирования/переименования файлов
  • Поддержка таблиц замены символов/строк для каждого профиля (например для транслита)
  • Поддержка неограниченного количества кодировок для перекодирования файлов (все поддерживаемое системой Windows, от Unicode до KOI8-r, задается пользователем)
  • Поддержка неограниченного количества пользовательских команд (для выполнения операций над файлами)
  • Поддержка пользовательского переименования жанров
  • Поддержка работы с архивами .FB2.ZIP
  • Тестирование файлов FB2 на соответствие стандарту 2.1

История изменений

Версия 1.6 от 14 марта 2012

  • Добавлена дополнительная проверка при тестировании на соответствие стандарту. Теперь, помимо стандарнтого соответствия спецификации, определяются пустые тэги, неверные и пустые ссылки. Так же определяются вложения (например изображения) на которых нет ссылок в документе.
  • Обновлена библиотека для работы с архивами.

Версия 1.5 от 14 ноября 2011

  • Добавлен запрос на перезапись/пропуск файла, если файл с таким именем уже существует. Можно запомнить ответ для всей операции.
  • Переработаны профили для формирования пути/имени файла. Теперь они стали намного проще и короче в записи.
  • Добавлен отдельный раздел для транслита.
  • Все профили автоматически предлагаются в двух вариантах (обычный и транслит).

Версия 1.4 от 31 августа 2011

  • Добавлена возможность использования инициалов при формировании пути / переименовании файлов.

Версия 1.3 от 1 августа 2010

  • Добавлена возможность тестирования FB2 файлов на соответствие стандарту FB2 v2.1
  • Исправлено перекодирование (символы, отсутствующие в новой кодировке, будут кодированы по стандарту &#XXXX;)
  • Исправлен небольшой баг с распознованием жанров.

Версия 1.2 от 30 июля 2010

  • Добавлена возможность прерывать длительные операции (по клавише Esc или нажав кнопку в строке состояния). FB2 Toolbox попросит либо подтвердить отмену, либо продолжить выполнение текущей операции.
  • Добавлена возможность переименования файлов .zip в .fb2.zip во всех каталогах начиная с выбранного (меню Прочее/Переименовать .zip в .fb2.zip)
  • Добавлено 2 новых примера профилей для переименования (включающих в себя Жанр)
  • Исправлено несколько мелких багов.

Версия 1.1.1 от 28 июля 2010

  • Исправлен небольшой баг с распаковкой архивов (некорректно определялись имена извлеченных файлов).

Версия 1.1 от 28 Июля 2010

  • Добавлена работа с архивами .FB2.ZIP (допускается только один файл FB2 в zip-архиве). Работа с программой не изменилась, с архивами можно делать все то же что и а fb2-файлами. Например если запустить перекодирование, FB2 Toolbox на лету распакует архив в память, перекодирует и сохранит обратно в архив. При переименовании изменяется только имя файла архива (FB2 файл внутри архива переименован не будет).
  • Добавлена глобальная конфигурация для подстановки символов в путях/именах файлов (не зависимо от профиля). Полезно чтобы не повторять заново в каждом профиле замену символов недопустимых в именах файлов.

Версия 1.0 от 21 Июля 2010

  • Первая официальная версия

Программа имеет простой и понятный интерфейс на русском языке.

Для работы требуется установленный Microsoft .NET Framework 2.0

Disclaimer: Я готов выслушать предложения по улучшению программы и исправлять возможные ошибки, но помните, что я никому ничего не должен. Любая грубость будет проигнорирована. Нравиться - пользуйтесь, не нравиться - не пользуйтесь.


Начало работы с FB2 Toolbox

Вот так выглядит интерфейс программы FB2 Toolbox:

Работа с FB2 Toolbox

В общем случае, работа с программой предельно проста:

  • добавляем файлы (или каталоги с файлами) через меню Список/Добавить...
  • отмечаем "птичками" файлы над которыми требуется произвести действия (или Список/Отметить все)
  • выбираем нужное действие из меню Действия
  • наблюдаем за протоколом выполнения в нижней части главного окна программы

Отмеченные, выделенные файлы и текущий файл

FB2 Toolbox различает отмеченные (выделенные "птичками" записи файлов) и выделенные файлы (выделенные синим в списке файлов). Это сделано для удобства, хотя и может привести в некоторому недоумению вначале.

Все операции в меню Действия выполняются только над отмеченными файлами, выделение игнорируется. Это позволяет спокойно отмечать файлы для выполнения какого-либо действия, не заботясь о поддержании выделения (веделение слишком легко сбросить).

Выделение используется для быстрой отметки (или снятия отметки). Например, можно легко отметить файлы из одной серии следующим образом:

  1. Кликнуть по группе "Толстой: Война и Мир" (это приведет к выделению всех файлов в группе, см. пример выше)
  2. Не снимая выделение поставить (или снять) отметку с одного из выделенных файлов
  3. Все выделенные файлы будут отмечены (или отметка будет снята)

Текущий файл это одиночный выделенный файл, над которым можно производить "быстрые действия" кликнув на нужный файл правой кнопкой мыши. Появившееся контекстное меню позволяет выполнить действия над этим одним файлом, не затрагивая отметки. Это сделано для того, чтобы можно было быстро открыть или отредактировать файл, без необходимости перезагружать список файлов.

Действия над отмеченными файлами

Отмеченными считаются файлы, которые выделены "птичкой" слева от иконки файла. Отметить файл с ошибками не получиться.

Изменение кодировки отмеченных файлов

FB2 Toolbox позволяет перекодировать fb2 файлы в выбранную пользователем кодировку. Изменение кодировки доступно через меню Действия/Перекодировать в/(кодировка). Перекодирока будет произведена только для файлов, у которых кодировка не совпадает с выбранной.

Перемещение отмеченных файлов

Одно из основных назначений FB2 Toolbox - перемещение файлов согласно выбранному Вами профилю. Перемещение доступно через меню Действия/Переместить/Профиль: XXX. FB2 Toolbox запросит куда переместить файлы. Если при перемещении файлов образуются пустые каталоги, они будут удалены автоматически.

Копирование отмеченных файлов

Копирование файлов аналогично перемещению (естественно, FB2 Toolbox не будет удалять файлы после копирования) и доступно через меню Действия/Копировать/Профиль: XXX. FB2 Toolbox запросит куда копировать файлы.

Переименование отмеченных файлов

Частным случаем использования гибких профилей является возможность переименования только имени файла (без копирования или перемещения). Это удобно если у Вас есть своя система хранения файла в различных каталогах и Вы хотите изменить только имена файлов, не меняя структуры каталогов. Переименование доступно через меню Действия/Переименовать на месте/Профиль: XXX.

Архивирование отмеченных файлов

Архивирование файлов позволяет запаковать файлы .fb2 в zip-архив с тем же именем. Каждый файл будет запакован в отдельный архив с тем же именем и расширением .fb2.zip После успешной архивации файл .fb2 будет удален.

Распаковка отмеченных файлов

Распаковка файлов позволяет извлечь файлы .fb2 из .fb2.zip-архива. После успешной распаковки файл .fb2.zip будет удален.

Действия над текущим файлом

Действия над текущим файлом доступны после вызова контекстного меню (щелчок правой кнопкой мыши на файле в окне FB2 Toolbox).

Открыть текущий файл

"Запускает" файл fb2, используя зарегистрированное в системе приложение для файлов с расширением fb2.

Выбрать текущий файл в проводнике

Открывает Проводник (Explorer), файл с книгой будет автоматически выделен. Позволяет легко найти файл на диске.

Выбрать каталог текущего файла в проводнике

Открывает Проводник (Explorer), каталог в котором расположена книга будет автоматически выделен.

Команды текущего файла

Команды для текущего файла задаются пользователем в файле конфигурации. В качестве примера в поставку включена команда редактирования файла в FictionBook Editor (FBE). Обратите внимание, что при выполнении команд из контекстного меню, FB2 Toolbox будет не доступен до тех пор, пока указанная команда не будет выполнена (или не будет закрыто запущенное приложение), а затем автоматически перечитает файл.

Наиболее простым примером является вызов программы FBE для редактирования файла. Можно открыть файл в FBE, внести изменения, сохранить, закрыть FBE и изменения будут автоматически "подхвачены" FB2 Toolbox.

Считать заново

Позволяет считать заново информацию из файла. Полезно в случае когда Вы изменяете файл минуя команды FB2 Toolbox, например вручную редактируя файл в notepad.

Конфигурация FB2 Toolbox

Кодировки

FB2 Toolbox поддерживает все стандарты кодировок для XML-файлов (fb2-формат отностися к стандарту XML). Список доступных кодировок настраивается в файле конфигурации и имеет следующий формат:

<encodings indentedFormatting="true" compressionEncoding="utf-8">
  <encoding name="windows-1251"/>
  <encoding name="utf-8"/>
  <encoding name="utf-16"/>
  <encoding name="windows-1252"/>
</encodings>

Список можно дополнять и изменять, количество элементов не ограничено (но все же не рекомендую добавлять больше 20-ти элементов - трудно будет ориентироваться в меню).

Аттрибут indentedFormatting используется для включения или отмены форматирования файлов при перекодировании. При indentedFormatting "true" файл fb2 будет приведен к читаемому виду, с отступами и переносом строк (рекомендую). Если установить значение в "false", результирующий файл будет в одну строку, без переносов, но на 3-4% меньше.

Аттрибут compressionEncoding используется при архивировании/распаковке файлов. Рекомендуется его не менять, для корректной работы с кириллическими и другими не-латинскими именами файлов. К сожалению в Windows Explorer имена файлов в UTF-8 отображаются некорректно. WinZIP и WinRAR работают корректно.

Название кодировки (аттрибут name) автоматически заменяется на читаемый текст, то есть cp866 будет выглядеть как Cyrillic (DOS) в англоязычной системе Windows.

Не обязательно работать с кириллицей, например можно добавить Иврит (Windows)

<encoding name="windows-1255"/>

Хотя тестирования Иврита я не проводил, перекодирование должно работать. Не знаю как будут отображаться символы в самой программе.

Или несколько примеров экзотических кодировок:

Русский КОИ-8 (Unix)

<encoding name="KOI8-R"/>

Русский (DOS)

<encoding name="cp866"/>

Профили

FB2 Toolbox поддерживает гибкую систему переименования файлов fb2. Профили переименования находятся в файле конфигурации и задаются пользователем. Количество профилей не ограничено.

Пример профиля

Для начала рассмотрим пример структуры профиля:

<renameProfiles>
  <profile name="Автор/Серия/Автор - Серия Номер - Название"
    path="(AuthorLastName)|, (AuthorFirstName)|\(SequenceName)"
    fileName="(AuthorLastName)| (AuthorFirstName)| - (SequenceName)| (SequenceNr)| - (Title)" />

  <profile name="Жанр/Автор/Серия/Автор - Серия Номер - Название"
    path="(Genre)|\(AuthorLastName)|, (AuthorFirstName)|\(SequenceName)"
    fileName="(AuthorLastName)| (AuthorFirstName)| - (SequenceName)| (SequenceNr)| - (Title)" />

  <profile name="А/Автор/Серия/Автор - Серия Номер - Название"
    path="(AuthorLastName1)|\(AuthorLastName)|, (AuthorFirstName)|\(SequenceName)"
    fileName="(AuthorLastName)| (AuthorFirstName)| - (SequenceName)| (SequenceNr)| - (Title)">
    <characterSubstitution>
      <char from="&lt;" to=""/>
      <char from="&gt;" to=""/>
      <char from=":" to=" "/>
      <char from="ё" to="е"/>
      <char from="  " to=" " repeat="3"/>
      ...
    </characterSubstitution>
  </profile>

  <globalCharacterSubstitution>
    <char from="&lt;" to=""/>
    <char from="&gt;" to=""/>
    <char from=":" to=" "/>
    <char from=";" to=""/>
    ...
  </globalCharacterSubstitution>
  ...
</renameProfiles>

Имя профиля (аттрибут name) используется FB2 Toolbox для отображения в меню, поэтому рекомендуется использовать имена которые легко распознать впоследствии. Допускается использование русского языка.

Для начала рассмотрим как FB2 Toolbox использует такой профиль при переименованиии.

<profile name="Автор/Серия/Автор - Серия Номер - Название"
  path="(AuthorLastName)|, (AuthorFirstName)|\(SequenceName)"
  fileName="(AuthorLastName)| (AuthorFirstName)| - (SequenceName)| (SequenceNr)| - (Title)"
/>

Предположим, что мы имеем файл со следующими данными:

Автор: Василий Головачёв
Серия: Смутное время
Номер в серии: 1
Название: Бич времен

Формирование пути

Сначала рассмотрим часть path которая отвечает за формирование относительного пути к файлу. path состоит из фрагментов, разделенных вертикальной чертой |, которые в совокупности и формируют относительный путь.

path="(AuthorLastName)|, (AuthorFirstName)|\(SequenceName)"
(AuthorLastName)

Эта часть подставляет фамилию автора вместо (AuthorLastName) если в файле книги указана фамилия автора.

Путь: Головачёв

, (AuthorFirstName)

Эта часть подставляет запятую + пробел + имя автора вместо (AuthorFirstName) если в файле книги указана фамилия автора.

Путь: Головачёв, Василий

\(SequenceName)

Эта часть подставляет обрантый слэш + название серии вместо (SequenceName) если в файле книги указано название серии. Поскольку серия в нашем примере присутствует, путь примет следующее значение:

Путь: Головачёв, Василий\Смутное время

Формирование имени файла

Следующий шаг это формирование имени файла (элемент fileName), аналогично формированию пути:

fileName="(AuthorLastName)| (AuthorFirstName)| - (SequenceName)| (SequenceNr)| - (Title)"
(AuthorLastName)

Имя файла: Головачёв

/* обратите внимание на пробел вначале строки */
 (AuthorFirstName)

Имя файла: Головачёв Василий

/* обратите внимание на пробел вначале строки */
 - (SequenceName)

Имя файла: Головачёв Василий - Смутное время

/* обратите внимание на пробел вначале строки */
 (SequenceNr)

Имя файла: Головачёв Василий - Смутное время 1

/* обратите внимание на пробел вначале строки */
 - (Title)

Имя файла: Головачёв Василий - Смутное время 1 - Бич времен

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

/* обратите внимание на пробел вначале строки */
 - (SequenceName)

Фрагмент может содержать более одного атрибута, все они должны быть определены в книге, в противном случае, фрагмент будет проигнорирован.

Список метаданных, которые можно использовать для подстановки:

  (Title) - название книги
  (Genre) - жанр
  (AuthorFirstName) - имя автора
  (AuthorLastName) - фамилия автора
  (AuthorMiddleName) - отчество автора
  (AuthorFirstName1) - первая буква имени автора
  (AuthorLastName1) - первая буква фамилии автора
  (AuthorMiddleName1) - первая буква отчества автора
  (SequenceName) - серия
  (SequenceNr) - номер в серии
  (Lang) - язык

Замена символов/строк

Итак, имя файла практически сформировано. Однако в нем могут встречаться спецсимволы, нежелательные символы или просто необходимо сделать поиск/замену фрагмента. Для этого в каждом профиле присутвуют разделы globalCharacterSubstitution и characterSubstitution:

<characterSubstitution>
  <char from="&lt;" to=""/>
  <char from="&gt;" to=""/>
  <char from=":" to=" "/>
  <char from="ё" to="е"/>
  <char from="  " to=" " repeat="3"/>
  ...
</characterSubstitution>

Раздел globalCharacterSubstitution управляет "глобальной заменой", то есть выполняется для всех профилей. Раздел characterSubstitution определяет правила переименования для конкретного профиля (профиля в котором определен characterSubstitution).

Этот раздел задает поиск строки определенной аттрибутом from каждого элемента char на значение аттрибута to. В нашем случае, буква ё будет заменена на е. Это сделано для удобства, так как при создании книг некоторые пишут ГоловачЁв, некоторые ГоловачЕв что приведет к тому что файлы одного автора попадут в разные каталоги.

В итоге FB2 Toolbox сформирует следующее относительное имя файла (расширение .fb2 будет добавлено автоматически):

Имя файла: Головачев, Василий\Смутное время\Головачев Василий - Смутное время 1 - Бич времен.fb2

Правила замены текста могут быть использованы и для переименования в транслит (замена русских букв английскими), в поставке FB2 Toolbox включены примеры транслита, так что велосипед изобретать не надо. Последнее что стоит отметить, поиск/замена используют чувствительные к регистру строки (а не только символы), то есть можно точно заменить несколько символов на один или несколько других или вообще удалить, используя пустую строку замены. Например следующий код заменяет двойные пробелы на одинарные, прогоняя эту операцию 3 раза.

<char from="  " to=" " repeat="3"/>

Команды

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

Количество команд не ограничено. Пример конфигурации команд ниже:

<commands>
  <checkedFiles>
    <command name="Конвертировать FB2 в EPUB" fileName="C:\FB2Epub\Fb2ePub.exe" arguments="&quot;{0}&quot;" onlyWithExtension=".fb2" createNoWindow="true"/>
  </checkedFiles>
  <focusedFile>
    <command name="Редактировать в FBE" fileName="C:\Program Files (x86)\FictionBook Editor\FBE.exe" arguments="&quot;{0}&quot;" onlyWithExtension=".fb2"/>
  </focusedFile>
</commands>

Рассмотрим формат записи команды конвертации:

<command name="Конвертировать FB2 в EPUB" fileName="C:\FB2Epub\Fb2ePub.exe" arguments="&quot;{0}&quot;" onlyWithExtension=".fb2" createNoWindow="true"/>

Аттрибут name определяет имя команды, значение этого атрибута появится в соответствующем меню.

Аттрибут fileName определяет приложение для запуска. В нашем примере это запуск конвертера Fb2ePub.

Аттрибут arguments определяет параметры для запущенного приложения. Строка "{0}" будет заменена на полное имя файла fb2.

Аттрибут onlyWithExtension позволяет ограничить выполнение команды только для файлов с заданным расширением. Например onlyWithExtension=".fb2" позволяет выполнить команду конветрации только для файлов в расширнием .fb2, но не для файлов .fb2.zip

Аттрибут createNoWindow позволяет скрыть запущенное приложение. Работает только для консольных приложений. Если Вы не хотите чтобы на каждый отмеченный файл выскакивала консоль, установите этот параметер в "true".

В этом примере будет запущен конвертер

C:\FB2Epub\Fb2ePub.exe

со следующими параметрами:

"имяфайла"

Обратите внимание, что по правилам XML, кавычки кодируются как &quot;

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

Важно: в зависимости от настроек системы, для выполнения команд может потребоваться запустить FB2 Toolbox с правами Администратора.

Жанры

Каждая книга fb2 может быть отнесена к одному или нескольким жанрам. В настоящее время, список жанров и их транслитерация строго определены стандартом fb2. Стандарт менялся от версии к версии, так что смело можно сказать что Вам прийдется встретиться не менее чем с сотней "жанров". Вокруг такого определения жанров постоянно разгораются дискуссии, что удобнее, что практичнее, как точнее...

Я считаю, что распознование более одного жанра - нерационально, так как не понятно как на них ссылаться позднее. Таким образом FB2 Toolbox считывает из файла только первый жанр и именно его можно использовать в правилах переименования файлов. Одна проблема, которую я для себя определил связана с тем, что 100 жанров на английском языке, маленькими буквами и без пробелов это просто нечитаемо. Для того чтобы упростить управление жанрами, FB2 Toolbox поддерживает "подстановку" для жанров. То есть вместо sf_fantasy можно использовать Фэнтези. Список подстановки для жанров задается в файле конфигурации и его можно изменять и расширять.

Вот фрагмент файла конфигурации, отвечающий за подстановку жанров:

<genreSubstitution>
  <!-- Жанры FB2 2.1 -->
  <genre from="sf_history" to="Альтернативная история"/>
  <genre from="sf_action" to="Боевая фантастика"/>
  <genre from="sf_epic" to="Эпическая фантастика"/>
  <genre from="sf_heroic" to="Героическая фантастика"/>
  <genre from="sf_detective" to="Детективная фантастика"/>
  <genre from="sf_cyberpunk" to="Киберпанк"/>
  ...
</genreSubstitution>

Естесственно аттрибут from указывает на жанр который надо заменить, а аттрибут to - на что заменить. Единственное ограничение - аттрибут from должен быть уникален, например следующая конфигурация приведет к ошибке программы (жанр sf_epic встречается дважды):

<genreSubstitution>
  <genre from="sf_epic" to="Эпическая фантастика"/>
  <genre from="sf_epic" to="Фантастика"/>
</genreSubstitution>

Используя подстановку жанров можно добиться их "объединения". Я использую такой трюк для того, чтобы "уменьшить" количество жанров (при использовании жанра как части пути по которому хранятся книги). Например, чтобы "объединить" несколько подразделов фантастики в один жанр Фантастика можно использовать следующую подстановку:

<genreSubstitution>
  ...
  <genre from="sf_action" to="Фантастика"/>
  <genre from="sf_epic" to="Фантастика"/>
  <genre from="sf_heroic" to="Фантастика"/>
  <genre from="sf_detective" to="Фантастика"/>
  ...
</genreSubstitution>

Чтобы отменить подстановку жанров, достаточно удалить все элементы genre или просто закомментировать их:

<genreSubstitution>
  <!-- 
  ...
  <genre from="sf_action" to="Фантастика"/>
  <genre from="sf_epic" to="Фантастика"/>
  <genre from="sf_heroic" to="Фантастика"/>
  <genre from="sf_detective" to="Фантастика"/>
  ...
  -->
</genreSubstitution>

Powered by Google Project Hosting