-
Notifications
You must be signed in to change notification settings - Fork 0
Шаблоны
Шаблоны предназначены для описания формата имени файла и структуры папок на основании информации из метаданных, содержащихся в файлах формата fb2 и epub. Новое имя файла и структура папок формируется на основании трех шаблонов:
- шаблон имени автора, либо имен авторов, если в метаданных указано несколько авторов
- шаблон имени переводчика, либо имен переводчиков, если в метаданных указано несколько переводчиков
- результирующий шаблон имени файла и структуры папок
Шаблоны могут содержать простой текст, переменные, содержащие значения определенных тегов метаданных и функции. Простой текст включается в шаблон "как есть", переменные и функции ограничиваются символами {} (фигурные скобки). Например,
{title} - переменная, содержащая название книги
{lst(authors)} - обращение к функции list для формирования списка авторов книги
В шаблонах не разрешается использовать символы \ (обратная косая черта), ' (одинарная кавычка).
- {firstname} - имя
- {middlename} - отчество
- {lastname} - фамилия
- {f} - инициал имени
- {m} - инициал отчества
- {title} - название книги.
- {author} - имя автора книги, сформированное по соответствующему формату шаблона. Если авторов несколько, то содержит имя первого в списке автора.
- {authors} - список (массив) всех авторов книги, имена которых сформированы по соответствующему шаблону.
- {series} - Серия книги
- {seriesindex} - Индекс книги в указанной серии
- {abbrseries} - Аббревиатура серии книги (составляется из первых букв каждого слова серии)
- {translator} - имя переводчика книги, сформированное по соответствующему формату шаблона. Если переводчиков несколько, то содержит имя первого в списке переводчика.
- {translators} - список (массив) всех переводчиков книги, имена которых сформированы по соответствующему шаблону.
- {bookid} - уникальный идентификатор книги
- {md5} - контрольная сумма файла в формате md5
Все строковые переменные представляют собой объекты, для которых доступны методы, позволяющие модифицировать значение данной переменной. Строковыми переменными являются все вышеперечисленные, за исключением {authors} и {translators}.
Для обращения к методу необходимо указать его имя через точку после имени переменной. Далее указать скобки (). Если метод требует дополнительные параметры, они указываются в скобках через запятую.
{variable.method()}
{variable.method(param1[,param2...paramN])}
Например,
{author.upper()}
{seriesindex.zfill(2)}
Доступны следующие методы:
- capitalize() - преобразует первый символ строки к верхнему регистру, остальные символы - к нижнему
- lower() - преобразует символы строки к нижнему регистру
- lstrip() - обрезает ведущие пробелы слева
- rstrip() - обрезает конечные пробелы справа
- strip() - обрезает ведущие и конечные пробелы
- swapcase() - Меняет местами регистры символов - символы в верхнем регистре преобразуются к нижнему регистру и наоборот
- title() - преобразует первый символ каждого слова к верхнему регистру
- upper() - преобразует символы строки к верхнему регистру
- zfill(lenght) - дополняет строку ведущими нулями до указанной длины lenght. Например, {seriesindex.zfill(2)} дополнит ведущим нулем индекс серии до двух символов, типа "01", "02" и т.д.
Полный список доступных методов можно посмотреть в документации по языку программирования Python. Вы должны четко представлять, для чего вы используете методы, не описанные в настоящей документации.
Также вы можете обращаться к отельным символам строковой переменной, как элементу массиву. Например:
- {author[0]} - вернет первый символ имени автора
- {author[1:3]} - вернет символы со второго по четвертый
- {author[1:]} - вернет символы со второго по последний
Вызов: path(path_elem1[, path_elem2,...path_elemN])
Назначение: Включает в шаблон корректную структуру папок на основании списка переданных элементов.
Например,
{path(author[0], author, series)}
для книги Азимова "Основание и Империя" из серии "Основание" вернет:
А\Азимов А\Основание\
а для книги "Сами боги" без серии:
А\Азимов А\
Вызов: iif(condition, if_value[, else_value])
Назначение: Включает в шаблон if_value, если указанное условие condition выполняется и else_value, если указанное условие не выполняется. else_value - необязательный параметр. Если он не указан, функция возвращает пустую строку при невыполнении указанного условия.
Например,
{iif(translator, "(перевод " + translator + ")")}
Для книги, где указан переводчик Сосновская, в шаблон будет включена строка "(перевод Сосновская)". Для книг, где не указан переводчик, в шаблон ничего не будет добавлено.
Вызов: lst(list[, delimiter])
Назначение: функция позволяет включить в шаблон элементы указанного списка, разделенных указанным разделителем delimiter. delimiter - необязательный параметр. По умолчанию список разделяется запятыми.
Например,
{lst(authors)}
Для книги братьев Стругацких (если в метаданных указано два автора отдельно) в шаблон будет включена строка "Стругацкий Аркадий, Стругацкий Борис".
Формат каждого имени зависит от указанного шаблона имени автора.
Вызов: fe(list[, suffix])
Назначение: функция позволяет включить в шаблон первый элемент указанного списка. Если указано значение параметра suffix, то он добавляется в конце возвращаемого значения, при условии, что количество элементов в списке больше одного.
Например,
{fe(authors, " и др")}
Для книги Айзека Азимова включит в шаблон "Азимов А.", а для книг Азимова с соавторами - "Азимов А. и др".
Формат имени автора зависит от соответствующего шаблона.
{firstname} {lastname}
- Имя Фамилия
{lastname} {f}
- Фамилия И
{lastname}{iif(f, " " + f)}{iif(m, ". " + m)}
- Универсальный шаблон для Фамилия И. О и Фамилия И
Примеры ниже предполагают, что для имени автора используется шаблон
{lastname} {f}
, для имени переводчика{lastname}
.
Простой шаблон
{author}. {title}
Азимов А. Основание и империя.fb2
Азимов А. Все боги.fb2
Разложить книги по авторам, сериям, внутри серий книги пронумеровать
{path(author,series)}{iif(seriesindex, seriesindex.zfill(2) + ". ")}{title}
Азимов А\Основание\04. Основание и империя.fb2
Азимов А\Все боги.fb2
Указать, что у книги несколько авторов, указать фамилию переводчика
{fe(authors, "и др")}. {title}{iif(translator, " (пер. " + translator + ")")}
Азимов А. Основание и империя (пер. Сосновская).fb2
Шекли Р. и др. Сборник научной фантастики (пер. Гальперина).fb2
Указать всех авторов и всех переводчиков
{lst(authors)}. {title}{iif(len(translators) > 0, " (перевод " + lst(translators) + ")")}
Шекли Р., Азимов А., Брэдбери Р. Сборник научной фантастики (перевод Гальперина, Иорданский, Смирнов, Скороденко, Санин, Короткова, Корчагин, Тогоева, Черняев, Белкин).fb2
Будьте внимательны, включая всех авторов и переводчиков в имя файла - операционные системы имеют ограничения на длину имени файла!
- Шаблон имени автора
{lastname} {f}
- Шаблон имени переводчика
{lastname}
- Шаблон имени файла
{author}. {title}{iif(translator, " (пер. " + translator + ")")}