Скрипты FictionBookEditor (FBE), написанные мной – Sclex’ом

Мой e-mail: sclex2@gmail.com
Топик про скрипты на форуме fictionbook.org: вот он

(отмечу, что с тестированием и идеями по развитию скриптов много помог в свое время jurgennt)

Обратите внимание! Данная страница (scripts.fictionbook.org) уже долгое время не обновлялась. Вся переписка по скриптам FBE и выкладывание новых версий скриптов происходят в последнее время в гугл-группе fiction-book-editor. Последние версии скриптов заливаются в хранилище исходников SeNS-а на GitHub.com. Там же можно сообщать о багах FBE и его скриптов.

Поскольку скрипты имеют достаточно небольшой объем, размеры файлов в списке ниже не указаны. Ни один архив, содержащий один скрипт или один набор скриптов, не весит больше 30 КБ.


Добавление сносок и комментариев v2.6

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

• Унификация сносок

• Добавление сноски со вводом

• Добавление сноски с переходом

• Добавление последней сноски

• Добавление последней сноски со вводом

• Добавление последней сноски с переходом

• Добавление комментария

• Унификация комментариев

• Добавление комментария со вводом

• Добавление комментария с переходом

• Добавление последнего комментария

• Добавление последнего комментария со вводом

• Добавление последнего комментария с переходом

• Унификация сносок (с удалением неиспользуемых секций сносок)

• Унификация комментариев (с удалением неиспользуемых секций комментариев)

Сохранить Описание

Примечания и комментарии из скобок v2.2

• Примечания из []

• Примечания из {}

• Примечания из [! !]

• Примечания из [~ ~]

• Примечания из скобок, заданных регэкспами

• Примечания из скобок, заданных простым текстом

• Комментарии из []

• Комментарии из {}

• Комментарии из [! !]

• Комментарии из [~ ~]

• Комментарии из скобок, заданных регэкспами

• Комментарии из скобок, заданных простым текстом

Сохранить Описание

Заголовки картинок в подписи v1.1

• Заголовок картинки в подпись (strong)

• Заголовок картинки в подпись (emphasis)

• Заголовок картинки в подпись (subtitle)

• Заголовок картинки в подпись (subtitle, strong)

• Заголовок картинки в подпись (subtitle, emphasis)

Сохранить Описание

Интерактивная ликвидация разрывов абзацев v3.0

Сохранить Описание

Разметка подзаголовков, чистка пустых строк v3.2

• Разметка подзаголовков, чистка пустых строк

• Разметка подзаголовков, чистка пустых строк, удаление жирности в заголовках

• Разметка подзаголовков, чистка пустых строк; удаление жирности в заголовках по запросу

• Разметка подзаголовков, чистка пустых строк, удаление жирности и курсива в заголовках

Сохранить Описание

Пустые строки вокруг картинок v1.4

Сохранить Описание

Удаление неиспользуемых вложений v1.0

Сохранить Описание

Ссылочные переходы v1.6

• Переход по ссылке

• Возврат на ссылку

• Переход по ссылке или возрат на ссылку

Сохранить Описание

Таблица символов v1.2

Сохранить Описание

Унификация вложений и картинок v1.2

Сохранить Описание

Обновление картинок и списков обложек v1.0

Сохранить Описание

Удалить все вложения из книги v1.3

Сохранить Описание

Тест сносок v1.2

Сохранить Описание

Удаление возвратных ссылок v1.3

Сохранить Описание

Смена регистра v1.1

• В верхний регистр

• В нижний регистр

Сохранить Описание

Вставка ссылки на midi-файл v1.0

Сохранить Описание

Разбиение на секции v1.3

Сохранить Описание

Обработка кавычек v2.8

• Расстановка елочек и лапок

• Расстановка елочек и лапок (начиная с 1-го уровня)

• Расстановка елочек и лапок (начиная со 2-го уровня)

• Расстановка елочек и лапок (с позиции курсора)

• Расстановка елочек и лапок (с позиции курсора, начиная с 1-го уровня)

• Расстановка елочек и лапок (с позиции курсора, начиная со 2-го уровня)

• Переход на след. елочки

• Переход на пред. елочки

• Переход на пред. лапки

• Переход на след. лапки

• Переход на пред. прямые кавычки

• Переход на след. прямые кавычки

• Переход на пред. прямые кавычки, елочки или лапки

• Переход на след. прямые кавычки, елочки или лапки

• Расстановка только елочек

Сохранить Описание

Поиск форматирования v1.0

• Переход на предыдущий курсив

• Переход на следующий курсив

• Переход на предыдущий абзац с курсивом

• Переход на следующий абзац с курсивом

• Переход на предыдущую жирность

• Переход на следующую жирность

• Переход на предыдущий абзац с жирностью

• Переход на следующий абзац с жирностью

• Переход на предыдущий верхний индекс

• Переход на следующий верхний индекс

• Переход на предыдущий абзац с верхним индексом

• Переход на следующий абзац с верхним индексом

• Переход на предыдующий нижний индекс

• Переход на следующий нижний индекс

• Переход на предыдущий абзац с нижним индексом

• Переход на следующий абзац с нижним индексом

• Переход на предыдущее зачеркивание

• Переход на следующее зачеркивание

• Переход на предыдущий абзац, содержащий зачеркивание

• Переход на следующий абзац, содержащий зачеркивание

• Переход на предыдущий код

• Переход на следующий код

• Переход на предыдущий абзац, содержащий код

• Переход на следующий абзац, содержащий код

Сохранить Описание

Превращение внешних ссылок в текст v1.1

Сохранить Описание

Точка, тире, буква v1.3

Сохранить Описание

Управление структурой секций v1.8

Сохранить Описание

Перенос примечаний в скобки v1.1

• Перенос примечаний в скобки

• Перенос примечаний в скобки (пробел перед открывающей скобкой)

Сохранить Описание

Режим чтения v1.0

Сохранить Описание

Снятие форматирования стихом, цитатой или эпиграфом v1.1

Сохранить Описание

Все скрипты этого перечня плюс html-страница с описаниями (всё вместе <120 КБ) v5.5

Сохранить

Описания скриптов

Добавление сносок и комментариев v2.6. Сохранить Вверх к списку

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


Что делает скрипт.

1. Добавляет body примечаний, если его нет.

2. Добавляет заголовок body примечаний, если его нет. Если есть – оставляет без изменений.

3. Изменяет ID секций примечаний.

4. Изменяет заголовки секций примечаний.

5. Меняет адреса как сносок, так и простых ссылок, которые указывают на секции примечаний.

6. Меняет текст сносок (у простых ссылок остается как было).

7. Добавляет новую секцию примечаний.

8. Добавляет новую сноску с правильными адресом и текстом.


Как использовать скрипт? Нужно стать на позицию в тексте, где должна появиться ссылка на примечание, и запустить скрипт. Остальное делается автоматически.


Детали алгоритма. Номер вставляемого примечания определяется по номеру примечания, расположенного перед вставляемым. Остальные не анализируются. Т.е. если вставляем после сноски, связанной с третьей секцией боди примечаний, новая сноска получит номер четыре и будет связана с четвертой секцией в боди примечаний. Если вставлять новую сноску после сноски, которая не связана ни с какой секцией в теле примечаний, скрипт сообщит об ошибке.

Новые адреса и тексты ссылок генерятся не по порядку их размещения в тексте, а вычисляются по тому, с какими секциями связаны ссылки. Другими словами, связь ссылки и секции сохраняется независимо от порядка их расположения.

Секции примечаний нумеруются с единицы для первой секции.

Заголовки в секции примечаний добавляются независимо от исходного их наличия/отсутствия.


Ограничения. Скрипт не понимает вложенные (более одного уровня вложения) секции в боди примечаний. В случае, если встречаются секции второго или более уровня вложения, скрипт выдаст предупреждающее сообщение и прервет свою работу.


Настройки. В начале файла скрипта расположены определения констант, которые задают шаблоны для называния заголовков, для текста ссылок и пр. Соответственно при необходимости их можно поменять. Макрос %N задает номер секции примечания, остальное трактуется как просто текст.


В данный набор скриптов входят следующие подверсии:

1. Добавление сноски

2. Обработка сносок

3. Добавление сноски со вводом

4. Добавление сноски с переходом

5. Добавление последней сноски

6. Добавление последней сноски со вводом

7. Добавление последней сноски с переходом

8. Унификация комментария

9. Унификация комментариев

10. Добавление комментария со вводом

11. Добавление комментария с переходом

12. Добавление последнего комментария

13. Добавление последнего комментария со вводом

14. Добавление последнего комментария с переходом

15. Унификация сносок (с удалением неиспользуемых секций сносок)

16. Унификация комментариев (с удалением неиспользуемых секций комментариев)


Видно, что есть скрипты, которые работают с так называемыми «сносками», а есть которые с «комментариями». Что тут имеется в виду? А имеется тут в виду то, что можно работать одновременно с двумя потоками сносок, различающихся вот чем. Во-первых, «сноски» располагаются в <body name="notes">, а «комментарии» – в <body name="comments">. Во-вторых, текст ссылок-«комментариев» скрипт выделяет тегом <sup>, чего не происходит со «сносками». Это нужно для того, чтобы «комментарии» в тех читалках, где нет специальной их поддержки, отображались как верхний индекс. Третье – по умолчанию ссылка «сноски» имеет такой вид: [1], в то время как ссылки «комментариев» оформляются следующим образом: {1}. То есть для «комментариев» используются фигурные скобки, а не квадратные, таким образом можно зрительно различать тип сноски при чтении книги. Четвертое различие состоит в том, что по умолчанию id секций «сносок» имеют вид i_1, а «комментариев» – c_1. Соответственно этому различаются и адреса ссылок.


Скрипты 1 и 8 («Добавление сноски» и «Добавление комментария») добавляют простую сноску или комментарий, и больше ничего не делают – курсор оказывается в позиции сразу за добавленной ссылкой сноски.


Скрипты 2 и 9 («Обработка сносок/комментариев») отличаются тем, что не производят добавление сноски или комментария, но при этом производят перенумерацию и всяческую обработку уже имеющихся сносок/комментариев.


Скрипты 3, 6, 10 и 13 («...со вводом») позволяют после генерации пустой сноски в соответствующем бади ввести ее текст в появившемся окошке. Можно использовать различные теги, как fb2– (<emphasis>, <strong> и пр.) так и теги html (<b>, <i> и пр.). html-теги тоже будут преобразованы в fb2-теги, но их может быть удобнее использовать вследствие краткости, и, следовательно, большей быстроты их набора на клавиатуре. После того, как текст будет введен в окошке и сноска создана, курсор окажется в позиции сразу за свежесозданной ссылкой сноски.


Скрипты 4, 7, 11 и 14 («...с переходом») работают так, что совершаются все перенумерации, создается сноска с пустым телом, а потом в начало этого тела сноски (но после заголовка) перемещается курсор. Бывает удобно вставить текст сноски в буфер обмена, потом запустить скрипт «...с переходом» и сделать paste из буфера.


Скрипты 6, 7, 13 и 14 («Добавление *последней* сноски/комментария...») позволяют добавлять сноску только ниже по документу, чем расположена последняя сноска из уже имеющихся. Данные скрипты не производят перенумерацию ссылок и секций (т.к. при добавлении *последней* сноски в этом нет нужды), за счет чего происходит ускорение работы скрипта. Детали работы этого скрипта, я, честно говоря, сам восстанавливаю в памяти не без труда, если еще чего вспомню, то напишу.


Скрипты 15 и 16 («Унификация ... с удалением неиспользуемых секций...») производят унификацию сносок либо комментариев, при этом секции сносок или комментариев, на которые нет ссылок, удаляются.


Сохранить Вверх к списку


Примечания и комментарии из скобок v2.2. Сохранить Вверх к списку

Бывает так, что в книге примечания сделаны прямо посреди основного текста книги, а не вынесены в отдельные секции в <body name="notes">. В таком случае может быть удобней не переносить примечания в <body name="notes"> по одному, а пометить начало и конец каждого примечания (посреди текста книги) последовательностью определенных символов (такая последовательность в рамках письменного и устного общения насчет данного скрипта условно называется «скобкой»), а потом сгенерировать все (корректно оформленные) сноски сразу. Именно для такого случая и сделан данный набор скриптов.


В архиве имеются следующие скрипты:

1. Примечания из []

2. Примечания из {}

3. Примечания из [! !]

4. Примечания из [~ ~]

5. Примечания из скобок, заданных регэкспами

6. Примечания из скобок, заданных простым текстом

7. Комментарии из []

8. Комментарии из {}

9. Комментарии из [! !]

10. Комментарии из [~ ~]

11. Комментарии из скобок, заданных регэкспами

12. Комментарии из скобок, заданных простым текстом


Про разницу между «Примечаниями» и «Комментариями» можно прочитать в описании скрипта «Добавление сносок и примечаний».


Скрипты 1–4 и 7–10 используют жестко заданные «скобки», какие именно – указано в названиях скриптов (сначала открывающая, а затем закрывающая).


Скрипты 5 и 11 («...из скобок заданных регэкспами») позволяют задать отдельно регэксп для открывающей и закрывающей «скобок», и по этим регэкспам скрипт ищет скобки и извлекает сноски.


Скрипты 6 и 12 («...из скобок, заданных простым текстом») позволяют ввести две строковые последовательности в одном окошке (через пробел), и эти последовательности скрипт при работе будет считать за открывающую и закрывающую скобки.


Начиная с определенной версии, в поисках примечаний скрипт обрабатывает все body, которые есть в книге, причем он просматривает их целиком, выделение текста перед запуском скрипта не учитывается.


Скрипты данного набора имеют такой недостаток, что если внутри многосимвольной «скобки» в тексте книги есть какой-то тег (например, используется скрипт «Примечания из [! !]» и открывающая скобка имеет в fb2 вид [<emphasis>! ), то такая скобка не будет обнаружена скриптом. По этой причине односимвольные «скобки» предпочтительнее многосимвольных. Если вам все же приходится использовать многосимвольные, то после обработки скриптом нужно сделать поиск «скобки» по тексту в режим «Дизайн» (в случае приведенного примера искать нужно [! и !] ), подправить случаи, где тег оказался внутри «скобки», и запустить скрипт заново.


Приятной фичей является то, что скрипт умеет извлекать из «скобок» не только однострочные, но и многострочные примечания.


Сохранить Вверх к списку


Заголовки картинок в подписи v1.1 Сохранить Вверх к списку

Скрипты данного набора создает под всеми картинками документа подпись (не графикой, текстом) на основе текста из атрибута title картинки, после чего этот атрибут удаляется. Перед создаваемой подписью скрипт не вставляет пустую строку, после – вставляет.


В архиве пять скриптов:

1. Заголовок картинки в подпись (strong)

2. Заголовок картинки в подпись (emphasis)

3. Заголовок картинки в подпись (subtitle)

4. Заголовок картинки в подпись (subtitle, strong)

5. Заголовок картинки в подпись (subtitle, emphasis)


Слова в скобках описывают, какими тегами будут выделены новосозданные подписи.


По завершении работы скрипт отображает статистику: сколько всего встретилось картинок, сколько заголовков было заменено на подпись.


Сохранить Вверх к списку


Интерактивная ликвидация разрывов абзацев v3.0 Сохранить Вверх к списку

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


На первом этапе после запуска скрипта нужно задать настройки, согласно которым будет происходить отлов различных комбинаций конца одного абзаца и начала другого. Настройка «Ручной выбор», если она установлена, предписывает скрипту запоминать пару абзацев с указанной разновидностью комбинации конечных и начальных символов для последующего ручного выбора варианта обработки. В этом случае выбранный в окне предварительных настроек вариант обработки станет вариантом по умолчанию в окне ручной обработки. Если же опция «Ручной выбор» не установлена, для данной комбинации будет происходить автоматическая обработка согласно выбранному варианту.


Нажатие «ОК» запускает второй (неинтерактивный) этап – автоматическую обработку и поиск спорных случаев для ручной обработки. Это может потребовать заметного времени, зависит от размера документа, количества абзацев, количества найденных для ручной обработки случаев и, может, от чего-то еще.


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


Как разложить файлы скрипта по папкам.

1. js-файл следует разместить в папке скриптов, выбранной в настройках FBE.

2. htm-файлы в подпапке HTML папки редактора, чей exe-файл будете запускать. Создайте эту подпапку, если ее нет.

3. css-файлы в поддиректории CSS каталога редактора, чей exe-файл будете запускать. Под именем «удаление разрывов_main.css» можно подложить main.css от вашего FBE (чтобы текст отображался тем же стилем, что у вас в редакторе). В файле «удаление разрывов_add.css», редактируя строку

.ac {background-color:red; color: white;}

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

Сохранить Вверх к списку


Разметка подзаголовков, чистка пустых строк v3.2 Сохранить Вверх к списку

Скрипт превращает код вида


<p>***</p>

<p>* * *</p>

<subtitle>***</subtitle>

<title><p>***</p></title>

<title><p>* * *</p></title>


в

<subtitle>* * *</subtitle>


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

^( | )*\*(( | )*(\*))?(( | )*(\*))?( | )*$

Если объяснять словами, строка может содержать от одной до трех звездочек с любым количеством простых или неразрывных пробелов до, между и после них. Анализируется строка без учета тэгов, т.е. форматирование не влияет.


Пустые строки (далее – ПС) непосредственно перед и непосредственно после подзаголовков (всех) удаляются. В случае с <title> разрыв секции перед этим тэгом ликвидируется. По информации от jurgennt'а преобразование title -> subtitle может быть опасно для файлов, где используется заголовок (не стиха, а простой) из трех звездочек, чтобы «одноименное» стихотворение попало в оглавление.


Также удаляются тэги <empty-line/> в начале и конце секции («в начале» в данном случае значит не только сразу после <section>, но и после <title>, <epigraph> и пр.).


Удаляются ПС перед и после тэгов <cite> и <poem> .


Последовательности из нескольких ПС заменяются на одну ПС.


Удаляются ПС внутри <poem> , т.к. они препятствуют валидности документа. ПС внутри тегов <title> также удаляются.


ПС, нужные для того, чтобы секция была валидной, не удаляются при описанных выше действиях скрипта.


За ПС во всех указанных случаях считаются: абзацы, которые из чисто текстового содержимого (не считая тэгов) либо не имеют вообще ничего, либо представляют комбинацию произвольного количества пробелов и неразрывных пробелов; тэги <empty-line/> .


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


Всего подверсий скрипта в архиве – четыре:

1. Разметка подзаголовков, чистка пустых строк

2. Разметка подзаголовков, чистка пустых строк, удаление жирности в заголовках

3. Разметка подзаголовков, чистка пустых строк; удаление жирности в заголовках по запросу

4. Разметка подзаголовков, чистка пустых строк, удаление жирности и курсива в заголовках


Слова «...по запросу» в названии третьего скрипта означают то, что при запуске скрипта выскакивает окошко, в котором можно выбрать, удалять жирность в заголовках или нет.


Сохранить Вверх к списку


Пустые строки вокруг картинок v1.4 Сохранить Вверх к списку

Скрипт позволяет либо удалить пустые строки рядом с картинками, либо сделать по одной пустой строке с каждой стороны от картинок. Выбор, что делать, производится с помощью диалогового окна. Где не надо (в начале секции, в конце секции, перед и после cite и poem и т.п.) пустые строки рядом с картинками не добавляются, если только такое добавление не требуется для валидности.


Сохранить Вверх к списку


Удаление неиспользуемых вложений v1.0 Сохранить Вверх к списку

Скрипт удаляет вложения, на которые ни ссылается ни одна картинка. Зачем это может быть нужно – предлагаю вам самим придумать. ;-)


Сохранить Вверх к списку


Ссылочные переходы v1.6 Сохранить Вверх к списку

Этот набор скриптов представляет собой замену встроенной в FBE функции перехода по ссылке и обратно.


В наборе три скрипта:

1. Переход по ссылке

2. Возрат на ссылку

3. Переход по ссылке или возврат на ссылку


Первый скрипт переходит по ссылке, которая находится под или рядом с курсором. Второй переходит к первой от начала документа ссылке, указывающей на секцию, находящуюся под курсором. Третий скрипт переходит по ссылке, если она есть под или рядом с курсором, в противном случае пытается совершить возрат на ссылку, которая ссылается на секцию, в которой находится курсор.


Скрипты универсальны в том плане, что не заточены только под ссылку «сноски» или только под ссылку «комментария», а работают (теоретически) для всех вариантов локальных ссылок.


Кроме того, в отличие от встроенного в FBE перехода, мой скрипт переходит по ссылке, если курсор стоит слева или справа от нее, что дает возможность совершать переход даже если текст ссылки состоит из одного символа.


Сохранить Вверх к списку


Таблица символов v1.2 Сохранить Вверх к списку

Этот скрипт – заготовка, которую перед использованием нужно настроить под себя. Если это сделать, скрипт будет при запуске выводить таблицу символов, клик по которым делает так, что они вставляются в текст редактируемой книги.


Размер окна с таблицей символов настраивается в js-файле, поменять значения в этих строках:

var dialogWidth="300px"; //ширина окна таблицы символов

var dialogHeight="300px"; //высота окна таблицы символов


Размер таблицы (измеряемый в клетках) настраивается в html, вот это место:

var tableX=3; //количество столбцов в таблице символов

var tableY=3; //количество строк в таблице символов


Символы для таблицы задаются в приведенной ниже строке, указывать их можно как непосредственно, так и в форме html-сущностей (entities):

var charStr="12345&gt;&lt;&nbsp;&#160;";

Чтобы задать символ ударения, нужно написать два символа: «&#160;&#769;», в скрипте на этот случай предусмотрен специальный код. Если понадобится, чтобы в таблице был знак меньше «<» или больше «>», то записать их следует как &lt; и &gt; соответственно. Неразрывный пробел можно записать как &#160; либо &nbsp; . Других именованных сущностей, кроме названных, скрипт не понимает, поэтому прочие символы можно кодировать только сущностями с Unicode-кодом символа.


Всплывающие подсказки настраиваются изменением этой строки:

var titleStr="Единица|Двойка|Тройка|Четверка|Пятерка|Больше|Меньше|Неразрывный пробел|Неразрывный пробел";

Можно использовать другой (но тоже односимвольный) разделитель вместо pipe – "|" – изменив вот эту строку:

var dividerChar="|";


Шрифт ячеек таблицы задается в этой строке:

td {font-family: Tahoma; font-size:16px;}


Скрипт работает в немодальном окне, то есть окно скрипта после запуска висит параллельно окну редактора, не мешая (если не заслонять :-) работе в последнем.


Для успешного старта скрипта html-файл из архива следует положить в папку Cmd или Scripts (какая есть) той версии редактора, исполняемый файл которого запускаете. js-файл должен лежать в папке скриптов, выбранной в настройках редактора.


Сохранить Вверх к списку


Унификация вложений и картинок v1.2 Сохранить Вверх к списку

Скрипт переименовывает вложения соответственно порядку следования ссылок на них в теле документа. Если на вложение ссылается несколько картинок, берется номер первой из них. Первое нумеруемое вложение получает номер 1. По умолчанию новое имя файла (без учета расширения) выглядит как «i_001» (можно настроить префикс имени, т.е. то, что будет вместо «i_», и количество цифр, до которого следует дополнять номер); расширение получается из поля content-type бинарника: .jpg для image/jpeg и .png для image.png.


Вложения, на которые нет ссылок, переименовываются по другому алгоритму. К их имени дописывается префикс (конкретный вид его можно настроить) «unused_». Если вложение уже имеет такой префикс, второй раз он не добавляется. Случается иногда ситуация, что уже есть вложение например unused_a.png, есть вложение a.png, и т.к. на последнее нет ссылок, оно тоже по идее должно стать unused_a.png. Получалось бы запрещенное дублирование id вложений, поэтому такая ситуация решена дописыванием постфикса вида «_0» (число меняется по необходимости) к имени вложения.


Вложению обложки дается имя cover, вложению обложки оригинального издания cover_src (настраиваемо путем редактирования параметра в файле скрипта). Расширение дается согласно content-type. Если в качестве обложки ничего не выбрано, и есть вложение с именем «cover.jpg» или «cover.png», это вложение делается обложкой. Аналогично для обложки ориг. издания, только искомое вложение должно называться «cover_src» + расширение.


Потом вложения сортируются в таком порядке: обложка; обложка оригинального издания; пронумерованные картинки; вложения, на которые нет ссылок.


Атрибут href у картинок изменяется с тем, чтобы картинки оставались связаны со своими вложениями несмотря на смену id.


По окончании обработки выводится статистика, в том числе перечни: картинок, для которых нет вложений; вложений, на которые нет ссылки; картинки с нелокальными ссылками; список вложений с content-type не image/jpg, не image/png. Т.е. попутно скрипт можно использовать как проверку картинок.


Есть пара известных проблем. Во-первых, после работы скрипта перестает появляться выпадающий список при редактировании атрибута href картинки. Во-вторых, в некоторых случаях не срабатывает встроенное обновление картинок, и выводится старая картинка вместо новой, хотя связь «картинка -> бинарник» соблюдена верно.


Сохранить Вверх к списку


Обновление картинок и списков обложек v1.0 Сохранить Вверх к списку

Бывает, удалишь несколько вложений, потом вставишь на их место новые с теми же названиями, а картинки в режиме «Дизайн» редактор не обновляет – остаются видны старые. Или меняешь руками id вложений в режиме редактирования описания (description’а) книги – тот же эффект. Выпадающие списки для выбора картинки обложки тоже не обновляются. В этом случае и пригодится данный скрипт. (Но все-таки, кажется, и со скриптом срабатывает не всегда.)


Сохранить Вверх к списку


Удалить все вложения из книги v1.3 Сохранить Вверх к списку

Скрипт делает то, что сказано в его названии. Это бывает нужно, чтобы удалив старую версию вложений, заменить их новой.


Сохранить Вверх к списку


Тест сносок v1.2 Сохранить Вверх к списку

Скрипт проверяет порядок расположения ссылок-сносок и их правильность. Определяет, кажется, все возможные ошибки. Является аналогом скрипта «Проверить ссылки», который стандартно идет с FBW, но работает быстрее (сравните: N*N операций в случае скрипта FBW и N операций в случае «Теста сносок»). К тому же определяет больше ошибок.


Ограничение: поддерживается только стандартный формат оформления сносок (когда каждая сноска представлена секцией в <body name="notes"> и ссылки сносок ссылаются именно на секции). Кроме того, скрипт понимает лишь одноуровневые сноски, т.е. в бади notes не должно быть секций второго уровня вложенности.


Изменения в версии 1.2:

• скрипт работал некорректно (выдавал сообщение «Отсутствует # в адресе ссылки.») в случае, если FBE показывал длинные ссылки в книге (допустим, «file:///C:/FB2/FBE2.0%2004%20-%2028%20Jun%202009.dir/main.html#N1» вместо «#N1»);

• при отсутствии body примечаний скрипт выдавал сообщение об этом, но потом вылетал с ошибкой;

• сообщение об ошибке «Нет секции примечания с id, указанным в ссылке.» исправлено на «В body примечаний нет секции примечания с id, указанным в ссылке.».


Сохранить Вверх к списку


Удаление возвратных ссылок v1.3. Сохранить Вверх к списку

Скрипт удаляет возвратные ссылки и id абзацев, вид которых подходит под регэкспы. В данный момент настроено удаление тех, которые начинаются с _ednref или _ftnref (не считая решетки в случае ссылок), и добавить новые маски не составляет труда. Если id абзаца упоминается в ссылке, находящейся не в body примечаний, такой id удален не будет.


Сохранить Вверх к списку


Смена регистра v1.1. Сохранить Вверх к списку

Данный набор скриптов позволяет, выделив текст и запустив скрипт, перевести его в нижний либо в ВЕРХНИЙ регистр.


В архиве следующие два скрипта, названия которых говорят сами за себя:

1. В верхний регистр

2. В нижний регистр


Сохранить Вверх к списку


Вставка ссылки на midi-файл v1.0 Сохранить Вверх к списку

AlReader позволяет читать fb2-книги со ссылками на midi-файлы, которые (midi-файлы) можно прослушать прямо в читалке. Данный скрипт позволяет вставить такую ссылку. Для этого нужно выделить текст, который следует сделать ссылкой, запустить скрипт, выбрать музыкальный файл, и подтвердить создание ссылки. Чтобы читалка нашла файл с музыкой, нужно положить midi в zip-архив, в котором лежит и fb2.


Сохранить Вверх к списку


Разбиение на секции v1.3. Сохранить Вверх к списку

Данный скрипт позволяет, задав признак для поиска строк – будущих заголовков, произвести разбиение fb2-документа на секции с одновременной разметкой этих заголовков тегом title. После чего остается придать секциям правильную вложенность с помощью кнопок управления структурой документа, которые есть в окне «Структура книги» редактора. По сути, скрипт избавляет от ручной работы с комбинацией Shift-Enter.


После запуска скрипта появляется окно настроек. В нем можно задать регэксп для поиска строк-заголовков. Можно выбрать, учитывать ли регистр при поиске по заданному регэкспу. Еще можно настроить, сколько при разметке захватывать в заголовок строк до и после строки, найденной по регэкспу.


Второй этап работы скрипта запускается кнопкой «Обработать» или «Обработать и выйти». В процессе обработки создаются разрывы секций ( </section><section> ) перед найденными строками-заголовками, а сами заголовки (которые на тот момент еще не заголовки) размечаются тегом title.


Чтобы скрипт заработал, html-файл из архива следует положить в подпапку HTML папки той версии редактора, исполняемый файл которого запускаете. Создайте эту подпапку, если ее нет. js-файл должен лежать в папке скриптов, выбранной в настройках редактора.


Изменение в версии 1.2:

• окно скрипта теперь немодальное.


Изменение в версии 1.3:

• поправил то, что после выхода из скрипта освобождалась не вся занимаемая им память.


Сохранить Вверх к списку


Обработка кавычек v2.7. Сохранить Вверх к списку

В набор входят следующие скрипты:

1. Расстановка елочек и лапок

2. Расстановка елочек и лапок (начиная с 1-го уровня)

3. Расстановка елочек и лапок (начиная со 2-го уровня)

4. Расстановка елочек и лапок (с позиции курсора)

5. Расстановка елочек и лапок (с позиции курсора, начиная с 1-го уровня)

6. Расстановка елочек и лапок (с позиции курсора, начиная со 2-го уровня)

7. Переход на след. елочки

8. Переход на пред. елочки

9. Переход на пред. лапки

10. Переход на след. лапки

11. Переход на пред. прямые кавычки

12. Переход на след. прямые кавычки

13. Переход на пред. прямые кавычки, елочки или лапки

14. Переход на след. прямые кавычки, елочки или лапки

15. Расстановка только елочек


Скрипт под номером 1 проставляет елочки и лапки в документе, учитывая уровни их вложенности и работая корректно в случае наличия сносок. Если в момент запуска скрипта выделения в документе нет, будет обработан весь текст. Если же есть выделение, будет обработана лишь выделенная область.

Скрипты 2 и 3 аналогичны скрипту 1, но начинают расстановку елочек и лапок не с нулевого уровня вложенности, а с первого или второго.


Скрипты 4, 5 и 6 при отсутствии выделения перед запуском скрипта проставляют елочки и лапки не от начала документа, а с позиции курсора.


Скрипты 7–14 позволяют перемещаться вперед или назад по документу к определенным символам кавычек, указанным в названиях скриптов.


Скрипт 15 заменяет все кавычки на елочки, левые и правые. Соответственно, все проверки на уровень вложенности кавычек отключены.


Сохранить Вверх к списку


Поиск форматирования v1.0. Сохранить Вверх к списку

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


Вот перечень скриптов этого набора:

1. Переход на предыдущий курсив

2. Переход на следующий курсив

3. Переход на предыдущий абзац с курсивом

4. Переход на следующий абзац с курсивом

5. Переход на предыдущую жирность

6. Переход на следующую жирность

7. Переход на предыдущий абзац с жирностью

8. Переход на следующий абзац с жирностью

9. Переход на предыдущий верхний индекс

10. Переход на следующий верхний индекс

11. Переход на предыдущий абзац с верхним индексом

12. Переход на следующий абзац с верхним индексом

13. Переход на предыдующий нижний индекс

14. Переход на следующий нижний индекс

15. Переход на предыдущий абзац с нижним индексом

16. Переход на следующий абзац с нижним индексом

17. Переход на предыдущее зачеркивание

18. Переход на следующее зачеркивание

19. Переход на предыдущий абзац, содержащий зачеркивание

20. Переход на следующий абзац, содержащий зачеркивание

21. Переход на предыдущий код

22. Переход на следующий код

23. Переход на предыдущий абзац, содержащий код

24. Переход на следующий абзац, содержащий код


Сохранить Вверх к списку


Превращение внешних ссылок в текст v1.1. Сохранить Вверх к списку

Суть скрипта ясна из названия. Поясню, что внешней ссылкой считается любая ссылка, которая не является локальной ссылкой. Локальной же ссылкой считается такая, у которой адрес начинается с «file://» либо со знака «#», также перед этими строковыми последовательностями могут быть пробелы.

Сохранить Вверх к списку


Точка, тире, буква v1.3. Сохранить Вверх к списку

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


Когда комбинация символов найдена, абзац с этой комбинацией выводится в диалоге, причем комбинация символов выделена особым стилем (по умолчанию – белым по красному). Также в диалоге имеются кнопки управления скриптом. Кнопка «Пропуск» пропускает текущий найденный случай и пытается найти следующий.


Кнопка «Заменить знак пунктуации» производит замену точки из найденной комбинации символов на запятую, либо наоборот – заменяет найденную запятую на точку; после чего происходит переход к следующей комбинации символов. Кнопка «Изменить регистр буквы» превращает большую букву из найденной комбинации в маленькую, либо наоборот, после чего, опять же, происходит переход на следующий подлежающий рассмотрению пользователем случай. Кнопка «Выход» ничего не делает, кроме того что закрывает скрипт.


Если перед нажатием одной из кнопок «Заменить знак пунктуации» и «Изменить регистр буквы» установлен флажок «После замены перейти к этому месту», то после того, как скрипт произведет полагающиеся изменения, произойдет выход из скрипта, и область видимости в основном окне FBE и курсор будут перемещены к рассматриваемой комбинации символов. Имеется также кнопка «Перейти без замены», которая осуществляет такое же перемещение области видимости и курсора, но при этом не совершается ни одно из предлагаемых на данный момент изменений документа.


Как разложить файлы скрипта:

1. js-файл положить где-нибудь внутри папки Scripts, выбранной в настройках редактора.

2. содержимое папки HTML положить в папку HTML, находящуюся в папке редактора, exe-файл которого запускаете.

3. Подпапка CSS при этом должна быть внутри папки HTML. Под именем «Точка, тире, буква - main.css» можно подложить main.css от вашего FBE (чтобы текст отображался тем же стилем, что у вас в редакторе). В файле «Точка, тире, буква - add.css», редактируя строку

SPAN.ddl_marked {background-color:red; color:white}

Можно настроить стиль, которым будет подсвечиваться рассматриваемая комбинация символов.

Строка

#fbw_body {font-family: Tahoma; font-size:15px;}

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

В js-файле скрипта можно изменить значения размеров диалога (измеряются в пикселях) вот в этих строках:

var dialogWidth="640px"; // ширина диалогового окна

var dialogHeight="480px"; // высота диалогового окна


Сохранить Вверх к списку


Управление структурой секций v1.8. Сохранить Вверх к списку

Я полагаю, скрипт может быть удобен как для изменения структуры секций путем перетаскивания мышью, так и для массового ручного контроля/редактирования заголовков. Преимущество сравнительно со встроенным в FBE редактированием дерева – заголовки отображаются «как есть», с форматированием и многострочностью.


Недостатки.

• После окончания работы скрипта, если вы вышли из него по нажатию кнопки «Сохранить», желательно проверить валидность книги, т.к. скрипт этого не делает.

• Не поддерживается выделение нескольких элементов дерева.

• Долговато выполняется сохранение, надо бы как-то оптимизировать, но пока нет идей.


Известные проблемы.

• Могут быть проблемы, связанные с необновлением скроллбара. Дело в том, что код для скроллбара пришлось написать самому, использовать системный было нельзя – тогда бы курсорные клавиши прокручивали документ когда не надо. Если заметите необновление размера скроллбара в какой-то ситуации – пожалуйста сообщайте (как и остальные баги).

• IE, на движке которого работает FBE, имеет багофичу (в отличие от других браузеров), из-за которой скрипты не могут обрабатывать второе нажатие (в отличие от отпускания) кнопки мыши при двойном щелчке. Поэтому если быстро нажать, отпустить, опять нажать и удерживать клавишу мыши, когда мышиный курсор находится на кнопке скроллбара, то автоскроллинг не запускается, хотя должен бы.


Кликать ссылку «HTML в буфер» внизу окна скрипта не надо – она нужна только для отладки.


Как правильно разложить файлы скрипта.

Файл "01_Управление структурой секций.js" положить в папку скриптов, заданную в настройках FBE. Содержимое папки HTML (включая подпапки) положить в папку HTML, находящуюся в папке редактора, exe-файл которого запускаете.


Настроить размер по умолчанию для окна скрипта можно в файле "01_Управление структурой секций.js", изменив числа в таких строках:

var dialogWidth="640px"; // ширина диалогового окна

var dialogHeight="480px"; // высота диалогового окна


Изменения в версии 1.1.

• Исправил баг с пропадающим при перетягивании секции эпиграфом.

• Поправил некоторые мелкие, но визуально неприятные недочеты в работе дерева.

• Сделал управление с клавиатуры. Работают клавиши «Стрелка вверх», «Стрелка вниз» (эти курсорные клавиши переходят на предыдущий и следующий элемент дерева соответственно, если при их нажатии какой-то элемент уже активен), «Стрелка влево» (закрыть элемент, если же он уже закрыт – перейти на уровень вверх), «Стрелка вправо» (раскрыть элемент, если он уже раскрыт – перейти на первый вложенный в него элемент), «Home», «End», «Page up», «Page down», «Серый плюс» (раскрыть активный элемент), «Серый минус» (закрыть активный элемент), F2 (редактирование заголовка). В режиме редактирования заголовка Enter вставляет пустую строку в заголовке и переходит на нее. Закончить редактирование можно клавишей Esc. При редактировании заголовка включать/выключать жирность можно хоткеем Ctrl-B, а курсив – хоткеем Ctrl-I.


Изменения в версии 1.2:

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

• При клике по меню внизу окна фокус клавиатуры уходил с дерева и горячие клавиши переставали работать.

• Нельзя было разместить элемент вслед за элементом <text>, перетащив его на иконку, изображающую лист бумаги.

• Если перейти в режим редактирования заголовка, выделить его весь или частично, потом нажать Esc, выделение оставалось видно.

• Была какая-то ошибка, связанная с попыткой то ли редактирования по F2 элементов типа <text>, то ли с выходом из него. В общем, я редактирование такого рода программно запретил, поскольку оно все равно не имеет смысла.


Изменения в версии 1.3:

• атрибут name у body терялся при нажатии «Сохранить» в окне скрипта.

• теперь клик по ссылке в заголовке не производит переход.

• теперь адреса ссылок-сносок после нажатия «Сохранить» более корректные («file://.../main.html#n_1», а не «file://.../control_structure_frame_1.htm#n_1»).


Изменение в версии 1.4:

• скрипт теперь работает в IE8.


Изменения в версии 1.5:

• раньше скрипт глючил на некоторых невалидных книгах. Проблема проявлялась, если в книге была секция, в которую непосредственно были вложены элементы текстово-графического содержания (<p>, <image>, <cite> и т.д.) и подсекции. (Это запрещено схемой, но такой файл можно открыть редактором.) В таком случае иногда происходило размножение фрагментов текста. Проблема возникла из-за того, что я поначалу ориентировался на обработку скриптом только валидных файлов. Но поскольку на практике возможность работать с невалидными файлами оказалась полезной, исправил ошибку.

• новая фича – в контекстном меню по правой кнопке мыши на элементе дерева: «Обрамить section-ом». Создает вокруг этого самого элемента дерева новый элемент <section>. Полезно для исправления документов, невалидных описанным выше образом.

• раньше при перетягивании элемента на новое место иногда не появлялась или не исчезала иконка плюса/минуса, которая индицирует, есть ли у элемента вложенные подэлементы.

• раньше скрипт выдавал ошибку, если запустить его, открыв файл с пустым тегом section (<section></section>) или с пустым body (аналогично).

• раньше, если удалить элемент дерева, а потом нажать курсорную клавишу (перемещение по дереву), выскакивала ошибка.

• теперь есть защита от переноса элемента body внутрь элемента section.


Изменение в версии 1.6:

• поправлен баг, из-за которого при использовании скрипта пропадали все, кроме первого, эпиграфы элементов body.


Изменение в версии 1.7:

• поправлен баг, из-за которого в книге, обработанной скриптом, пропадали все пустые строки после сохранения на диск.


Изменения в версии 1.8:

• в прошлой версии нажатие Delete при редактировании заголовка приводило к выдаче запроса на удаление элемента.

• теперь завершить редактирование заголовка можно и нажатием Ctrl-Enter (Escape работает тоже).


Сохранить Вверх к списку


Перенос примечаний в скобки v1.1. Сохранить Вверх к списку

Скрипт переносит примечания и комментарии из body «notes» и «comments» в текст, обрамляя их скобками. Примечания («notes») обрамляются квадратными скобками, а комментарии («comments») – фигурными. Если примечание содержит несколько абзацев, его абзацы будут слиты в один абзац и разделены строковой последовательностью « // ». Блочные элементы (cite, epigraph, poem) при переносе примечаний в скобки теряются, инлайновые – сохраняются.


В набор входят два скрипта, один из которых отличается тем, что перенеся примечание в скобки, вставляет перед открывающей скобкой пробел.


Изменение в версии 1.1:

Исправил то, что в подверсии скрипта с названием «пробел перед открывающей скобкой» в начале файла были лишние символы, из-за которых скрипт вызывал ошибку при загрузке FBE.


Сохранить Вверх к списку


Режим чтения v1.0. Сохранить Вверх к списку

Скрипт переводит FBE в режим чтения, в котором клавиши «Вверх» и «Вниз» прокручивают текст на одну строку в соответствующих направлениях, а клавиши «Влево» и «Вправо» прокручивают на три строки вверх и вниз соответственно. Чтобы выйти из режима чтения, нужно кликнуть мышью в произвольное место текста, и курсор будет установлен в указанную позицию.


Работа скрипта проверена в IE6. Если у вас он не работает, сообщите на имэйл, написанный в начале страницы.


Сохранить Вверх к списку


Снятие форматирования стихом, цитатой или эпиграфом v1.1. Сохранить Вверх к списку

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


Изменение в версии 1.1:

• Теперь, если, например, снимается форматирование цитатой, тег text-author, относящийся к этой цитате, превращается в p. Аналогично для эпиграфов и стихов.


Сохранить Вверх к списку