|
Project Information
Featured
Downloads
|
О программе FB2 ToolboxПрограмма предназначена для эффективного переименования, перемещения и перекодирования файлов fb2. Изначально была написана "для себя", но впоследствии я решил поделиться ей с друзьями, слегка доработав и протестировав на огромном количестве книг. ВНИМАНИЕ: Теперь за обновлениями можно следить в Фейсбуке. Там же можно оставлять комментарии. Официальная страница: http://www.facebook.com/FictionBookToolbox Что умеет делать FB2 Toolbox:
История измененийВерсия 1.6 от 14 марта 2012
Версия 1.5 от 14 ноября 2011
Версия 1.4 от 31 августа 2011
Версия 1.3 от 1 августа 2010
Версия 1.2 от 30 июля 2010
Версия 1.1.1 от 28 июля 2010
Версия 1.1 от 28 Июля 2010
Версия 1.0 от 21 Июля 2010
Программа имеет простой и понятный интерфейс на русском языке. Для работы требуется установленный Microsoft .NET Framework 2.0 Disclaimer: Я готов выслушать предложения по улучшению программы и исправлять возможные ошибки, но помните, что я никому ничего не должен. Любая грубость будет проигнорирована. Нравиться - пользуйтесь, не нравиться - не пользуйтесь.
Начало работы с FB2 ToolboxВот так выглядит интерфейс программы FB2 Toolbox: Работа с FB2 ToolboxВ общем случае, работа с программой предельно проста:
Отмеченные, выделенные файлы и текущий файлFB2 Toolbox различает отмеченные (выделенные "птичками" записи файлов) и выделенные файлы (выделенные синим в списке файлов). Это сделано для удобства, хотя и может привести в некоторому недоумению вначале. Все операции в меню Действия выполняются только над отмеченными файлами, выделение игнорируется. Это позволяет спокойно отмечать файлы для выполнения какого-либо действия, не заботясь о поддержании выделения (веделение слишком легко сбросить). Выделение используется для быстрой отметки (или снятия отметки). Например, можно легко отметить файлы из одной серии следующим образом:
Текущий файл это одиночный выделенный файл, над которым можно производить "быстрые действия" кликнув на нужный файл правой кнопкой мыши. Появившееся контекстное меню позволяет выполнить действия над этим одним файлом, не затрагивая отметки. Это сделано для того, чтобы можно было быстро открыть или отредактировать файл, без необходимости перезагружать список файлов.
Действия над отмеченными файламиОтмеченными считаются файлы, которые выделены "птичкой" слева от иконки файла. Отметить файл с ошибками не получиться. Изменение кодировки отмеченных файлов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="<" to=""/>
<char from=">" to=""/>
<char from=":" to=" "/>
<char from="ё" to="е"/>
<char from=" " to=" " repeat="3"/>
...
</characterSubstitution>
</profile>
<globalCharacterSubstitution>
<char from="<" to=""/>
<char from=">" 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="<" to=""/> <char from=">" 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=""{0}"" onlyWithExtension=".fb2" createNoWindow="true"/>
</checkedFiles>
<focusedFile>
<command name="Редактировать в FBE" fileName="C:\Program Files (x86)\FictionBook Editor\FBE.exe" arguments=""{0}"" onlyWithExtension=".fb2"/>
</focusedFile>
</commands>Рассмотрим формат записи команды конвертации: <command name="Конвертировать FB2 в EPUB" fileName="C:\FB2Epub\Fb2ePub.exe" arguments=""{0}"" onlyWithExtension=".fb2" createNoWindow="true"/>Аттрибут name определяет имя команды, значение этого атрибута появится в соответствующем меню. Аттрибут fileName определяет приложение для запуска. В нашем примере это запуск конвертера Fb2ePub. Аттрибут arguments определяет параметры для запущенного приложения. Строка "{0}" будет заменена на полное имя файла fb2. Аттрибут onlyWithExtension позволяет ограничить выполнение команды только для файлов с заданным расширением. Например onlyWithExtension=".fb2" позволяет выполнить команду конветрации только для файлов в расширнием .fb2, но не для файлов .fb2.zip Аттрибут createNoWindow позволяет скрыть запущенное приложение. Работает только для консольных приложений. Если Вы не хотите чтобы на каждый отмеченный файл выскакивала консоль, установите этот параметер в "true". В этом примере будет запущен конвертер C:\FB2Epub\Fb2ePub.exe со следующими параметрами: "имяфайла" Обратите внимание, что по правилам XML, кавычки кодируются как " Существует много небольших консольных приложений (приложений для "командной строки") для выполнения разных операций над файлами 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> |