Annotation

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

М.И. Кондратович

Предуведомление

Предисловие

Введение

Часть I

§ 1.1 Неизбежность перехода от книг бумажных к книгам электронным

§ 1.2 Многообразие форматов электронных книг

§ 1.3 Несколько слов о XML

§ 1.4 Формат FictionBook — стандарт де-факто для электронных книг

Часть II

§ 2.1 Структура файла FictionBook.

§ 2.2 Пример книги в формате FictionBook

§ 2.3 Элементы описания книги.

§ 2.4 Элементы описания книги (description). Элементы первого уровня

§ 2.5 Элементы описания книги (description). Элементы второго уровня

§ 2.6 Элементы описания книги (description). Элементы третьего уровня (информация об авторе)

§ 2.7 Элементы тела книги (body).

§ 2.8 Элементы раздела книги (section).

§ 2.9 Элементы раздела книги (section).

§ 2.10 Элементы таблиц

§ 2.11 Элементы абзаца (стилевые, они же inline элементы)

§ 2.12 Элементы для платных книг

§ 2.13 Спецсимволы

§ 2.14 Список атрибутов элементов

§ 2.15 Алфавитный список всех элементов FictionBook 2.1

Часть III

§ 3.1 Требования к исходному тексту

§ 3.2 Any to FB2

§ 3.3 ExportXML

§ 3.4 doc2fb

§ 3.5 Перенос через буфер обмена

§ 3.6 Конвертор ExportToFB21 для Open Office

§ 3.7 Написание собственного конвертора

Часть IV

§ 4.1 Установка программы

§ 4.2 Описание функций и основные приемы работы

§ 4.3 Заполнение заголовка книги

§ 4.4 Структурирование документа

§ 4.5 Использование регулярных выражений

§ 4.6 Использование скриптов

§ 4.7 Баги с нами!

§ 4.8 Дальнейшее развитие редактора

§ 4.9 Альтернативные средства редактирования

Часть V

§ 5.1 Советы по оформлению книг

§ 5.2 Подготовка картинок

§ 5.3 Обложки

§ 5.4 Сборник или по отдельности?

§ 5.5 Советы по вычитке книг

§ 5.6 Символы, которых нет на клавиатуре

§ 5.7 Высокое искусство аннотации

§ 5.8 Проблемы распространения

Часть VI

§ 6.1 Читалки

§ 6.2 Пакет FB2Any

§ 6.3 FB2GrWolf

§ 6.4 FB2PDF

Часть VII

§ 7.1 Программа-библиотекарь для книг в формате FictionBook

§ 7.2 Утилита Booki

§ 7.3 Программа-библиотекарь JEFLibrarian

§ 7.4 Программа-библиотекарь MyHomeLib

§ 7.5 FB2Fix

Заключение.

Благодарности

Обратная связь

Приложения

Приложение A

Приложение Б

Приложение В

Приложение Г

Приложение Д

Приложение E

Приложение Ж

Приложение З

Приложение И

notes

1

2

3

1.1

1.2

1.3

1.4

2.1

2.2

3.1

4.1

4.2

5.1

5.2

5.3

5.4

5.5

7.1

М.И. Кондратович
(Юзич)
СОЗДАНИЕ ЭЛЕКТРОННЫХ КНИГ В ФОРМАТЕ
FictionBook 2.1:
ПРАКТИЧЕСКОЕ РУКОВОДСТВО

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

Предуведомление

Данное произведение свободно распространяется в электронной форме с ведома и согласия автора на некоммерческой основе при условии сохранения целостности и неизменности текста, включая сохранение настоящего уведомления. Любое коммерческое использование настоящего текста без ведома и прямого согласия автора НЕ ДОПУСКАЕТСЯ.

Цитирование возможно только со ссылкой на первоисточник. При цитировании более одного абзаца, для текста, в который будут помещены цитаты, должна быть предусмотрена возможность свободного распространения.

Предисловие

От автора

Электронные книги заинтересовали меня практически сразу после знакомства с ПК.

Сначала скабрезные тексты о Штирлице, перегнанные на антикварный компьютер БК-0011М c не менее допотопного ЕС-1840, затем книги с минских BBS. Сокровища на дисках «Библиотека в кармане» и «HarryFAN», пиршество онлайн-библиотек…

О формате FB2 автор этой книги узнал несколько лет назад, и, поначалу, не оценил его по достоинству. В то время мне казалось, что для хранения электронных книг нет ничего лучше, чем форматированный текст в кодировке DOS-866.

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

Пытаясь внести свою лепту в популяризацию FB2, в 2006 г. я написал цикл публикаций для «Компьютерной Газеты», которые прошли почти незамеченными. Поэтому было решено найти этим материалам лучшее применение, замахнувшись на написание книги.

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

Однако, пусть ни шатко, ни валко, но процесс был доведен до логического конца. Что получилось, судить вам.

Разумеется, сей опус не является ни всеобъемлющим, ни лишенным недостатков.

В первую очередь, справедливые нарекания, несомненно, вызовет то, что при описании редактирования книги автор ориентировался на морально устаревший FB Editor, а не на более современный и продвинутый FB Writer. Дело в том, что сам я до сих пор продолжаю работать в старом добром FB Editor 1.0, его возможности меня не то чтобы удовлетворяют, но, скажем так, пока их хватает. К тому же, проект FBW на момент выхода книги находится в состоянии «закрыт» и перспективы его более чем эфемерны.

Что же касается, «подпирающего» FB Writer продукта компании «ЛитРес», то я лишь недавно получил его последнюю (не финальную!) версию. Думается, детальное описание его войдет во второе «издание» книги.

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

Зачем вообще нужна эта книга?

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

Ни сам формат FictionBook, ни программные средства для работы с ним не представляют из себя ничего сложного.

Однако, судя по количеству вопросов «Как сделать книжку?», «Как мне сделать то-то и то-то», на форумах FictionBook.org и сетевых библиотек, необходимость в качественном руководстве назрела давно.

Разрозненной информации по FictionBook в Сети достаточно. Но ее еще надо суметь отыскать.

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

Искренне надеюсь, что она станет неплохим подспорьем для начинающих.

Оффтопик.

«А зачем мне все это нужно?»

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

У нормального человека, если он не законченный эгоист, привыкший только потреблять, рано или поздно возникнет желание как-то поддержать все это дело.

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

А можно самому начать делать электронные книги. Больше хороших книг — популярнее формат — еще больше хороших книг. Замкнутый, но совсем не порочный круг!

Кроме того, у вас может оказаться редкая книга, которую можно и нужно сделать достоянием общества.

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

Резюме и планы на будущее

Файл, который вы сейчас читаете, носит гордое наименование Release. После почти двух лет вялотекущих усовершенствований автор осознал, что этот процесс не имеет конца и края. Поэтому было принято волевое решение закончить работу над книгой.

Естественно, выпуск финальной версии не означает отказа от данной темы. За время, пока шла доработка книги, некоторые темы успели полностью или частично устареть. Тот же ExportToFB21 успел превратиться в OOoFBTools. Получила свободу последняя версия редактора от «ЛитРес».

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

Введение

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

Первоначально коллекции текстов были сравнительно небольшими, и размещались на компьютерных досках объявлений (BBS). [1]

А с появлением быстрых сканеров и совершенствованием средств распознавания текста (OCR), дело было поставлено на поток.

Особенно буйно, в силу особого отношения к авторскому праву, это явление расцвело в русскоязычной части Интернета.

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

Нынешний читатель привередлив. Его уже не устроит подслеповатый 14'' монитор, на котором в свое время мы читали присланные из ФИДО тексты о том, как размножаются ежики. К его услугам высококачественные ЭЛТ- и ЖК-дисплеи, КПК, продвинутые мобильные телефоны (смартфоны), специализированные устройства для чтения. Современный софт для просмотра текстов предоставляет такие функции как сглаживание шрифтов, выделение заголовков, позволяет качественно сформатировать текст, вплоть до отображения на экране развернутой книги.

Конечно, переломить себя, и перейти с «бумаги» на e-book очень непросто. Испытано на себе. Но зато потом… Доходит до того, что когда читаешь бумажную книгу, непроизвольно пытаешься вызвать функцию поиска или кликнуть по гиперссылке…

Вначале для создания электронных книг использовались обычные текстовые файлы. Простая последовательность ASCII-кодов, каждый из которых соответствовал либо символу, либо управляющему коду. Главным достоинством текста была максимальная простота просмотра и обработки. Текст можно вывести на экран или на печать простой командой «copy»!

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

Для этого в текст стали вставлять вначале управляющие esc-последовательности, [2] а затем и тэги. [3] Нормальный просмотр и обработка таких файлов стала возможна лишь с помощью соответствующего программного обеспечения.

Итогом попыток создать формат, максимально приближенный к бумажному изданию стал Portable Document Format (PDF), предложенный фирмой Adobe. Он позволяет создать файл, на 100% аутентичный бумажной версии.

Соответственно, для нормального просмотра PDF необходим большой экран. Что, собственно, и стало главным недостатком формата.

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

Последние несколько лет самым удобным устройством для чтения книг является КПК PocketPC.

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

Что же касается специализированных устройств для чтения, то здесь все далеко не радужно.

Замечательные девайсы Rocket eBook опередили свое время и, не сумев завоевать сердца любителей чтения, почили в бозе.

А новейшие устройства на e-ink (Sony Jinke и iLiad), судя по всему, наступают на те же грабли. Высокая стоимость устройства, закрытые форматы с системой защиты «авторских прав», плюс букет неудобств в эксплуатации. Опять же, громоздкий формат книг… Все это вряд ли даст этим, без сомнения, интересным устройствам стать подлинно массовыми «читалками» и заметно потеснить бумажные книги.

И даже второе поколение этих читалок (iRex Reader и Pocketbook 301) с Linux–начинкой, и, как следствие, этого, повышенной «всеядностью», вызывает нарекания. Габариты, отсутствие подсветки, завышенная цена.

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

Часть I
Формат FictionBook и его место в мире электронной литературы

§ 1.1 Неизбежность перехода от книг бумажных к книгам электронным

Одно из величайших изобретений человечества — печатная бумажная книга — медленно, но верно уходит в историю. Эпоха, начатая Иоганном Гутенбергом, Франциском Скориной и Иваном Фёдоровым, близится к своему закату.

Электронные книги исключительно компактны и мобильны. На один компакт-диск можно поместить вполне приличную библиотеку. А если это DVD-диск, то библиотека будет более чем солидной. В мобильный телефон или коммуникатор можно закачать десятки, а то и сотни книг.

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

С распространением электронных книг исчезнет понятие «редкая книга». Читатель более не будет зависеть от каприза издателя, который может переиздать книгу, а может и отказаться. Видите ли, неформат-с… Пипл не хавает… Или же новоявленные тоталитаристы\дерьмократы (нужное подчеркнуть) объявят книгу вредной для неокрепших умов…

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

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

И, конечно же, e-book экономически выгодны. Даже «официальные», лицензионные ЭК стоят гораздо дешевле своих бумажных товарок.

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

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

У бумажной книги есть только два неоспоримых преимущества перед книгой электронной — чтение без каких-либо специальных средств и сравнительная долговечность.

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

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

Еще одним недостатком электронных книг, считается распространенное пиратство. А в Рунете эти понятия вообще стали почти синонимами…

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

===ВАЖНО=======================

Все защиты на медиа-контент ставятся от обычных пользователей. И только от них.

===============================

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

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

Опасность грозит лишь так называемым правообладателям — издательствам и медиа-компаниям, которые паразитируют на авторах. Если автор сможет сам издавать свои произведения, выкладывая их в Сеть, получая за это достойные деньги, необходимость в издателях и тиражировщиках просто исчезнет…

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

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

И чем дороже будут книги, тем больше будет этих снобистских разговоров про шелест страниц, запах типографской краски и «радость настоящего чтения». Пусть. Мы тоже можем сказать, например, что любое устройство с активной матрицей ЖК-экрана, кроме прочих достоинств, нетребовательно к внешнему освещению. Владельцы КПК знают, как клёво с ним сумерничать, когда нет нужды отвлекаться, чтобы пересесть поближе к наливающемуся вечерней синевой окну или включить лампу.

§ 1.2 Многообразие форматов электронных книг

Для начала давайте вспомним, что такое книга.

Толковый словарь Ожегова трактует понятие «книга», как: «Произведение печати (в старину также рукописное) в виде переплетённых листов с каким-либо текстом». [1.1]

Соответствует ли большинство форматов e-book этому определению?

Скорее нет, чем да. Электронная книга — вещь нематериальная. Набор битов в памяти компьютера или гаджета, намагниченных частиц или микроскопических углублений на электронном носителе. Кроме того, надо как-то отделить книги от рабочих документов.

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

Чтобы оценить преимущества и недостатки того или иного формата, необходимо сформулировать свод требований к электронным книгам.

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

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

Масштабируемость. Возможность читать e-book при разных разрешениях экрана и размерах рабочего окна.

Кроссплатформенность. Электронная книга в идеале должна одинаково легко читаться на различных устройствах — от специализированной «читалки» до персонального компьютера.

Конвертируемость. Очень важный параметр, учитывая постоянно меняющиеся стандарты, операционные системы и «железо».

Гипертекст. Тоже весьма существенный для e-book параметр. Возможность мгновенно перейти в нужное место книги, щелкнув по ссылке.

Возможность редактирования. Не обязательно, но желательно. Учитывая «какчество» текстов в онлайн-библиотеках. Хотя, для «лицензионных» книг, эта фича, быть может, и не актуальна. Там достаточно возможностей делать закладки и пометки на полях, которые предоставляет софт для чтения.

Профессиональный издатель обязательно бы добавил в этот список возможность установки DRM, [1.2] но я лично считаю (и большинство читателей, без сомнения, согласятся со мной) что этот элемент совершенно излишний. Если дать волю издателям, они и на бумажные книги начнут ставить защиту, например, покрывать страницы гильоширной [1.3] сеткой, чтобы затруднить распознавание текста программой OCR…

С этими требованиями мы и пройдемся по существующим форматам.

Обычный текст (plaintext) (.TXT)

Текст — он и в Африке текст. Простая последовательность восьмибитных (как правило) значений, каждое из которых соответствует либо символу, либо управляющему коду. Отличается лишь кодировкой и способом перевода строки.

Полиграфичность. Низкая. Набор средств разметки у текста весьма невелик. Форматирование абзацев, отступы и выделение заглавными буквами — вот, пожалуй, и все.

Масштабируемость. Все зависит, от того, как сформатирован текст. Если он аккуратно отформатирован по абзацам с выравниванием, то очень низкая. Если же разбиения на строки нет — «один абзац — одна строка» — тогда масштабируемость высокая.

Кроссплатформенность. Практически абсолютная.

Конвертируемость. Практически абсолютная.

Гипертекст. Нет.

Возможность редактирования. Абсолютная.

Формат txt активно использовался на заре электроных библиотек, при создании всевозможных сборников книг («Библиотека в кармане», «HarryFan Text Collection», и прочие). Сейчас книги в формате txt можно найти, пожалуй, лишь в библиотеке Максима Мошкова, (да и то перед подачей их пользователю они преобразуются в HTML) и в некоторых небольших библиотеках.

Rich Text Format (.RTF)

Этот формат был специально разработан компанией Micro$oft в 1987 году для переноса текста с разметкой из одной программы в другую. В таком качестве он используется и по сей день. RTF понимают практически все современные текстовые редакторы и издательские системы.

Полиграфичность. Выше среднего.

Масштабируемость. Почти абсолютная.

Кроссплатформенность. Очень высокая.

Конвертируемость. Очень высокая.

Гипертекст. Нет.

Возможность редактирования. Абсолютная.

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

Документ Micro$oft Word (.DOC)

Формат DOC — это внутренний формат Micro$oft Word и предназначен для хранения текстовых документов, подготовленных в этой программе. Распространенность Micro$oft Office и Micro$oft Word как его части, обусловила широкое распространение формата DOC.

Полиграфичность. Высокая.

Масштабируемость. Высокая.

Кроссплатформенность. Ниже среднего.

Конвертируемость. Высокая.

Гипертекст. Присутствует.

Возможность редактирования. Абсолютная.

По скромному мнению автора, документы Word используют в качестве e-book только по одной причине — авторам книги (или сканнеристам ;)) ) просто-напросто лень конвертировать его в более удобочитаемый формат.

Документы HTML (.HTM; .MHT; .CHM)

Язык HTML (HyperText Markup Language) был создан  для отображения информации в сети Интернет.

Полиграфичность. Высокая.

Масштабируемость. Очень высокая.

Кроссплатформенность. Практически абсолютная.

Конвертируемость. Практически абсолютная.

Гипертекст. Разумеется, есть.

Возможность редактирования. Абсолютная.

Хотя НTML позволяет неплохо оформить текстовый документ, он все же не слишком подходит для e-book. Далеко не всем нравится читать книги в браузере. При использовании же программы-ридера, HTML, как правило, конвертируется в обычный текст и теряет все свои преимущества.

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

В частности, очень эффектно смотрятся в CHM компьютерные руководства издательства O'Reilly. Наличие глоссария и контекстного поиска сильно облегчает работу.

Однако, все эти достоинства CHM перечеркивает большой недостаток. Это формат справки и он жестко ориентирован на Windows. Решит Micro$oft поменять формат справки в следующей версии «форточек» и с накопленным объемом книг придется попрощаться.

Конечно, как для любого мало-мальски популярного формата, для CHM существуют альтернативные средства просмотра. Та же кроссплатформенная читалка FBReader. И декомпилировать его, в случае надобности, задача тривиальная. Но это уже получаются шаманские пляски.

* * *

У всех вышеперечисленных форматов есть один существенный недостаток — они ИЗНАЧАЛЬНО НЕ ПРЕДНАЗНАЧАЛИСЬ для создания электронных книг. Созданные на их основе файлы даже не являются книгами — это просто текстовые документы.

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

Форматы, описанные далее, уже требуют установки специальных программных средств для их просмотра.

Adobe Acrobat (.PDF).

Первоначально PDF разрабатывался для нужд полиграфии. В основном для платформенно-независимого переноса макетов. В последние годы интенсивно продвигается как формат для создания e-book.

Полиграфичность. Абсолютная. Для того и был разработан. Как следствие, PDF-файлы могут быть весьма увесистыми.

Масштабируемость. Низкая! На портативных устройствах читать PDF проблематично.

Кроссплатформенность. Cредняя.

Гипертекст. Есть.

Возможность редактирования. Низкая. К тому же, для этого нужно устанавливать громоздкий Adobe Acrobat.

Основной аргумент против массового применения PDF для изготовления e-book — это большой объем файла и неудобство чтения на портативных устройствах.

Впрочем, качественные книги и журналы, сформатированные на страницы размером более A5, трудновато читать даже на 21'' мониторах.

===============================

Вообще, формат PDF предназначен, в первую очередь, ДЛЯ ВЫВОДА НА ПЕЧАТЬ.

===============================

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

DeJaVU (.DJVU)

Формат DJVU был создан компанией АТ&T специально для компактного представления информации в Internet. Подобно MP3 и Divx, он пришелся ко двору и произвел маленькую революцию в деле свободного распространения контента.

Полиграфичность. Высокая.

Масштабируемость. Весьма средняя. Зависит от того, насколько хорошо программа-просмотрщик поддерживает anti-aliasing. [1.4]

Кроссплатформенность. Средняя.

Конвертируемость. Ниже среднего.

Гипертекст. Есть подобие.

Возможность редактирования. Средняя.

Формально, файлы созданные с использованием DJVU трудно называть книгами. Это, по существу, растровый многостраничный графический файл. При его создании специальные алгоритмы отделяют текст от фона и иллюстраций, после чего они сжимаются с различным разрешением. Что и обеспечивает чрезвычайно высокое сжатие картинки (примерно 1:500) при более чем приемлемом качестве изображения. Эти свойства делают его идеальным для множества сканированных компьютерных (и не только) руководств и пособий, которыми сейчас завалены варезные сайты (такие книги еще называют «освобожденными» ;)) ). Ведь, если книга содержит примеры исходников программ, формулы, схемы или сложные таблицы, то даже незначительные ошибки при OCR могут непоправимо испортить ее. A DJVU позволяет представить книгу «как есть».

Причем интересы читателей, привыкших парой щелчков копировать нужный кусок текста в буфер, тоже учтены. Последние версии формата DJVU могут содержат чисто текстовый слой.

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

Закрытые специализированные форматы

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

К ним можно отнести Rocket e-book (.rb), Micro$oft Reader (.lit), PalmDoc, MobiPocket (.prc), Jinke Book Wolf (.wol) и т.д. Плюс, некоторые программы для чтения норовят сконвертировать текст в свой собственный, ни с чем не совместимый формат (IceBook Professional на PC, iSilo и Weasel на Palm и прочие). Правда, при близком рассмотрении оказывается, что это все те же HTML, RTF или txt (некоторое исключение составляет формат ExeBook, который конвертирует текст книги в исполняемый файл, содержащий набор растровых картинок), как правило, упакованные для компактности, и снабженные служебной областью, где могут храниться, например, закладки. Также (и чаще, чем хотелось бы) может быть добавлена DRM.

Полиграфичность. Зависит от конкретного формата. Средняя или выше среднего.

Масштабируемость. Средняя или выше среднего.

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

Конвертируемость. Низкая. Обычно только через софт, опять же написанный энтузиастами.

Гипертекст. Чаще всего есть.

Возможность редактирования. Низкая или вообще никакая.

И, наконец…

Специализированные открытые форматы на основе XML

Что такое XML, подробно описано ниже. Сейчас нас интересуют лишь сравнительные характеристики формата.

Полиграфичность. Высокая. Правда, всецело зависит от программы-ридера.

Масштабируемость. Почти абсолютная.

Кроссплатформенность. Практически абсолютная.

Конвертируемость. Практически абсолютная.

Гипертекст. Есть.

Возможность редактирования. Как правило, абсолютная.

Как видим, язык XML имеет наилучшее сочетание качеств, необходимых для e-book. Поэтому попытки делать e-book на его основе уже предпринимались неоднократно и небезуспешно.

В отличие от txt, RTF, DOC, HTML, PDF, и т.д. которые однозначно ориентированы на отображение или хранение текстовых данных, форматы на основе XML позволяют структурировать книгу.

Известны форматы OEB (Open E-Book), DocBook, e-Pub и другие. Но наиболее популярным (по крайней мере, в Рунете) является FictionBook.

§ 1.3 Несколько слов о XML

Расширяемый язык разметки — eXtensible Markup Language, был создан для хранения структурированных данных в текстовом формате. Теоретически файлы XML должны легко читаться, как программным обеспечением, так и человеком.

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

На базе XML уже создано большое количество подмножеств для решения конкретных задач. Например, есть реализация HTML средствами XML — XHTML, язык для записи математических формул и выражений (MathML), язык для химических формул, для медицинской электронной документации. Новый формат файлов пакета M$ Office 2007 представляет собой не что иное, как пачку XML-документов, которые сохраняются в одном архиве.

Кроме того, поскольку любые данные в XML — это обычный текст, то и работать с ними можно как с текстом: готовить XML-документы в notepad, а в случае потери какой-либо части данных с остальными можно будет по-прежнему работать.

В отличие от HTML, набор средств разметки (тэгов) в XML не фиксирован, и может быть произвольным.

Разумеется, это должно как-то описываться. Поэтому в XML есть такое понятие, как «спецификация», DTD (Document Type Definition — описание типа документа) — документ, в котором описана структура XML-подмножества. В настоящее время на смену DTD пришла XML Schema.

Если возникнет необходимость, XML легко преобразовать в любой другой формат. Для этого существует XSLT — eXtensible Stylesheet Language Transformation — расширяемый язык стилей.

Вот, к примеру, реализация адресной книги на базе XML.

<?xml version="1.0" encoding="UTF-8"?>

<AddressBook>

<contact>

<persone>

<name>Василий</name>

<patronymic>Иванович<patronymic>

<surname>Пупкин</surname>

<address>пер. Кривоколенный, 5-15</address>

<phone type="home">555-22-11</phone>

<phone type="mobile">736-11-22</phone>

<e-mail>pupkin@pisem.net</e-mail>

</persone>

</contact>

<contact>

<organization>

<type-org>Кооператив</type-org>

<name-org>Рога и Копыта</name-org>

<address>ул. Малая Арнаутская, 12</address>

<phone type="work">202-33-20</phone>

<phone type="work">202-32-00</phone>

<site>http://www.horn&hoof.ua</site>

<e-mail>mail@horn&hoof.ua</e-mail>

</organization>

</contact>

</AddressBook>

Как видим, сам документ имеет древовидную структуру и состоит из вложенннных элементов.

Первая строка является признаком XML и содержится во всех документах.

Элемент — это данные, ограниченные парой тэгов. <tag> и </tag>.

Кроме данных, элементы могут содержать в себе атрибуты — например, у элемента phone есть атрибут type, который может принимать фиксированные значения «home», «work» и «mobile».

Вместо пары тэгов для обозначения границ элемента может использоваться один тэг вида <tag/>, но тогда у такого элемента не может быть данных и вложенных элементов.

Стандарт XML предписывает, чтобы у «дерева» элементов был корневой элемент, который будет содержать внутри себя все остальные. Корневой элемент должен быть единственным, то есть XML-документ, где два и больше корневых элементов, — это документ, сформированный неправильно.

Как видим, все просто и понятно. Документ легко читается и редактируется, а при желании можно написать XSL, трансформирующий его в HTML или RTF.

Давая свободу, XML одновременно предъявляет к документу гораздо более жесткие требования, чем HTML. Одно из ключевых понятий XML — «валидный» документ. Все элементы документа должны быть правильно закрыты, а вложенность их соответстовать спецификации. Конструкции типа <i><b>Text</i></b>, которые легко «проглатывает» HTML, в XML считаются фатальной ошибкой.

§ 1.4 Формат FictionBook — стандарт де-факто для электронных книг

Итак, формат FictionBook…

Сам формат был разработан Дмитрием Грибовым с несколькими соавторами, при поддержке группы энтузиастов.

Он полностью базируется на XML.

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

В отличие от всех не-XML форматов, которые ориентированы на хранение или оформление текстовых данных, в FictionBook упор сделан на структурирование документа. То есть с помощью тэгов выделяются области текста: это — глава, это — заголовок, это — эпиграф, а вот это — цитата. А как все «это» будет выглядеть на экране, зависит от программы-ридера. Впрочем, на случай, если потребуется оформить книгу строго определенным образом, предусмотрена возможность присоединения таблицы стилей.

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

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

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

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

Еще одно достоинство FictionBook — книги в этом формате отлично поддаются каталогизации. Опираясь на встроенную систему описания книги, можно с легкостью создать как домашнюю, так и сетевую электронную библиотеку любого масштаба.

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

Никаких проблем. Разработанные авторами формата и энтузиастами программные средства позволяют эффективно конвертировать книги из форматов txt, HTML, RTF (doc).

Если же, наоборот, возникнет необходимость преобразовать книгу в формате FictionBook в другой формат, то «штатный» конвертор FB2Any неплохо справляется с преобразованием FB2 не только в классические txt и RTF, но и в специализированные форматы Roсket Book, iSilo, Micro$oft Reader. Еще не успел устояться новомодный формат для аппаратных читалок Wolf, как появились сразу несколько программ для конвертации книг fb2 в этот формат. А стоило читалкам пойти в массы, как для них появились прошивки, напрямую поддерживающие FB2. Читалки же с Linux-начинкой (Irex Reader, PocketBook 301, PocketBook 360) вообще дружат с FB2 от рождения.

Таким образом, формат FictionBook обладает всеми качествами, чтобы стать единым стандартом для e-Book. И, фактически, уже стал им. Использование FB2 в русскоязычных онлайн-библиотеках, подтвердило его функциональность и жизнеспособность.

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

После прочтения этого панегирика у читателя возникает справедливый вопрос:

Если FictionBook так хорош, то почему им не пользуются все?

Потому что развитие и, самое главное, продвижение формата целиком зависит от горстки энтузиастов.

Недосуг стало Михаилу Мацневу заниматься HaaliReader и FB Tools и все фактически замерло.

Впрочем, сейчас намечаются перемены к лучшему. Появляются новые программы для чтения, конверторы, и даже редакторы. Формат FictionBook попал под крыло компании «ЛитРес», правда, до сих пор, нельзя однозначно сказать, хорошо это или плохо.

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

Версия 2.1

Первая версия формата была слишком сыра и малофункциональна. Ей не удалось завоевать сколь-либо заметной популярности, хотя некоторые сетевые библиотеки, в частности, библиотека Мухомора, все же перешли на него. В 2003 г. на смену  версии 1.0 пришла версия 2.0, в которой большинство недочетов было исправлено. А через год появилась актуальная до сих пор версия 2.1.

В нее было введено много новых и полезных элементов, как-то:

1. В заголовке появился новый необязательный раздел <src-title-info>, полностью идентичный по структуре <title-info>. Он используется в том случае, если книга переводная, и позволяет описать оригинал.

2. Четыре новых способа форматирования текста: <sub> (нижний индекс), <sup> (верхний индекс), <code>(преформатированный текст), <strikethrough> (зачеркнутый текст).

3. <text-author> теперь может содержать любое форматирование и ссылки, наравне с <p>.

4. Добавлена схема управления конвертацией платных документов.

5. Переработан список жанров.

6. Добавлен новый элемент — таблицы!

7. Добавлены атрибуты title и id для <image/>, предназначенный для подписей к картинкам и ссылок на картинки соответственно. Inline картинки и картинки в <coverpage>, по прежнему, никаких id и подписей не имеют.

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

Поэтому все нововведения оказались «сбоку припеку». Они не используются, и кое-кто из пользователей уже поговаривает, что неплохо бы их вообще убрать. Что, надеюсь, сделано не будет.

Отсюда напрашивается категорический вывод, что выпуск давно анонсированной версии формата 3.0 должен сопровождаться выходом обновленных версий стандартной читалки, и не менее стандартного редактора. И читалка, и редактор, должны корректно поддерживать все особенности формата и, кроме того, они должны быть совместимы по формату закладок. Последняя «фича» крайне важна для вычитки текстов. Также, в обязательном порядке, должен быть, опять же, стандартный, пакет скриптов для сетевых библиотек. Иначе все улучшения и нововведения просто теряют всякий смысл.

Дальнейшее развитие формата.

Версии 2.2 и 2.21

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

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

1. В authorType добавлено поле id, которое может присутствовать наряду с остальными полями. Предназначено для однозначной идентификации авторов в библиотеке. Содержимое аналогично ID книги.

2. В document-info добавлен необязательный узел publisher типа authorType — правообладатель.

В январе 2008 г. изменения претерпел список жанров. Был убран жанр sci_business  (Деловая литература), вместо него  добавлен целый раздел c жанрами job_hunting (Поиск работы, карьера), management (Управление, подбор персонала), marketing (Маркетинг, PR, реклама), banking (Банковское дело), stock (Ценные бумаги, инвестиции), accounting (Бухучет, налогообложение, аудит), global_economy (Внешнеэкономическая деятельность), economics (Экономика), industries (Отраслевые издания), org_behavior (Корпоративная культура), personal_finance (Личные финансы), real_estate (Недвижимость).

Еще стало возможным добавление подзаголовков в стихи.

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

FictionBook 3 — прорыв или тупик?

Время идет неумолимо, а лучшее — злейший враг хорошего. В июле 2008-го, «без труб и барабанов», была анонсирована третья версия формата.

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

Книга FB3 представляет собой zip-файл, в котром хранятся отдельными файлами мета-информация (description), текст книги, а также графические дополнения. Среди поддерживаемых форматов заявлены GIF, PNG, JPEG и SVG.

 Связи между файлами теперь осуществляются не через xlink, а с помощью механизма отношений (в основу fb3 положен стандарт Open Packaging Convention (ECMA-376 Part 2).

Отныне формат будет полноценно поддерживать подшивки — несколько книг в одном файле.

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

Форматированние текста книги также претерпело существенные изменения. Добавлены списки — нумерованные и ненумерованные. Переработан механизм сносок.

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

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

Главное достоинство FictionBook остается неизменным: максимальная ориентация на полноценную и эффективную переносимость книги на любое устройство, с ограниченными ресурсами, черно-белым или небольшим дисплеем и т.п. Единожды сверстанная книга должна быть читаема на любой аппаратной базе.

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

Желающие узнать больше могут ознакомиться с соответствующей статьей Дмитрия Грибова на FictionBook.org, краткий пересказ которой вы, собственно, сейчас и прочли.

От себя же вынужден отметить, что, несмотря на столь выдающиеся задатки, будущее формата весьма туманно.

Во-первых, неоспоримо, что на инновационный формат будет «давить» уже накопленная масса книг. Пусть даже конвертация FB2 в FB3, стараниями Дмитрия Грибова, будет тривиальной задачей. Но перелопачивание прорвы книг растянется на годы. Именно большой объем имеющихся данных в свое время помешал новым форматам VQF, MP3 Pro, а затем и OggVorbis вытеснить MP3.

Кроме того, за бугром уже стал офицальным стандартом весьма зубастый конкурент — e-Pub. Конечно, можно успокаивать себя, что в Рунете он не прижился. Но продвижение FB3 за рубеж он может подпортить самым решительным образом.

Конечно, за FB3 стоит уже не горстка энтузиастов, а солидная компания — «ЛитРес». Что добавляет в нашу бочку мёда еще один черпачок дёгтя.

Велик соблазн сделать из FB3 чисто коммерческий формат. Тем более, что навесить DRM на zip-архив на порядок проще, чем на текстовый XML. Конечно, навряд ли FB3 станет закрытым форматом. Это, как говорится, из области фантастики. Но в том, что продвинутые средства разработки останутся монополией «ЛитРес»-а, можно даже не сомневаться. Что, несомненно, «добавит» формату привлекательности.

Впрочем, автор книги искренне надеется, что последние абзацы так и останутся параноидальными домыслами, а FB3 сравнится по популярности с MP3. К вящей радости читателей…

Часть II
Подробное описание формата FictionBook

§ 2.1 Структура файла FictionBook.
Базовые понятия

Книга FictionBook представляет собой XML-файл.

Структурно этот файл можно разделить на три части.

1) Desсription — заголовок (описание) книги;

2) Body — непосредственно текст книги. В книге может быть несколько body.

3) Binary — необязательная часть. Содержит бинарные файлы, в кодировке BASE64. [2.1] Как правило, это картинки.

§ 2.2 Пример книги в формате FictionBook

Cпецификация (schema) FictionBook находится на сайте Дмитрия Грибова, а также входит в комплект FB Tools. Поэтому размещать ее в электронной версии книги смысла нет.

Но пример книги в формате FictionBook привести необходимо:

<?xml version="1.0" encoding="windows-1251"?>

<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">

 <description>

  <title-info>

   <genre>reference</genre>

   <author>

    <first-name>Имя автора</first-name>

    <last-name>Фамилия автора</last-name>

    <nickname>Юзич</nickname>

   </author>

   <book-title>Пример книги в формате FictionBook 2.1</book-title>

   <annotation>

    <p>Это пример книги в формате FictiionBook</p>

   </annotation>

   <date value="2006-04-14">14 апреля 2006 г.</date>

   <lang>ru</lang>

  </title-info>

  <document-info>

   <author>

    <nickname>Юзич</nickname>

   </author>

   <program-used>FB Tools</program-used>

   <date value="2006-04-14">2006-04-14</date>

   <id>1E693E16-8A80-4391-9800-C1A91A5E29A7</id>

   <version>1.0</version>

   <history>

    <p>v 1.0 — создание книги (Юзич)</p>

   </history>

  </document-info>

 </description>

 <body>

  <title>

   <p>Юзич</p>

   <p>ПРИМЕР КНИГИ В ФОРМАТЕ FictionBook 2.1</p>

  </title>

  <epigraph>

   <p>Это эпиграф</p>

   <text-author>Автор эпиграфа</text-author>

  </epigraph>

  <section>

   <title>

    <p>Первая секция</p>

   </title>

   <p>Секции обычно содержат текст.</p>

   <empty-line/>

   <p>Текст может разделяться пустыми строками.</p>

   <subtitle>Подзаголовок</subtitle>

   <p>Или подзаголовками.</p>

  </section>

  <section>

   <title>

    <p>Вторая секция</p>

   </title>

   <section>

    <title>

     <p>Первая вложенная секция</p>

    </title>

    <p>Текст может быть <strong>полужирным</strong> или <emphasis>курсивным</emphasis>.</p>

    <p>Содержать <a l:href="#Sect3">линки</a> и <a l:href="#note01" type="note">[сноски]</a>.</p>

    <p>В тексте могут быть картинки.</p>

    <image l:href="#sampl.png"/>

    <empty-line/>

   </section>

   <section>

    <title>

     <p>Вторая вложенная секция</p>

    </title>

    <cite>

     <p>Это цитата.</p>

     <text-author>Автор цитаты.</text-author>

    </cite>

    <p>Снова текст.</p>

   </section>

  </section>

  <section id="Sect3">

   <title>

    <p>Третья секция</p>

   </title>

   <p>Стихи:</p>

   <poem>

    <title>

     <p>Парус</p>

    </title>

    <stanza>

     <v>А у дельфина взрезано брюхо винтом.</v>

     <v>Выстрела в спину не ожидает никто.</v>

     <v>На батарее нету снарядов уже.</v>

     <v>Надо быстрее на вираже.</v>

    </stanza>

    <stanza>

     <v>Но парус! Порвали парус!</v>

     <v>Каюсь! Каюсь! Каюсь!</v>

    </stanza>

    <text-author>Владимир Высоцкий</text-author>

   </poem>

   <p>Снова обычный текст.</p>

  </section>

 </body>

 <body name="notes">

  <title>

   <p>Примечания</p>

  </title>

  <section id="note01">

   <title>

    <p>1</p>

   </title>

   <p>Текст сноски.</p>

  </section>

 </body>

 <binary id="sampl.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAMAAAAcEyWHAAAABGdBTUEAAK/INwWK6QAAABl0

RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAGUExURQEBAf///+tZAq0AAAAY

SURBVHjaYmBAAEZGRjDGzsKvDgYAAgwABR4AH2mwMFgAAAAASUVORK5CYII=</binary>

</FictionBook>

§ 2.3 Элементы описания книги.
Базовые структурные элементы

В самом начале любого файла книги идет признак формата XML

<?xml version="1.0" encoding="windows-1251"?>

Здесь указана сигнатура принадлежности к формату XML, его версия и кодировка файла. Для русскоязычных FictionBook это обычно windows-1251 или utf-8. [2.2]

За ним в обязательном порядке следует:

Элемент FictionBook

Корневой элемент.

Cинтаксис: <FictionBook>content</FictionBook>.

Фактически, всегда используется в виде:

<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">

content

</FictionBook>.

Используется в элементах: корневой элемент

Вложенные элементы: stylesheet, description, body, binary

Количество вхождений: одно

Атрибуты: xmlns

Версия формата: 2.0

Пример: см. пример книги FictionBook, § 2.2

Элемент stylesheet

Список стилей, позволяющих конкретно определить, как будет выглядеть книга на экране устройства для чтения. До последнего времени читалками не поддерживался и практически не использовался. Лишь в конце 2007 года появился CoolReader 3.09 с экспериментальной поддержкой stylesheet.

Cинтаксис: <stylesheet>content</stylesheet>.

Используется в элементах: FictionBook

Вложенные элементы: нет

Количество вхождений: одно или отсутствует.

Атрибуты: type

Версия формата: 2.0

Пример:

 <stylesheet type="text/css">

 .body{font-family : Verdana, Geneva, Arial, Helvetica, sans-serif;}

 .p{margin:0.5em 0 0 0.3em; padding:0.2em; text-align:justify;}

 </stylesheet>

Элемент description

Заголовок (описание) книги.

Cинтаксис: <description>content</description>.

Используется в элементах: FictionBook

Вложенные элементы: title-info, src-title-info, document-info, publish-info, custom-info, output

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример:

<description>

  <title-info>

   <genre>nonfiction</genre>

   <author>

    <first-name>Имя автора</first-name>

    <last-name>Фамилия автора</last-name>

   </author>

   <book-title>Название книги</book-title>

   <date>2007 г.</date>

   <lang>ru</lang>

  </title-info>

  <document-info>

   <author>

    <nickname>Юзич</nickname>

   </author>

   <program-used>FB Tools</program-used>

   <date value="2006-07-10">2006-07-10</date>

   <id>46C35002-014D-4AE4-8FE4-5E7881D72B0D</id>

   <version>1.0</version>

  </document-info>

 </description>

Элемент body

Тело книги. Допускаются дополнительные body для примечаний и дополнительных материалов.

Cинтаксис: <body>content</body>.

Используется в элементах: FictionBook

Вложенные элементы: image, title, epigraph, section

Количество вхождений: одно и более

Атрибуты: name

Версия формата: 2.0

Пример:

<body>

  <title>

   <p>Заголовок</p>

  </title>

  <section>

   <p>Текст.</p>

  </section>

 </body>

Элемент binary

Содержит бинарные элементы, присоединяемые к файлу книги. Как правило, это картинки.

Cинтаксис: <binary>content</binary>.

Используется в элементах: FictionBook

Вложенные элементы: нет

Количество вхождений: произвольное

Атрибуты: id (обязательный), content-type (обязательный)

Версия формата: 2.0

Пример:

<binary id="sampl.png" content-type="image/png">

iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAMAAAAcEyWHAAAABGdBTUEAAK/INwWK6QAAABl0

RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAGUExURQEBAf///+tZAq0AAAAY

SURBVHjaYmBAAEZGRjDGzsKvDgYAAgwABR4AH2mwMFgAAAAASUVORK5CYII=

</binary>

§ 2.4 Элементы описания книги (description). Элементы первого уровня

Элемент title-info

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

Cинтаксис: <title-info>content</title-info>.

Используется в элементах: description

Вложенные элементы: genre, author, book-title, annotation, keywords, date, coverpage, lang, src-lang, translator, sequence

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример:

  <title-info>

   <genre>sf</genre>

   <author>

    <first-name>Ник</first-name>

    <last-name>Перумов</last-name>

   </author>

   <book-title>Череп на рукаве</book-title>

   <annotation>

    <p>Этот роман — фантастический боевик, написанный в лучших традициях жанра. Герой книги — Руслан Фатеев, уроженец планеты Новый Крым, — идеальный солдат грядущей войны с Чужими, жуткими и загадочными монстрами, остановить которых не в силах никто и ничто. Но это будет потом, а пока форма имперского десантника, до боли напоминающая форму солдат вермахта времен Второй мировой, ложится на его плечи как клеймо предателя, покинувшего свой дом и вступившего в ряды оккупантов.</p>

   </annotation>

   <date>2002</date>

   <coverpage>

    <image l:href="#cover.jpg"/></coverpage>

   <lang>ru</lang>

   <sequence name="Империя превыше всего" number="01"/>

  </title-info>

Элемент src-title-info

Аналогично src-title-info содержит базовую информацию о книге-оригинале (для переводных книг).

Здесь наблюдается интересный момент: как title-info, так и src-title-info содержат элемент src-lang. Хотя, по логике, его следовало бы упразднить.

Cинтаксис: <src-title-info>content</src-title-info>.

Используется в элементах: description

Вложенные элементы: genre, author, book-title, annotation, keywords, date, coverpage, lang, src-lang, translator, sequence

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.1

Пример:

<src-title-info>

   <genre>adv_maritime</genre>

   <author>

    <first-name>Robert</first-name>

    <middle-name>Loevis</middle-name>

    <last-name>Stivenson</last-name>

   </author>

   <book-title>Treasure Island</book-title>

   <date>1896</date>

   <lang>en</lang>

  </src-title-info>

Элемент document-info

Информация о самом файле FictionBook — кем, когда  и с помощью каких программных средств создана данная электронная книга.

Cинтаксис: <document-info>content</document-info>.

Используется в элементах: description

Вложенные элементы: author, program-used, date, src-url, src-ocr, id, version, history

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример:

<document-info>

   <author>

    <nickname>Юзич</nickname>

    <email>Duzz-scrbs@rambler.ru</email>

   </author>

   <program-used>FB Tools</program-used>

   <date value="2006-06-29">2006-05-22</date>

   <src-url>http://hungryewok.narod.ru/</src-url>

   <src-ocr>OCR: Голодный Эвок Грызли; SpellCheck: Юзич</src-ocr>

   <id>86F8C27D-9F15-4DE7-8751-12AE057CA4DC</id>

   <version>1.0</version>

   <history>

    <p>v 1.0 — вычитка, конвертация в FB2 (Юзич)</p>

   </history>

Элемент publish-info

Информация о бумажном оригинале книги, если таковой существовал в природе.

Cинтаксис: <publish-info>content</publish-info>.

Используется в элементах: description

Вложенные элементы: book-name, publisher, city, year, isbn, sequence

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример:

<publish-info>

   <book-name>С. Павлов «Лунная радуга»</book-name>

   <publisher>Детская литература</publisher>

   <city>Москва</city>

   <year>1989</year>

   <isbn>5-08-000842-3</isbn>

   <sequence name="Библиотека приключений и научной фантастики"/>

  </publish-info>

Элемент custom-info

Произвольная дополнительная информация.

Cинтаксис: <custom-info>текст</custom-info>.

Используется в элементах: description

Вложенные элементы:

Количество вхождений: одно или отсутствует

Атрибуты: info-type (обязательный)

Версия формата: 2.0

Пример:

  <custom-info info-type="На правах рекламы:">Сайт Голодного Эвока Грызли — лучшее в Рунете собрание книг по «Звёздным Войнам»!</custom-info>

§ 2.5 Элементы описания книги (description). Элементы второго уровня

Элемент genre

Жанр произведения.

Содержимое элемента строго фиксировано и определяется файлом FictionBookGenres.xsd, входящим в состав спецификации FictionBook.

Список жанров с переводом приведен в Приложении В.

Cинтаксис: <genre>фиксированное значение</genre>.

Используется в элементах: title-info, src-title-info

Вложенные элементы: нет

Количество вхождений: одно или более

Атрибуты: match

Версия формата: 2.0

Пример:

<genre>sf_action</genre>

   <genre match="30">sf_space</genre>

Элемент author

Автор произведения или создатель электронной книги.

Согласно спецификации, существуют два варианта правильного заполнения элемента. В первом случае, обязательно должны быть заполнены поля «Имя» и «Фамилия» (элементы first-name и last-name). Во втором — поле «Ник» (элемент nickname).

Cинтаксис: <author>Content</author>.

Используется в элементах: title-info, src-title-info, document-info

Вложенные элементы: first-name, middle-name, last-name, nickname, home-page, email

Количество вхождений: одно или более

Атрибуты: нет

Версия формата: 2.0

<author>

    <first-name>Михаил</first-name>

    <middle-name>Иосифович</middle-name>

    <last-name>Кондратович</last-name>

    <nickname>Юзич</nickname>

    <home-page>http://www.yuzzich.narod.ru</home-page>

    <email>yuzzich@yandex.ru</email>

   </author>

Элемент book-title

Название книги.

Cинтаксис: <book-title>текст</book-title>.

Используется в элементах: title-info, src-title-info

Вложенные элементы:

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента title-info

Элемент annotation

Аннотация. Краткое текстовое описание книги

Cинтаксис: <annotation>content</annotation>.

Используется в элементах: title-info, src-title-info, section

Вложенные элементы: p, poem, cite, subtitle, table, empty-line

Количество вхождений: одно или отсутствует

Атрибуты: id

Версия формата: 2.0

Пример: см. пример элемента title-info

Элемент keywords

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

Слова должны быть характерными для конкретного произведения.

Cинтаксис: <keywords>текст</keywords>.

Используется в элементах: title-info, src-title-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример:

<keywords>Лунная радуга, Анарда, экзот, гурм, МУКБОП, Япет, Казаранг</keywords>

Элемент date

Дата написания книги или создания файла.

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

Элемент date предусмотрен также и в стихотворениях, но из-за отсутствия поддержки в редакторах там не используется.

Cинтаксис: <date>текст</date>.

Используется в элементах: title-info, src-title-info, document-info, poem

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: value

Версия формата: 2.0

Пример:

<date value="1989-01-01">Красноярск, июнь 1989</date>

Элемент coverpage

Картинка обложки. Содержит внутри элемент image, в который непосредственно и находится ссылка на bin-объект. Элементов image может быть несколько.

Cинтаксис: <coverpage><image/></coverpage>

Используется в элементах: title-info, src-title-info

Вложенные элементы: image

Количество вхождений:  одно или отсутствует.

Атрибуты: нет

Версия формата: 2.0

Пример:

   <coverpage>

    <image l:href="#cover.jpg"/></coverpage>

Элемент lang

Язык, на котором написана книга.

Список возможных значений приведен в Приложении Г.

Cинтаксис: <lang>по возможности, фиксированное значение</lang>

Используется в элементах: title-info, src-title-info

Вложенные элементы: нет

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример:

   <lang>ru</lang>

Элемент src-lang

Язык, на котором написан оригинал (для переводных книг).

Список возможных значений приведен в Приложении Г.

Cинтаксис: <src-lang>по возможности, фиксированное значение</src-lang>

Используется в элементах: title-info, src-title-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример:

<src-lang>en</src-lang>

Элемент translator

Информация о переводчике  (для переводных книг).

Cинтаксис: <translator>content</translator>

Используется в элементах: title-info, src-title-info

Вложенные элементы: first-name, middle-name, last-name, nickname, home-page, email

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемент author

Элемент sequence

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

Cинтаксис: <sequence/> или <sequence><sequence/></sequence>

Используется в элементах: title-info, src-title-info

Вложенные элементы: sequence

Количество вхождений: произвольное

Атрибуты: name (обязательный), number

Версия формата: 2.0

Пример:

<sequence name="Звёздные Войны">

    <sequence name="Адмирал Траун" number="2"/>

   </sequence>

Элемент program-used

Программное обеспечение, использовавшееся при создании книги.

Cинтаксис: <program-used>текст</program-used>

Используется в элементах: document-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример:

   <program-used>FB Tools, EmEditor, hands.drv & brain.sys</program-used>

Элемент src-url

Ссылка на сайт, если исходный текст книги был скачан из Интернета.

Cинтаксис: <src-url>текст</src-url>

Используется в элементах: document-info

Вложенные элементы: нет

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.0

Пример:

<src-url>http://www.natahaus.ru</src-url>

Элемент src-ocr

Информация о людях, которые сканировали (набирали) и вычитывали книгу.

Cинтаксис: <src-ocr>текст</src-ocr>

Используется в элементах: document-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример:

<src-ocr>OCR Zmiy; SpellCheck Юзич</src-ocr>

Элемент id

Уникальный идентификационный номер книги.

Cинтаксис: <id>текст</id>

Используется в элементах: document-info

Вложенные элементы: нет

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример:

<id>B3627A48-7F9C-400E-8CD7-0159B75F1A14</id>

Элемент version

Номер версии файла.

Cинтаксис: <version>число</version>

Используется в элементах: document-info

Вложенные элементы: нет

Количество вхождений: одно

Атрибуты: нет

Версия формата: 2.0

Пример:

<version>1.0</version>

Элемент history

История изменений,  вносившихся в файл.

Cинтаксис: <history>Content</history>

Используется в элементах: document-info

Вложенные элементы: p, poem, cite, subtitle, table, empty-line

Количество вхождений: одно или отсутствует

Атрибуты: id

Версия формата: 2.0

Пример:

   <history>

    <p>v 1.0 — вычитка, конвертация в FB2 (Юзич)</p>

    <p>v 1.1 — дополнительное форматирование (Faiber)</p>

    <p>v 1.2 — дополнительная вычитка (Юзич)</p>

    <p>v 1.3 — дополнительная вычитка  (Юзич)</p>

    <p>v 1.4 — окончательная (надеюсь!) вычитка  (Юзич)</p>

   </history>

Элемент book-name

Название бумажного оригинала.

Cинтаксис: <book-name>текст</book-name>

Используется в элементах: publish-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента publish-info

Элемент publisher

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

Используется в элементах: publish-info

Cинтаксис: <publisher>текст</publisher>

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента publish-info

Элемент city

Город, в котором был издан бумажный оригинал.

Cинтаксис:<city>текст</city>

Используется в элементах: publish-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента publish-info

Элемент year

Год выхода бумажного оригинала

Cинтаксис: <year>текст</year>

Используется в элементах: publish-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента publish-info

Элемент isbn

ISBN-код бумажного оригинала.

Cинтаксис: <isbn>текст</isbn>

Используется в элементах: publish-info

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента publish-info

§ 2.6 Элементы описания книги (description). Элементы третьего уровня (информация об авторе)

Элемент first-name

Имя автора книги или документа, а также переводчика.

Cинтаксис: <first-name>текст</first-name>

Используется в элементах: author, translator

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента author, § 2.5

Элемент middle-name

Отчество автора книги или документа, а также переводчика.

Cинтаксис: <middle-name>текст</middle-name>

Используется в элементах: author, translator

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента author, § 2.5

Элемент last-name

Фамилия автора книги или документа, а также переводчика.

Cинтаксис: <last-name>текст</last-name>

Используется в элементах: author, translator

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента author, § 2.5

Элемент nickname

Ник (сетевой псевдоним) автора книги или документа, а также переводчика.

Cинтаксис: <nickname>текст</nickname>

Используется в элементах: author, translator

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента author, § 2.5

Элемент home-page

Адрес персонального сайта автора книги или документа, а также переводчика.

Cинтаксис: <home-page>текст</home-page>

Используется в элементах: author, translator

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента author, § 2.5

Элемент email

Адрес электронной почты автора книги или документа, а также переводчика.

Cинтаксис: <email>текст</email>

Используется в элементах: author, translator

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты:  нет

Версия формата: 2.0

Пример: см. пример элемента author, § 2.5

§ 2.7 Элементы тела книги (body).

Элемент image

Картинка.

Cинтаксис: <image/>

Используется в элементах: body, section, p

Вложенные элементы: нет

Количество вхождений: одно или отсутствует

Атрибуты: alt, title, id, href (обязательный).

Версия формата: 2.0

Пример:

<image l:href="#n_pride.png"/>

Элемент title

Заголовок книги, раздела или стихотворения. С версии 2.1 — еще и картинки.

Cинтаксис: <title>content</title>

Используется в элементах: body, section, stanza, poem, image (2.1)

Вложенные элементы: p, empty-line

Количество вхождений: одно или отсутствует

Атрибуты: нет

Версия формата: 2.0

Пример:

   <title>

    <p>Ник ПЕРУМОВ</p>

    <p>ЧЕРЕП НА РУКАВЕ</p>

   </title>

Элемент epigraph

Эпиграф.

Cинтаксис: <epigraph>content</epigraph>

Используется в элементах: body, section

Вложенные элементы: p, poem, cite, empty-line, text-author

Количество вхождений: произвольное

Атрибуты: id

Версия формата: 2.0

Пример:

<epigraph>

   <p>Черт побери! Как и все другие, наказанные нами, вы управляетесь законом, который богачи придумали для собственной безопасности. Эти трусливые собачьи души не имеют смелости каким-либо иным способом защитить то, что они мошеннически нахапали. Проклятья и кровь на имуществе этих продувных бестий. Между нами единственное различие: они обирают бедняков под покровительством закона, не так ли? А мы грабим богатых, рассчитывая только на свою храбрость.</p>

   <text-author>Чарльз Беллами, пират</text-author>

</epigraph>

Элемент section

Раздел.

Cинтаксис: <section>content</section>

Используется в элементах: body, section

Вложенные элементы: title, epigraph, image, annotation, section, p, poem, subtitle, cite, empty-line, table

Количество вхождений: одно и более

Атрибуты: id

Версия формата: 2.0

Пример:

  <section>

  <title>

   <p>Заголовок секции</p>

  </title>

   <p>Текст.</p>

  </section>

§ 2.8 Элементы раздела книги (section).
Элементы первого уровня.

Элемент cite

Цитата. Отрывок текста из другого произведения.

В FictionBook с помощью тэга cite также выделяются письма, записки, надписи, списки и еще много чего.

Cинтаксис: <cite>content</cite>

Используется в элементах: section, epigraph, annotation, history

Вложенные элементы: p, poem, empty-line, subtitle, table, text-author

Количество вхождений: произвольное

Атрибуты: id

Версия формата: 2.0

Пример:

<cite>

    <p>«Что происходит в Зеленом Доме? По не подтвержденным, но и не опровергнутым сведениям несколько дней назад внушительная группа боевых ведьм совершила стремительный вояж за пределы Тайного Города. Куда именно? Как ни странно, это осталось загадкой: наши белокурые красавицы изменили традиционной словоохотливости и держат рот на замке. Остальные Великие Дома не проявляют беспокойства…»</p>

    <text-author>(«Тиградком»)</text-author>

   </cite>

Элемент poem

Стихи, песни, баллады и т.д.

Cинтаксис: <poem>content</poem>

Используется в элементах: section, epigraph, cite, annotation, history

Вложенные элементы: title, epigraph, stanza, text-author, date

Количество вхождений: произвольное

Атрибуты: id

Версия формата: 2.0

Пример:

    <stanza>

     <title>

      <p>В тяжелой мантии торжественных обрядов…</p>

     </title>

     <v>В тяжелой мантии торжественных обрядов,</v>

     <v>Неумолимая, меня не встреть.</v>

     <v>На площади, под тысячами взглядов,</v>

     <v>Хочу я умереть.</v>

    </stanza>

    <stanza>

     <v>Чтобы лился на волосы и в губы</v>

     <v>Полуденный огонь.</v>

     <v>Чтоб были флаги, чтоб гремели трубы</v>

     <v>И гарцевал мой конь…</v>

    </stanza>

    <text-author>Марина Цветаева,</text-author>

    <date>Феодосия, 1913</date>

   </poem>

Обращаю ваше внимание, что элемент date не поддерживается редакторами!

Элемент p

Обычный абзац текста.

Cинтаксис: <p>content</p>

Используется в элементах: annotation, history, section, epigraph, cite

Вложенные элементы: a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: id, style

Версия формата: 2.0

Пример:

<p>Cамый обычный текст. </p>

Элемент subtitle

Подзаголовок.

Cинтаксис: <subtitle>content</subtitle>

Используется в элементах: section, stanza, annotation, history

Вложенные элементы: strong, emphasis, style, a, strikethrough, sub, sup, code, image

Количество вхождений: произвольное

Атрибуты: id, style

Версия формата: 2.0

Пример:

<subtitle>* * *</subtitle>

Элемент empty-line

Пустая строка. Может использоваться как «немой» заголовок.

Cинтаксис: <empty-line/>

Используется в элементах: section, epigraph, cite, title, annotation, history

Вложенные элементы: нет

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.0

Пример:

<p>После этого абзаца должна идти пустая строка.</p>

<empty-line/>

Элемент table

Таблицы.

На момент написания книги поддерживается только читалками CoolReader и AlReader.

Cинтаксис: <table>content</table>

Используется в элементах: section, epigraph, annotation, history

Вложенные элементы: tr

Количество вхождений: произвольное

Атрибуты: id, style

Версия формата: 2.1

Пример:

    <table>

     <tr>

      <th>Заголовок 1-го столбца</th>

      <th>Заголовок 2-го столбца</th>

      <th colspan="2">Объединенный заголовок 3-го и 4-го столбцов</th>

      <th>Заголовок 5-го столбца</th>

     </tr>

     <tr>

      <td align="center">1-я ячейка 1-го столбца</td>

      <td rowspan="2">1-я и 2-я ячейки 2-го столбца</td>

      <td align="right">1-я ячейка 3-го столбца</td>

      <td align="right">1-я ячейка 4-го столбца</td>

      <td align="left">1-я ячейка 5-го столбца</td>

     </tr>

     <tr>

      <td align="center">2-я ячейка 1-го столбца</td>

      <td colspan="2"><p>2-я ячейка 3-го и 4-го столбцов</p></td>

      <td align="right">2-я ячейка 5-го столбца</td>

     </tr>

    </table>

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

Впрочем, это, вероятнее всего, огрех валидатора FBE. Ради эксперимента, я поместил в элемент td элемент cite. И валидатор это спокойно переварил.

§ 2.9 Элементы раздела книги (section).
Элементы второго уровня.

Элемент stanza

Строфа стихотворения.

Cинтаксис: stanza>content</stanza>

Используется в элементах: poem

Вложенные элементы: title, subtitle, v

Количество вхождений: одно и более

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента poem

Элемент text-author

Автор эпиграфа, цитаты или стихов.

Cинтаксис: <text-author>content</text-author>

Используется в элементах: cite, epigraph, poem

Вложенные элементы: strong, emphasis, style, a, strikethrough, sub, sup, code, image

Количество вхождений: произвольное

Атрибуты: id, style

Версия формата: 2.0

Пример: см. пример элемента poem

Элемент v

Cтрока в строфе стихотворения.

Cинтаксис: <v>content</v>

Используется в элементах: stanza

Вложенные элементы:  a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: одно и более

Атрибуты: нет

Версия формата: 2.0

Пример: см. пример элемента poem

§ 2.10 Элементы таблиц

Элемент tr

Строка таблицы.

Cинтаксис: <tr>content</tr>

Используется в элементах: table

Вложенные элементы:  th, td

Количество вхождений: одно и более

Атрибуты: align

Версия формата: 2.1

Пример: см. пример элемента table

Элемент th

Заголовок столбца таблицы.

Cинтаксис: <th>content</th>

Используется в элементах: tr

Вложенные элементы:    a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: одно или отсутствует

Атрибуты: id, style, colspan, rowspan, align

Версия формата: 2.1

Пример: см. пример элемента table

Элемент td

Ячейка столбца таблицы.

Cинтаксис: <td>content</td>

Используется в элементах: tr

Вложенные элементы:    a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: одно и более

Атрибуты: id, style, colspan, rowspan, align

Версия формата: 2.1

Пример: см. пример элемента table

§ 2.11 Элементы абзаца (стилевые, они же inline элементы)

Элемент a

Ссылка или сноска.

Cинтаксис: <a>content</a>

Используется в элементах: code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: href (обязательный), type

Версия формата: 2.0

Пример:

<p>см. <a l:href="#primer">пример</a></p>

<a l:href="#note01" type="note">[1]</a>

Элемент code

Преформатированный текст. В читалках должен отображаться моноширинным шрифтом.

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

На момент написания книги поддерживается только читалкой CoolReader. Причем, поддерживается неправильно — как элемент аналогичный сite, хотя это такое же стилевое выделение, как strong или emphasis.

Cинтаксис: <code>content</code>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.1

Пример:

<code>Преформатированный текст</code>

Элемент emphasis

Наклонный шрифт (курсив).

Cинтаксис: <emphasis>content</emphasis>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.0

Пример:

<emphasis>Курсивный текст</emphasis>

Элемент strikethrough

Перечеркнутый шрифт.

На момент написания книги читалками не поддерживается.

Cинтаксис: <strikethrough>content</strikethrough>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.1

Пример:

<p><strikethrough>Эта сволочь</strikethrough>, этот нехороший человек…</p>

Элемент strong

Полужирный шрифт.

Cинтаксис: <strong>content</strong>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.0

Пример:

<strong>Полужирный текст</strong>

Элемент style

Заранее определенный стиль для отображения книги.

Cинтаксис: <style>content</style>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: name (обязательный)

Версия формата: 2.0

Пример:

<p>Этот текст будет <style name="italic">курсивным </style></p>

<p>— <style name="foreign lang" xml:lang="fr">Dieu, quelle virulente sortie</style></p>

Элемент sub

Нижний индекс (subscript).

На момент написания книги читалками не поддерживается.

Cинтаксис: <sub>content</sub>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.1

Пример:

<p>x<sub>1</sub>+x<sub>2</sub>=y</p>

Элемент sup

Верхний индекс (superscript).

На момент написания книги читалками не поддерживается.

Cинтаксис: <sup>content</sup>

Используется в элементах:  code, emphasis, p, strikethrough, strong, style, subtitle, sub, sup, th, td, v

Вложенные элементы:     a, code, emphasis, strikethrough, strong, style, sub, sup, image

Количество вхождений: произвольное

Атрибуты: нет

Версия формата: 2.1

Пример:

<p>E=mC<sup>2</sup></p>

§ 2.12 Элементы для платных книг

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

К сожалению, или, вернее, к счастью, эти элементы до сих пор не нашли применения.

Элемент output

Определяет способ вывода контента книги.

Cинтаксис: <output>content</output>

Используется в элементах:  description

Вложенные элементы: part, output-document-class

Количество вхождений: произвольное

Атрибуты: mode (обязательный), currency, incude-all (обязательный)

Версия формата: 2.1

Пример:

<output mode="free" include-all="deny">

<part include="require" l:href="#half0_1"/>

<part include="allow" l:href="#half0_2"/>

<part include="allow" l:href="#half0_4_2"/>

<part include="require" l:href="#half0_4_3"/>

</output>

<output mode="paid" price="3.14" currency="WMZ" include-all="require">

<part include="deny" l:href="#half0_4_3"/>

</output>

Элемент output-document-class

Назначение неясно.

Cинтаксис:<output-document-class>parts</output-document-class>

Используется в элементах:  output

Вложенные элементы: part

Количество вхождений: произвольное

Атрибуты: name, create, price

Версия формата: 2.1

Пример: нет

Элемент part

Делит книгу на платные и бесплатные части.

Cинтаксис:<part/>

Используется в элементах:  output

Вложенные элементы: нет

Количество вхождений: произвольное

Атрибуты: mode, include

Версия формата: 2.1

Пример: см. пример элемента output

§ 2.13 Спецсимволы

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

Такие последовательности называются предопределенными сущностями.

Список таких символов в FictionBook крайне мал. Их, собственно, всего три.

&amp; — &;

&lt; — <;

&gt ; — >;

Cтандартные сущности XML &apos; и &quot; в FiсtionBook не используются и конвертируются в символы «'» и «"» соответственно.

§ 2.14 Список атрибутов элементов

Многие элементы в FictionBook имеют дополнительные параметры — атрибуты.

Атрибут align

Выравнивание текста в ячейке таблицы.

Используется в элементах: td, th, tr

Значение: фиксированное; left, right, center, justify

Значение по умолчанию: left

Атрибут alt

Назначение аналогично HTML — текст, отображающийся вместо картинки.

Используется в элементах: image

Значение: произвольная текстовая строка

Атрибут colspan

Позволяет объединять столбцы таблиц.

Используется в элементах: th, td

Значение: произвольное целое число

Атрибут content-type

Определяет тип содержимого элемента-контейнера binary

Используется в элементах: binary

Значение: фиксированное; image/png, image/jpeg, image/tiff, image/bmp, octet-stream

Атрибут create

Назначение неясно.

Используется в элементах: output-document-class

Значение:

Атрибут currency

Валюта, в которой определена цена платной книги.

Используется в элементах: output

Значение: ограниченно-произвольное

Атрибут href

Ссылка. Как правило, внутри документа.

Используется в элементах: a, image

Значение: ссылка.

Атрибут id

Метка, позволяющая ссылаться на элемент.

Используется в элементах: annotation, binary, cite, epigraph, image, p, poem, section, subtitle, table, td, text-author, th

Значение:  текстовая строка.

Атрибут info-type

Характеризует произвольную информацию.

Используется в элементах: custom-info

Значение: произвольная текстовая строка.

Атрибут include

Назначение неясно.

Используется в элементах: part

Значение:

Атрибут include-all

Назначение неясно.

Используется в элементах: output

Значение: фиксированное

Атрибут match

Определяет степень соответствия произведения выбранному жанру.

Используется в элементах: genre

Значение: целое число в диапазоне от 1 до 100

Атрибут mode

Способ вывода платного документа

Используется в элементах: output

Значение:

Атрибут name

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

Используется в элементах: body, sequence, output-document-class

Значение: произвольное

Атрибут number

Порядковый номер книги в серии.

Используется в элементах: sequence

Значение: произвольное целое число

Атрибут price

Цена платного документа

Используется в элементах: output-document-class

Значение: произвольное число c плавающей запятой

Атрибут rowspan

Позволяет объединять строки таблицы.

Используется в элементах: th, td

Значение: произвольное целое число

Атрибут style

Позволяет выбрать для элемента предопределенный стиль.

Используется в элементах: p, subtitle, table, td, text-author, th

Значение: произвольное; строка состоящая из латинских букв и цифр.

Пример:

<p style="text-align: right">Текст, выровненный по правому краю<p>

<p style="background-color: black; color: white; margin-left: 20%; margin-right: 20%; margin-top: 10px; margin-bottom: 10px; line-height: 180% ">Текст: фон черный, цвет шрифта белый, отступы справа и слева 20 процентов, сверху и снизу — 10 пикселей, высота строки 180 процентов</p>

Атрибут title

Позволяет добавить к рисунку заголовок (подпись)

Используется в элементах: image

Значение: произвольная текстовая строка

Атрибут type

Определяет тип элемента.

Используется в элементах: a, stylesheet

Значение: фиксированное (текстовая строка) обычно «note» для элемента a и «text-css» для stylesheet

Атрибут value

Дата.

Используется в элементах: date

Значение: произвольная дата в формате YYYY-MM-DD

Атрибут xmlns

Ссылка на спецификацию формата.

Используется в элементах: FictionBook

Значение: жестко фиксированное (URL), обычно: http://www.gribuser.ru/xml/fictionbook/2.0

Атрибут xmlns:l

Ссылка на общую спецификацию формата.

Используется в элементах: FictionBook

Значение: жестко фиксированное (URL), обычно: http://www.w3.org/1999/xlink

§ 2.15 Алфавитный список всех элементов FictionBook 2.1

a (§ 2.11)

annotation  (§ 2.5)

author  (§ 2.5)

binary  (§ 2.3)

body  (§ 2.3)

book-name  (§ 2.5)

book-title  (§ 2.5)

cite (§ 2.8)

city  (§ 2.5)

code (§ 2.11)

coverpage  (§ 2.5)

custom-info  (§ 2.4)

date  (§ 2.5)

description  (§ 2.3)

document-info  (§ 2.4)

email (§ 2.6)

emphasis (§ 2.11)

empty-line (§ 2.8)

epigraph (§ 2.7)

FictionBook  (§ 2.3)

first-name  (§ 2.6)

genre  (§ 2.5)

history  (§ 2.5)

home-page (§ 2.6)

id  (§ 2.5)

isbn  (§ 2.5)

image (§ 2.7)

keywords  (§ 2.5)

lang  (§ 2.5)

last-name (§ 2.6)

middle-name (§ 2.6)

nickname (§ 2.6)

output-document-class (§ 2.12)

output (§ 2.12)

p (§ 2.8)

part (§ 2.12)

poem (§ 2.8)

program-used  (§ 2.5)

publish-info  (§ 2.4)

publisher  (§ 2.5)

section (§ 2.7)

sequence  (§ 2.5)

src-lang  (§ 2.5)

src-ocr  (§ 2.5)

src-title-info  (§ 2.4)

src-url  (§ 2.5)

stanza (§ 2.9)

strikethrough (§ 2.11)

strong (§ 2.11)

style (§ 2.11)

stylesheet  (§ 2.3)

sub (§ 2.11)

subtitle (§ 2.8)

sup (§ 2.11)

table (§ 2.8)

td (§ 2.10)

text-author (§ 2.9)

th (§ 2.10)

title (§ 2.7)

title-info (§ 2.4)

tr (§ 2.10)

translator (§ 2.5)

v (§ 2.9)

version  (§ 2.5)

year  (§ 2.5)

Часть III
Конвертирование книг из других форматов

Cлучаи, когда книга готовится в формате FictionBook изначально, (как вот эта книга :) ) чрезвычайно редки. Обычно имеется готовый текст, который необходимо конвертировать в формат FictionBook.

Вообще, создание книги в формате FictionBook можно разделить на три этапа.

1) подготовка исходного текста;

2) конвертация текста в формат FictionBook;

3) вычитка, структурирование и окончательная доводка книги.

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

Второй этап — конвертация в формат FB2.

Третий этап — доводка книги. По моему скромному мнению, самый тонкий и важный этап.

Дело в том, существующие программные средства позволяют конвертировать документы txt, html, doc(rtf), что называется «одним кликом». Но, к сожалению, качественный FB2 таким образом создать совершенно невозможно. После конвертации такую книгу приходится загружать в редактор и доводить до ума вручную.

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

Но если книгу планируется выкладывать в Сеть, или распространять еще каким-то образом, то изготавливать ее «одним кликом» совершенно недопустимо. Не забывайте, что в этом случае, как бы еретически это ни звучало, вы фактически являетесь ИЗДАТЕЛЕМ книги. Проявите же уважение к автору и читателям.

Распознавание и подготовка исходного текста — это тема для отдельной книги, поэтому здесь углубляться в нее не будем.

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

==ВАЖНО========================

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

Дорогие создатели книг! Оставьте Самиздат, Прозу.Ру и прочие прибежища графоманов в покое! Не надо засорять сетевые библиотеки сырыми текстами, которые не делают чести авторам и не доставят удовольствия читателям.

Давайте возьмем за правило оформлять в FB2 только те книги, которые дошли до официального издания, будь то бумажный или электронный вариант. Либо, в виде исключения, СВОИ СОБСТВЕННЫЕ творения.

Не нужно умножать энтропию.

================================

В общем, возьмем за основу, что исходный текст у вас уже есть.

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

§ 3.1 Требования к исходному тексту

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

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

Если же книга представлена в PDF, вам придется потратить время, чтобы «выковырять» текст оттуда. Бывает, что это не так-то просто сделать, а бывает — вообще невозможно (например, если  в PDF собраны сканы страниц без распознавания, да еще и в низком разрешении).

Ну и очень желательно, чтобы текст был максимально качественный.

Автор этой книги сам убил массу времени при чистке книги В. Вагина «Заяц, стань тигром». И только потом обнаружилось, что в Internet имеются гораздо более качественные тексты книги…

Поэтому, если вы берете текст из Сети, не поленитесь, поищите разные варианты и сравните их.

Для преобразования текстов в FB2 существуют несколько программных пакетов. Рассмотрим их по порядку.

§ 3.2 Any to FB2

Any to FB2 — «штатное» средство для конвертирования текстовых документов в формат FB2

Для нормальной работы программе требуются MSXML 4.0 и Windows Script Host  версии 5.6.

Если  MSXML можно скачать с сайта Micro$oft без каких-либо проблем, то при попытке загрузить Windows Script Host производится проверка на «подлинность», т.е. лицензионную чистоту вашей копии Windows.

Поэтому проще обновить Internet Explorer до версии 6.0 SP1. Windows Script Host 5.6 входит в его состав.

Посл установки щелкаем по иконке Any to FB2 GUI.

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

Самая первая строчка — путь ко входному файлу. По умолчанию там стоит «http://». Очевидно, программа может брать файлы на обработку прямо из Internet. Пусть вас это не смущает. Нажав кнопочку с многоточием, вы попадете в стандартное окно выбора файла.

Чуть ниже расположено выпадающее меню «Setting». Здесь можно выбрать профиль настроек. Изначально их там всего три: «Last used» (последние использованные) «Default» (по умолчанию) и «Headers+»

Внизу находятся кнопки:

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

«Save settings…» — вызывает окошко управления профилями настроек («Manage export presets»). Можно сохранить текущие настройки. Вводим имя профиля в верхней строчке, например, «My priority» и жмем кнопочку «Save». Здеь же можно удалить ненужные профили, выделив их в списке и щелкнув по кнопочке «Delete…»

«Cancel» — выход из программы.

И кнопочка «?» позволяет узнать номер версии программы. Никакого файла помощи или руководства, к сожалению, не предусмотрено…

Если установить галочку напротив расположенной в самом низу рабочего окна опции «Automatically close this window when finished», то сразу после обработки файла программа закроется.

Теперь рассмотрим закладки.

Первая закладка, «Document», содержит важнейшие настройки обработки файла.

«Text structure» призвана помочь программе разобраться с разбиением текста на абзацы. Предусмотрены три положния радиокнопки.

«Auto» — предоставляет программе решать этот вопрос самостоятельно.

«Indented» — в начале каждого абзаца есть отступ.

«EmptyLines» — после каждого абзаца идет пустая строка.

ВНИМАНИЕ, БАГ!

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

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

«Preserve <form>» — оставлять содержимое, обрамленное тэгом form. Меню, голосования и т.д. Включать не стоит.

«Do not convert charset» — не менять кодовую таблицу файла.

«No epigraphs» — не распознавать эпиграфы. Даже эту нехитрую операцию программа делает не всегда корректно, поэтому ставим галочку.

«No </emptyline>» — не ставить пустых строк. Обычно эту опцию включать не требуется.

«No description» — под «description» здесь понимается аннотация. Не делать аннотацию. Однозначно ставим галочку.

«Allow 1000 error fixes» — разрешить программе попытаться восстановить битый документ. Пожалуй, галочку ставить не надо.

«Do not convert "quotes" to «quotes»» — не конвертировать компьютерные кавычки в типографские. Эта операция нужная, и обычно программа отрабатывает ее без нареканий. Не ставим галочку.

«Do not convert [text] and {text} into footnotes» — не конвертировать текст в квадратных и фигурных скобках в сноски. Ставить или не ставить галочку — дело вкуса. Я лично предпочитаю делать сноски вручную.

«Do not convert _italic_ текст» — не конвертировать текст, обрамленный знаками подчеркивания в курсив. Ставим галочку. Не стоит разрешать программе делать это самой. Очень часто получается так называемый «рваный» курсив (<emphasis>С</emphasis> <emphasis>ло</emphasis> <emphasis>во</emphasis>) или, того хуже, курсивным становится только первое слово абзаца.

«Do not restore broken paragraphs» — не восстанавливат разорванные абзацы. Ставим галочку.

«Do not detect poems» — не выделять стихи. Ставим галочку однозначно. Программа определяет стихи исключитенльно по коротким строчкам и делает это крайне коряво.

«Only use marked with <h#>|^T^U headers» — выделять как заголовки исключительно абзацы выделенные тэгами <h1>…<h6> и (или) esс-последовательностями ^T^U. Ставим галочку, если текст скачан из библиотеки Максима Мошкова (Lib.ru).

«Ignore line indent (spaces at the line start)» — не считать пробелы в начале сроки признаком абзаца.

«Convert leading '-' to long dash '—' (dialogs)» — конвертировать компьютерный «минус» в начале строки в длинное тире. Ставим галочку, особенно, если конвертируем DOS-текст.

Вторая закладка — «Links», предназначена для настройки обработки html-файлов.

Первый блок — «Images», относится к картинкам, если таковые во входном файле имеются.

Опция «Remove ALL images from the document» убирает вообще все картинки.

«Remove off-site images» — убирает только те картинки, которые располагаются не на сайте, с которого был загружен конкретный html.

«Preserve dynamic images» — не удалять картинки с URL динамического вида, например, счетчики.

Блок «Linked documents»

«Remove external links» — просто убирает линки, ведущие за пределы документа.

Включение опции «Follow links» делает активными все последующие опции.

Теоретически, если исходный текст представлен в виде пачки html-файлов и имеется некий файл-оглавление со ссылками, можно включить эту опцию, открыть файл-оглавление, а остальные программа подстыкует автоматически. На практике это зачастую получается довольно коряво.

«Follow off-site links» — следовать по линкам, ведущим за пределы сайта.

Рядом находится уровень следования (level deep).

«Only follow matching the expression» — следовать только линкам, совпадающим с нижеуказанным выражением.

«Never follow matching the expression» — НЕ следовать линкам, совпадающим с нижеуказанным выражением.

Третья закладка — «RegEXP» — обработка текста с помощью регулярных выражений.

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

«Header detection regular expression» — регулярные выражения, с помощью которых программа может распознавать заголовки.

«Regular expression to run on-load» — регулярные выражения, предназначенные для обработки исходного текста.

Окошко разделено на два столбца. Первый (+new search pattern) предназначен для выражения поиска. Второй (+new replace pattern) — для выражений замены.

Регулярных выражений может быть несколько.

Вот  как можно обойти вышеописанный баг с неправильным распознаванием новых абзацев.

в графе «+new search pattern» вводим:

\r\n(\S)

(перевод строки, новая строка, не-пробел).

А в графу «+new replace pattern» вводим:

 $1

Здесь не видно, но перед «$1» должен идти пробел.  То есть символы перевода строки и новой строки будут заменены на пробел. А само «$1» есть обращение к выражению в скобках в регэкспе поиска. Оно нужно, чтобы сохранить в неприкосновенности не-пробел, который идет сразу после символа новой строки.

«Regular expression to run on result document» — регулярные выражения, предназначенные для обработки выходного документа.

Устроено аналогично предыдущему.

И, последняя, четвертая вкладка — «Log» — не имеет никаких опций. Там отображается ход операции преобразования.

Программа умеет конвертировать файлы TXT, HTM, RTF, DOC. Для обработки последних она использует Micro$oft Word, для предварительного преобразования их в HTML.

С разбиением на секции программа справляется плохо. Требуется последующая правка в редакторе.

Резюме:

Неплохое средство для конвертирования файлов TXT и HTML.

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

Для пакетного конвертирования файлов написана надстройка (front-end) Batch2FB.

§ 3.3 ExportXML

Программа представляет собой макрос M$ Word, предназначенный для преобразования в FB2 файлов DOC прямо из M$ Word.

Макрос нормально запускается в M$ Word XP и 2003.

Установка макроса заключается в копировании файла ExportXML.dot в папку автоматически запускаемых макросов Word. Обычно это папка C:\Program Files\Microsoft Office\Office10\Startup\. (Здесь и далее для M$ Office 2003 вместо «Office10» будет «Office11»).

Затем нужно разрешить запуск макросов. Меню «Сервис\Параметры», закладка «Безопасность», кнопка «Защита от макросов». На закладке «Уровень безопасности» установите переключатель-радиокнопку в положение «Средняя. Решение о запуске потенциально опасных макросов принимается пользователем». Правда, теперь при каждом запуске Word будет выскакивать надоедливое сообщение, не нужно ли отключить макросы.

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

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

Вначале нужно создать сертификат. Запускаем программку selfcert.exe из директории MS Office (C:\Program Files\Microsoft Office\Office10\). В поле «Ваше имя» вводим какое-нибудь слово и жмем OK. Все, сертификат создан. Правда, он не подтвержден Micro$oft, но нам этого и не требуется.

Теперь запускаем Word (макрос ExportXML.dot должен находиться в папке Startup). Запускаем редактор Visual Basic (Сервис\Макрос\Редактор Visual Basic). В окошке Project выбираем группу ExportXML.

Затем вызывем команду Tools\Digital Signature. В окошке «Цифровая подпись» жмем кнопку «Выбрать», выбираем сертификат и жмем «OK».

Закрываем редактор, выходим из Word. На запрос, надо ли сохранить изменения в документе ExportXML, отвечаем утвердительно.

При следующем запуске Word сообщит, что файл ExportXML.dot содержит макросы, подписанные автором [имя вашего сертификата]. Ставим галочку напротив «Всегда доверять макросам из данного источника» и жмем ставшую активной кнопку «Не отключать макросы».

Все! При последующих запусках Word будет прилежно запускать ExportXML, не докучая вам запросами.

В меню «Файл» появилось подменю «FictionBook2» содержащее два пункта: «Export as Fictionboок2 xml…» и «Edit Fictionbook2 properties…»

Последний пункт, как нетрудно догадаться, позволяет редактировать описание (description) будущего FB2-файла.

Кнопочки «+» и «-» внизу позволяют соответственно добавлять копии полей или удалять оные. Чтобы отредактировать поле, выделите его и нажмите клавишу F2.

Непосредственно экспорт производится предельно просто. Вводим путь и имя файла. Затем макрос предложит заполнить description. При этои можно выбрать кодировку файла (выпадающий список внизу «Export encoding»). По умолчанию текст экспортируется в utf-8.

Макрос нормально обрабатывает полужирный шрифт, курсив, и даже Word-овские сноски. Пытается разбить книгу на секции, что чаще всего получается некоректно.

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

Внимание, картинки, если они есть, не экспортируются!

Макрос позволяет «помочь» ему и выделить некоторые элементы непосредственно в Word.

Для этого в нем есть стили, которые так и называются: Annotation, Cite, Cite Author, Epigraph, Epigraph Author, Poem Title, Stanza.

Если они автоматически не появились в списке стилей после установки макроса, придется каждый раз добавлять их в документ вручную. Для этого файл ExportXML.dot должен быть скопирован в директорию C:\Documents and Settings\Имя текущего пользователя\Application Data\Microsoft\Шаблоны.

Открыв нужный файл, выбираем команду меню Формат\Тема. В появившемся окошке жмем кнопку «Библиотека стилей». В списке стилей выбираем ExportXML и жмем «OK».

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

§ 3.4 doc2fb

Приложение doc2fb предназначено для преобразования в FB2 файлов RTF и M$ Word DOC.

Чтобы утилита могла работать, на ПК должен быть установлен M$ Word 2003. Также должен наличествовать JavaScript версии не ниже 5 (входит в состав IE).

Собственно утилита представляет собой XSL-скрипт и оболочку — HTA-приложение. [3.1]

Интерфейс оболочки прост и понятен. Сразу бросается в глаза, что программка рассчитана на пакетное преобразование. То есть выбрать можно не конкретный файл, а только папку.

Утилита умеет выделять главы и подглавы, жирный шрифт и курсив, сноски и ссылки, а также добавляет картинки.

При этом векторные картинки Word, например, WMF, в итоговый файл не попадают. Растровые картинки, отличные от формата JPEG, преобразуются в PNG.

Меню программки состоит из трех пунктов: «Файлы», «Настройки» и «Инфо»

Пункт «Файлы» позволяет вызвать главную рабочую страницу оболочки (активна сразу после запуска). В строке «Папка» щелкаем кнопку с изображением «>>» и выбираем папку, которая содержит нужные DOC-файлы.

После этого становится активной кнопка «преобразовывать».

Нажимаем ее. Файлы тихо и быстро конвертируются в FB2.

Ход операции отображается в области «Журнал», которая находится под кнопкой «преобразовывать».

Настройки оболочки весьма немногочисленны.

«Показывать MS Word при преобразовании», «Закрывать doc2fb после преобразования», «Удалять пустые строки» — назначение этих опций ясно без дополнительных комментариев.

«Заменять Line-break на Paragraph-break» — заменяет коды принудительные разрывы строки на коды конца абзаца.

Что есть такое принудительный разрыв строки? Обратимся к документации M$ Word.

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

Укажите место разрыва строки. Нажмите клавиши SHIFT+ENTER.

«Определять сноски как <регулярное выражение>» и «Определять пояснения как... <регулярное выражение>» — перед конвертацией в FB2 M$ Word преобразует описанное регулярными выражениями в сноски и пояснения.

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

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

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

Резюме. В целом программа отвечает своему назначению. Несмотря на некоторое своеволие, она позволяет быстро сконвертировать большое количество файлов.

§ 3.5 Перенос через буфер обмена

Простой, но незаслуженно игнорируемый способ. Он, как нетрудно понять, заключается в выделении фрагмента текста, или же текста целиком, копировании его в буфер обмена Windows, и последующей вставке в FB Editor.

Копирование через буфер обмена, как правило, сохраняет форматирование текста, в частности жирный и курсивный шрифт.

Таким образом можно переносить тексты из MS Word, Интернет-браузера. Не обременяя машину дополнительными программными пакетами и dll-ками.

Кроме того, при таком способе конвертирования наиболее удобно использовать заготовки-шаблоны, с частично заполненным description.

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

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

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

§ 3.6 Конвертор ExportToFB21 для Open Office

Пакет Open Office создавался как бесплатная альтернатива M$ Office. В последние годы разработчикам удалось довести его до ума, и Open Office (далее OO) начал потихоньку набирать популярность и отвоевывать пользователей у разработки Micro$oft.

Поэтому нет ничего удивительного, что и для него появился конвертор в FB2. Тем более, что формат документов OO, как и в последней версии M$ Office представляет собой пачку XML-документов.

Программка представляет из себя пакет макросов для  OpenOffice Writer. Естественно, она платформeнно-независима, т.е. работает на всех ОС, которые поддерживет OO.

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

Данное описание справедливо для версии 2.2.

На сайте разработчика ExportToFB21 существует в двух ипостасях: ExportToFB21_version2.2.zip и ExportToFB21_version2.2.oxt.zip. Отличаются они тем, что во втором случае пакет макросов упакован в специальный формат OO — .oxt, и его придется перед установкой доставать из архива.

Итак, архив с конвертором загружен. Запускаем OO Writer и вызываем команду «Сервис\Управление расширениями». Щелкаем кнопку «Добавить» и открываем zip-архив или пакет .oxt.

 Теперь нужно создать кнопку для запуска макроса. Вызываем команду меню «Сервис\Настройка» и активируем закладку «Панели инструментов». В выпадающем меню «Панель инструментов» выбираем панель, на которую будет помещена кнопка. Руководство рекомендует создать новую, но, на мой взгляд, это излишество.

Жмем кнопку «Добавить». В открывшемся окне в дереве «Категория» в самом низу находим группу «Макрос OpenOffice.org» и разворачивем ветку «Мои макросы» (или «Макросы OpenOffice.org», если при установке в окне «Управление расширениями» был активен пункт «Расширения OpenOffice.org»). Находим ветку ExportToFictionBook и раскрываем ее.

Теперь щелкаем по группе «ExportToFB21» и в окне справа выбираем команду «ExportToFB21». Жмем кнопку «Добавить». Все!

Как и макросы для M$ Office ExportToFB21 позволяет предварительно разметить документ при помощи стилей. Для этого на сайте имееется специальный файл стилей — fb21_styles.ott_2.0.zip. Как установить его в OO Writer подробно описано в руководстве.

После вызова макрос может предложить вначале сохранить документ.

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

Выходной файл по умолчанию формируется в той же папке, что и исходный.

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

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

То, что получается на выходе достойно всяческих похвал. Файл прекрасно подходит как для чтения в FB2-читалке, так и для доводки в FB Editor. Это  и неудивительно. Корректный экспорт самой разной структуры документа заявлен, как «самая главная фишка конвертора».

Как следует из названия, программа поддерживает инновации формата FictionBook 2.1. Это <sub>, <sup>, <code> и таблицы. Картинки, правда, конвертор пока экспортировать не умеет, но аккуратно вставляет в соответствующие места тэги.

Более подробно все возможности, «фичи» и особенности конвертора описаны в офицальном руководстве к нему (п. 1.3.2–1.3.3).

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

Означенное совершенствование продолжается. За 2008 год проект претерпел серьезные изменения, трансформировшись в пакет OOoFBTools, который может не только создавать, но и корректировать FB2.

Peзюме. Хорошая вещь. 100% must have для тех, у кого на машине установлен OO Writer.

§ 3.7 Написание собственного конвертора

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

Решить эти проблемы может собственноручное написание конвертора. Помимо возможности тонкой настройки софта под конкретную задачу, этот метод имеет еще одну положительную сторону: претензии по поводу кривизны решений предъявлять просто некому. Кроме как самому себе…

Для написания конвертора наиболее подходящи скриптовые языки программирования, заточенные для работы с текстом и поддерживающие регулярные выражения. TCL, Java, Perl, Python… Лично я остановил свой выбор на самом молодом и многобещающем из них. Имеется в виду язык программирования Ruby.

Ruby был создан в середине 90-х японским программистом Юкихиро Мацумото. Это многогранный, элегантный и в то же время очень простой для изучения язык. Он вобрал все лучшее, что было у его предшественников: мощь регулярных выражений Perl, объектно-ориентированное программирование Java и Python, помноженные на феноменальные изящество и функциональность.

Установка Ruby

Скачать транслятор Ruby можно с официального сайта проекта www.ruby-lang.org.

Вариант Ruby для Win32 представлен в двух вариантах. Обычный инсталлятор (rubyxxx-xx.exe)и zip-архив — ruby-xxx-pxxx-i386-mswin32.zip, где xxx — номера версий и обновления. На момент написания этого текста была доступна стабильная версия 1.8.6.

Для наших целей вполне подойдет второй вариант — zip-архив.

Только нужно будет папку, где находится запускной файл интерпретатора добавить в список папок, доступных по умолчанию. Для этого щелкаем правой кнопкой мыши по иконке «My computer», на панели «Advanced» жмем кнопку «Environment Variables». В списке «System variables» находим переменную Path и щелкаем по кнопке «Edit». В открывшемся окошке в поле «Variable Value» через «;» без пробела добавляем путь к нужной папке. Например C:\TOOLS\RUBY\bin.

В принципе, для работы скрипта жизненно необходимы лишь два файла: exe-шник транслятора (ruby.exe) и служебная dll-ка (msvcrt-ruby18.dll). Поэтому, если не требуется использование библиотек, то можно просто забросить эти два файла в папку Windows, или любую другую, доступную по переменной Path. В крайнем случае, можно просто поместить их в ту же папку, где находятся скрипты.

Разумеется, описывать программирование на языке Ruby прямо здесь нет ни необходимости, ни возможности. Это тема для отдельной книги, которуя, с Божьей помощью, я, возможно, напишу. А здесь ограничимся комментариями в самих скриптах.

Если же вы не знаете, где взять документацию по Ruby, то вам прямая дорога на сайт www.flazx.com, где, среди множества другой ценной литературы, можно найти и исчерпывающую подборку книг по Ruby. Правда, англоязычных, но зато много и бесплатно. Из русскоязычных изданий могу посоветовать книгу М. Фицджеральда «Изучаем Ruby» (на момент написания книги была доступна только на бумаге), а также труд  П. Фултона «Программирование на языке Ruby» (доступен в Сети).

Пример первый.

Конвертирование форматированного dos-текста

Данный скрипт размещается исключительно как классический пример. Так сказать для затравки.

Скрипт выполняет простейшее преобразование текста, вмешательство в структуру будущей fb2-книги сведено практически к нулю. Но его ничего не стоит доработать. Например, чтобы он выделял главы, подзаголовки, при этом структурируя будущий файл. Вообще, средствами Ruby можно организовать такую интеллектуальную обработку текста, которая оставит Any2FB2 далеко позади.

# Скрипт для конвертации форматированного текста DOS-866 в FB2

# (C) Юзич, апрель 2008 г.

#

# запускать из директории, где находится входной файл

# запуск: ruby dtxt_fb2.rb <input.txt>

#

# массив для перекодировки текста. Псевдографика заменяется на код 135,

# символы, отсутствующие  в кодировке win-1251 - на код 138

doswin = [192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,

    208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,

    224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,

    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

    135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, 135,

    240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,

    168, 184, 170, 186, 175, 191, 161, 162, 176, 149, 183, 138, 185, 164, 138, 138]

# считываем входной файл в одну строку

wtext=ARGF.readlines.to_s

ARGF.close

wtext.gsub!(/\n(\S)/,' \1') # склеиваем строки абзацев

wtext.squeeze!(" ")         # убираем лишние пробелы

wtext.gsub!(/^ /,"")        # убираем пробелы в начале строки

# перекодировка текста

for i in 0..(wtext.length-1)

  case wtext[i]

    when 20: wtext[i] = 182 # обработать символ "Пи"

    when 21: wtext[i] = 167 # обработать символ "параграф"

    when 128..255: wtext[i] = doswin[wtext[i]-128] # обработать все остальное

  end

end

wtext.gsub!("...", (133).chr) # многоточие - в символ "многоточие"

wtext.gsub!(/(\s)-\s/,'\1'+(151).chr+" ") # компьютерное тире - в типографское

# порубим строку в массив

wtext = wtext.split(/\n/)

wtext.collect! do |line|

  if line =="" then

    line = "<empty-line/>" # пустая строка?

  else

    line="<p>"+line+"</p>" # нет, не пустая

  end

end

# добавляем заголовок

wtext.insert(0,"<?xml version=\"1.0\" encoding=\"windows-1251\"?>

<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\" xmlns:l=\"http://www.w3.org/1999/xlink\">

<description>

<title-info>

<genre>nonfiction</genre>

<lang>ru</lang>

</title-info>

<document-info>

<program-used>Yuzich Ruby script (dostxt -> FB2)</program-used>

</document-info>

</description>

<body>

<section>")

# добавляем хвост

wtext << "</section>\n</body>\n</FictionBook>\n"

# сохраняем выходной файл

wfile = File.new(ARGF.filename.dup.gsub!(/\.txt/i,".fb2"),"w")

wfile.puts wtext

wfile.close

После того, как скрипт отработает, в директории появится файл <имя_исходного_файла>.fb2. Небольшая правка в FB Editor и он будет полностью готов к распространению.

Пример второй.

Конвертирование журналов c WiseSoft.ru

Эта задачка гораздо интереснее первой. Как раз тот случай, когда написание специализированного конвертора полностью оправдано.

На ресурсе http://www.wisesoft.ru находится множество различных журналов. Форматы в котором они представлены, различаются, Но один из них особо привлекателен для преобразования в FB2. Я говорю о журналах которые представлены в виде пачки html-файлов («Хакер», «Хакер-спец», «Мобильные компьютеры», «Хулиган» и др.). При всей простоте, конвертированию стандартными средствами этот способ хранения данных поддается с трудом.

Более близкое знакомство выявило следующее. Имеется  файл index.htm с оглавлением. Статьи представляют собой кучки html-файлов, разбитые по папкам. Текст представляет собой обычные абзацы, обрамленные тэгами «<p>». Оформление html-ок везде стандартное.

К сожалению, такая лафа наблюдается не везде. С декабря 2006 года формат журналов начал эволюционировать. Статьи стали вмещаться в одну html-ку, появились списки, картинки, дополнительные стили. Хотя и не во всех журналах. Основная масса изданий представлена именно в таком виде, как описано выше. Поэтому сосредочимся именно на них.

Наша задача заключается в том, чтобы вырезать куски текста из html-файлов, склеить их в один файл.

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

# Скрипт для конвертации журналов с WiseSoft.ru в FB2

# (C) Юзич, апрель-май 2008 г.

#

# поддерживаемый формат файлов: пачка html, журналы сделанные c ноября 2003 г. по ноябрь 2006 г. включительно.

# примечание: изменения в декабре 2006 и марте 2007 - некритичные

# теоретически должен обрабатывать журналы сделанные по июль 2007 включительно

# но уже с мая 2007 в тексте могут попадаться дополнительные тэги, мешающие правильной конвертации

# хотя все это касается, в основном, журнала "Хакер" ("Хакер-спец").

# "Мобильные компьютеры", к примеру, по-прежнему, как шли, так и идут в старом формате

# да и чтобы обрабатывать журналы, сделанные до ноября 2003, достаточно подправить ключевые фразы

#

# запускать из директории, где находится файл-оглавление журнала (index.htm)

# запуск: ruby ws_j_cnv.rb

#

# считываем файл-оглавление в строку

wfile=File.open("index.htm")

ltext=wfile.readlines.to_s

wfile.close

# выгрызаем заголовок

fbtitle=/<SPAN CLASS="titleSet">(.+)<font color="#FF0000">(#\d{1,3})<\/font>(.+)<\/SPAN>/.match(ltext).captures

# выгрызаем ссылки на статьи и разделители

filtr=/<SPAN CLASS="minSet">(.+)<\/SPAN>|<a href="(\d{3}\/\d.htm)">(.+)<\/a>/

lmas = ltext.grep(filtr)

# начинаем формировать выходной текст

outtext="<title><p>"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"</p></title>\n"

# начинаем формировать аннотацию

annotation="<p>Содержание номера:</p>\n"

# флажок открытой секции раздела

flagSect=false

# прокручиваем список ссылок

lmas.each do |line|

  if line.include? "SPAN" then     # ССЫЛКА ИЛИ РАЗДЕЛИТЕЛЬ?

    if flagSect then outtext=outtext+"</section>\n" end # РАЗДЕЛИТЕЛЬ. Секцию закрывать надо?

    /<SPAN CLASS="minSet">(.+)<\/SPAN>/.match(line) # выгрызаем разделитель...

    outtext=outtext+"<section>\n<title><p>"+$1+"</p></title>\n" # открываем секцию раздела

    annotation=annotation+"<p>"+$1+":</p>\n" # и дополняем аннотацию

    flagSect=true # секция осталась открыта...

  else # НЕ-ЕТ, ВСЕ-ТАКИ ССЫЛКА...

    filtr.match(line)

    pathf = $2 # берем путь к первому файлу статьи...

    annotation=annotation+"<p>"+(149).chr+" "+$3+"</p>\n" # дополняем аннотацию...

    puts pathf[0..2] # это чтобы не скучно было ждать...

    outtext=outtext+"<section>\n" # открыли секцию...

    while File::exists?(pathf) do # обрабатываем статью

      # считали файлик в текстовую строку...

      wfile=File.open(pathf)

      wtext=wfile.readlines.to_s

      wfile.close

      wtext[/<html>.+?<\/p>/m]="" # чик! головка...

      wtext[/<center>.+<\/html>/m]="" # чик! хвостик...

      # заголовок статьи оставлять?

      wtext = pathf[4,2].to_i == 1 ? wtext.sub(/.*\n(.*\n.*\n).*\n.*\n/,' \1') : wtext.sub(/.*\n.*\n.*\n.*\n.*\n/,' \1')

      outtext=outtext+wtext  # оставшийся текст - к основному массиву

      # модифицируем имя файла

      if pathf[4,2].to_i >= 10

        pathf[4,2] = (pathf[4,2].to_i + 1).to_s

      else

        pathf[4] = (pathf[4,2].to_i + 1).to_s

      end

    end # конец цикла

    outtext=outtext+"</section>\n" # закрываем секцию

  end # усе. статью оформили...

end # все статьи собрали в одну строку...

# модифицируем выходной текст под FB2

outtext.gsub!("<p><big><big><big><strong>","<title><p>")

outtext.gsub!("</strong></big></big></big></p>","</p></title>")

outtext.gsub!("<p><big><strong>","<epigraph><p>")

outtext.gsub!("</strong></big></p>","</p></epigraph>")

outtext.gsub!("&nbsp;",(160).chr)

outtext.gsub!(/&(?!lt;|gt;)/,"&amp;")

annotation.gsub!(/&(?!lt;|gt;)/,"&amp;")

outtext.gsub!("<br>","</p><p>")

outtext.gsub!("<br>","</p><p>")

# чистим мусор

outtext.gsub!(/\x01|\x12|\x18|\x1E/, "?")  # удаляем непечатные символы

# корректируем неправильное использование "<" и ">"

# заодно прибиваем ненужные тэги

outtext.gsub!(/(<p>)(.*)(<\/p>)/) do |line|

  subl1,subl2,subl3 = $1,$2,$3

  subl2.gsub!("<","\x8b")

  subl2.gsub!(">","\x9b")

  line=subl1+subl2+subl3

end

# а линки выделим жирным

outtext.gsub!(/\x8Ba href.+?\x9B(.*?)\x8B\/a\x9B/) {|line| line="<strong>"+$1+"<\/strong>"}

# компьютерное тире - в типографское

outtext.gsub!(/\s-\s/," \x97 ")

outtext.gsub!("<p>-", "<p>\x97")

annotation.gsub!(/\s-\s/," \x97 ")

# добавляем заголовок

outtext="<?xml version=\"1.0\" encoding=\"windows-1251\"?>

<FictionBook xmlns=\"http://www.gribuser.ru/xml/fictionbook/2.0\" xmlns:l=\"http://www.w3.org/1999/xlink\">

<description>

<title-info>

<genre>nonfiction</genre>

<author>

<nickname>Редакция журнала</nickname>

</author>

<book-title>"+fbtitle[0]+fbtitle[1]+fbtitle[2]+"</book-title>

<annotation>\n"+annotation+"</annotation>

<date>"+fbtitle[2][-7,4]+"</date>

<lang>ru</lang>

<sequence name=\""+fbtitle[0]+"\" number=\""+fbtitle[1][1,2]+"\"/>

</title-info>

<document-info>

<program-used>Yuzich Ruby script (WiseSoft -> FB2)</program-used>

<src-url>http://www.wisesoft.ru</src-url>

</document-info>

</description>

<body>\n"+outtext

if flagSect then outtext=outtext+"</section>" end # если надо, закроем последнюю секцию раздела

outtext=outtext+"</body>\n</FictionBook>\n" # добавляем хвост

# в имени выходного файла не должно быть двоеточия

fbtitle[0].gsub!(":","-")

# и типографские кавычки - это не есть хорошо

fbtitle[0].gsub!((171).chr,"`")

fbtitle[0].gsub!((187).chr,"`")

# сохраняем выходной файл

wfile = File.new(fbtitle[0]+fbtitle[1]+".fb2","w")

wfile.puts outtext

wfile.close

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

Рабочие версии этих скриптов вы можете взять с моего сайта http://yuzzich.narod.ru.

Часть IV
Редактирование книг. FB Editor

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

Для этого существует программа FB Editor, входящая в пакет FB Tools. Разумеется, это далеко не единственное средство редактирования FB2-книг.

Данное описание соответствует оригинальной версии FB Editor 1.0 от 23 февраля 2005 года.

Автор FB Editor, Михаил Мацнев, не стал утруждать себя написанием help-а, не без основания считая, что разобраться, как работать с программой, можно и без такового.

Однако, судя по количеству вопросов на форумах fictionbook.org  и прочих, описание программы все-таки требуется.

§ 4.1 Установка программы

Для работы FB Tools требуется операционная система семейства Windows NT: лучше всего Windows 2000 или Windows XP.

Также понадобится MSXML 4.0 SP2 и Internet Explorer версии не ниже 5.5 и (внимание!) не выше 6.0 SP1.

Скачать MSXML 4.0 можно с официального сайта Micro$oft. При этом проверка Windows на легальность не производится :).

==ВАЖНО========================

Если у вас установлен Internet Explorer 7.0 и выше, ставить FB Editor, не стоит и пытаться — работать не будет. Вам придется воспользоваться альтернативной разработкой — FB Writer или версией FBE от «ЛитРес».

===============================

Попутно в систему будет установлено пару библиотек, позволяющих видеть свойства книг FB2 в Проводнике и, щелкнув правой клавишей мыши, производить их верификацию прямо из Проводника. Правда, в Windows Vista они работать не будут.

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

§ 4.2 Описание функций и основные приемы работы

Как нетрудно догадаться, FB Editor позволяет редактировать файлы в формате FB2. Довольно скромный набор функций частично компенсируется возможностью прямого редактирования XML-файла книги.

Механизм работы редактора не так прост, как может показаться на первый взгляд. Кроме непосредственно exe-файла существуют еще два Java-скрипта, с помощью которых реализована часть функций редактирования. При WYSIWYG-редактировании контент книги преобразуется в динамический HTML, с которым и работают основные и дополнительные Java-скрипты.

После запуска FictionBook Editor появляется рабочее окно.

Вверху находится стандартное меню и панель инструментов. Под ними располагается панель линков, с помощью которой можно присваивать имена (метки) элементам книги, а также делать ссылки и сноски.

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

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

И, внизу, служебная строка. Там выводится структура текущего редактируемого элемента (например: body/section/p) или сообщения валидатора.

Пройдемся по пунктам меню.

В меню File, кроме стандартных New, Open, Save, есть команда Validate (F8). При вызове ее документ проверяется на соответствие спецификации schema. Если при этом были обнаружены ошибки, то программа автоматически переходит в режим редактирования исходника (Source), устанавливая курсор на 1–2 строки ниже «проблемной» строки.

Маленькое замечание по поводу сохранения файла. Пункт Save предлагает довольно большой выбор кодировок. Но при всем богатстве выбора, альтернатива сводится к двум вариантам: utf-8 и windows-1251.

Cчитается, что UTF-8 обеспечивает книге бОльшую кроссплатформеннность, нежели windows-1251, но, при этом, архив с книгой «весит» заметно больше. Процентов этак на 10–15.

Пункт меню File\Import по умолчанию имеет один подпункт «No import plugins installed». Плагины для импорта книг из других форматов в комплект FB Tools не входят. Но если вы установите пакет Any2FB2, то FB Editor сам обнаружит его, и соответствующая иконка появится в меню File\Import. Устанавливать Any2FB2 в одну папку с FB Tools для этого вовсе необязательно.

Пункт меню File\Export позволяет экспортировать книгу в формат HTML. Структура книги полностью сохраняется. Можно выбрать скрипт XSL.

Если вы установили пакет FB2Any, в подпункте Export появятся плагины для экспорта книги в txt, Rocket Book, MS Reader, iSilo.

Второй раздел меню Edit кроме типовых Undo, Redo, Cut, Copy, Find, Replace содержит блок работы с элементами книги — Сlone container, Split container, Mergecontainer и, специально для вложенных секций — Remove outer container.

Ниже идут три подменю вставки элементов.

В подменю Style собраны команды вставки элементов в пределах одного абзаца: Normal, Text Author, Subtitle, Link, Footnote, Remove link.

Подменю Add содержит команды добавления элементов, которые должны находиться строго в определенном месте документа: Body, Title, Epigraph, Image (вариант), Annotation, Text Author.

И, в подменю Insert сгруппированы команды вставки элементов, которые, в принципе, могут находиться в произвольном месте книги: Image, Poem, Cite.

Последней идет команда Add Binary object. Она позволяет присоединять к файлу книги картинки и вообще любой двоичный файл. В настоящее время читалками поддерживаются только картинки, и то лишь в определенных форматах.

Следующий раздел меню — View. Сначала идут флажки отображения панелей — Toolbar, Link bar, Status bar, Doсument Tree. Под ними — выбор режима редактирования книги — Description, Body, Source.

Между режимами Body и Description можно переключаться с помощью комбинации клавиш Ctrl+Tab.

И последний пункт — Options. Здесь можно выбрать цвет фона, а также цвет, тип и размер шрифта для окна редактирования.

Раздел меню Tools содержит три пункта.

Команда Words. К сожалению, она до конца не проработана. В своем нынешнем состоянии команда выдает список слов, входящих в текст книги, в которых есть дефис. Те слова, у которых в тексте книги есть варианты без дефиса, помечаются восклицательным знаком. В поле Replacement можно вводить варианты замены. Но после нажатия кнопки «ОК» программа заменяет только те слова, в которых нет русских символов…

Options — здесь можно настроить некоторые параметры режима редактирования исходника книги. Wrap lines (сворачивать строки), Syntax highlighting (подсветка синтаксиса), Show end of line marks (показывать символы конца строки).

И подменю Scripts, позволяющее вызывать пользовательские скрипты JavaScripts.

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

==ВАЖНО========================

Первое, что необходимо твердо усвоить при работе c FictionBook — это то, что данный формат предназначен не для ОФОРМЛЕНИЯ, а для СТРУКТУРИРОВАНИЯ электронного документа.

===============================

Поэтому бесполезно искать абзацные отступы, выравнивание и прочие элементы, столь обыденные в любом стандартном редакторе.

В создающейся при запуске редактора пустой книге, всего три элемента. Annotation, history и body с title и одной section.

Как видим, в FB Editor различные элементы книги принято выделять цветной полоской слева, а также цветовой заливкой.

Редактирование в FB Editor внешне почти не отличается от обычного редактора. Поддерживается даже перетягивание выделенного текста.

Но свои особенности имеются. И главная из них — поабзацное перетягивание текста из элемента в элемент.

Наберите два-три слова в разделе section. Потом нажмите Enter, создав тем самым новый абзац. Наберите еще что-нибудь. Затем перейдите в заголовок книги (body/title/p, выделен зеленым цветом) и нажмите Del. Первый абзац текста перейдет в заголовок книги. Это и есть перетягивание текста.

Запомните этот способ. Его вы будете использовать очень часто.

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

Щелкнув по соответствующей кнопке на панели инструментов, текст можно сделать полужирным (Ctrl-S) или курсивным (Сtrl-E).

Двойной щелчок по слову выделяет слово. Щелчок по абзацу с зажатой клавишей Ctrl позволеят выделить сразу весь абзац.

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

Новшества версии 2.1 в текущей версии FB Editor не поддерживаются. Набирать их в режиме редактирования исходника можно. И валидатор обрабатывает их нормально. Но в коде программы поддержка новых тэгов не предусмотрена. И после выхода в режим WYSIWYG эти тэги просто исчезают или преобразуются в обычные абзацы, как, например, таблицы.

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

Можно еще использовать для этой цели «программистский» редактор, вроде Notepad++ или EmEditor.

§ 4.3 Заполнение заголовка книги

Перед тем, как приступить к набору или редактированию текста книги необходимо заполнить описание книги — Description.

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

Режим редактирования описания вызывается из меню: View/Description.

Окно редактирования делится на следующие разделы: Title Info, Document Info, Publisher Info, Custom Info и Binary Objects.

Каждый раздел содержит несколько подразделов (граф).

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

В разделе Title Info содержится основная информация о книге.

Первым пунктом идет жанр произведения (Genres). Он должен быть выбран из фиксированного списка. Щелкните по кнопке с треугольничком и выберите нужный жанр из соответствующей группы.

В этой же строке, правее, находится поле Match. Оно обозначает соответствие произведения выбранному жанру (в процентах).

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

Сначала выбираем жанр Science Fiction & Fantasy\Fantasy.

Потом добавляем еще одну строку Genre. И выбираем жанр Science Fiction & Fantasy\Action.

Список жанров с переводом приведен в Приложении В.

После Genres идет графа Authors. Информация об авторе книги. First (имя) Middle (отчество), Last (фамилия), Nick (ник), Email (адрес электронной почты), Homepage (адрес сайта).

==ВАЖНО========================

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

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

================================

Следом будет Book title (название произведения), Keywords (ключевые слова) — слова, характерные для данного произведения, возможно, имя главного или даже второстепенного героя, название объекта или местности, уникальный фантастический (или не фантастический) термин и т.д., Date (дата написания (не выпуска!)) в произвольном формате (например, «2001–2005 г., Переделкино»). В поле Value тоже вводится дата (обычно окончания работы над книгой), но строго в компьютерном формате ГГГГ-ММ-ДД (например, 2006-07-22).

Coverpage. Картинка обложки.

В поле Image вводится ссылка на картинку обложки. Сперва присоединяем картинку к файлу командой Edit\Add Binary object (скрепка на панели инструментов). Затем копируем имя файла из поля ID появившейся в разделе Binary Objects новой графы в буфер и вставляем в поле Image графы Coverpage. Перед именем нужно добавить символ «#».

Подробнее, о картинках для обложки читайте ниже, § 5.3 «Обложки».

Language — язык книги. Для русского языка пишем «ru».

Список возможных значений для других языков приведен в Приложении Г.

==ВАЖНО========================

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

Поэтому первым делом необходимо заполнить эти элементы. С остальными можно разобраться и попозже.

===============================

Source language — исходный язык, если книга переводная. В противном случае оставляем пустой.

Некоторые букмейкеры, [4.1] даже если книга изначально русскоязычная, все равно заполняют эту графу, дублируя Language. Так поступать не следует.

Translators — переводчик. Если книга не переводная, оставляем пустыми. Иначе заполняем таким же образом, как и графу Authors. Фамилия, имя, отчество и т.д.

Sequence — если книга входит в серию, то в поле Name вводим название серии, а в поле Number — порядковый номер в серии.

Обратите внимание, что в правой части строки, перед кнопкой дублирования строки есть кнопка с треугольничком. Она позволяет создавать вложенные серии. К примеру, основная серия — «Звездные Войны», вложенная серия — трилогия «Адмирал Траун».

Название серии может быть образовано по названию первой книги серии («Завтра война», «Имперские танцы»), имени главного героя («Кирилл Мазур»), местности, где происходит действие («Керторийский цикл», «Хроники Разлома»), особенностей сюжета («Отблески Этерны»)).

===ВАЖНО======================

Хотя спецификация FictionBook предусматривает неограниченное количество серий произвольной вложеннности, злоупотреблять этим не следует. Максимум — одна серия плюс одна вложенная серия.

В противном случае могут возникнуть проблемы с библиотечными скриптами и обрабатывающим софтом.

===============================

Раздел Document Info содержит информацию о самой книге.

В строку Authors вводим информацию о человеке, создавшем этот документ. Аналогично ранее заполнявшимся Authors и Translators.

Programs used — программное обеспечение, использованное при создании книги. Обычно FB Editor сам пишет там — «FB Tools». Если вы использовали какие-нибудь дополнительные утилиты — можно упомянуть их там.

Поля Date и Value заполняются аналогично таким же полям в Book Info. Впрочем, FBE старается заполнить их сам.

Source URLs — если исходный текст для создания книги был скачан с какого-нибудь сайта, здесь нужно указать ссылку на него.

Source OCR — если книга было отсканирована, то здесь указываем данные (обычно ник) сканнериста, а также человека, производившего вычитку. Страна должна знать своих героев!

ID — уникальный номер документа. Обычно генерируется самим FB Editor-ом или программой конвертации.

Подчеркиваю, номер должен быть уникальным. Именно по нему библиотечный софт различает книги. То есть, если Вы обновляете уже закачанную книгу, менять номер нельзя.

А как быть, если вы любите создавать новые книги, используя заготовки-шаблоны? Например, особенно удобно это делать при подготовке серии книг. Можно конечно, каждый раз редактировать ID вручную, но это нудно и, кроме того, можно запросто забыть это сделать.

Выход прост, как все гениальное. Подготовив шаблон, очищаем поле ID в description, и тут же сохраняем файл. Когда FB Editor откроет его вновь, он сгенерирует новый ID автоматически.

То же самое, кстати, относится и к полям Date и Value в разделе Document Info.

Version — номер версии книги. Обычно — 1.0. По мере редактирования книги, может (и должен!) изменяться.

===ВАЖНО======================

Вообще-то, одно время существовало соглашение, что у вычитанной книги номер версии должен быть не ниже 2.0.

===============================

Следующий раздел — Publisher Info. Здесь собрана информация о бумажном оригинале книги, если таковой существовал в природе.

Book name. Обычно совпадает с названием произведения, но если оно было издано в составе сборника, то здесь следует указывать название сборника.

Publisher — название издательства.

City — город, в котором была напечатана книга.

Year — год выпуска.

ISBN — код ISBN. [4.2]

Sequence — название ПЕЧАТНОЙ серии. «Библиотека приключений», например, или «Абсолютное оружие». Также допускает вложенные серии.

В раздел Custom Info может вноситься произвольная дополнительная информация. Копирайт, благодарности, реклама и т.д. и т.п. Вплоть до мистических проклятий средневековых переписчиков («Кто эту книгу украдёт, у того руки отсохнут и уши отвалятся») :-).

Раздел Binary Objects заполняется автоматически, по мере присоединения к книге бинарных объектов, обычно картинок.

Щелкая по кнопкам с крестиком и удаляя графы в этом разделе, вы одновременно удаляете присоединенные объекты.

§ 4.4 Структурирование документа

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

Непосредственно сам процесс можно разделить на следующие этапы:

1) Разбиение на секции;

2) Разметка элементов;

3) Оформление сносок;

4) Вставка иллюстраций.

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

Если текст уже размеченный, допустим, после FB2Any, то сперва следует пройтись по «дереву» структуры документа, правя некорректно оформленные элементы и убирая лишние секции. А потом, все равно очень желательно перечесть книгу, внося дополнительные правки.

Окончательное оформление сносок (если они не проставлены FB2Any) происходит только после окончания второго этапа.

И только потом, когда книга почти готова, прикрепляется обложка и вставляются иллюстрации.

Разбиение на секции

Текст книги в формате FictionBook делится на секции.

В окне редактирования каждая секция выделена зеленой полоской слева. Разрывы в этой полоске отмечают деление на секции. Для вложенных секций добавляются дополнительные полоски. Все очень наглядно.

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

Создать новую секцию просто. Выбираем команду Edit\Clone container (Ctrl+Enter). После секции, на которой стоит курсор, появится новая секция с пустым заголовком.

Разделить уже набранную секцию можно так: поместив курсор в нужное место выбрать команду Edit\Split container (Shift+Enter). Секция разделится ровненько по позиции курсора. Если при этом выделен кусок текста, то он станет заголовком новой секции.

«Склеить» секции, как, допустим, разделы в редакторе MS Word, привычно поместив курсор в конец первой секции и нажав Del, не получится. Абзацы просто будут перетягиваться из одной секции в другую по одному. Поэтому для этого нужно использовать команду Edit\Merge containers (Alt+Delete). Если присоединяемая секция имела заголовок (title), он превращается в подзаголовок (subtitle).

Создать вложенную секцию несложно.

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

Считается что это единственный способ. Это не так. Cоздать вложенные секции можно и не выходя из режима WYSIWYG.

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

Аккуратно выделяем нужные секции и помещаем их в буфер. Лучше это сделать командой Edit\Cut (Ctrl+X). Не забываем подчистить мусор (после удаленных секций обычно остается одна пустая).

Вставляем содержимое буфера в только что созданную новую секцию. Вуаля!

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

Если понадобилось, наоборот, убрать внешнюю секцию, это делается так: установив курсор на ее заголовок, или выделив эту секцию с помощью контекстного меню, выбираем команду Edit\Remove outer container.

Если нужно перенести или скопировать готовую секцию в другое место, это можно сделать как в режиме редактирования исходника, так и в режиме WYSIWYG. В последнем случае копируем секцию целиком в буфер, затем создаем в нужном месте пустую секцию, вставляем в нее секцию из буфера и убираем ставшую ненужной внешнюю секцию командой Edit\Remove outer container.

Не стоит допускать чрезмерной вложенности секций. Структура вложенных секций должна быть проста и логична. Том (книга), часть (раздел), глава (параграф). Подглавки же обычно выделяют подзаголовками (subtitle) — Style\Subtitle — (Alt+S).

Аннотация (Annotation) и история редактирования (History)

Раздел Annotation (серо-голубая полоска) — аннотация.

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

Подробнее о том, как аннотировать книги, читайте § 5.7 «Высокое искусство аннотации».

Аннотацию можно вставить в каждую секцию (команда Edit\Add\Annotation (Ctrl+J)).

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

Расстановка заголовков (Title, subtitle)

Заголовки (Title) могут быть в начале книги (body), секции или стихов.

Чтобы вставить заголовок, выберите пункт меню Edit\Add\Title (Ctrl-T).

При этом курсор должен находиться непосредственно в элементе, в который планируется вставить заголовок.

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

Если в главу входят небольшие подглавы, или она разделена на эпизоды строками типа «* * *», то для оформления этих элементов используются подзаголовки (subtitle). Установите курсор на нужный абзац и вызовите команду Edit\Style\Subtitle (Alt+S). Или щелкните по пиктограмме с тремя звездочками на панели инструментов.

Подзаголовки в FB Editor выделяются бОльшим размером шрифта.

Превратить подзаголовок в нормальный абзац можно командой Edit\Style\Normal (Alt+N).

==ВНИМАНИЕ, БАГ!=================

Перед тем, как проделать эту операцию, книгу лучше сохранить. И СРАЗУ ПОСЛЕ преообразования — ТОЖЕ. Частенько FB Editor при попытке отредактировать преобразованную таким образом строку, «вылетает» с ошибкой.

===============================

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

Маленькое замечание по поводу разделения главы на эпизоды. Иногда, наряду с «* * *» (или вместо), для этого используются пустые строки («немые» заголовки). Оставлять их следует лишь в том случае, если это несет смысловую нагрузку. Например, повествование о разных героях разделено «* * *», а разные по времени события — «немыми» заголовками. Во всех остальных случаях предпочтительна замена на «* * *». Хотя бы потому, что при конвертации эти пустые строки запросто могут «потеряться»…

Можно, в принципе, вместо «немых» заголовков ставить отличные от «* * *». Например, «–*–» или «* * * * *». Но этот вариант есть моя собственная придумка и однозначно рекомендовать я его не могу.

Эпиграфы (Epigraph)

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

Для выделения эпиграфов в FictionBook есть соответствующий элемент Epigraph. В FB Editor элемент Epigraph создается командой Edit\Add\Epigraph (Ctrl+N).

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

В FB Editor эпиграф выделяется фиолетовой полоской и меньшим размером шрифта.

Обычно каждое изречение или цитата имеют автора.

Чтобы выделить его, в FictionBook предусмотрен элемент Text Author. Вставляется он командой Edit\Add\Text Author (Ctrl+D). Цветной полоски для элемента не предусмотрено, только отступ и шрифт красного цвета.

Есть возможность непосредственного преобразования последнего абзаца эпиграфа в элемент Text Author.

Устанавливаем курсор на этот абзац, и вызываем команду Edit\Style\Text Author (Alt+A) или щелкаем по пиктограмме с человеческим профилем на панели инструментов. Абзац будет преобразован в элемент Text Author.

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

Стихи (Poem)

Чтобы обозначить стихи, песни, баллады, серенады и прочую лирику в FictionBook предусмотрен соответствующий элемент Poem, а в FB Editor — команда Edit\Insert\Poem (Ctrl+P).

Выделите нужные строки, и вызовите эту команду.

Стихи выделяются двумя полосками — черной и темно-красной. Это потому, что предусмотрено деление стихов на более мелкие элементы — строфы (stanza). Обычно текстовый блок целиком преобразуется в элемент poem, потом его можно «разорвать» на строфы с помощью команды Edit\Split container (Shift+Enter).

==ВНИМАНИЕ!=====================

Разделение стихов на строфы с помощью пустых строк спецификацией FictionBook не предусмотрено и считается ошибкой.

===============================

Затем можно вставить заголовок (Edit\Add\Title) и автора (Edit\Add\Text Author).

Непосредственного преобразования последней строки в Text Author (аналогично элементу Cite) в случае элемента Poem не предусмотрено.

Цитаты (Cite)

Не так уж и редко возникает необходимость вставить в текст отрывок из другой книги, статьи и т.д.. Такой отрывок называется цитатой. В FictionBook для этого был введен элемент Cite. В FB Editor он вставляется с помощью команды Edit\Insert\Cite. (Alt+C)

Цитаты выделяются желтой полоской и желтым цветом текста.

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

В последнем случае может потребоваться дополнительное выделение этих фраз болдом, или, как в этой книге, линиями «==» или «__». Исключительно потому, что старые читалки, тот же HaaliReader, выделяют цитаты недостаточно хорошо.

Хотя создавать цитаты можно, как и стихи — выделив фрагмент текста и вызвав соответствующую команду, этот способ работает в FB Editor не всегда корректно. Поэтому оформлять цитаты лучше всего путем вставки пустого элемента cite c последующим подтягиванием текста.

==ВНИМАНИЕ, БАГ!=================

Если в месте создания цитаты текст полужирный или курсивный, то образуется ошибочная конструкция, например, body/section/EM/cite/P/EM вместо правильного body/section/cite/P/EM, которая приводит к жутким глюкам при попытке сохранить файл.

===============================

В конце цитаты может быть добавлен элемент Text Author. Вставляется он точно так же, как в элемент Epigraph.

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

Линки и сноски

Линки в FictionBook служат для гипертекстового перехода в нужное место книги.

Сперва нужно присвоить нужному элементу имя (метку). Для этого выделяем его целиком с помощью контекстного меню. Затем в поле «ID:» панели линков вводим значение. Имя можно присвоить практически любому элементу: секции, абзацу, цитате и т. д. При этом допускаются буквы латинского алфавита и цифры.

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

После того, как нужный элементу присвоена метка, не него можно ссылаться. Для этого выделяем фрагмент текста, который послужит текстом для линка и вызываем команду Edit\Style\Link (Ctrl+L).

После этого курсор автоматически перемещается в поле «Href:» панели линков. Не торопитесь набирать имя метки вручную. Нажимая стрелки управления курсором «вверх» и «вниз» можно перемещаться по списку всех меток документа, причем перед именами уже будет стоять «#». Выбрав нужную метку, нажимаем Enter.

Линк создается строго в пределах одного абзаца. Если при вставке линка выделить фрагмент текста больше чем один абзац, то будут созданы несколько линков.

В FB Editor линки выделяются синим цветом и подчеркиванием. Гипертекстового перехода в редакторе не предусмотрено, так что, если понадобится протестировать линки, нужно открыть книгу в HaaliReader или другой читалке, поддерживающей линки.

Убрать линк можно, установив курсор на него и вызвав команду Edit\Style\Remove link (Ctrl+U).

Не следует злоупотреблять ссылками и превращать книгу в подобие Интернет-сайта. И уж тем более, совершенно недопустимы ссылки типа «читайте здесь»! Ведь, после преобразования книги в другой формат, такие «ссылки» потеряют всякий смысл.

Еще один интересный вопрос. Стоит ли оформлять как ссылки встречающиеся в тексте Интернет-ссылки («http://…», «www…» xxx@xxx.xx и т.д.)? С одной стороны, редактор сам постоянно норовит это сделать. И читалки, корректно обрабатывающие такие ссылки (то есть, с открытием браузера) уже есть. С другой — в FB2 ссылки, в первую очередь, предназначены для перемещения по тексту.

Поэтому, если вас интересует лично мое мнение, то Интернет-ссылки достаточно выделить болдом.

Сноски отличаются от линков, тем, что ведут не в произвольное место книги, а в специально предназначенный раздел-body «notes».

Соответственно, чтобы делать сноски, нужно сначала этот раздел создать.

Для этого переходим в режим редактирования исходника и, найдя в конце книги закрывающий тэг </body> набираем после него:

<body name="notes">

<section>

<empty-line/>

</section>

</body>

Значение атрибута «name» элемента body должно быть именно «notes».

Дополнительное body можно вставить командой Edit\Add\Body (Ctrl+B). Но потом все равно придется лезть в редактор исходника, чтобы добавить атрибут name.

Затем добавляем секции. Одна сноска — одна секция.

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

В начале текста сноски должен идти порядковый номер сноски.

Секциям или абзацам, соответственно, присваиваются имена, например, «note01» и т.д.

После этого можно ссылаться на них. Для этого служит элемент «сноска». В отличие от линка, для сноски очень желателен специальный текст. Обычно это цифра в квадратных скобках, например, «[1]». При необходимости набрав, а затем выделив ее, вызываем команду вставки сноски: Edit\Style\Footnote (Ctrl+W). Выбор имени метки делается точно так же как для ссылки.

Настоятельно рекомендую заключать сноски именно в квадратные скобки. Это практически стандарт. Фигурные скобки «{}» обычно применяются для ссылок на список использованной литературы. А просто цифры, без скобок, конечно, выглядят красивее, но, при экспорте книги в txt, они просто потеряются.

Кстати о красоте. Если после слова идет знак препинания, то гораздо эстетичнее помещать сноску после этого знака, а не втискивать между ним и словом.

Если в книге очень много сносок, почти на каждой странице, как, например, в эпопее Л.Н. Толстого «Война и мир», то представляется весьма разумным помещать текст сносок прямо в основном тексте, отграничив его все теми же квадратными скобками. Пусть это идет несколько вразрез со стандартом, ведь главное для нас — удобство читателей. Хотя, вообще-то, уже появилась программа-ридер, которая показывает сноски, как всплывающие окна. Но, пока эта фича не стала всеобщим стандартом, нам вольно делать такие отступления. К тому же, должен заметить, на КПК часто щелкать по сноскам весьма и весьма несподручно…

==ВАЖНО!========================

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

Также не стоит забывать про конверторы в PDF и другие полиграфически-ориентированные форматы. Они тоже любят размещать сноски внизу страницы.

Посему объемистые пояснения следует оформлять в виде приложений. Примерно так, как сделано в этой книге.

===============================

Ликвидировать сноску можно все той же командой Edit\Style\Remove links.

Вставка иллюстраций

Вставить в книгу иллюстрации очень просто.

В меню Edit выбираем пункт Insert/Image (Ctrl+M).

(Не перепутайте с аналогичной командой — Edit\Add\Image (Ctrl+G). Она выполняется точно так же, но предназначена для вставки картинок строго в начало секции.)

Должна появиться картинка с красной надписью «Unknown image ID». Это так называемая картинка-болванка.

Теперь надо присоединить настоящую картинку к файлу книги и связать ее с тэгом иллюстрации.

Присоединяем файл картинки командой Edit\Add Binary Object.

Затем выделяем картинку-болванку и щелкаем по полю «Href:» панели линков. Нажимая стрелки управления курсором «вверх» и «вниз», выбираем картинку. Она тут же появится вместо картинки-болванки.

О том, как подготовить картинку-иллюстрацию читайте ниже. § 5.2 «Подготовка картинок».

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

А если нужно быстро вытащить картинки из книги? Нет проблем. Проэкспортируйте ее в HTML (File\Export\To Html). Все картинки будут в каталоге [имя файла]_files, который будет создан в том же каталоге, что и файл HTML.

==ЭТО ИНТЕРЕСНО==================

Бывает, нужно извлечь растровую картинку из документа M$ Word. Функции экспорта картинок там не предусмотрено. Можно скопировать картинку в буфер, но если ее масштабировали, то она и скопируется с измененными размерами.

Как быть? Все очень просто. Сохраняем Word-документ, как HTML и все картинки будут в каталоге [имя файла]_files. В первозданном виде.

Читатель Змей предложил, как вариант, сохранять документ в .mht, картинки там будут уже перекодированные в base64. Затем можно открыть итоговый файл в Блокноте, и перекинуть нужные куски в исходник книги, не забыв отбить их тэгами binary. В общем, способ на любителя.

===============================

§ 4.5 Использование регулярных выражений

Функции поиска и замены в FB Editor предусматривают использование регулярных выражений (Regular Expressions, RegExp).

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

Синтаксис регулярных выражений в FB Editor заимствован из языка Perl.

В приложении к книге дано краткое описание синтаксиса регулярных выражений, использующихся в FB Editor. Однако, настоятельно рекомендую этим не ограничиваться, а прочитать хороший учебник по языку Perl. А еще есть замечательная книга Дж. Фридла: «Регулярные выражения». Хорошенько поискав, ее можно найти в Сети ;)).

Рассмотрим использование регулярных выражений на примере достаточно сложной, но часто встречающейся задачи — замены компьютерных кавычек «""» на типографские „«»“.

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

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

Для начала примем за аксиому, что кавычка, расположенная в самом начале абзаца — открывающая, а в самом конце — закрывающая.

Вызываем команду Edit\Replace.

В поле поиска «Find what:» вводим конструкцию для поиска:

^"

В поле замены «Replace with:» вводим конструкцию замены. В этом случае она совсем простая:

«

Не забыв установить флажок «Regular expression», нажимаем кнопку«Replace All».

Аналогично, для кавычки в конце абзаца конструкции поиска и замены будут:

"$

и

»

Выражения «^» и «$» называются литералами и обозначают начало и конец строки соответственно. В конструкции замены они не нужны.

Теперь обработаем оставшиеся кавычки.

Начнем с открывающей кавычки. Перед ними обычно идет пробел. Ну, иногда еще дефис или скобка.

Конструкция для поиска будет такая:

([\s\(-])"

Конструкция замены:

$1«

В квадратных скобках мы перечислили символы, один из которых может идти перед искомой кавычкой. Литерал «\s» обозначает пробельный символ. Символ «скобка» является зарезервированным, так как используется в самих конструкциях регулярных выражений, поэтому, чтобы искать его в тексте, мы отделили его косой чертой. Заключив все это в круглые скобки, мы образовали выражение, к которому будем обращаться из строки замены. И в конце непосредственно сама искомая кавычка.

Символ, который идет перед кавычкой, нужно оставить в неприкосновенности. Поэтому в поле замены вводится обращение к выражению в строке поиска — $1.

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

Конструкция поиска:

(\S)"([\s\!\.\)-…,?:;])

Конструкция замены:

$1»$2

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

Напоследлк должен заострить ваше внимание, что в режиме исходника FB Editor регулярные выражения функционируют несколько по-другому. В частности, не получается использовать метасимвол «|», некорректно обрабатываются перечни, содержащие кириллицу.

§ 4.6 Использование скриптов

Автор FB Editor предусмотрел расширение его возможностей при помощи Java Script.

Вызываются они из меню Tools\Scripts\[скрипт].

Первые девять скриптов можно вызывать клавишами Ctrl+1…9.

Документации, разумеется, не предусмотрено никакой. Во всем придется разбираться самостоятельно.

Поэтому, перед тем, как заняться написанием скриптов, необходимо проштудировать хороший справочник по функциям JavaScript с примерами.

Очень подробный справочник входит в состав MSDN Library. Много полезной информации можно найти также на W3SCHOOLS.

Из бумажных изданий могу посоветовать «JavaScript и DHTML: сборник рецептов» Дэнни Гудмана (доступна в Сети) и «Полный справочник по JavaScript» Фрица Шнайдера. Обе эти книги издавались на русском языке.

Если английский язык для вас не проблема, а средство общения, то на уже упоминавшемся www.flazx.com вы сможете бесплатно скачать множество руководств по JavaScript. Среди них хочу особо выделить JavaScript: The Definitive Guide. Книга выдержала уже пять изданий.

Компактный и информативный справочник по JavaScript входил в состав редактора FB Writer (см. ниже)

В газетной публикации я приводил два простеньких скрипта собственного изготовления.

Здесь такой необходимости нет. Как пример, рекомендую посмотреть скрипты, написанные для FB Writer, моим земляком, известным на форуме FictionBook.org под ником Sclex.

Правда, тут есть одно маленькое, но очень вредное «но». Механически перенести наработки Sclex-а под FBE 1.0 не получится. Они жестко заточены под FB Writer и совместимый с ним FB Editor 2.0.

§ 4.7 Баги с нами!

Хотя FB Editor — довольно надежная и функциональная программа, он все-таки содержит несколько неприятных ошибок.

Вот, к примеру, символ по внешнему виду похожий на тире «—» (десятичный код 173) в режиме WYSIWYG не виден. Вернее виден, только если приходится на конец строки. Приходится переключаться в режим Source и вылавливать эти символы-паразиты.

Бывает так, что при попытке сохранить книгу выскакивает окошко со следующим сообщением:

Code: 8004005 [Unspecified error]

Source: msxml4.dll

Description: Unexpected NameSpace parameter

Это, скорее всего, где-то образовалась ошибочная конструкция наподобие section/EM/cite/EM.

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

Такое также случается, если вы копировали через буфер содержимое html, в котором содержались картинки. Найдите эти картинки и удалите.

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

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

§ 4.8 Дальнейшее развитие редактора

C начала 2007 года вокруг FB Editor наблюдается весьма активное шевеление. Не совсем, откровенно говоря, здоровое.

За модернизацию FB Editor взялись сразу два человека.

Автор, известный на форуме Fictionbook.org, как Pilgrim, доработал FB Editor, так, чтобы он поддерживал все новшества FictionBook 2.1. К сожалению, энтузиазма у него хватило ненадолго.

Алексей Савельев (Alex Saveliev), выпустивший свой продукт под названием FB Writer, напротив, сделал упор на функциональность программы. Обеспечена совместимость с IE 7.0, исправлено несколько особенно вредных ошибок, доработан интерфейс, появилось много новых «фич». Особого внимания и, чего кривить душой, восхищения, заслуживают написанные под FB Writer скрипты, значительно облегчающие и ускоряющие подготовку книги. Начиная с версии 2.0 была реализована даже проверка правописания.

Все было бы хорошо, но Алекс потребовал за свою работу деньги. Мало того, последние версии редактора требуют для запуска подключение к Internet, что автоматически вычеркнуло эту программу из списка софта, которые я использую.

Кончилось все это печально, но закономерно. Какой-то доброхот взял да и взломал FB Writer. После чего разобиженный автор закрыл проект.

К счастью, еще до этого грустного финала совершенствованием FB Editor-а занялся программист компании «ЛитРес». За основу были взяты исходники Pilgrim-a. На данный момент этот продукт является, хотя и весьма сырой, но самой многообещающей разработкой в этой области.

Увы, пока что он таковым и  остается. Летом 2008-го распространение FB Editor было признано вредным для коммерческих интересов «ЛитРес»-а. Посему, продукт, едва доведенный до стадии «работоспособная бета», был принудительно зачислен в разряд «закрытый инструмент для своих». В общем, в очередной раз бабло победило зло.

Осенью 2009-го прошел слушок, что «ЛитРес» вроде бы собирается вновь «отпустить на волю» редактор. Но токмо не удобства пользователей для, а популяризации третьей версии формата ради.

Ждать пришлось почти полгода. 14 января 2010 г. Дмитрий Грибов выложил исходники FB Editor в свободный доступ. Не благотворительности ради, а дальнейшего развития для. Выяснилось, что совершенствованием редактора «ЛитРес» уже полгода как не занимается. Потому как программист занимавшийся этим, ушел из компании. После этого в Сеть протекла и последняя верия «офицального» дистрибутива.

К чести «ЛитРес»-а, надо признать, что продукт, так и не вышедший из состояния «бета», стал значительно стабильнее. Доведена до ума функция Words, есть куча доработок рангом поменьше.

Что, однако, не мешает, с грустью констатировать тот факт, что ситуация, пусть на новом уровне, вернулась к началу 2007-го…

§ 4.9 Альтернативные средства редактирования

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

Book Designer 4.0

В первую очередь, это Book Designer В. Войцеховича и его специальная версия для FB2 — FB Designer.

Программа BookDesigner была разработана как средство для конвертации книг из любого формата в любой же формат. И она полностью отвечает своему назначению. Если требуется сконвертировать книгу в экзотический формат или, наоборот, извлечь из оного, то здесь альтернативы Book Designer просто нет.

Проблема, в том, что BookDesigner совершенно не рассчитан на серьезное редактирование книг. Открыть файл, быстро разметить его и сохранить в новом формате — с этим он справляется великолепно. И функция Book Cleaner (пакетный запуск регулярных выражений) также достойна всяческих похвал. Но когда приходится долго и вдумчиво редактировать книги, то выясняется, что BookDesigner в этом не силен.

Не совсем корректно работает функция Undo. Не поддерживается элемент cite. То, что отображается на экране, не всегда соответствует реальному содержимому файла. Даже сохранение работает совсем не так, как мы привыкли.

На язык так и просятся слова незабвенного товарища Огурцова: «Все молодцы, работа проделана большая, но так дело не пойдет!»

А давно обещанный Book Designer 5.0 до сих пор существует в виде обновления.

FB Writer

Как уже было сказано, молодой и перспективный редактор FB Writer, начиная с версии 1.2 перестал быть бесплатным. Мало того, даже пробную версию редактора запустить без подключения к Internet стало невозможно. А после того, как появилось «рекальство», отучающее программу от этих пагубных привычек, автор свернул проект и удалил страничку FB Writer.

Однако, благодаря доброй воле одного из участников форума Fictionbook.org, FB Writer и «клистир» к нему, стали вновь доступны в Сети. Естественно, упускать такую возможность познакомиться с интересной софтинкой поближе было бы неразумно.

Любители копирайта и уязвленный автор могут не беспокоиться. И программа и взломка были использованы мной исключительно в ознакомительных целях. Поелику не имею привычки работать на машине, подключенной к Сети. Кроме  того, я уже говорил, что FB Editor 1.0 меня вполне устраивает, а когда (и если!) FBE 2.0 будет доведен до ума, то перейду на него.

Итак, приступим.

Для работы FB Writer требуется Windows семейства NT, MSXML, Script 5.6 и, внимание, Microsoft Net# Framework 2.0.

Кто не в курсе, FB Writer представляет собой переработанный и улучшенный FB Editor. Переработанный настолько качественно и толково, что полностью заслуживает права называться самостоятельным продуктом.

Первое, что бросается в глаза при первом запуске программы — внешний вид ее стал заметно лучше. Автор не стал устраивать авангардисткие эксперименты с большими иконками, он просто дополнил строгий интерфейс FBE 1.0 новыми элементами.

Особенно эффектно стало выглядеть дерево структуры документа. Добавленные пиктограммы значительно «оживили» его.

Заметно увеличился список горячих клавиш, в частности появились комбинации для набора типографских кавычек-«елочек».

В раздел меню «File» добавлен только один пункт, но зато какой: «Spellcheck» — проверка орфографии.

Правда, работает он весьма незатейливо, по принципу старого доброго «Лексикона» — перебирает слова, останавливаясь на неизвестных. При этом недостаток «Лексикона» — малый объем словарей, с нераспознаванием склонений/спряжений проявляет себя во всей красе. Хорошо хоть, словари можно дополнять.

Словари — четыре файла с расширением .dic (русский и английский, слова и имена собственные) находятся в рабочей директории программы. Редактировать их можно в любом текстовом редакторе, ориентированном на plain text, который не ограничивает размер рабочего файла. Под это определение подпадает практически любой «программистский» редактор или заменитель «Блокнота», которых в Сети пруд пруди.

Раздел «Edit» тоже особенно не изменился. Разве что добавление элементов перекочевало в отдельный раздел «Add», а из раздела «View» переехал пункт «Preferences». Сюда же сместился по-прежнему неработающий пункт «Words».

В раздел «View» добавлены команда просмотра книги во внешней читалке — «in External Viewer» и управление дополнительной панелькой для пиктограмм — Extra Toolbar.

На основной панельке добавились пиктограммы верхнего и ниженго индекса.

В новый раздел меню «Add» перенесены команды добавления всех элементов. Среди  них есть и новая команда «Sub-section». Текущая секция становится вложенной. Очень удобно. Не нужно копировать секцию в буфер и тут же вставлять. В раздел «Add» также перебрались команды добавления ссылок  и сносок. При этом они обзавелись разновидностями «View…» — возврат от текста сноски на то место, где на него ссылаются.

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

Пункт «Tools» за ненадобностью упразднен.

Предпоследний, тоже новый, пункт «Cmd» выделен под скрипты. Набор их гораздо богаче, чем в FB Editor. Великое множество скриптов можно скачать со странички моего земляка Sclex-а. Установка скриптов сводится к их распаковке в папку \папка в которую установлен FB Writer\styles\рабочий стиль\cmd\.

Ну, и последний пункт, «?», содержит весьма скромный help, из которого, впрочем можно почерпнуть сведения о горячих клавишах. Гораздо более интересна следующая команда — «Jscript Help».

Да, в комплекте с FB Writer поставляется удивительно качественный, прекрасно структурированный справочник по JavaSсript. Просто невероятно, как много ценной информации могут вместить четыре сотни килобайт chm-ки!

Окно редактирования описания (description) книги теперь разделено на закладки. Это эстетично и гораздо более эргономично. При этом предусмотрено нормальное редактирование описание оригинала (src-title-info) для переводных книг. Плюс еще несколько мелких улучшений. В частности, картинку обложки теперь можно выбрать из списка присоединенных бинарных объектов, причем она тут же будет показана. Сами бинарники теперь можно добавлять пачками, есть специальные кнопки для экспорта и удаления сразу всех. Язык(и) книги теперь также выбирается из весьма пространного списка.

О настройках (Edit\Preferences) поподробнее.

Первым разделом в них значится Style\Language. Теперь файлы настройки представления книги в рабочем окне, языка менюшек, базовый шаблон пустой книги, иконки, набор скриптов объединены в пакет файлов, который располагается в отдельной папке внутри папки styles. Добавить новый стиль просто — создать в папке styles новую папку, скопировать туда файлы базового стиля и отредактировать их. А здесь производится переключение этих пакетов.

Следующий блок («Main settings») тоже весьма небогат. Здесь можно включить автоматическую загрузку последней открытой книги и выбрать внешнюю читалку для пункта «View\in External Viewer».

Третий и последний блок — настройки редактора исходника. Все те же стандартные автосвертка строк, подсветка синтаксиса, цвет и гарнитура шрифта.

А вот шрифта для основного рабочего окна в окошке настроек нет. Управление видом текста в рабочем окне теперь целиком возложено на файл main.css.

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

Разве что, раздражает некоторое своеволие. FB Writer автоматически добавляет в любую открываемую книгу body «notes». Подобные действия следовало бы, как минимум, оставить на усмотрение пользователя.

Остается только грустно помечтать, насколько хороший инструмент для создания книг получили бы мы, если бы в авторе не взыграла коммерческая жилка…

Часть V
Прочие вопросы создания книг в формате FictionBook

§ 5.1 Советы по оформлению книг

Совет номер один. Не стоит стремиться воспроизвести все полиграфические изыски печатного оригинала.

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

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

Это касается, в частности, использования специальных символов.

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

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

Короткое тире — «–» (десятичный код 150) используется между числами, например: «1941 – 1945 г.» или (спорный вариант) в качестве математического минуса. Впрочем, в книгах от «ЛитРес» этот символ активно используется в качестве типографского тире. Просто потому, что он лучше смотрится на маленьких экранах читалок.

Кавычки также должны быть типографские, «елочкой» — „«»“. Возможно также использование кавычек «лапками», — «„“», особенно, если это кавычки вложенные. При загрузке книги в библиотеку Альдебарана, к примеру, управляющий скрипт автоматически заменяет вложенные кавычки «елочки» на «лапки». Использование компьютерных кавычек «""», а также английских (верхних) кавычек «“”» в русскоязычных книгах недопустимо.

Если понадобилось сделать р а з р я д к у, делайте ее с помощью неразрывных пробелов (десятичный код 160). Но, вообще-то, злоупотреблять разрядкой не следует.

Об использовании неразрывных пробелов. В FB2 ими отделяются: а) длинное тире в начале прямой речи от идущего следом слова; б) длинное тире в тексте от идущего впереди слова или знака препинания. Еще неразрывным пробелом можно «связать» идущий в начале предложения однобуквенный предлог со следующим словом.

Списки можно организовать, ставя в начале каждого абзаца символ «bullet» — «•», или «звездочку» — «*». Первый и последний абзац списка можно отделить от основного текста пустыми строками. Еще можно оформить список элементом cite.

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

В некоторых произведениях после названия главы идет краткое ее содержание (пример: «Робинзон Крузо» Д. Дефо; «Путешествия Гулливера» Дж. Cвифта, почти все произведения Янки Мавра, и т.д.) На данный момент, для выделения таких описаний наиболее разумно использовать элемент cite. Возможно дополнительное выделение курсивом. В будущем для этого был бы хорош специальный элемент.

Еще один застарелый мозоль — надписи.

Дмитрий Грибов настоятельно рекомендует оформлять их элементом cite.

Поступали предложения оформлять надписи, как таблицы. Однако они были отвергнуты, поелику такое нестандартное использование таблиц является хаком. [5.1]

Последнее решение таково:

Надписи оформляются элементом cite.

Надписи, требующие центровки, оформляются элементом subtitle, помещенным ВНУТРЬ элемента cite.

Правда, FB Editor не позволяет сделать это так просто. Команда Edit\Style\Subtitle внутри элемента cite неактивна.

Поэтому поступаем следующим образом. Аккуратно перемещаем текст в буфер (Edit\Cut), вставляем его в произвольном месте ВНЕ элемента cite, трансформируем в subtitle, выделяем subtitle ЦЕЛИКОМ, вновь перемещаем в буфер обмена и вставляем в элемент cite.

Особо вычурные надписи допускается оформлять картинкой. В частности, это полностью касается рисованных надписей из трилогии Кира Булычева «Заповедник сказок».

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

Поэтому здесь можно рекомендовать только индивидуальный подход. Где-то уместно сделать таблицу просто строчками текста. Где-то — нарисовать картинкой и вставить в текст.

==ЭТО ИНТЕРЕСНО=================

Трансформировать таблицу, созданную, к примеру, в Excel, в растровую картинку, проще простого. Аккуратно выделяем таблицу и копируем в буфер обмена. Затем вставляем ее, в программу редактирования растровых картинок. В тот же MS Paint, хотя бы. И сохраняем как картинку.

===============================

Второй метод применим лишь для относительно небольших таблиц. Ведь при просмотре книги на КПК читалка отмасштабирует получившуюся картинку под размер экрана. И, если таблица будет слишком велика, текст получится слишком мелким, то есть — нечитаемым.

И еще одна наболевшая тема — ударения. Штатных средств для их расстановки в FictionBook не предусмотрено. Поэтому букмейкеры извращаются кто во что горазд.

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

Другие обращаются к литерам западноевропейского алфавита. Там действительно можно отыскать символы, похожие на русские гласные буквы с ударением: á, é, ó, ý. Однако, помимо того, что это затрудняет поиск, можно нарваться на шрифт, в котором данных литер не окажется. И что прикажете делать с буквами ы, я, и, э?

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

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

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

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

Распространенная ошибка начинающих букмейкеров — размещение в начале или конце книги содержания. С гиперссылками или без. В эту лужу умудрились сесть даже многоопытные мужи из журнала «Компьютерра», когда они вознамерились официально издавать свой замечательный журнал в FB2-формате.

Давайте твердо усвоим, что содержание FB2-книги формируется читалкой (или конвертором) на основе структуры книги. И никак иначе.

Исключения могут быть сделаны лишь для сборников и журналов(см. § 5.4).

И последнее. Не стесняйтесь задавать вопросы. На форуме сайта формата (http://www.fictionbook.org/forum) вам охотно помогут. Главное, чтобы ваши вопросы не были откровенно дилетантскими…

§ 5.2 Подготовка картинок

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

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

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

К таким относятся, например, иллюстрации художника Е. Мигунова к произведениям Кира Булычева, Е. Велтистова и других авторов, П. Валька к роману-сказке Н. Носова «Незнайка на Луне», Л. Владимирского к гепталогии А. Волкова «Волшебник Изумрудного города», Й. Лады к роману Ярослава Гашека «Похождения бравого солдата Швейка» и т.д. и т.п.

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

И не забудьте внести фамилию иллюстратора в раздел custom info!

Не в обиду будет сказано, но выложенная в начале 2008 года на «Альдебаране» «Хижина дяди Тома» могла прекрасно обойтись без иллюстраций. Учитывая качество их сканирования и масштабирования.

И, вообще, надо сказать, что для сильно иллюстрированных изданий, (тонкие детские книжки, комиксы, буклеты и т.д. и т.п.) где более 50% содержимого — это картинки, FB2 — далеко не самый подходящий формат. Такие книги имеет смысл оформлять в PDF или DJVU.

Главный критерий при подготовке картинки для книги — минимизация объема.

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

Несмотря, на то, что FB Editor поддерживает вставку картинок в формате BMP и даже TIFF, при выборе формата картинки следует знать, что имеет смысл использовать два формата — JPEG и PNG.

Именно так. GIF в старых читалках поддерживается чисто номинально, тот же Haali не поддерживает его вообще, а эта читалка до сих пор популярна.

JPEG характеризуется исключительным коэффициентом сжатия. Естественно, за счет понижения качества карттинки.

Разработанный «в пику» платному формату GIF, PNG использует методы сжатия, не изменяющие исходного изображения.

Эти особенности и определяют выбор формата для конкретного изображения.

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

Например, картинка-скриншот 800x600 в формате JPEG занимает 70–80 kB, а в формате PNG (64 цвета) — 38–45 kB. Разница налицо.

И, наоборот, полноцветная картинка обложки (320x200) в формате PNG «весит» 134 kB, а в формате JPG — 34 kB, при практически одинаковом качестве. Разница — 100 kB. Несжимаемых 100 kB, заметьте. При упаковке книги в архив, эти 100 kB добавятся к его размеру.

При большом количестве иллюстраций, перед тем, как присоединять картинки к книге, имеет смысл обработать их программой, убирающей из JPEG служебную информацию. Например, PureJPG. Картинки PNG можно просто перепаковать.

==ВАЖНО!=======================

Оставшаяся в файлах картинок служебная информация, кроме увеличения объема, может просто-напросто помешать выводу этих картинок в читалке.

К примеру, грандиозная работа по сканированию и компоновке картинок, проделанная человеком, готовившим книгу Э. Скобелева «Необыкновенные приключения Арбузика и Бебешки» пошла коту под хвост, так как из-за оставшейся в файлах PNG служебной информации программы Adobe ImageReady картинки не может отобразить ни одна читалка, за исключением FBReader и новейшей BS FB2 Reader Pro…

===============================

Уменьшить объем файла PNG можно, в первую очередь, уменьшая размер картинки в пикселах.

До каких размеров? Как можно, меньше, но чтобы при этом ясно можно было понять, что изображено на рисунке. И ни одним пикселом больше!

Что же касается верхнего потолка, то год-два назад я бы уверенно заявил: «Не более 320x240».

Сейчас же все большее распространение получают КПК и коммуникаторы с полным VGA–экраном. (640x480). А также e-ink устройства с разрешением от 800x600. К тому же современные читалки неплохо умеют масштабировать картинки.

И тем не менее, в подавляющем большинстве случаев 320x240 более чем достаточно. Поверьте на слово.

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

После того, как Вы уменьшили картинку, она станет несколько смазанной. Устранить это можно, обработав ее фильтром Sharpen (увеличение резкости).

Если перфекционизм — ваше кредо, рекомендую использовать для масштабирования программу Benvista PhotoZoom. Вышедшая летом 2009-го третья версия этой замечательной софтины великолепно работает не только на увеличение, но и на уменьшение картинок, уверенно побивая на этом поле PhotoShop.

Кроме масштабирования снимка, можно уменьшать количество цветов. Обычно для скриншота программы хватает 32–64 цветов, для графика или диаграммы — и 16 более чем достаточно.

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

Если картинка — штриховой рисунок, то фон имеет смысл сделать прозрачным. Ведь фон в читалке совсем не обязательно будет белым. Он может быть и цветным и текстурным. В таком случае вокруг рисунка появятся некрасивые белые поля.

Что же касается JPEG, здесь также играет роль размер картинки в пикселах. А также коэффициент качества (сжатия). JPEG — формат с потерей качества, поэтому, чем больше сжатие, тем хуже качество картинки. Могу с уверенностью сказать, что для картинок, использующихся в FictionBook, вполне допустим коэффициент сжатия 50–60%.

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

Можно обрабатывать картинки в PhotoShop. При этом готовые картинки необходимо сохранять при помощи функции «Save for Web», чтобы не утяжелять файлик превьюшкой и служебной информацией. Очень удобно рисовать в PhotoShop обложки к книгам. Также в нем очень легко менять белый фон рисунка на прозрачный.

Подготовке картинок для FB2 в PhotoShop посвящена обширная статья Marina_Ch на www.fictionbook.org. Там описаны практически все ключевые моменты.

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

Для этих целей существует компактный и, что немаловажно, бесплатный софт. Например — XnView.

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

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

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

§ 5.3 Обложки

Как-то раз на форуме fictionbook.org даже разгорелась дискуссия: а нужна ли вообще обложка электронной книге?

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

Как правило, сканируется обложка бумажного оригинала. Размер итоговой картинки должен быть около 320x240, формат — jpeg. «Весить» картинка с обложкой должна не более 20-25 килобайт.

Впрочем, это правило допускает исключения. Если картинка обложки красочная, с обилием мелких деталей, то есть резон сделать картинку побольше. Насколько побольше? Ну, теперешний «литресовский» стандарт предусматривает высоту картинки в пределах 380–420 пикселов, ширина — пропорционально. Смотрятся такие обложки великолепно. Тем более, что число устройств с VGA-разрешением экранчика все время растет.

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

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

Уже упоминавшаяся выше «Хижина дяди Тома» выглядит донельзя удручающе. Выбранный букмейкером огромный размер картинки обложки ничуть не улучшает качество восприятия картинки на ней, кстати, весьма скромной. Зато отлично видна каждая трещинка и потертость на картоне…

Как поступить, если есть текст (например, из библиотеки Максима Мошкова), а обложки нет, и отсканировать ее неоткуда?

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

Только не забудьте проверить картинку на предмет присутствия чужеродных элементов. Наподобие ленточек с надписью «Новинка» и тому подобных артефактов. В электронной библиотеке такие обложки будут смотреться несколько странно.

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

Можно сесть и нарисовать обложку самому. Это 10–15 минут работы в Photoshop, или графическом редакторе попроще. Написать читабельным шрифтом имя автора и название книги, подобрать картинку, и — вуаля — обложка готова.

По поводу картинки. Она должна максимально подходить к содержанию книги. Это может быть сканированная иллюстрация из бумажного издания. Если такого издания под рукой нет, можно нарисовать картинку самому. При этом совсем не требуется быть художником. Составить коллаж, используя клип-арты [5.2] или картинки из Сети по силам каждому.

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

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

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

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

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

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

В конце концов, если ничего подходящего найти не удалось, можно обойтись вообще без картинки…

Вполне допустимо оформить обложку с использованием чисто текстовых надписей. Вот хороший пример такой работы:

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

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

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

В обоих случаях гораздо практичнее и эстетичнее нарисовать обложку самому.

В деловой литературе, выкладываемой на коммерческом ресурсе «ЛитРес», в 2008 году, был использован один довольно интересный прием. В качестве обложки используется снимок бумажной книги в ракурсе «сверху-сбоку». Что, в сочетании с бОльшим размером картинки, получилось довольно эффектно, и, наверное, привлекательно для покупателя.

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

По крайней мере, попытки подражания выглядят, мягко скажем, убого.

§ 5.4 Сборник или по отдельности?

Концепция FictionBook недвусмысленно диктует решение: «один файл — одно произведение».

Но! Если бы вы только знали, как муторно качать из библиотеки множество рассказов…

К счастью, во многих случаях, помогают сами авторы. Существуют такие вещи, как авторские сборники рассказов. Т.е. сборники, составленные самими авторами.Например, рассказы Юрия Никитина сразу выходили в сборниках. «Человек, изменивший мир», «Далёкий светлый терем». А Сергей Лукьяненко, в конце концов, собрал практически все свои рассказы в сборники «Гаджет» и «Проводник отсюда». Были такие сборники и у Артура Конан-Дойля, Кира Булычева и еще многих писателей.

Если же авторского сборника не существовало в природе, то можно «взять грех на душу» и составить сборник самому. Правда, в таком случае, ваша задача резко усложняется. Этот сборник должен быть максимально ПОЛНЫМ. Он должен включать если не ВООБЩЕ ВСЕ рассказы автора, то все его рассказы за определенный период или входящие в цикл.

Хорошо, скажете вы. А как читатель сможет узнать, какие рассказы включены в сборник?

Очень просто. Помещаем список рассказов в аннотацию. Возможности читалок и скриптов библиотек вполне позволяют обработать большие аннотации.

В некоторых случаях можно еще снабдить это содержание гиперссылками, как это сделала Татьяна aka Tibioka при подготовке журналов «Компьютерра».

Так что все вышесказанное можно в полной мере отнести и к журналам.

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

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

Произведения размером повести и больше, если они включены в такие сборники самим автором, наоборот, целесообразно выводить в отдельные файлы. НО! При условии, что они сюжетно не связаны с рассказами сборника.

А вот «издавать» «полновесные» произведения «под одной обложкой», пусть даже они и выходили в таком виде на бумаге — ЖУТКАЯ ЕРЕСЬ. Мимолетное удобство читателя обернется нешуточными проблемами при структурировании библиотеки.

Хотя, в принципе, тексты калибра повести (где-то 300–400 кB текста), не больше, если они сюжетно тесно взаимосвязаны и ЗАКОНЧЕНЫ, объединять все-таки допустимо… Например, это касается трилогии C. Лукьяненко «Принцесса стоит смерти», тетралогии Е. Велтистова «Приключения Электроника», фидошных повестушек про Штирлица и Винни-Пуха и т.д. и т.п.

Необходимо, также, по мере возможности, избегать многоавторских сборников. К ним относятся всевозможные альманахи, [5.3] тематические, юбилейные, подарочные сборники и т.д. А вот периодику, журналы, в частности, как ни странно, к таковым причислить нельзя. Журналы, вообще, отлично смотрятся в FB2.

§ 5.5 Советы по вычитке книг

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

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

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

==ВАЖНО!=======================

Даже если у вас был действительно высший балл по русскому языку, перед тем, как серьезно заняться корректурой, все равно стоит освежить в памяти правила. Как нельзя лучше для этого подходят книги Д.Э. Розенталя. Они доступны в Сети.

Одна из них так и называется «Справочник по правописанию и литературной правке»…

===============================

Опечатки, которые встречаются в текстах подразделяются на две категории: собственно опечатки и, на порядок чаще встречающиеся, ошибки программы распознавания (OCR).

Чаще всего программа распознавания путает буквы «с» и «е», «д» и «л», «и» и «н», «ц» и «п». («Стае» — «Стас», «потрясение» — «потрясенно», «липо» — «лицо»). Она может также посчитать пару букв одной буквой. Например, «гр»и «ф» — «неф» — «негр». Бывает, OCR-софт путает точки и запятые.

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

Что же касается собственно опечаток, то к ним относятся опечатки в бумажных оригиналах. Или,  в авторских текстах, если книга не публиковалась на бумаге. Особенно грешат опечатками книги, издавашиеся в 1990–1995 годах. Здесь может положиться только на великолепное знание языка и понимание произведения. Ну, еще можно поискать другое издание книги…

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

Как быть, если в тексте обнаружены пропуски?

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

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

Если же файла лучшего качества так и не нашлось, нужно постараться все-таки найти бумажный оригинал.

Если же и этого  сделать  не удалось, то просто пометьте место пропуска характерным значком, например, «-?-». Кто-нибудь когда-нибудь это исправит…

Но самое главное — нельзя увлекаться и превращаться из корректора в редактора! Даже, если вы внимательно проштудировали все книги Розенталя.

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

Поэтому, если у вас есть хоть малейшие соменения в необходимости исправления, лучше оставить все как было.

Разные издания книг могут отличаться. Cводить их, и приклеивать нос Ивана Петровича к ушам Василия Семеновича, без ведома автора, НИ В КОЕМ СЛУЧАЕ НЕЛЬЗЯ. Могут не понять и не оценить.

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

Отдельного упоминания заслуживают «ляпы» перевода.

К примеру, при переводе трилогии «Темный эльф» Р. Сальваторе, переводчик-олигофрен не нашел ничего умнее, как обозвать гордых эльфов-дроу — «дровами». А благороднейшее имя главного героя — «Дриззт» — взял и «облагозвучил», переиначив в «Дзирт». Что потом поползло в другие переводы и публикации. Не мудрено, что эти и подобные им «клюквы», вызывают непреодолимое желание исправить их.

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

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

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

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

Для сравнения файлов лучше всего подойдет программа Compare It!.

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

Последний совет. Возьмите за правило: перед «сдачей» книги, то бишь, выкладкой ее в Сеть, еще раз просмотреть ее, но в читалке. Если время позволяет, лучше в двух разных: CoolReader и HaaliReader (AlReader). Сто против одного, что заметите баги, которые иначе так и проскочили бы незамеченными.

§ 5.6 Символы, которых нет на клавиатуре

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

В Micro$oft Word для ввода таких литер есть функция «Вставка\Символ». Также можно настроить автозамену.

B самой Windows также есть утилита Character Map (Accessories\System Tools\Character Map). Но каждый раз  выбирать нужный символ из матрицы, копировать в буфер, потом вставлять куда нужно, крайне неудобно.

Поэтому наш метод таков. Зажимаем клавишу Alt и на боковой цифровой клавиатуре справа (должен быть включен NumLock)  набираем десятичный код символа.

Кроме того, для самых ходовых «непечатных» символов в FB Editor предусмотрены горячие клавиши.

Вот краткий перечень символов, которые можно вводить таким образом:

Alt-0132 — „ , левая нижняя кавычка, «лапка»;

Alt-0133 — … , «многоточие» (Ctrl+.);

Alt-0134 — †, католический крест;

Alt-0134 — ‡, православный крест (?);

Alt-0147 — “ , правая верхняя кавычка, «лапка»;

Alt-0149 — • , символ «bullet»;

Alt-0150 — – , короткое тире (Ctrl+-);

Alt-0151 — — , длинное тире (Ctrl+=);

Alt-0153 — ™, знак «торговая марка»;

Alt-0160 —   , неразрывный пробел; (Ctrl+Shift+Space)

Alt-0161 — Ў, белорусское «у краткое» заглавное.

Alt-0162 — ў, белорусское «у краткое» строчное.

Alt-0167 — §,  «параграф»;

Alt-0169 — ©, знак копирайта;

Alt-0171 — «, левая кавычка, «елочка»;

Alt-0174 — ®, знак «зарегистрированная торговая марка»;

Alt-0176 — °, символ «градус»;

Alt-0177 — ±, математический знак «плюс-минус»;

Аlt-0181 — µ, греческое «мю»;

Аlt-0183 — ·, точка умножения

Alt-0187 — », правая кавычка, «елочка»

Alt-0188 — ¼

Alt-0189 — ½

Alt-0190 — ¾

Alt-0225 — á, «а» с ударением

Alt-0233 — é, «е» c ударением

Alt-0243 — ó, «о» с ударением

Alt-0253 — ý, «у» c ударением

Внимание! При наборе символов «Ў» и «ў» должен быть включен русский регистр. При наборе символов ¼, ½, ¾, á, é, ó, ý  должен быть включен латинский регистр.

Поначалу, такой способ ввода спецсимволов кажется неудобным и громоздким, но затем привыкаешь настолько, что начинаешь использовать их даже в постинге на форумах…

==КСТАТИ…=======================

Если нужно набрать несколько неразрывных пробелов, просто жмем клавишу Space потребное количество раз и еще один раз, и затем один раз нажимаем «BackSpace».

Дело в том, что FB Editor при вводе двух и более пробелов, автоматически заменяет их, кроме последнего введенного, на неразрывные.

===============================

В редакторе от «ЛитРес» для ввода нестандартных символов предусмотрен специальный скрипт.

Для особо продвинтых субъектов существует еще такой вариант, как использование специальных раскладок клавиатуры, например, раскладки Ильи Бирмана (http://ilyabirman.ru).

§ 5.7 Высокое искусство аннотации

Рано или поздно вы столкнетесь с необходимостью самим аннотировать текст.

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

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

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

Например вот эту аннотацию назвать удачной никак нельзя:

Роман «Пиранья: Первый бросок» — открывает серию захватывающих бестселлеров о Кирилле Мазуре. В поисках золота с затонувшего фрегата, на который советских боевых пловцов навела сотрудник французских спецслужб очаровательная Мадлен де Ронак, им приходится вступать в бой с пиратами.

Хотя бы, потому, что тот факт, что Мадлен де Ронак — сотрудницА французских спецслужб, выясняется только в самом конце книги.

Или вот еще аннотация к книге Александра Зорича «Время — московское»:

Война. Галактическая война. Война между Российской Директорией и тоталитарной планетой Конкордия — недавними союзниками Директории, предательски нарушившими мирный договор. Война, в которой земляне долго терпели поражение за поражением, но теперь ситуация РЕЗКО ИЗМЕНИЛАСЬ. Потому что теперь Директория обладает НОВЫМ, УНИКАЛЬНЫМ ОРУЖИЕМ — космическими истребителями «Дюрандаль». Истребителями, которые пилотируют недавние выпускники Военно-Космической Академии, ставшие отчаянными боевыми офицерами. Казалось бы, шансы противника на победу МИНИМАЛЬНЫ. Однако Конкордия тоже не раскрыла еще ВСЕ свои карты… Читайте «Время — московское!» — продолжение ВЕЛИКОЛЕПНЫХ романов Александра Зорича «Завтра война» и «Без пощады»!

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

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

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

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

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

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

Здесь уместны выражения, «обстоятельно», «подробно», «в живой манере», «исчерпывающе» и т.д.

Последний совет: воздержитесь от рекламных ссылок в аннотации. Как бы ни был велик соблазн. «Хорошие книги там-то и там-то», «сайт автора такой-то» и т.д. Такие вещи в аннотации совершенно не к месту. Для них предусмотрены разделы Source URLs и Custom Info.

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

§ 5.8 Проблемы распространения

Тема эта не из легких, но затронуть ее просто необходимо.

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

Начнем с проблем технических.

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

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

На момент окончания работы над этой книги автоматизированный прием книг осуществляли свободные библиотеки семейства Либрусек (Либрусек, Кокосы, Флибуста). Чтобы получить доступ к интерфейсу закачки книг нужно зарегистрироваться и ответить на запрос подтверждения, который должны прислать вам на e-mail. После чего следуйте инструкциям на соответствующей страничке.

Второй путь заключается в закачке архива на файловый сервис наподобие Rapidshare, iFolder или OnlineDisk. Затем ссылка, выданная оным сервисом размещается на форумах и блогах, посвященных книжному варезу. Не самый лучший, однако и не самый худший вариант.

Можно вообще сделать финт ушами и выложить файлик(и) на личную страничку в Сети. И тут мы со всего разгона влетаем в проблемы юридические.

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

Разумеется, волков бояться — в лес не ходить. И, конечно же, суровый дяденька (или не менее строгая тетенька) в форме к вам вряд ли придут. [5.4] Все-таки, жесткость (и тупость, а временами — откровенный идиотизм) российских (да и не только) законов компенсируется необязательностью их исполнения. Однако сайт с хитовыми книжками пристрелят с высокой долей вероятности.

И все же, что бы там ни твердили законники, свободное распространение информации — одно из величайших достижений человечества. Поэтому бороться за него стоит всеми приемлемыми способами. [5.5] Это к тому, что выкладывать книжки в Сеть можно, нужно и должно.

Не нравится свободное распространение книг? Так давайте закроем общественные библиотеки, а продаваемые книги начнем снабжать лицензионными соглашениями, запрещающими передавать и одалживать их. Вам смешно? А вот в странах победившего копирайта уже не смеются. Там к книгам прикладывают маленькие такие бумажульки. С предупреждением о недопустимости чтения данных объектов авторского права вслух…

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

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

Конечно, можно долго и красиво рассуждать, что гонорары писателей — крохи от прибылей издателей и всяких там «правообглодателей», что никто еще реально не подсчитал ущерб от сетевых публикаций (кстати, попытку анализа этой темы читайте в приложении З), но факт есть факт. И даже широко распространенная сентенция, «от него не убудет», прекрасно, между прочим, применимая к акулам шоу-бизнеса, тут не прокатывает. Ибо писатели, в массе своей — народ небогатый. Это вам не одна очень известная примадонна, со своими замками и домами в Майами. И калымить картинами под заказ или там, приватными концертами в саунах, писатели тоже не могут.

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

С другой стороны, конечно, главными пострадавшими в этой ситуации явлются правообладатели. Именно они давят на писателей: а ну-ка, живо боритесь с «пиратами», иначе вообще на бобах останетесь.

И те стараются!

Вот, к примеру, глубоко мною почитаемый (и регулярно почитываемый ;) ) писатель Юрий Никитин после подписания договора с «ЭКСМО» не только убрал со своего сайта  книги, дотоле находившиеся там в бесплатном доступе, но и объявил «пиратов» «серьезной угрозой литературному делу». Дескать, они «свиньи, подрывающие корни дуба». Каковую мысль Никитин с постоянством, достойным лучшего применения, и тиражирует из произведения в произведение.

Еще Юрий Александрович пугает читателей тем, что из-за «пиратов» авторы останутся без гонораров и дружно уйдут «в другие области». Гм, наверное, переквалифицируются в дворники или управдомы. Или же упомянутые авторы будут писать урывками, что самым пагубным образом скажется на качестве текстов. (Хотя, Нику Перумову, например, работа по специальности писать много и качественно почему-то не мешает!) Такие вот оптимистические прогнозы сей достойный муж основывает на том, что сам зело полюбляет скачивать книги из Сети, в чем и признался журналу «Мир фантастики». Ну и, конечно же, все это густо приправлено навязшими в зубах рассуждениями о стремлении русских к халяве. (Хотя, как может быть халявщиком человек, трудолюбиво сканирующий и кропотливо вычитывающий книгу?)

Простите, Юрий Александрович, но это чистейшей воды демагогия. По крайней мере, пока нам не предъявят хотя бы одного действительно талантливого автора, действительно пострадавшего от «пиратов» (а не от волюнтаризма издателей). И, дважды простите на худом слове, с каких таких грибочков вы взяли, что авторы останутся без гонораров? Вон, бумажные книги еще не сошли со сцены, они даже не направились за кулисы, а в Рунете уже не осталось ни одной свободной библиотеки. Варезные блоги не в счет. Да, есть еще зарубежные сервера, тот же Либрусек, но все ведь догадываются, что и они не вечны. Рано или поздно ценный зверь песец до них доберется… И, по мере совершенствования платежных систем, и, соответственно, роста кормовой, тьфу, потребительской, базы, дела на этом фронте будут все хуже и хуже. В смысле, свободного контента все меньше и меньше. Так что популярным авторам голодная смерть явно не грозит.

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

А вот писатель Александр Рудазов поступил совсем по-другому. Он выложил на персональном сайте все свои книги (не знаю уж, какие у него там были договора), снабдив их грозным предупреждением: хотите качать — качайте с моего сайта. Но ежели кто-то начнет выкладывать книги где-то еще, — новых книг не увидите, так и знайте. И, как ни странно, это работало. Пока Рудазов не появился на «ЛитРесе», свободные библиотеки его книги (кроме первых нескольких, которые попали в Сеть еще раньше) обходили стороной. Может быть потому, что это было решение автора, а не транслированная воля издателя?

Сейчас кто-то скажет: совсем запутался Юзич. То запугивает всех, то мораль читает, то защищает свое право качать халявные книжки. Отнюдь. Я просто постарался изложить факты максимально непредвзято. Чтобы пользователи, выкладывающие книги в Сеть, шли на это с открытыми глазами. А книжек, бесплатных и не очень, смею надеяться, на мой век хватит.

Как говорится, думайте сами, решайте сами. Кто-то считает делом всей своей жизни выдирание текстов с платных ресурсов и размещение их в свободном доступе. А кому-то даже выложенный в Сеть сборник произведений Тредьяковского — нож в сердце и преступление против человечества. Это я к тому, что крайности одинаково плохи.

Часть VI
Просмотр и конвертирование книг в формате FictionBook

Хотя формат XML допускает чтение его человеком напрямую, для нормального просмотра книг в формате FictionBook требуется специальная программа-ридер (читалка).

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

§ 6.1 Читалки

Haali Reader

Написанная автором FB Tools Михаилом Мацневым первая читалка для FictionBook, до сих пор считается эталоном. Именно версии Haali Reader для КПК PocketPC и ее клонам формат обязан своей популярностью.

Читалка существует в версиях для PC (Win32), Pocket PC (Windows Mobile, процессоры ARM, MIPS, SH3) и Cassiopeia BE-300.

Несмотря на спартанский интерфейс, возможности программки весьма широкие. Она позволяет настроить вывод текста, гарнитуру шрифта и цвет для каждого элемента в отдельности. Поддерживает сглаживание шрифта, в двух вариантах: Micro$oft ClearType и «самопальное».

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

Заметным недостатком читалки является также то, что она не может показывать некоторые картинки jpg. Точнее, те из них, binary-секции которых специфицированы не как «image/jpeg», а «image/jpg».

Резюме. Добротная, очень нетребовательная к ресурсам, но безнадежно устаревшая читалка, популярность которой держится, в основном, на консерватизме пользователей.

CoolReader

По сравнению с HaaliReader, эта читалка является гораздо более совершенной.

Текст красиво отображается на экране в виде свитка или развернутой книги. Разумеется, поддерживается продвинутое сглаживание шрифта.

Читалка поддерживает все инновации FictionBook 2.1, включая таблицы.

Можно экспортировать книгу в HTML и RTF. Правда, файл получается весьма убогий, даже заголовки не выделены. Фактически, это TXT.

Используя голосовой движок (Micro$oft SAM или Digalo) книгу можно «озвучить», и даже сохранить в mp3-файл.

В данный момент автор занят серьезным развитием версии 3.0. Уже реализовано несколько интересных идей, в частности, настройка внешнего вида книги через через CSS, экспорт книги в Jinke Book Wolf, отображение сносок, как и полагается в приличной книжке, внизу виртуальной страницы.

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

Резюме. После некоторой доводки, эта софтина должна стать читалкой №1 для PC.

AlReader

Изначально разрабатывалась, как альтернатива Haali Reader, для Windows Mobile-устройств. Но уже давно выпущена версия для Windows XP.

Надо сказать, альтернатива получилась качественная. Фактически, нужда в Haali отпадает совсем.

Читалка «всеядна», умеет работать даже с zTXT PDB, что по достоинству оценят «пальмоводы», сменившие свой архаичный КПК на PocketPC.

Alreader, пусть пока и не идеально, поддерживает новшества FictionBook 2.1, включая таблицы.

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

Интерфейс читалки более дружественный, чем у Haali. А обилие настроек смущает только поначалу.

Читалка умеет экспортировать книгу в TXT, PDB и HTML. Преобразование в текст весьма качественное, заголовки, подзаголовки, стихи отбиваются пустыми строками.

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

Все элементы FB (эпиграфы, стихи, цитаты) грамотно выделены. Мелочь, а приятно.

Читалка отличается гораздо меньшей требовательностью к валидности FB2-файла. Книги, которые Haali Reader открывать напрочь отказывается (например, с неэкранированным знаком амперсанда (&) в тексте) Alreader показывает без сучка и задоринки.

Помимо всего этого, софтина отлично документирована. В комплекте идет иллюстрированная книга FB2.

Резюме. Де-факто, это читалка №1 для Pocket PC. Пускай, не по распространению, но по функциональности и качеству исполнения. И на персоналках ее позиции также очень сильны.

FBReader

Разработанная изначально для Linux и Palm Zaurus эта читалка вскоре обзавелась и версией для Windows.

Несмотря на то, что читалка не обладает какими-то выраженными достоинствами (в текущей версии нет даже экранного сглаживания!), она все равно оставляет весьма приятное впечатление.

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

Вдобавок, до выхода CoolReader 3.0.8, это была единственная читалка, которая грамотно работала с RTF. А прямая работа с CHM, до сих пор остается эксклюзивом.

Еще, как выяснилось, FBReader отличается заметно меньшей требовательностью к вставляемым в файл картинкам.

Именно инкарнация FBReader, добавленная в Linux-прошивку, дала новомодным устройствам на e-ink (PocketBook 301 и проч.), львиную долю популярности.

Резюме. Если вас интересует, в первую очередь, порядок в личной библиотеке, эта читалка для вас.

BS FB2 Reader Pro

Новейшая читалка, написанная пользователем, скрывающимся под ником Змей (BlackSnake). Представляет собой hta-приложение использующее движок Internet Exporer и XSL-конвертор в HTML. Как следствие — микроскопические размеры дистрибутива, хорошая настраиваемость и повышенная всеядность графических форматов. Настройки внешнего вида книги — через css-файл.

Из полезных плюшек еще можно отметить показ сносок всплывающими окошками.

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

Прочие средства

Популярная «навороченная» читалка IceBook Professional номинально поддерживает FictionBook. Чисто номинально, так как она преобразует книгу в свой внутренний формат. При этом все структурирование, заголовки, информация description, а также картинки, пропадают. Кому нужен такой хоккей, непонятно.

Файловый менеджер Total Commander также неплохо умеет просматривать FB-книги. Его встроенный просмотрщик Lister отсекает тэги, а заодно и description, оставляя чистый текст. Маленькое «но»: все это корректно работает только в том случае, если книга представлена в кодировке windows-1251.

Похожим образом работает и одна из лучших читалок для PalmOS — PalmFiction. Тэги FB2 «выкусываются», оставляя чистый текст. Учитывая то, что «забросить» FB-шку на Palm не так-то просто (если не ошибаюсь, сделать это возможно только через карту памяти), целесообразность такой «поддержки для галочки» выглядит весьма сомнительной.

Разумеется, здесь перечислены далеко не все программы-читалки, разрабатывавшиеся под FictionBook. Автор уделил внимание лишь самым проработанным и распространенным. Более-менее полный их список можно найти на сайте Fictionbook.org в разделе «Программы/Программы для чтения».

§ 6.2 Пакет FB2Any

Пакет FB2 to Any предназначен для конвертирования FB2 в форматы txt, iSilo pdb, RTF, LIT (Micro$oft Reader), RB (Rocket e-Book).

Пакет состоит из комплекта скриптов vbs, библиотек dll, xsl-файлов, а также оболочки FB2Batch для пакетного преобразования.

Работа с оболочкой крайне проста.

Вначале выбираем желаемый формат. «Select output format…». Причем, можно выбрать сразу несколько. Для этого выделяем их, зажав клавишу Ctrl.

Каждый режим имеет свои настройки. Выделив нужную строчку в списке «Select output format…», щелкаем кнопочку «Configure».

Подробнее настройки будут рассмотрены ниже.

Далее идет выбор директории, где будут сохраняться преобразованные файлы. «Store output files to:». Предусмотрено три варианта.

Радиокнопка «Store converted files near fb2 original» указывает программке сохранять выходные файлы по месту расположения входного файла.

Вторая радиокнопка «Place all converted files to this folder» помещает выходные файлы в директрию, которая выбирается в поле, расположенном прямо под радиокнопкой. Щелкнув кнопочку «…», можно выбрать или создать подходящую папку.

NB! Если же в поле вручную введено имя несуществующей папки, то автоматическое создание ее не предусмотрено.

Третья радиокнопка «Name and place new files using the follwing rule:» предусматривает переименование выходных файлов и «раскассирование» их в папки согласно вводимым в нижерасположенном поле правилам.

Список правил, можно узнать, нажав кнопку «Help?». Ниже помещен этот же список с переводом.

You can use the following patterns:

(For example file "c:\temp\books\foo.fb2", Stephen King's book "Thinner")

%1      Drive letter of source fb2 file ("c") {Буква диска, на котором находится исходный файл fb2}

%2      Path of source fb2 file ("temp\books") {Путь к исходому файлу fb2}

%3      Source fb2 file folder ("books") {Папка, в которой находится исходный файл fb2}

%4      Source fb2 file name ("foo") {Имя исходного файла fb2}

%t      Book title ("Thinner") {Название книги}

%f      Book author's first name ("Stephen") {Имя автора книги}

%s      Book author's middle name (empty in our example) {Отчество автора книги}

%l      Book author's last name ("King") {Фамилия автора книги}

%5      Book's language ("en") {Язык, на котором написана книга}

%6      Book's src-lang (empty in our example) {Исходный язык книги}

%y      Book's year-written ("1984") {Год написания книги}

%d      Book's id ("7539E335-30DA-49EC-B5B9-36697DB55C48") {Идентификационный номер книги}

%v      Book's version ("1.0") {Версия файла книги}

Далее идет список входных файлов. Файлы fb2 и папки с ними можно либо перетаскивать на этот список, либо добавлять с помощью кнопок «Add files…» и «Add files from folders…». Удалять лишние файлы из списка нужно кнопочкой «Delete»

Выбрав нужный формат (или форматы), файлы для преобразования и место их сохранения, жмем кнопку «Convert».

Теперь давайте взглянем на форматы преобразования более внимательно.

FB2–>iSilo (*.isilo.pdb)

Преобразование в формат читалки iSilo (PalmOS, PocketPC, Win32).

Книга предварительно преобразуется в HTML, который затем обрабатывается штатным конвертором iSilo.

Настройки предусмотрено только две. «Skip all images» — пропустить все картинки и «TOC Depth» — глубина вложения оглавления (по умолчанию — 2, если 0 — оглавление отсутствует).

FB2–>TXT (*.txt)

Преобразование в обычный текст.

Конвертация стандартная, придраться не к чему.

Настроек у этого режима много.

«Skip description» — пропустить заголовок FictionBook.

«Fixed width text» — форматировать текст согласно заданной длины строки. Иначе — один абзац, одна строка. Если поставить галочку в опции «Hypernate», то форматирование будет с переносами.

«Indent paragraph with this text:» — строка, которая будет идти в начале каждого абзаца. Если ввести пробелы — получится обычный отступ, «красная строка».

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

Если же выполнять конвертацию в текст не через batch-оболочку, а через иконку в программной группе «FB to Any» то вместо этой опции будет «Paragraph indent», предлагающий ввести отступ в начале строки числом.

«Do not convert strong to STRONG» — НЕ преобразовывать выделения жирным шрифтом в заглавные буквы.

«Do not convert italic to _italic_» — НЕ  преобразовывать выделения курсивом в помеченные знаком подчеркивания.

«Text encoding». Позволяет выбрать кодировку текста.

«Line break type». Способ перевода строки. Три варианта: Windows (CR\LF), Unix (LF), Macintosh (CR).

FB2–>RTF (*.rtf)

Преобразование в Rich Text Format. Чаще всего применяется, чтобы распечатать файл.

Довольно качественная конвертация. Грамотно обрабатываются выделения шрифта, заголовки, картинки.

Настроек всего пять.

«Skip all images» — не вставлять в выходной файл картинки.

«No cover image» — не вставлять в выходной файл картинку обложки.

«Skip description» — пропустить заголовок FictionBook.

Две последние опции «Compatible encoding» и «Compatible images» служат для придания выходному файлу большей совместимости с разным софтом.

FB2–>LIT (*.lit)

Преобразование в формат Micro$oft Reader.

Опции у этого режима полностью аналогичны FB2–>iSilo.

FB2–>RB (*.rb)

Преобразование в формат Gemstar Rocket e-Book. Аналогично iSilo, файл сперва преобразуется в HTML, а затем обрабатывется внешней утилитой rbmake.

Настройки таковы:

«Skip description» — пропустить заголовок FictionBook.

«No images» — не вставлять в выходной файл картинки.

«No cover» — не вставлять в выходной файл картинку обложки.

Следом идет блок «Cyrillic support» (поддержка кириллицы) с одной-единственной опцией «Translit title and author name» (транслитерировать название книги и имя автора)

Блок «Table of content generation» предлагает настроить создание оглавления.Можно отказаться от оглавления вообще («No table of content»), выбрать включение заголовков первого («top-level», второго «two-levels deep», третьего «three-levels deep» уровня вложеннности, или, вообще, включить ВСЕ заголовки. («Include ALL headers to toc»)

Опция «Shorten multi-line headers in TOC» позволяет урезать при этом длинные заголовки, занимающие несколько строк.

Блок «Text formatting» позволяет настроить форматирование текста.

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

Можно также настроить гарнитуру шрифта и ориентацию страницы (портретная/альбомная).

Подведем итоги. Пакет FB2Any, хотя он и полностью отвечает своему назначению, все же сыроватый и не слишком дружественный к пользователю продукт. Использовать его рекомендуется лишь в том случае, когда нет другой альтернативы. Таких случаев не очень много. LIT и RB — форматы вымирающие. В формат iSilo FB-шку можно сконвертировать через HTML и родной конвертор iSilo. В RTF FB2-книгу можно преобразовать через xsl-файл. А с конвертированием в TXT (и PDB) прекрасно справляется читалка AlReader.

§ 6.3 FB2GrWolf

Софтина FB2GrWolf от болгарского программиста Златко Петкова предназначена для преобразования книг FB2 в специализированный формат электронной читалки Jinke (на базе e-ink) — Wolf (.wol).

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

Интерфейс программы прост до крайности. Все основные команды продублированы кнопками на боковой панели. Основное рабочее окно служит для просмотра результатов растеризации.

Итак, жмем кнопку «Load FB2». Разумеется, программа без проблем открывает книгу, упакованную в zip. После загрузки выбранного файла в рабочем окне отобразится первая страница будущей Wolf-книги. Как правило, это обложка. При помощи кнопок, расположенных внизу, можно перейти к любой странице.

Разумеется, совсем не факт, что вид этих страниц вас устроит. Не беда. В FB2GrWolf предусмотрено полное редактирование оформления элементов (меню Схема\Редактировать или кнопка «Редактировать текущую схему»).

Количество опций и настроек этой функции удовлетворит самого взыскательного пользователя. Тут и настройки полей отступа, и колонтитулы, и регулировка качества картинок. А проработанность стилей для оформления элементов FB2 вообще поражает воображение. Кроме стандартных «шрифт-размер-центрирование» здесь есть полное форматирование абзаца (с переносами), богатый набор разрывов, отбивок и интервалов. Само собой, все настройки можно сохранить в виде профиля-схемы.

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

Можно также отредактировать описание книги (кнопка «Description»).

Отрегулировав настройки и, наигравшись со стилями, жмем кнопку «Make Wolf». Программа немного подумает и выдаст вам финальный Wolf-файл.

Кстати, предусмотрено пакетное преобразование книг. Для этой цели служит exe-шник FB2GrWolB, поставляемый вместе с программой. Еще один повод восхититься мастерством программиста. Все нужное на месте, ничего лишнего. Список входных файлов, выходная директория, выбор схемы, настройка перезаписи, ход операции. Прелесть!

Понравились дифирамбы? А теперь я в эту бочку меда плюхну ба-альшой  ушат… нет, даже не дегтя — мазута. При всех неоспоримых достоинствах в программе не хватает главной функции, которая сделала бы ее действительно полезной и массовой. А именно — вывода получившейся книги на печать. Автор из непонятных побуждений отказался сделать этот маленький, но важный, шаг вперед и снабдить программу такой полезной фичей. Дескать, 800 x 600 на бумаге не смотрится (это при том, что размер выходной картинки можно настраивать!), есть конвертор в формат RTF (который потом требуется дополнительно верстать) и, вообще, никому это на фиг не надо.

Надо, Златко, надо. Принт-офис для FB2-книг — тот мостик, который соединит книги электронные и бумажные. А ситуации, когда нужно быстро и качественно превратить e-book в компактный бумажный томик, встречаются чаще, чем хотелось бы. Если даже не брать в расчет друзей, подруг, родителей, бабушек-дедушек, не признающих чтения с экрана, бумага все-таки надежный, проверенный временем, носитель информации. А современные принт-менеджеры, наподобие FinePrint, прекрасно справляются с минимизацией расхода этого ценного ресурса. И, конечно же, возможность печати книжки в типографском качестве (конвертации ее в PDF) — еще один жирный бонус в копилку преимуществ FB2.

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

На худой конец, можно встроить функцию печати в просмотрщик файлов Wolf — MiniWolfViewer. Но это уже полумера. Растеризованное изображение действительно хуже смотрится на бумаге.

Но, пока что, Златко вообще свернул развитие FB2GrWolf, мотивируя это слабым интересом пользователей. Хотя, откуда бы означенному интересу взяться, если читалки на e-ink, и Jinke в частности, до сих пор остаются дорогостоящей диковинкой.

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

§ 6.4 FB2PDF

Как уже отмечалось, проблема распечатки или преобразования FB2-книг в полиграфически-близкий формат стоит достаточно остро. Однако решать ее почему никто не торопился. Один автор написал великолепный конвертор  в закрытый формат и остановился на этом. Другой создал работающий, но весьма громоздкий, лишенный какой-либо документации пакет, использущий многократное преобразование книги, в том числе и через XSL-FO. И только сравнительно недавно появилось решение, претендующее на простоту и удобство.

Это утилита FB2PDF, написанная пользователем, известным на форуме FictionBook.org под ником hedgehog77.

Софтина написана на языке Java. Это требует наличия на компьютере установленной Java-машины. Взять ее можно отсюда: http://www.java.com/ru/download/manual.jsp

Как следует из названия утилиты, она нацелена на создание PDF-файлов.

Вся документация на программу — крохотная readme-шка. Особо продвинутым пользователям достаточно, все остальные могут читать дальше.

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

java -jar fb2pdf.jar -cfg <путь к xml-файлу конфигурации> -in <путь к исходному файлу> [-out <путь к выходному файлу>]

Впрочем, если пользоваться консольным файл-менеджером, эту строку вполне реально подсократить.

Вот так:

fb2pdf.jar -in <путь к исходному файлу>

 В качестве исходной конфигурации используется файл config.xml, а имя выходного файла, как нетрудно догадаться, получается сменой расширения «fb2» на «pdf» во входном имени.

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

Поэтому ничего не оставалось, как заняться настройкой софтины собственноручно. Благо, xml-формат конфигурационного файла к этому располагает.

Перво-наперво нужно было настроить размер страницы (тэг page).

Как и положено, в нем имеются атрибуты width и height. Неожиданностью оказалось другое. Размеры страницы указываются не в миллиметрах, а в пунктах! Есть такая единица в полиграфии.

К счастью, памятуя, что 72 пункта — это дюйм, а дюйм равен 25,4 мм, выставить потребный размер A5 оказалось нетрудно. 148 x 210 мм = 5,82 x 8,26 дюйм = 420 x 595 пунктов.

Для справки: А4 будет 595 x 842 пункта, а A6 (1/4 A4) — 298 x 420 пунктов.

Теперь настала очередь отступов. Может быть, для аппаратной читалки отступы и не нужны. А вот для документа полиграфического качества — даже очень. Атрибутам margin-top и margin-bottom были присвоены значения 20 и 30 соответственно. Затем в тэг page были добавлены значения отступа слева и справа. Я предположил, что эти атрибуты называются margin-left и margin-right. Угадал!

После всех операций тэг page принял вид:

  <page width="420" height="595"

        margin-top="20" margin-bottom="30"

        margin-left="25" margin-right="25"/>

 Далее в конфиге следует объемистый раздел — тэг fonts. Он содержит описание использующихся при создании pdf-ки шрифтов. Структура его очень проста. Имеем определение типа шрифта, отбитое тэгом font и поименованное атрибутом этого тэга — name. И ссылки на четыре ипостаси этго типа — нормальный, жирный, курсив и жирный курсив, оформленные соответствующими тэгами. В комплекте с софтиной поставляется несколько шрифтов типа Liberation. Свободные, значит.

Ради интереса я добавил свой вариант шрифта.

    <font name="times">

        <normal>C:\WINNT\Fonts\times.ttf</normal>

        <bold>C:\WINNT\Fonts\timesbd.ttf</bold>

        <italic>C:\WINNT\Fonts\timesi.ttf</italic>

        <bold-italic>C:\WINNT\Fonts\timesbi.ttf</bold-italic>

    </font>

Последняя часть конфига — самая важная. Это тэг styles. Здесь также нет ничего сложного. Для каждого значимого элемента FB2 имеется определенный стиль, отбитый соответствующим тэгом. Title, epigraph, cite… На всякий случай сообщу, что вид обычного текста определяется тэгом sect. Тэги toc-entry предназначены для оглавления, а page-header — для верхних колонтитулов.

Кстати, в архиве fb2pdf.jar спрятана схема файла конфигурации — config.xsd. Там, кроме всего прочего, можно найти полный список стилей.

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

Здесь, правда, не обошлось, без огрехов. Например, для колонтитулов нельзя выставить выравнивание и отступы. Не хватает регулировки межсимвольного и межстрочного расстояния. Также не помешало бы определение цвета символов. Есть и откровенный баг — попытка выбрать курсивный шрифт (добавление к типу шрифта модификатора «:i» в атрибуте font) приводит к выбору шрифта жирного.

Ничтоже сумняшеся, я выставил атрибуту def-font-size тэга styles значение 10. Удалил из него атрибут font. Затем удалил атрибуты font-size из тэгов stanza, cite, а также из всех toc-entry. Подкорректировал значение упомянутого атрибута в тэгах title, subtitle, epigraph, text-author до 14, 12, 7 и 8 соответственно.

Принятые меры дали возможность довести объем информации на одной странице до 2,3 Kb — как в настоящей книге.

Все. Можно «печь» PDF-ки.

Помимо печати, возможность конвертации в PDF полезна вот для чего. На популярных книговарезных блогах стандартом де-факто стали PDF и DJVU. FB2 там принимают очень неохотно, а если и выкладывают, то обязательно отыщется кадр, который будет таращить глаза «А что это такое?» или простодушно попытается открыть файл Word-ом. А так — кладем в архив PDF и FB2, и все проблемы снимаются.

В общем, pdf-ки у FB2PDF получаются очень даже недурственные. Тем более раздражают кое-какие досадные мелочи…

Дело в том, что недостатки программы вышеперечисленными не исчерпываются. Картинки в обязательном порядке растягиваются до ширины страницы — иногда получается очень некрасиво. Наличие в абзаце сносок резко увеличивает межстрочное расстояние до конца оного абзаца. Зверски не хватает нумерации страниц, с включением их в оглавление, а также аннотации. Наконец, не мешало бы добавлять страничку с информацией об исходной FB-шке.

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

Часть VII
Прочее программное обеспечение для работы с FictionBook

§ 7.1 Программа-библиотекарь для книг в формате FictionBook

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

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

Специально для этих целей Дмитрий Пустовит и Олег Князев написали программу FB2Librarien («Библиотекарь»).

Данное описание верно для версии 1.4.0.0

Основные функции и возможности программы:

Ведет базу данных всех имеющихся книг. Информация хранятся в формате бесплатной СУБД Firebird 1.5.

Автоматически сортирует книги, согласно описаниям (description).

Отображает всю информацию о книге, включая аннотацию и обложку.

Позволяет добавлять дополнительную информацию, например, подробные сведения об авторе.

Поддерживает раздельную работу пользователей. Для каждого пользователя ведется отдельная история чтения книг, избранное.

Позволяет пользователям оценивать книги и добавлять рецензии.

Может экспортировать книги из библиотеки на ActiveSync устройство (поддерживаются устройства под управлением WinCE и PalmOS) или просто в отдельную папку.

Может работать в локальной сети.

Поддерживает скины .msstyle.

Можно экспортировать список всех книг в html-файл.

Установка программы

Скачать программу можно с ftp-сервера Fictionbook.org. Раздел pub. Программа полностью бесплатна. Для работы FB2Librarien требуется M$ Windows 2000 или XP. Запуск программы под Windows 9x возможен, но там она работает не совсем корректно.

Распакуйте архив в нужную директорию. Совсем не обязательно, чтобы она была в Program Files. Лучше всего создать директорию в корневом каталоге диска, например, D:\FB2LIBR.

При этом установка Firebird на ПК вовсе не требуется. Необходимая dll-ка включена в дистрибутив программы. Сервер Firebird будет нужен только при работе в локальной сети.

При первом запуске программы автоматически открывается пустая база данных. Она хранится в каталоге, где находится программа, в поддиректории Library.

Можно использовать ее, а можно создать свою.

Cоздание новой базы данных

Новая база создается с помощью функции меню «Библиотека/Создать» (Ctrl+N).

Выбираем способ хранения книг «База данных» или «Файловая система».

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

При способе хранения «Файловая система» книги размещаются в специально отведенной папке, упакованные в архивы ZIP. Для каждого автора создается отдельная папка «имя_фамилия».

Нужно указать местоположение файла базы и его формат (рекомендуется .fdb), а для способа хранения «Файловая система» еще и папку, где будут храниться книги — точку монтирования.

Способ хранения данных можно в любой момент изменить. Делается это функцией меню «Библиотека/Изменить способ хранения».

В настройках, «Инструменты/Опции», в разделе «Хранилище» тоже присутствует выбор «База данных/Файловая система». Однако попытка изменить способ хранения книг таким образом, может привести лишь к тому, что часть книг будет в базе, а часть — в папках.

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

Чтобы начать работать с программой необходимо:

а) авторизоваться;

б) закачать книги в базу данных.

Авторизация и управление пользователями.

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

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

На панели инструментов есть специальная пиктограмма «Авторизация» (стилизованное изображение человека). Или нажмите Ctrl+L.

Вводим имя пользователя (логин), и, если требуется, пароль. Щелкнув по кнопке со стрелкой, можно выбрать пользователя из списка.

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

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

Можно тут же создать нового пользователя. Для этого щелкните по ссылке «Регистрация».

В появившемся окошке введите имя пользователя, и, если считаете нужным, пароль. Пароль вводится два раза.

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

Для редактирования списка пользователей есть функция «Инструменты/Пользователи».

Редактировать список пользователей может только владелец базы.

Щелкнув правой клавишей по нужной строке, можно назначить пользователю привилегии. Их, собственно, две. «DB Owner» (Владелец базы) и «Can Edit» (Может редактировать).

Привилегия «Can Edit» всего лишь позволяет редактировать описание (description) книги.

Привилегия «DB Owner» предоставляет пользователю администраторские права. Только владелец базы может удалять книги, настраивать синонимы авторов, менять настройки пользователей.

Как быть если вы удалили пользователя owner, и в списке пользователей не осталось ни одного логина с правами владельца базы?

Все просто. Создаем новую базу и открываем («Библиотека/Открыть») ее. Авторизуемся как пользователь owner и тут же открываем оставшуюся «бесхозной» базу. Регистрируем пользователя и немедленно присваиваем ему права «владелец базы». Вуаля!

Добавление книг в библиотеку.

Для пополнения базы новыми книгами существует команда «Библиотека\Добавить книгу».

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

Файлы книг могут быть упакованы в ZIP-архивы.

Затем вызываем команду «File\Поиск FB2-файлов».

В панели «Source files» появится список найденных файлов с книгами.

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

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

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

Paбота с программой

Основное рабочее окно FB2Librarian разделено на три части и имеет четыре закладки. «Авторы», «Серии», «Жанры» и «Новинки» Соответственно, книги в них сортируются по фамилии автора, серии, жанру и поджанру, а также времени поступления в библиотеку.

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

В закладке «Серии», соответственно, слева находится список серий. Ну и так далее.

Правая часть экрана для всех закладок почти одинакова.

Сверху идет список книг, отсортированный по соответствующему признаку. Ниже — описание текущей книги. Название книги, вхождение в серию и порядковый номер в ней, жанр, а также аннотация книги.

Рядом, левее, находится картинка обложки, если она есть. Ниже обложки — количество рецензий и оценка читателей.

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

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

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

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

Функция поиска в программе довольно спартанская. По слову или фрагменту слова, регистронезависимая. Поиск производится в полях базы «Автор», «Название», «Серия».

Довольно много функций завязано на правую кнопку мыши.

Кликнув по имени автора в соответствующем списке, в закладке «Авторы», можно ввести подробную информацию о данном авторе («Редактировать информацию об авторе»), удалить автора (вместе с его книгами), а так же назначить синонимы.

Что такое синонимы?

Некоторые авторы публикуются как под собственным именем, так и под псевдонимами. Или под несколькими псевдонимами. Например: Кир Булычев — Игорь Всеволодович Можейко, Юрий Никитин — Гай Юлий Орловский. Чтобы объединить их как одного автора, в программе введены синонимы.

Можно ввести синонимы вручную («Редактировать синонимы»). А можно назначить конкретного автора как синоним другого, используя функцию «Добавить как синоним». Автор исчезнет из списка, а его книги будут добавлены к книгам того автора, которому вы его назначили в синонимы. Внимание! Операция необратима!

Последняя функция, доступная по щелчку правой клавишей в списке авторов, «Проверка написания». Она позволяет выявить некириллические символы в имени-фамилии автора.

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

«Пометить как прочитанную» (Ctrl+Y). Название книги выделяется зеленым цветом и рядом появляется зеленый квадратик. Книга добавляется в список «История».

«Снять пометку о прочтении» (Ctrl+Alt+Y) — снимает эту пометку.

«Запланировать к прочтению»(Ctrl+P). Добавляет книгу в отдельный список книг, которые вы планируете прочесть в первую очередь. Cписок можно просмотреть с помщью пиктограммы на основной панели («Показать запланированные к прочтению») включает дополнительную закладку.

«Исключить из запланированных к прочтению»(Ctrl+Alt+P) — соответственно, удаляет книгу из списка заплнированных к прочтению.

«Добавить в избранное» (Ctrl+B), «Удалить из избранного» (Ctrl+Alt+B). Помещает книгу в список «Избранное» или удаляет из оного. Таким образом можно выделять книги, которые особенно заинтересовали. При этом программа считает, что вы прочли эту книгу, и одновременно помечает ее, как прочитанную. Список «Избранное» можно просмотреть, нажав пиктограмму «золотая звездочка» на панели инструментов.

«Просмотреть рецензии» (Ctrl+Q). Вызывает функцию работы с рецензиями.

«Цитаты» (Ctrl+W) — вызывает функцию работы с цитатами.

«Голосование» (Ctrl+U). Позволяет выставить книге оценку.

«Читать в выбранной программе» (Ctrl+H). Просмотр книги. Аналог двойного щелчка.

«Сохранить книгу(и) на диск» (Ctrl+S) — сохраняет книгу (или несколько книг) в указанную папку, в виде zip-файла.

«Отправить книгу(и) на WinCE устройство». Позволяет отправить книгу на устройство под управлением Windows CE (Pocket PC). Должен быть проинсталлирован драйвер устройства или программа-синхронизатор.

«Отправить книгу(и) на Palm устройство». Отправляет книгу в папку, где ее «подцепит» синхронизатор Palm.

«Править информацию о книге» — редактирование description книги. Сделано эта функция качественно, гораздо лучше, чем в FB Editor. Можно даже масштабировать картинку обложки

Требуется привилегия «Может редактировать» или «Владелец базы».

«Удалить книгу» (Ctrl+D) — удаляет книгу из базы. Требуется привилегия «Владелец базы».

Еще в контекстное меню можно добавлять пользовательские функции. Делается это при помощи кнопочки «Пользовательское меню» («Инструменты\Опции», закладка «Общее»).

Откроется форма для настройки меню:

Чтобы ввести новый пункт меню, нажмите кнопку [+] на панели формы. Откроется форма для ввода нового пункта меню.

Заполните поля:

Unpack — отметьте, если хотите, чтобы сжатый файл был предварительно распакован перед вызовом команды. Если не отмечен, файл будет в формате Zip.

Item caption — введите название пункта менюApplication — введите или выберите программу, которая будет вызываться при выборе пункта меню. Допускается выбирать исполняемые файлы (*.exe, .com), скрипты (*.cmd, *.bat), а также произвольные файлы, которые ассоциированы в системе с приложениями.

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

Допускаются следующие специальные символы, которые имеют специальное значение (обратите внимание, что это строчные буквы латинского алфавита):

%i — полное имя файла с книгой (с расширением fb2, если пункт Unpack отмечен, или zip, если не отмечен);

%o — имя файла без пути (с расширением fb2, если пункт Unpack отмечен, или zip, если не отмечен).

%n — имя файла без пути и без расширения.

Нажмите кнопку Ok, чтобы создать пункт меню.

Если нужно удалить пункт меню, нажмите кнопку [–].

Чтобы сохранить пользовательское меню, нажмите кнопку “Save” (с изображением дискетки).

Затем еще раз Ok, чтобы закрыть диалог “Настройки”.

Пример.

Чтобы создать пункт меню, при выборе которого книга будет копироваться в определенную папку (например, для последующего чтения, в распакованном виде в папку c:\ToRead), введите следующее:

Unpack = отмечено

Item caption = Копировать для чтения (fb2)

Application = cmd.exe

Parameters = /c copy “%i” “c:\ToRead\%o”

В результате выбора этого пункта меню распакуется файл с книгой и выполнится команда:

cmd.exe /c copy “c:\fb2lib\library\tmp\book.fb2” “c:\ToRead\book.fb2”

По материалам файла Fb2Lib_UserMenu_Guide.doc

© 2007, TaciturnMan

Чуть подробнее о рецензиях. Функция вызывается щелчком по количеству рецензий под рисунком обложки или по правому щелчку мыши. Пиктограмма с зеленым знаком «плюс» позволяет добавить свою оценку книги в произвольной форме. Логин, дата и время добавляются автоматически. Пиктограмма с красным крестиком вызывает отдельное окно, где можно редактировать и удалять рецензии. Обычный пользователь — только свои, владелец базы — все.

Аналогичным образом работает функция «Цитаты».

В программе «зашита» последняя версия списка жанров FictionBook. Но, на всякий случай, есть функция их обновления («Инструменты\Загрузить XML с жанрами»). В открывшемся окошке выбираем нужный файл (обычно это FictionBookGenres.xsd)

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

§ 7.2 Утилита Booki

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

 Умеет обрабатывать текстовые, fb2 и rtf файлы (в том числе в zip-архивах). Выполняет операции как с отдельным файлом, так и сразу со всеми файлами в текущем каталоге. Может запускаться в режиме, когда операции c файлами выполняются без вывода окна программы на экран. Выполняемые операции и обрабатываемые файлы задаются через параметры командной строки. Параметры командной строки подробно описаны в документации к программе — небольшом html-файле, котрорый «зашит» в exe-шник программы. Дублировать его здесь ради увеличения объема книги, я не считаю возможным.

Программа позволяет:

1. Переименовывать файлы с книгами. Программа определяет автора, название и серию книги из файла, формирует новое имя файла и переименовывает файл. Имя файла формируется скриптом, который задается в настройках программы. Синтаксис и функции скрипта описаны в документации к программе.

2. Перемещать («раскассировать») файлы по каталогам. Программа определяет автора, название и серию книги из description файла, формирует имя каталога, если необходимо создает его, и перемещает файл в этот каталог. Имя каталога формируется скриптом, который задается в настройках программы. Синтаксис и функции скрипта описаны в документации.

3. Перекодировать fb2 файлы из кодировки UTF-8 в WIN1251, что уменьшает размер файла примерно на 40% (в zip-архиве на 10-15%). Если в файле встретится символ, который отсутствует в кодировке WIN1251, то программа не перекодирует файл.

4. Переконвертировать файл из fb2 в txt. В настройках программы задается формат создаваемого текстового файла.

5. Перекодировать текстовые файлы из кодировки DOS CP866 в WIN1251.

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

Помимо того, что утилита платная, большим недостатком Booki являются несколько багов, кочующих из версии в версию. К примеру, если в заголовке книги имеются две и более подсерии, то такую книгу программка в упор не видит.

Хорошо хоть, в последних версиях конвертация в обычный текст доведена до вполне приемлемого уровня. Заголовки секций и эпиграфы отбиваются пустыми строками.

Кстати, если во время преобразования книги в текст будет выдано сообщение наподобие: «Файл не переконвертирован. Нарушена структура», тщательно проверьте сноски на предмет их валидности. Метки «id» должны быть в тэгах section, а не где-либо еще. Также следует знать, что Booki не признает наличия в сносках пустых строк (empty-line) — еще один переходящий баг.

Надо отдать должное, автор программы постоянно ее совершенствует. Правда, значительная часть его усилий уходит не на исправление застарелых багов (которые, повторно отдадим должное, тоже потихоньку выводятся), а на создание «удобств» пользователям. Вроде мегабайтного регистрационного файла или постоянного запроса кода запуска с сайта автора (последнюю вредную наклонность приходилось даже лечить — вмешательством в код программы). К счастью, в последующих версиях, автор перестал доводить пользователей до такого греха, вернувшись к более  традиционному nag-screen. [7.1]

В общем-то, несмотря на все нюансы, Booki — достойная программка. Самый большой плюс ее, конечно же, в том, что она без каких-либо дополнительных библиотек или особых требований к ОС (программка прекрасно чувствует себя под Win9x) может сконвертировать FB2 в txt.

При написании параграфа использовалась оригинальная документация утилиты Booki.

§ 7.3 Программа-библиотекарь JEFLibrarian

С недавних пор выбор программы для ведения FB2-библиотеки не сводится к FB2Librarian. Написанная уже упоминавшимся hedgehog77, учаcтником форума Fictionbook.org, программа JEFLibrarian представляет собой неплохую альтернативу, да еще и многоплатформенную. Приверженцы Linux, несомненно, по достоинству оценят наличие версии под эту самую свободную в мире ОС.

Как и FB2PDF, программа написана на языке Java  и представляет собой пакет Java-библиотек (платформа Eclipse RCP) с небольшим запускным exe-файлом.

В качестве движка для базы данных используется Derby.

Пока что программа находится в стадии активной разработки. Поэтому ограничимся кратеньким обзором, особенно не вдаваясь в тонкости.

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

После первого запуска все рабочее окно занимает вкладка Welcome.

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

Имеется восемь вкладок: «Home» — общая информация и статистика по базе, она же история чтения книг. «Authors» — непосредственно книги, рассортированные по авторам. «Series», «Genres», «Keywords» — сортировка книг, соответственно, по сериям, жанрам и ключевым словам. «Search» — поиск и, последняя «Add books» — добавление новых книг.

Первым делом надо создать новую базу. Вызываем пункт меню Library\New book. Выбираем имя файла и папку, где она будет располагаться. Потом вводим внутреннее имя базы (допустим, «Моя либа»), и, если требуется краткую аннотацию. Также можно выбрать способ хранения книг — внутри базы или внешний. Во втором случае нужно будет указать еще корневой каталог базы. Вообще, на момент написания книги, внутренний способ хранения казался более отлаженным.

Теперь можно добавлять в базу книги. Вызовите пункт меню Library\Add book или щелкните по заголовку нужной вкладки. Предусмотрено три способа добавления новых книг — выбрать папку, выбрать отдельный файл и скачать файл из Сети.

После выбора папки слева тут же будет отображен список файлов FB2, которые находятся в этой папке, а также вложенных в нее папках.

Просмотрев список и подправив его в случае необходимости, жмем кнопку «Start import» (над списком, напоминает кнопку «Play» в медиа-проигрывателях). После окончания процесса итоги его можно увидеть внизу справа.

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

Более того, книги из базы, помимо редактирования description можно редактировать во внешем редакторе. Делается это несколько замысловатым, но эффективным, способом.

После выбора в контекстном меню пункта «Edit Book (ext. editor)» книга появится в списке «Files to edit» на вкладке «Home». Следом запустится программа-редактор, путь к которой был указан в опциях. После редактирования и сохранения книга останентся во временной папке библиотекаря, при этом будут доступны команды «Edit» (вернуться к редактированию), «Save» (сохранить книгу в базе) и «Cancel» ( просто удалить файл из временной папки, сбросив, таким образом, все изменения).

В опциях библиотекаря также предусмотрена возможность подключения внешних утилит, например, конвертора в PDF или LRF.

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

§ 7.4 Программа-библиотекарь MyHomeLib

Еще один библиотекарь для FB2-книг написали Алексей Пеньков и Николай Рыманов. Программа динамично развивалась, благополучно доросла до релиза и не собирается на этом останавливаться.

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

Книги можно сортировать по авторам, сериям и жанрам. Наличествует продвинутый поиск (закладка «Фильтр») по семи параметрам, с применением квази-SQL запросов. И, конечно же, полюбившиеся произведения можно отобрать в «Избранное». А впоследних версиях программы добавлиась возможность создавать пользовательские группы.

Но самая выдающаяся «фича» МyHomeLib — это, разумеется, управление коллекциями книг с известного сайта «Русская библиотека в Эквадоре» («Либрусек»). Администрация этой замечательной библиотеки настолько любезна, что предоставляет возможность скачивания всей коллекции книг  в архивах, правда, немаленьких, по 5000-10000 книг. Вот с этими-то архивами и работает MyHomeLib.

Для этого в комплекте с инсталлятором программы поставляются файлы, с помощью которых можно легко воссоздать базу всех FB2-книг, входящих в библиотеку Либрусек. На момент написания книги эта библиотека включала около 115 000 книг более чем 20 000 авторов, общим «весом» за 20 гигабайт!

И, даже если у вас нет возможности скачать такой колоссальный объем данных, МyHomeLib может работать непосредственно с Либрусеком, on-line. Нужные книги будут скачиваться по мере необходимости.

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

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

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

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

§ 7.5 FB2Fix

Как следует из названия, основная задача этой утилиты — полная проверка FB2-файлов на валидность с возможностью их коррекции. Кроме того, автор, скрывшийся под претенциозным псевдонимом Gremlin II, наделил программу «талантами» работать с архивами, в том числе RAR и вложенными ZIP, использовать пользовательские спецификации XSD, транслитерировать имена файлов и переименовывать их по шаблону, заменять «непечатные» символов, автоматически конвертировать жанры из версии 2.0 в версию 2.1, и даже перекодировать книжки. Отдельным пунктом значится приведение в порядок невалидных книг из библиотеки Либрусек.

Возможна обработка как отдельных файлов, так и целых каталогов.

Утилита выполняет полную проверку на соответстие xml-файла книги спецификации (schema) FB2. Если книга не проходит проверку на валидность, FB2Fix пытается исправить ее. Это производится следующим образом. Вначале производится проверка всех тэгов. Не закрытые (или же лишенные открывающего дескриптора) тэги — закрываются. Также софтина пытается разобраться, с «висящими» в тексте символами «<» и «>» на предмет, элементы ли это тэгов или же просто огрехи работы конвертора. При этом программа, как и все «ишкуштвенные интилекты» не застрахована от ошибок. Отсюда мораль: после правки «проблемного» файла не пожалеть пару минут на сличение результата с оригиналом.

Все признанные огрехами «<» и «>» в тексте заменяются на &lt; и &gt;, как и положено по спецификации. Символы с кодами от 01 до 08 заменяются на «-», символы 0b, 0c и 0e — 0x1f на « ».

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

Несмотря на это, для работы FB2Fix требуется наличие в системе Micro$oft .NET Framework 2.0. Также софтина может работать под Linux (с установленным Mono и пакет(ами) libmono-i18n{1,2}.0-cil).

Давайте познакомимся с FB2Fix поближе.

Скачайте и распакуйте архив в папку, Например, C:\FB2TOOLS\FB2FIX.

Создайте на диске (лучше в корне) две рабочие папки. Например INBOOK и OUTBOOK.

Войдите в папку FB2FIX. Для удобства, лучше все эти операции проделывать в каком-нибудь консольном файл-менеджере, например, Far Manager.

Забросьте в папку INBOOK с десяток книг FB2.

Теперь давайте запустим FB2Fix.

Вот так:

FB2Fix.exe D:\INBOOK /output:D:\OUTBOOK

Когда утилита отработает, загляните в папку OUTBOOK. Вы обнаружите там две папки — Bad и Good. Как нетрудно догадаться, первая предназначена для книг, которые не прошли проверку и, к тому же, их не удалось исправить. В папку Good отправляются все остальные.

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

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

Незакрытый тэг body оказался проге не по зубам. Тэги descripion и cite она «исправила», вставив закрывающий тэг в самый конец файла. И перед удаленным открывающим тэгом <p> корректор спасовал. А вот с конструкцией <strong><emphasis></strong></emphasis> программа справилась «на ура». Незакрытые тэги <stanza> <p> FB2Fix также исправил как положено. А незакрытый тэг <i> софтина просто удалила.

В то же время FB2Fix позволяет себе «не замечать» некритичные ошибки. Например, неправильно оформленные сноски, когда метка поставлена не на секцию, а на ее заголовок, или вообще абзац.

В description успешно прошедшей проверку книги добавляется строка

<custom-info info-type="fb2fix-status">Passed</custom-info>

а в случае внесения правок версия книги увеличивается на 0.1. Правда, почему-то не всегда.

При повторном прогоне все работает корректно: строка в custom-info «размножаться» не будет.

В общем, если сделать скидку на «искусственность» тестирования (ну какой такой конвертор создаст fb-шку c незакрытым body или description) то можно признать, что со своими обязанностями корректор справляется вполне успешно.

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

Ключ /compress[+|-] (сокращенная форма /c) — позволяет разрешить/запретить сжатие книжек «на выходе» алгоритмом ZIP. По умолчанию сжатие разрешено. Таким образом

FB2Fix.exe D:\INBOOK /c-

заставит FB2Fix записывать прошедшие обработку книжки в неупакованном виде.

Просматривая обработанные книжки, вы можете заметить, что заголовок книги отформатирован отступами. За эту фичу отвечает ключ /indentheader[+|-]. Как можно догадаться, по умолчанию опция включена.

Можно также заставить FB2Fix аналогично форматировать body книги. При помощи ключа /indentbody[+|-]. Само собой, со значением «+».

FB2Fix.exe D:\INBOOK\mybook2.fb2 /indentbody+

Как уже говорилось, версия документа, в случае внесения правок, увеличивается на 0.1. Если понадобится отключить эту опцию, то вам поможет ключ /incversion[+|-]. С модификатором «-».

Ключ /dtd:<строка> позволяет выбрать альтернативную DTD FB2. Значение по умолчанию — fb2.dtd.

Следующая интересная фича — перекодировка! По умолчанию FB2Fix сохраняет книжки, используя кодовую таблицу UTF-8. Использование ключа /encoding:<строка> заставит FB2Fix сохранять «выходные» книги в определенной кодировке. Так, например при использовании,

FB2Fix.exe D:\INBOOK /encoding:windows-1251

книжки «на выходе» будут в кодировке Win-1251.

Кроме «windows-1251» поддерживаются значения «utf-8», «utf-16», а также «koi8r».

Если вам вдруг понадобится отказаться от конвертации старых жанров FB2 2.0 в 2.1 достаточно использовать ключ /mapgenres[+|-] с модификатором «-»

Между прочим, конвертация жаноров — настраиваемая. Ее конфигурация содержится в файле genrestransfer.xml. Устройство его весьма незамысловато. Каждому поджанру отведена вот такая секция.

<subgenre value="prose_history">

  <genre-descr lang="en" title="Historical Prose"/>

  <genre-descr lang="ru" title="Историческая Проза"/>

  <genre-alt value="literature_history" format="fb2.0"/>

  <genre-alt value="literature_critic" format="fb2.0"/>

</subgenre>

Понятно, что значения указанные в атрибуте value тэга genre-alt будут заменены на аналогичное значение тэга subgenre.

Можно сделать свою конфигурацию и вызывать ее при помощи ключа /genres:<строка>.

Использование ключа /validate[+|-] с модификатором «+» вынудит FB2Fix использовать для проверки книг альтернативную XSD-схему. А указать имя файла этой схемы поможет ключ /xsd:<строка>.

Следующий важный ключ — /rename[+|-]. С модификатором «+» он велит FB2Fix переименовывать файлы, причем с сортировкой. И не абы-как, а согласно установке-паттерну.

По умолчанию этот паттерн равен:

[*NLA*\]*NL*[ *NM*] *NF*[ *NN*]\*NL* *BN*[(*SN* - *SII*)]

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

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

*NLA*, *NFA*, *NMA* — первая буква соответственно фамилии, имени, отчества автора книги.

*NL*, *NF*, *NM*, *NN* — соответственно фамилия, имя, отчество, ник автора.

*BN* — название книги.

*SN* — название серии. Остро не хватает обработки подсерий…

*SI*, *SII*, *SIII* — номер серии. В подстановках *SII* и *SIII* этот номер приводится к двух- и трехзначному соответственно, путем добавления нулей. Т.е. номер 7 будет включен в состав имени файла как «007».

*GNR*, *GNE* — название жанра, по-русски или по-английски.

Символ «\», как вы уже догадались, служит разделителем папок. А квадратные скобки объединяют фрагменты паттерна. Нет, к примеру, отчества, значит, не нужен и пробел перед ним. Нет серии — скобки не должны стать мусором в имени файла…

Само собой, можно указать пользовательский паттерн. При помощи ключа /pattern:<строка>.

К примеру, вот такой паттерн:

*NL* *NF*\*SN*\[*SII* - ]*BN* {*NF* *NL*}

раскассирует книги в папки «фамилия-имя автора». Для серий будут созданы вложенные папки. Имя файла будет представлять собой номер-в-серии_название_{имя-фамилия автора}. Немного непривычно, но очень удобно. Особенно, учитывая ограниченнную отображаемую длину имени  файла…

Для настройки переименования имеются вот такие ключи:

/translify[+|-]. С модификатором «-» он запретит FB2Fix транслитерировать имена файлов. Т.е. если книга русскоязычная, то и имя файла будет, как полагается, кириллицей.

/upper[+|-]. С модификатором «+» указывает FB2Fix использовать только в именах файлов и папок только заглавные буквы.

/lower[+|-]. Аналогично предыдущему, но будут использоваться только строчные буквы.

/replacechar:<строка>. Заменяет символ «пробел» в именах файлов на значение <строка>. По умолчанию оно равно «_»

/maxlength:<целое число>. Ограничивает длину имени файла. По умолчанию это значение равняется -1, что, как нетрудно догадаться, отключает эту функцию.

/strict[+|-]. Включает «жесткий» режим для имен файлов. По умолчанию отключено. В этом режиме из имени удаляются все символы, кроме алфавитно-цифровых и символов \/[]()<>-_*, . Между прочим, хорошая вещь. Позволяет избавиться от лишних точек в именах файлов, если, например имя автора сокращено (допустим, не Алексей, а А.).

Пару примеров на закуску. Вот эта последовательность ключей позволяет сохранять выходные файлы в «альдебарановском» стандарте (фамилия_имя_название)

FB2Fix.exe C:\INBK /lower+ /strict+ /rename+ /pattern:"*NL* *NF* *BN*"

А эта — в старом стандарте Fenzin (Фамилия_Название_(Серия-№)

FB2Fix.exe C:\INBK /rename+ /pattern:"*NL* *BN*[ (*SN* - *SI*)]"

Следующая группа ключей относится к протоколированию работы программы. Ключ /logfile:<строка> указывает имя файла для текстового протокола (лога). Если такой файл ужет существует, протокол будет дописан в его конец. А ключ /loglevel:<фиксированная строка> (короткая форма /l). определяет тип сообщений выводимых в этот файл. Предусмотрены варианты Off (никакие), Critical (критические), Error (ошибки), Warning (предупреждения), Information (нормальные) и Verbose.

Следующий у нас — ключ /recurse[+|-] (короткая форма /r). Использованный с модификатором «-» он запретит программе заглядывать в поддиректории, если таковые во входной папке имеются.

Ключ /force[+|-], употребленный с модификатором «+» заставит FB2 повторно обрабатывать файлы, уже прошедшие проверку.

C ключом /output:<строка>, указывающем программе путь для выходных файлов, вы познакомились в самом начале. Добавлю лишь, что он имеет короткую форму /o.

А если во входной папке имеется какой-нибудь файл или  папка, трогать которые не нужно, их достаточно указать ключу /exclude:<строка>. Ключ имеет короткую форму — /e.

И последнее. Строку с ключами можно записать в так называемый «файл ответов» (response file). И потом вызывать ее при помощи ключевого символа @.

Отмечу что имеется «файл ответов» по умолчанию — fb2fix.rsp. Ключи-опции, внесенные туда должны исполняться автоматически при любом вызове программы.

Должны — но не исполняются. И заявленный в комментариях в начале fb2fix.rsp ключ /noconfig также не работает. Очевидно, в последней версии эта фича попросту отключена. Файл fb2fix.rsp отныне вызывается только через «@».

И приоритеты более не работают. Если в .rsp-файле прописано «/translify-», а в командную строку добавить «/translify+» программа выругается, дескать, дублирвание ключей и выплюнет на экран содержимое встроенного help.

В свете этих фактов становится непонятно, для чего тогда большинство ключей имеют два аргумента «+» и «-». Исправно работающих, между прочим.

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

При первом запуске оболочка запросит у вас местонахождение исполняемого файла FB2Fix, а также предложит настроить несколько базовых опций, назначение которых ясно из самих названий. Настройки, предложенные по умолчанию, вполне годятся для работы. Можно лишь поставить галочку возле «Разрешить ручное редактирование командной строки». Кстати, повторное изменение базовых опций не предусмотрено. Это возможно лишь после удаления файла FFShell.ini.

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

Справа отображается содержимое папок Good и Bad.

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

Левее кнопки пуска притулилась кнопка настроек. Щелкнув по ней, мы вызовем окно, с большим количеством опций, каждая из которых эквивалентна определенному ключу FB2Fix (предусмотрена даже всплывающая подсказка). Любая поставленная галочка тут же добавляет соответствующий ключ в командную строку. Здесь же можно сохранить настройки в файл .rsp.

Резюме. Если не считать правку книг, созданных с помощью злосчастного Librusec toolkit, можно с уверенностью сказать, что областью применения FB2Fix станет проверка и исправление книг, созданных при помощи различных «самоклепанных» конверторов. Наподобие описанных в § 3.7. Кроме того, софтина неплохо смотрится  в качестве сортировщика-перекодировщика, хотя до скриптовых настроек booki ей, конечно, далековато. Тем паче, что упомянутый booki до сих пор не умеет именовать файлы латиницей.

Заключение.
Копирайт и доступность

— Слышал новость? Брежнева посадили!

— Не может быть!

— Только что по радио передали: «И в заключении Леонид Ильич Брежнев сказал…»

Бородатый анекдот

Основные способы распространения программного обепечения и медиа-контента в России — воровство, грабеж и обмен награбленным.

Из секретного отчета Micro$oft.

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

О компьютерном «пиратстве» вообще.

С того времени, как компьютеры перестали быть большими и пошли в массы, появилась проблема несанкционированного цифрового контента.

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

Всем уже прожужжали уши про астрономические суммы убытков (полученные простым помножением стоимости лицензионного софта на взятое с потолка количество пиратских копий).

===ОФФТОПИК=====================

Вот, кстати… Как-то в печати мелькнула информация, что из-за включенного в комплект Windows пасьянса «Косынка» мировая экономика ежегодно теряет триллионы долларов. Потери рабочего времени, понимаешь. Однако, количество игр, входящих в комплект Windows, от версии к версии все увеличивается…

===============================

Не так давно еще вот новую пугалочку выдумали. Согласно результатам исследований (спонсированных, разумеется, все той же Micro$oft) нелицензионные программные продукты жутко убыточны, для компаний их использующих. Страшно, аж жуть!

Но некоторые меры, принимаемые для борьбы с «пиратами» по-настоящему заставляют шевелиться волосы на голове.

Вот в Штатах медиа-магнаты усиленно добиваются встраивания средств противодействия несанкционироаанному копированию в каждое цифровое устройство. Гип-гип, ура! В Германии запретили копировать любые диски с медиа-контентом. Зиг хайль! А вот российские депутаты додумались вообще поставить вне закона устройства для записи дисков, регистрируя их, как, некогда, во времена оны, пишущие машинки. Бурные и продолжительные аплодисменты!

Работники прокуратуры, очевидно, добившись невероятных успехов в борьбе с обычной преступностью, двинулись по кафе и ресторанам — не звучит ли где музыка, за которую не заплатили? Ату, «пиратов», ату, ату! Кыш, проклятые! Расхитители интеллектуальной собственности!

И вот уже вальяжный господинчик вещает со страниц глянцевого компьютерного журнала: «Пора, наконец, попрощаться с этой совковой тягой к халяве. Форматните винчестер, сбегайте в ближайший супермаркет и купите себе недорогую Windows XP Home, вместо M$ Office, возможности которого вы все равно не используете, поставьте shareware-продукты…»

Отдайте за них сумму, раза в два большую, чем вам обошелся компьютер… Ага. Щас. Вот только штаны подтянем и пойдем стройными рядами. Как только уровень жизни на постсоветском пространстве приблизится к уровню одного отдельно взятого мегаполиса — так сразу и пойдем…

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

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

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

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

Вот, например, Алексей Пажитнов, создатель игры «Тетрис», дал интервью испанскому сайту Consumer.es, где со всей ответственностью, со всей прямотой, заявил, что свободное ПО разрушает рынок и мешает развитию технологий.

В частности, было сказано, что созданием свободного ПО занимаются, в основном молодые нигилисты с мятежным характером. (Потрясающая новость!) Основная цель таких «творцов» — вытеснение с рынка платных аналогов, что в итоге, наносит вред компаниям-производителям, (Правильно! Давайте объявим преступлением все, что хоть как-то вредит коммерческим интересам.) а также и самому рынку программного обеспечения. Ведь именно коммерческие компании (ну надо же!) разрабатывают новые технологии, которые потом имеют возможность копировать создатели бесплатных программ, своим «трудом» (ай-ай!) подрывая развитие индустрии. Пажитнов считает, что было бы лучше, если бы свободного ПО вообще не было.

Досталось на орехи и главному идеологу свободного программного обеспечения — Ричарду Столлману. Пажитнов безапелляционно заявил, что идеи Столлмана относятся к давно прошедшей эпохе. При этом Алексей Леонидович признался, что в 80-х сам исповедовал подобные взгляды, но теперь повзрослел.

Учитывая то, что А.Л. Пажитнов теперь сотрудничает с Micro$oft, причину столь скоропостижного взросления уже немолодого человека понять несложно…

По материалам газеты «Компьютерные Вести» от 6 марта 2008 г. (В. Станкевич. «Создатель „Тетриса“ против свободных программ»)

Любители копирайта обожают проводить аналогии с материальными вещами. «А штанами поделиться не пробовали?» «А поработать бесплатно?»

Что ж, в эту игру можно сыграть и вдвоем. Вы не пробовали сдать обратно в магазин книгу или там, диск с музыкой, по той причине, что данное произведение бездарно написано?

Или, вот пример посложнее. Писатель заказывает в мастерской, допустим, стул. Удобства творческого процесса ради. Проходит положенный  срок, и столяр приносит готовое изделие. Но при этом заявляет, что он не продает стул, а лишь за энную сумму предоставляет право пользоваться этим продуктом ручного труда. И, ежели писатель, сидя на этом чудо-стуле, сотворит новое произведение, он, столяр, придет за своей долей гонорара…

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

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

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

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

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

Недаром ведь распространителей этого самого нелегального контента величают очень даже уважительно: «флибустьеры», «пираты».

А кое-где господа флибустьеры уже объединяются в политические партии. И на полном серьезе пытаются отстаивать свои интересы. Вы что-нибудь слышали про партии карманников, гопстопщиков, домушников, шулеров, сутенеров? Или движение за бесплатную раздачу продуктов питания и товаров народного потребления? Я — нет. Или в нашем безумном мире это только вопрос времени?

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

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

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

И, уж тем более, мне никогда не понять, почему за склепанную «на коленке» утилитку просят 30–50$, когда существуют бесплатные аналоги.

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

Более основательно и подробно об античеловеческой сущности копирайта сказано в книге Михаила Вербицкого «Антикопирайт». Трудами автора этой книги ее можно найти в основных сетевых библиотеках. Также рекомендую статью Ричарда Столлмана «Почему у программ не должно быть хозяев». Для расширения кругозора также можно прочесть книги Александра Долгинова «Экономика символического обмена» (www.artpragmatica.ru) и Дж. Д. Ласики «Даркнет. Война Голливуда против цифровой революции».

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

Уже сегодня компания Apple, производитель новомодных девайсов iPhohe, может дистанционно удалять приложения из этого устройства, согласно составленному ею же «черному списку». Мотивируется такая «фича», разумеется, как «для блага самих же пользователей».

«Жареный» прецедент не заставил себя долго ждать.

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

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

Естественно, без какого-либо предупреждения. За символическую компенсацию в 30$. Типа, тридцать сребреников.

Короче, соблюдайте закон, граждане. Приобретайте лицензионный продукт и будет вам «щастье»…

Такое вот торжество авторского права.

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

Уже сейчас можно довольно часто наблюдать, как чинуши, помешанные на «хватать и не пущать», увлеченно разглагольствуют о защите авторских прав, а рвачи-копирасты страшно озабочены состоянием морали в Интернет…

О книжном «пиратстве» в частности

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

Современные онлайн-библиотеки, представляют собой плод коллективного (и обычно безвозмездного!) труда сотен, если не тысяч людей.

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

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

Как заметил Сергей Лукьяненко:

 «…даже в России ситуация не столь печальна, чтобы сетевое воровство и впрямь волновало авторов и издателей. Дело в том, что основная масса читателей все-таки предпочитает держать в руках книгу, а не таращиться в монитор. Как гласит народная мудрость: „компьютер с собой в туалет не потащишь“. И пока не появилось по-настоящему дешевой и удобной „электронной книги“, воровство файлов особого вреда не наносит.

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

 («Апостолы инструмента», сборник «Гаджет»).

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

Однако, к чести писателя, потерпев фиаско в борьбе с «пиратами», он решил действовать по-другому. Лукьяненко начал (причем в формате FB2 (!) и через FictionBook.lib (!!)) продавать свои книги через Интернет. И довольно успешно. Например, «Последний Дозор» был продан за три месяца в количестве 850 копий. И это только с FictionBook.lib.

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

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

Но главным врагом свободы информации в Рунете, и бесплатных книг конкретно, являются все-таки не они, а развитие платежных систем. Чем доступнее и проще будут электронные платежи, тем меньше будет свободного контента…

А, с другой стороны, даже если мрачные предсказания Ю. Никитина частично и сбудутся, то не будет ли ужесточение конкуренции на литературном рынке благом для читателей? Я очень уважаю замечательного писателя Алексея Белянина и просто обожаю мою чудесную землячку Ольгу Громыко, но это с их легкой руки в литературу девятым валом поперла офисная, гхм… субстанция, а понятие «юмористическая фантастика» скоро станет ругательным. Достаточно пройтись по книжным развалам, чтобы оценить всю серьезность проблемы. И не все ли, в таком случае, равно, кто станет санитаром леса и щукой в пруду: издатели, «пираты» или дефицит древесины?

И если на прилавках станет поменьше отстоя, типа «Бандосы в Фантазилии» или там «Подлинная история Анакина Скайуокера», читатели только выиграют.

Страсти вокруг «ЛитРес».

Весной 2007 года была образована компания «ЛитРес». Крупнейшие сетевые библиотеки объединились и постановили, что книги, выкладываемые в них, отныне будут делиться на платные и бесплатные.

Читатели Рунета восприняли новый сервис весьма неоднозначно.

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

Кроме активной борьбы с нелегалами, у «Литрес»-а имеются и другие недостатки.

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

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

Отрицательным эффектом можно также счесть заметное увеличение траффика в сетевых библиотеках. Появившиеся книги торопятся скачать, пока они не исчезли.

А самым неприятным, пожалуй, является тот факт, что «ЛитРес» очень больно ударил по любительской подготовке книг. Какой смысл тратить время на вычитку и оформление книги, если в массовую библиотеку ее могут не взять, а если и возьмут, то через несколько месяцев снимут, так как появился коммерческий вариант. Между тем, существует великое множество книг, до которых руки у профессиональных букмейкеров дойдут еще ох как не скоро.

Еще страшно не понравилось, что книги на сервисе могут не только появляться но и исчезать. Не угодили чем-то правообладателю, и все, привет. Такая судьба постигла произведения Александра Бушкова, Анджея Сапковского и некоторых других (в основном зарубежных) авторов. Между прочим, пользователи, законно купившие эти книги, по логике копирастов, тоже должны их удалить. Такие вот гримасы авторского права.

Это минусы. А плюсы?

Согласитесь, качественные АВТОРСКИЕ тексты в популярном формате, без какой-либо защиты, и по цене почти на порядок ниже чем просят за бумажные томики, это не просто большой, это ГИГАНТСКИЙ плюс.

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

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

Даже самые отъявленные бакунианцы, скрипя зубами, признают заслуги «ЛитРес»-а в создании тысяч качественных текстов.

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

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

Более того, при помощи не самых сложных ухищрений, текст книги даже можно сохранить на диск. Давно ведь известно, что все замки — от добрых людей, а все защиты — от честных пользователей. Однако, убив несколько часов на сохранение страничек, выдирание текста из html-ок, чистку его от протект-мусора, компоновку в нормальную книгу, структурирование, поневоле приходишь к неутешительному выводу, что проще и дешевле (ничто не стоит так дорого и не ценится так дешево, как личное время!) было бы эту книгу ПРОСТО КУПИТЬ. Книги — они предназначены для того, чтобы их читать, а не возиться с ними.

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

И, хотя, я, к сожалению, до сих пор не смог оценить «ЛитРес» по достоинству, из-за того, что категорически лень заводить электронный кошелек, а инфокиосков, аналогичных «Элекснет», в Минске пока что не наблюдается, я все же склоняюсь к мнению, что если это и есть будущее (платных книг, не электронных библиотек!), то оно очень даже привлекательное.

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

Вон, даже FictionBook.lib потихоньку пополняется…

«ЛитРес» vs. «Либрусек»

История отношений «ЛитРес»-а с «неофициальными» библиотеками и, в первую очередь, с флагманом пиратской флотилии — русской библиотекой в Эквадоре «Либрусек» изобилует «загогулинами». Пройдя через стадию активной борьбы (по утверждениям держателей «Либрусека» применялись атаки DDOS) они вступили в фазу, которую лучше всего характеризует бородатый анекдот: «Выступает председатель колхоза на отчетном собрании: „В этом году мы посадили сто гектаров картошки. Усё  сожрал колорадский жук. В следующем году посадим триста — нехай подавится!“» То есть, наряду с  художественными произведениями разной степени популярности, на ресурсе ежедневно выкладываются десятки книг прикладного характера. Естественно, интересуют они ограниченный круг лиц, которые вполне могут позволить себе приобрести данную литературу легально, а, получив книгу, не станут немедленно выкладывать ее в свободные библиотеки и файлообменные сети.

2009 год ознаменовался такими интересными фактами, как неоднократная выкладка на свободных ресурсах как бы сканированных версий популярных изданий (аккурат за 1-2 недели до появления их на «ЛитРес»-е). Но главное событие года произошло в августе.

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

Что же, и волки сыты и овцы целы? Вот только как бы пастуху не приключилась вечная память.

Нет, это, без малейшего ерничества,  действительно хорошее решение. В самом деле, что может быть лучше? Хочешь иметь горячую новинку — плати. Жалко денег — подожди. Никаких проблем. «Утром — в газете, вечером — в куплете». И голосовал бы я за эту систему руками и ногами, если бы не одно маленькое, но вредное «но».

Кто даст гарантию, что «ЛитРес» остановится на достигнутом? Ладно, если сроки «выдержки» будут увеличены, а если втихую начнется чистка фондов? Кто может с уверенностью утверждать, что «Либрусек» не ожидает печальная участь «Альдебарана», «Фензина» и так далее?

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

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

В общем, боюсь, что точка в противостоянии «ЛитРес»–«Либрусек» еще не поставлена.

Как там говорил незабвенный мастер Йода? «Темная Сторона скрывает ВСЕ. Предвидеть невозможно наше будущее.»

И уж конечно, не является такой точкой введение на «Либрусеке» так называемого абонемента. Эта мера направлена скорее, на отсечение нахлебников и интенсификацию пополнения библиотеки. Ведь пользователи, регулярно добавляющие новые книги имеют доступ ко всем ресурсам «Либрусек»-а, без ограничений…

То, что копирастическая мразь явно не удовлетворена текущим положением дел, косвенно подтверждается прискорбным фактом, что в феврале 2010-го DDOS-атаки сменились подметными письмами провайдерам о необходимости блокирования IP-адресов, принадлежащих некоторым сетевым библиотекам. Что дальше? Великий правообглодательский файрвол?

Резюме

Технический прогресс в скором будущем, наконец-то сможет предоставить нам недорогие и удобные устройства для чтения книг. И, как показывает пример «ЛитРес», скорее всего они будут доступными. Время, когда при продаже e-book пытались отталкиваться от цены бумажных книг, начисто игнорируя тот факт, что для изготовления e-book не требуется ни собственно бумага, ни дорогостоящие полиграфические услуги, безвозвратно уходит.

Впрочем, в легальных e-book cамое неприятное — не ЦЕНА, а ЗАЩИТА.

Невероятно противно, когда программа-читалка постоянно лазает в Интернет, дабы проверить ваше право читать книгу. Без постоянного доступа к Сети любовно собранная библиотека превращается в мертвый набор файлов. А еще сервер компании-правообладателя может в один далеко не прекрасный день закрыться без объяснения причин. Бывайте здоровы, пишите письма мелким почерком…

Хотя, вообще-то, попытки поставить защиту на e-book изначально обречены на провал. Любую книгу, даже с самой навороченной защитой, можно просто переснять с экрана при помощи фотокамеры и пропустить через OCR или упаковать в DjVu. К тому же, при соответствующей популярности, любой закрытый формат будет обязательно взломан. Это лишь вопрос времени.

Конечно же, «левые» e-book никуда не исчезнут. Они будут вытеснены в файлообменные сети и на «пиратские» сборники. Примерно так же, как сейчас обстоит дело с MP3.

А борьба с варезными сайтами и файлообменными сетями больше всего напоминает бой Дон Кихота с ветряной мельницей…

Например, книга С. Лукьяненко «Чистовик» после нескольких неудачных попыток выложить ее на файлообменные сервисы, типа Рапидшары, приземлилась на тмутараканский сервер, откуда ее и качали все, кому не лень. Видимо, то же самое будет происходить (и происходит!) с любыми достаточно популярными изданиями.

Что же касается редких книг, то, в большинстве своем, их можно будет найти на бесплатных сервисах.

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

Впрочем, любители такого «чтива» предпочитают «потреблять» его с бумаги. Чаще всего, во время выделительного процесса…

Благодарности

Автор книги глубоко и искренне благодарен:

Дмитрию Грибову и К° — за великолепный формат электронных книг.

Михаилу Мацневу — за редактор FB Editor.

Членам клуба FB — за подсказки и поддержку.

Среди них особо: Sclex, Marina_Ch, vvv, LX, Alan-у, а также всем тем, кого я не смог вспомнить персонально.

Также отдельная благодарность пользователям форума Fictionbook.org, заметившим ляпы и неточности в книге: BGReader, Kravejs, lb-user, Змей.

Держателям онлайн-библиотек — за их благородный и самоотверженный труд.

Среди них персонально:

владелице чудесной книжной сокровищницы — ресурса «НатаХаус»;

владельцам библиотек семейства «Либрусек»;

библиотекарше с «Либрусека» — golma1.

А также всем прочим — за то, что не мешали.

Обратная связь

Исправленные версии и новые издания книги всегда можно будет найти на сайте http://www.yuzzich.narod.ru.

Свои замечания и дополнения можно присылать на email yuzzich@yandex.ru.

Еще раз отмечу: это адрес для критики и дополнений. А не для вопросов «как мне сделать то или это». Во-первых, для подобных закавык существует форум FictionBook.org. Во-вторых, у автора просто нет времени на переписку.

Приложения

Приложение A
Линки

 Библиотеки, поддерживающие FictionBook

http://www.fictionbook.ru — FictionBook.lib;

http://lib.aldebaran.ru — библиотека Альдебарана; Крупнейшая, на момент написания книги, библиотека Рунета.

http://www.fenzin.org — библиотека «Фензин»; Специализируется на фантастике и фэнтэзи.

http://www.litportal.ru — библиотека Литпортал.

http://lib.rus.ec — Либрусек, русскоязычная библиотека в Эквадоре. Последний бастион свободных e-book…

http://lib.ololo.cc — Зеркало «Либрусека».

http://flibusta.net — Новейшее зеркало «Либрусека», которое стало самостоятельной библиотекой.

http://www.litres.ru — «ЛитРес». Платные электронные книги.

Библиотеки, в которых регулярно появляются новинки:

http://www.infanata.org — Всемирно известный NataHaus. Крупнейший книжный варезный блог.

http://www.lib.ru — библиотека Максима Мошкова. К сожалению, в последние годы, стараниями поборников копирайта, сильно захирела.

http://www.koob.ru — библиотека «Куб». Уникальное собрание текстов по психологии и самосовершенствованию.

http://www.oldmaglib.com — «Библиотека Старого Чародея». В основном, переводная фантастика. Что отрадно, тоже плюют на копирайт и копирастов.

http://publ.lib.ru — «Публичная Библиотека». Очень много djvu-версий журналов, технических книг. Вместе с тем, здесь регулярно появляются и RTF-тексты обычных книг, в основном, выходивших в CCCP.

Программы-читалки

http://haali.cs.msu.ru/pocketpc — Haali Reader 2.0

http://www.coolreader.org — CoolReader 2.0, 3.0

http://alreader.kms.ru — AlReader 2.5

http://www.fbreader.org — FBReader 0.10

Программы-конверторы

http://www.gribuser.ru/xml/fictionbook/2.0/software/Any2FB2.exe — Any2FB2

http://home.arcor.de/fb.tools/ — Doc2FB.

http://dikbsdsda.mylivepage.ru/file — конвертор ExportToFB21 для Open Office.

http://www.sfbg.us/jinke — FB2GrWolf, конвертор в формат Wolf.

Программы для редактирования FB2

http://haali.cs.msu.ru/pocketpc/scripts.html.ru — FB Tools

http://www.gribuser.ru/xml/fictionbook/2.1/FBTools_update.zip — обновление FB Tools

http://reeed.ru — много полезной информации и нужных программ.

Прочие программы для FB2

http://booki.110mb.com/ — программа Booki.

http://www.assembla.com/wiki/show/jfblibpublic — библиотекарь JEFLibrarian.

http://www.home-lib.net  — библиотекарь MyHomeLib.

Программы для работы с графикой.

http://www.xnview.com — XnView, просмотрщик-конвертор.

http://www.yafla.com — PureJPEG, чистка картинок JPEG от лишней информации.

Прочие программы

http://www.grigsoft.com — Compare It, сравнение текстовых файлов.

Информация по JavaScript

http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml_reference_entry.asp — MSDN Library.

http://www.w3schools.com/js — полезные советы по JavaScript.

Приложение Б
Техническое задание на написание читалки (ридера)

Ридер должен включать в себя два модуля:

1. Библиотечный модуль — для персонального компьютера.

2. Непосредственно ридер — для персонального компьютера и КПК.

Библиотечный модуль

Общие требования

1. Информация берется из дескрипшина файлов fb2 или fb2.zip.

2. В настройках указывается директория, содержащая книги.

3. Библиотека должен автоматически сканировать директорию, содержащая книги при каждом вызове.

Внешний вид

В форме необходимы следующие поля:

   1. Автор книги

   2. Название книги

   3. Серия

   4. Жанр

   5. Обложка

   6. Аннотация

   7. Поиск

Кнопки:

   1. Читать

   2. Послать в КПК

Логика работы

В поле автора выбираем автора из списка.

В поле жанра можно выбрать все жанры или определенный. При выборе определеного жанра в поле автора присутствует список только тех авторов, книги которых есть в этом жанре.

В поле серии — список серий, присутствующих в библиотеке. При выборе конкретной серии, в поле авторов высвечивается автор серии, в поле книги — перечень книг только этой серии.

При выборе автора появляется список его книг.

При выборе книги появляется обложка и аннотация.

По кнопке «читать» попадаем в ридер.

Ридер

Общие требования

1. Должен понимать как просто формат fb, так и заархивированный (zip).

2. Должен игнорировать все незнакомые тэги внутри pType элементов (см. схему) и внутри заголовка.

3. Ридер волен реагировать на незнакомые тэги в других местах документа по своему усмотрению.

4. Ридер, по возможности, должен сообщать об отсутствии обязательных тэгов.

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

1. Должен иметь возможность работы с подключаемыми стилевыми файлами.

2. Должен запоминать, к какому документу какой стиль привязан.

Настройки

1. Настройки автоскроллинга (листание экрана, построчный скроллинг, плавный скроллинг)

(По материалам старого форума FictionBook)

Необязательные, но весьма полезные, дополнительные возможности («фичи»).

1. Разбиение текста на условные страницы (с возможностью установить объем такой страницы в килобайтах) (реализовано: AlReader)

2. Показ времени, затраченного на прочтение книги, с прогнозированием оставшегося. (реализовано: PalmFiction)

3. Возможность экспорта книги в стандартные форматы: TXT, HTML, RTF (реализовано: CoolReader, AlReader);

4. Возможность печати книги, желательно компактным буклетом и в полиграфическом качестве. Или качественный экспорт в PDF (Нигде не реализовано. Мечта небесного цвета автора этой книги.);

5. Возможность правки текста. (реализовано: AlReader);

6. Сноски показываются, как всплывающие окна. (реализовано: BS FB2 Reader Pro); или размещаются внизу виртуальной страницы (реализовано: CoolReader).

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

Приложение В
Список жанров FictionBook

В FB 2.21 определен следующий список жанров:

Значение <genre> — Название — Название по-русски

* Science Fiction & Fantasy — (Научная фантастика и Фэнтези)

sf_history — Alternative history — Альтернативная история

sf_action — Action — Боевая фантастика

sf_epic — Epic — Эпическая фантастика

sf_heroic — Heroic — Героическая фантастика

sf_detective — Detective — Детективная фантастика

sf_cyberpunk — Cyberpunk — Киберпанк

sf_space — Space — Космическая фантастика

sf_social — Social-philosophical — Социально-философская фантастика

sf_horror — Horror & mystic — Ужасы и Мистика

sf_humor — Humor — Юмористическая фантастика

sf_fantasy — Fantasy — Фэнтези

sf — Science Fiction — Научная Фантастика

* Detectives & Thrillers (Детективы и Триллеры)

det_classic — Classical detectives — Классический детектив

det_police — Police Stories — Полицейский детектив

det_action — Action — Боевик

det_irony — Ironical detectives — Иронический детектив

det_history — Historical detectives — Исторический детектив

det_espionage — Espionage detectives — Шпионский детектив

det_crime — Crime detectives — Криминальный детектив

det_political — Political detectives — Политический детектив

det_maniac — Maniacs — Маньяки

det_hard — Hard-boiled — Крутой детектив

thriller — Thrillers — Триллер

detective — Detectives — Детектив, не относящийся в прочие категории.

* Prose (Проза)

prose_classic — Classics prose — Классическая проза

prose_history — Historical prose — Историческая проза

prose_contemporary — Contemporary prose — Современная проза

prose_counter — Counterculture — Контркультура

prose_rus_classic — Russian classics prose — Русская классическая проза

prose_su_classics — Soviet classics prose — Советская классическая проза

* Romance (Любовные романы)

love_contemporary — Contemporary Romance — Современные любовные романы

love_history — Historical Romance — Исторические любовные романы

love_detective — Detective Romance — Остросюжетные любовные романы

love_short — Short Romance — Короткие любовные романы

love_erotica — Erotica — Эротика

* Adventure (Приключения)

adv_western — Western — Вестерн

adv_history — History — Исторические приключения

adv_indian — Indians — Про индейцев

adv_maritime — Maritime Fiction — Морские истории

adv_geo — Travel & geography — Путешествия и география

adv_animal — Nature & animals — Природа и животные

adventure — Other — Прочие приключения (то, что не вошло в другие категории)

* Children's (Детское)

child_tale — Fairy Tales — Сказка

child_verse — Verses — Детские стихи

child_prose — Prose — Детская проза

child_sf — Science Fiction — Детская фантастика

child_det — Detectives & Thrillers — Детские остросюжетные

child_adv — Adventures — Детские приключения

child_education — Educational — Детская образовательная литература

children — Other — Прочая детская литература (то, что не вошло в другие категории)

* Poetry & Dramaturgy (Поэзия, Драматургия)

poetry — Poetry — Поэзия

dramaturgy — Dramaturgy — Драматургия

* Antique literature (Старинное)

antique_ant — Antique — Античная литература

antique_european — European — Европейская старинная литература

antique_russian — Old russian — Древнерусская литература

antique_east — Old east — Древневосточная литература

antique_myths — Myths. Legends. Epos — Мифы. Легенды. Эпос

antique — Other — Прочая старинная литература (то, что не вошло в другие категории)

* Scientific-educational (Наука, Образование)

sci_history — History — История

sci_psychology — Psychology — Психология

sci_culture — Cultural science — Культурология

sci_religion — Religious studies — Религиоведение

sci_philosophy — Philosophy — Философия

sci_politics — Politics — Политика

sci_juris — Jurisprudence — Юриспруденция

sci_linguistic — Linguistics — Языкознание

sci_medicine — Medicine — Медицина

sci_phys — Physics — Физика

sci_math — Mathematics — Математика

sci_chem — Chemistry — Химия

sci_biology — Biology — Биология

sci_tech — Technical — Технические науки

science — Other — Прочая научная литература (то, что не вошло в другие категории)

* Computers & Internet (Компьютеры и Интернет)

comp_www — Internet — Интернет

comp_programming — Programming — Программирование

comp_hard — Hardware — Компьютерное «железо» (аппаратное обеспечение)

comp_soft — Software — Программы

comp_db — Databases — Базы данных

comp_osnet — OS & Networking — ОС и Сети

computers — Other — Прочая околокомпьтерная литература (то, что не вошло в другие категории)

* Reference (Справочная литература)

ref_encyc — Encyclopedias — Энциклопедии

ref_dict — Dictionaries — Словари

ref_ref — Reference — Справочники

ref_guide — Guidebooks — Руководства

reference — Other — Прочая справочная литература (то, что не вошло в другие категории)

* Nonfiction (Документальная литература)

nonf_biography — Biography & Memoirs — Биографии и Мемуары

nonf_publicism — Publicism — Публицистика

nonf_criticism — Criticism — Критика

design — Art & design — Искусство и Дизайн

nonfiction — Other — Прочая документальная литература (то, что не вошло в другие категории)

* Religion & Inspiration (Религия и духовность)

religion_rel — Religion — Религия

religion_esoterics — Esoterics — Эзотерика

religion_self — Self-improvement — Самосовершенствование

religion — Other — Прочая религионая литература (то, что не вошло в другие категории)

* Humor (Юмор)

humor_anecdote — Anecdote — Анекдоты

humor_prose — Prose — Юмористическая проза

humor_verse — Verses — Юмористические стихи

humor — Other — Прочий юмор (то, что не вошло в другие категории)

* Home & Family (Домоводство (Дом и семья))

home_cooking — Cooking — Кулинария

home_pets — Pets — Домашние животные

home_crafts — Hobbies & Crafts — Хобби и ремесла

home_entertain — Entertaining — Развлечения

home_health — Health — Здоровье

home_garden — Garden — Сад и огород

home_diy — Do it yourself — Сделай сам

home_sport — Sports — Спорт

home_sex — Erotica & sex — Эротика, Секс

home — Other — Прочее домоводство (то, что не вошло в другие категории)

geo_guides — Geo_guides — Путеводители

* Economy, Business (Экономика, деловая литература)

job_hunting — Job Hunting — Поиск работы, карьера

management — Management — Управление, подбор персонала

marketing — Marketing — Маркетинг, PR, реклама

banking — Banking — Банковское дело

stock — Stock — Ценные бумаги, инвестиции

accounting — Accounting — Бухучет, налогообложение, аудит

global_economy — Global Economy — Внешнеэкономическая деятельность

economics — Economics — Экономика

industries — Industries — Отраслевые издания

org_behavior — Corporate Culture — Корпоративная культура

personal_finance — Personal Finance — Личные финансы

real_estate — Real Estate — Недвижимость

popular_business — Popular Business — О бизнесе популярно

small_business — Small Business — Малый бизнес

paper_work — Paper Work — Делопроизводство

economics_ref — Economics Reference Book — Справочники

Приложение Г
Список возможных языков

Ниже приведены коды языков, которые можно прописывать в тэгах <lang> и <src-lang>.

Здесь приведены только основные кодировки, полный список содержится в стандарте ISO 639:

abk — ab — Абхазский

aze az Азербайджанский

alb/sqi sq Албанский

eng en Английский

arm/hye hy Армянский

ba Башкирский

bel be Белорусский

bul bg Болгарский

hun hu Венгерский

vie vi Вьетнамский

dut/nla nl Голландский

ell/gre el Греческий современный (1453-)

dan da Датский

grc Древнегреческий (до 1453)

heb he Иврит

esl/spa es Испанский

ita it Итальянский

kaz kk Казахский

kir ky Киргизский

chi/zho zh Китайский

kor ko Корейский

lat la Латинский

lav lv Латвийский

lit lt Литовский

mac/mak mk Македонский

mol mo Молдавский

mon mn Монгольский

deu/ger de Немецкий

mul Несколько языков

und Неопределенный

nor no Норвежский

fas/per fa Персидский

pol pl Польский

por pt Португальский

rus ru Русский

san sa Санскрит

slk/slo sk Словацкий

slv sl Словенский

tgk tg Таджикский

tat tt Татарский

tur tr Турецкий

uzb uz Узбекский

ukr uk Украинский

cym/wel cy Валлийский

fin fi Финский

fra/fre fr Французский

che Чеченский

ces/cze cs Чешский

hr Хорватский

sve/swe sv Шведский

epo eo Эсперанто

est et Эстонский

jpn ja Японский

Приложение Д
Регулярные выражения

==Важно!========================

Это описание было заимствовано из документации к программе Дмитрия Грибова СlearTXT. Реализация регулярных выражений в FB Editor  несколько отличается от СlearTXT. Поэтому, эта документация справедлива для FBE лишь с некоторыми оговорками.

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

===============================

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

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

СИМВОЛЫ

Это простейшие случаи подстановок.

\xNN — символ с шестнадцатеричным кодом NN

\t — табуляция (HT/TAB), можно также \x09

\n — новая строка (NL), можно также \x0a

\r — возврат каретки (CR), можно также \x0d

Пример: \r\n — поиск разрыва строки (Windows, DOS).

Поиск «одного из» — перечни

Можно определить перечень, заключив символы в «[]». Перечень будет совпадать с любым одним символом, перечисленным в нем.

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

Внутри перечня символ «-» может быть использован для определения диапазонов символов, например, a-z представляет все символы между «a» и «z», включительно.

Если необходимо включить в перечень сам символ «-», его нужно поместить в начало или конец перечня или предварить «\». Если необходимо поместить в перечень сам символ «]», поместите его в самое начало или предварите «\».

Примеры:

п[иа]р — будут найдены буквосочетания «пир» и «пар». Но, допустим, не «пор».

п[^иа]р — будут найдены буквосочетания «п…р» с любым символом между «п» и «р», кроме «и» и «а».

[-az] — «a», «z» и «-»

[az-] — «a», «z» и «-»

[a\-z] — «a», «z» и «-»

[a-z] — все 26 малых латинских букв от «a» до «z»

[\n-\x0D] — #10, #11, #12, #13

[\d-t] — цифра, «-» или «t»

[]-a] — символ из диапазона «]»..«a»

Оговорка. В FB Editor в режиме исходника перечни, содержащие кирииллицу ФУНКЦИОНИРУЮТ НЕПРАВИЛЬНО.

Метасимволы

Метасимволы — это специальные символы, являющиеся важнейшим понятием в регулярных выражениях. Существует несколько групп метасимволов.

• Разделители строк (начало строки, конец строки и т.п.)

• Стандартные перечни символов (цифры, буквы и цифры и т.п.)

• Границы слов (показывают, что вхождение должно быть на границе слова)

• Повторения (указывает, сколько раз должна присутствовать последовательность)

• Варианты (позволяет указать набор масок, с любой из которых должен совпадать текст)

• Подвыражения (используются при замене)

• Обратные ссылки (способ обратиться к подвыражениям при поиске)

Метасимволы — разделители строк и границы

Разделители и границы

^ — начало строки

$ — конец строки

\A — начало текста

\Z — конец текста

\b — Совпадает на границе слова

\B — Совпадает НЕ на границе слова

Оговорка. В FB Editor (и, скорее всего, в большинстве других программ) метасимволы \b и \B не реагируют на кириллицу.

Примеры:

^Все — Находит все строки в тексте, начинающиеся словом «Все»

\bмир — Находит все слова, начинающиеся буквосочетанием «мир». Слова будут найдены и в начале строк, и в середине.

^\x20$ — Находит все строки в тексте, состоящие из единственного пробела.

Метасимволы — стандартные перечни символов

. (точка) — Любой символ

\w — буквенно-цифровой символ или "_"

\W — не \w

\d — цифровой символ

\D — не \d

\s — любой «пробельный» символ: [\x20\t\n\r\f]

\S — не \s

Оговорка. В FB Editor (и, скорее всего, в большинстве других программ) метасимволы \w и \W не реагируют на кириллицу.

Метасимвол «.» по умолчанию совпадает с любым символом, однако, если выключить модификатор s ((?-s), синтаксис см. ниже), то «.» не будет совпадать с разделителями строк.

Стандартные перечни \w, \d и \s можно использовать и внутри перечней символов.

Примеры:

—foob[\w\s]r — —находит «foobar», «foob r», «foobbr» но не «foob1r», «foob=r»

—\+\d (\d\d\d) \d\d\d-\d\d-\d\d — —Находит телефон в формате «+7 (095) 555-55-55»

Метасимволы — повторения

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

Указание числа вхождений

* — ноль или более раз (может быть «жадным»), то же что {0,}

+ — один или более раз (может быть «жадным»), то же что {1,}

? — ноль или один раз (может быть «жадным»), то же что {0,1}

{n} — точно n раз (может быть «жадным»)

{n,} — не менее n раз (может быть «жадным»)

{n,m} — не менее n но не более m раз (может быть «жадным»)

*? — ноль или более раз («не жадный»), то же что {0,}?

+? — один или более раз («не жадный»), то же что {1,}?

?? — ноль или один раз («не жадный»), то же что {0,1}?

{n}? — точно n раз («не жадный»)

{n,}? — не менее n раз («не жадный»)

{n,m}? — не менее n но не более m раз («не жадный»)

Т.о. {n,m} задает минимум n повторов и максимум — m. Повторитель {n} эквивалентен {n,n} и задает точно n повторов. Повторитель {n,} задает минимум n повторов. Теоретически величина параметров n и m не ограничена, но рекомендуется не задавать большие значения, поскольку в некоторых ситуациях это может потребовать существенных затрат времени и ОЗУ при обработке такого повторителя.

Небольшое пояснение по поводу «жадности». «Жадные» варианты повторителей пытаются захватить как можно большую часть входного текста, в то время как «не жадные» — как можно меньшую. Например, b+ как и b* примененные к входной строке «abbbbc» найдут «bbbb», в то время как b+? найдет только «b», а b*? — вообще — пустую строку; b{2,3}? найдет «bb», в то время как b{2,3} найдет «bbb».

По умолчанию, в FB Editor повторители могущие быть жадными, являются таковыми.

Примеры:

foob.*r — находит «foobar», «foobalkjdflkj9r» и «foobr»

foob.+r — находит «foobar», «foobalkjdflkj9r» но не «foobr»

foob.?r — находит «foobar», «foobbr» и «foobr» но не «foobalkj9r»

fooba{2}r — находит «foobaar»

fooba{2,}r — находит «foobaar», «foobaaar», «foobaaaar» и т.д.

fooba{2,3}r — находит «foobaar», или «foobaaar» но не «foobaaaar»

((\+\d )?\(\d{3}\) )?(\d{3}(-\d\d){2}) — Находит номера телефонов в форматах «+7 (095) 555-55-55», «(095) 555-55-55», «555-55-55». Это сложный пример, и в нем используется группировка скобками. Подробнее о применении скобок см. ниже.

(?g)(<p>[^-].{5,59}</p>(\r\n)){4,} — Этот пример найдет нам стихи — цепочки (из 4-х и более) следующих друг за другом коротких (от шести до шестидесяти символов) параграфов. Такой вид (много коротких параграфов) характерен, например, для стихов. Первый знак не должен быть длинным тире, так как серии коротких параграфов характерны и для диалогов, а нам диалоги не нужны. Обратите внимание, что пришлось использовать модификатор жадности, так как в «не жадном» режиме мы бы нашли только четыре первых строфы.

Метасимволы — варианты

Вы можете определить перечень вариантов, используя метасимвол «|» для их разделения, например, fee|fie|foe найдет «fee» или «fie» или «foe», (так же как f(e|i|o)e). В качестве первого варианта воспринимается все от предыдущего метасимвола ( или [ или от начала выражения до первого метасимвола «|», в качестве последнего — все от последнего «|» до конца выражения или до ближайшего метасимвола). Обычно, чтобы не запутаться, набор вариантов всегда заключают в скобки, даже если без этого можно было бы обойтись.

Варианты пробуются начиная с первого и попытки завершаются сразу же как удастся подобрать такой, при котором совпадет вся последующая часть выражения. Это означает, что варианты не обязательно обеспечат «жадное» поведение. Например, если применить выражение foo|foot ко входной строке «barefoot», то будет найдено «foo» так это первый вариант, который позволил совпасть всему выражению.

Обратите внимание, что метасимвол | воспринимается как обычный символ внутри перечней символов, например, [fee|fie|foe] означает ровно то же самое что и [feio|].

<(p|div)>.*</(p|div)> — найдет все корректно закрытые параграфы. Так же найдутся и включения вида <p>TEXT</div>, так что это выражение можно применять только на однородном тексте. Как альтернативный вариант можно предположить (<div>.*</div>|<p>.*</p>)

Заметьте, что применив то же выражение в жадном режиме (?g)<(p|div)>.*</(p|div)> мы не найдем ничего полезного.

Оговорка. Выражения с метасимволом «|» в FB Editor в режиме исходника НЕ ФУНКЦИОНИРУЮТ.

Метасимволы — подвыражения

У скобок в регулярных выражениях двоякая функция

1. Скобки позволяют группировать элементы (аналогично математическому использованию)

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

Вы можете обратиться к любому подвыражению в строке замены используя его номер. Подвыражения нумеруются слева направо, в порядке появления открывающих скобок. Ссылка осуществляется в виде $N, где N-номер.

Примеры группировки:

(проба){8,10} — находит строку содержащую 8, 9 или 10 копий «проба»

про([0-9]|б+)а — находит «про0а», «про1а» , «проба», «пробба», и т.д.

Примеры замены:

<p>(.*)</p> —>>— <div>$1</div> — Заменит все параграфы на разделы

((\+\d )?\(\d{3}\) )?(\d{3}(-\d\d){2}) —>>— $3 — Найдет в любом телефонном номере вида «+7 (095) 555-55-55» последнюю часть «555-55-55»

(?g)([\s\(]|\A|<br>)(http://|ftp://|https://)([^\s\)"'<>]+) —>>— $1<a href="$2$3">$2$3</a> — Такая замена преобразует все URL, встреченные в тексте, в гиперссылки.

(?g)([\s\(]|\A|<br>)(www.)([^\s\)"'<>]+)—>>—$1<a href="http://$2$3"$target>$2$3</a> — Преобразует все строки типа www.domain.root в гиперссылки

Метасимволы — обратные ссылки

Метасимволы от \1 до \9 воспринимаются как обратные ссылки. \N совпадает с ранее найденным подвыражением #N. В отличие от случая с заменой, где используются переменные $N, обратные ссылки можно применять в выражении поиска.

Примеры группировки:

(.)\1+ — находит «aaaa» и «cc»

(.+)\1+ — также находит «abab» и «123123»

(['"]?)(\d+)\1 — находит «"13"» (в дв.кавычках), или «'4'» (в один.кавычках) или 77 (без кавычек)

Модификаторы

Модификаторы служат для изменения режимов работы регулярных выражений. Они вводятся в виде (?imsgr-imsgr). Если модификатор вписан после минуса — он отключается, если нет — включается. Модификаторы подвержены группировке (в Perl нет), можно применить модификатор для отдельного участка выражения (см. пример).

Модификаторы:

i — Регистро-независимый режим. Использует выбранный в ОС язык по умолчанию. По умолчанию выключено.

m — Воспринимать входной текст как многострочный, при этом метасимволы ^ и $ будут совпадать не только в начале и конце текста в целом, но и в начале и в конце всех имеющихся в тексте строк (см. также Разделители строк). По умолчанию включено.

s — Воспринимать входной текст как одну строку. При этом метасимвол «.» совпадает с любым символом, если же этот модификатор выключен, то он не совпадает с разделителями строк (см.также Стандартные перечни символов). По умолчанию включено.

g — Включая его Вы переключаете все повторители в «жадный» режим. По умолчанию включено.

r — Модификатор предназначенный для русского языка. Если включен, то диапазоны вида а-я включают также букву «ё», А-Я включают «Ё», а а-Я включает вообще все русские буквы. По умолчанию включено.

Примеры группировки:

(?i)Saint-Petersburg — находит «Saint-petersburg» и «Saint-Petersburg»

(?i) — Saint-(?-i)Petersburg — находит «Saint-Petersburg» но не «Saint-petersburg»

(?i)(Saint-)?Petersburg — находит «Saint-petersburg» и «saint-petersburg»

((?i)Saint-)?Petersburg — находит «saint-Petersburg», но не «saint-petersburg»

Оговорка. В FB Editor модификаторы НЕ ФУНКЦИОНИРУЮТ.

При подготовке приложения использовалась документация к ClearTXT (автор — Алексей Сорокин).

Приложение E
Описание Base64

Этот алгоритм был разработан для представления произвольных последовательностей байтов в форму, читаемую для человека. Кодирующий и декодирующий алгоритмы очень просты, но закодированные данные примерно на 33% больше, чем некодированные. Этот метод идентичен тому, который используется в приложениях PEM (Privacy Enhanced Mail), описанной в RFC 1421 с одним отличием: base64 не приемлет встроенного «чистого» текста.

Base64 использует 65-символьный поднабор из US-ASCII, выделяя 6 бит на каждый печатный символ. (65-й символ «=» используется для обозначения функции спец. обработки).

Этот поднабор имеет важное свойство: он идентичен всем версиям языковой кодировки ISO 646, включая US ASCII, а также всем версиям EBCDIC. Другие популярные механизмы кодирования (uuencode, base85 — часть уровня 2 PostScript) не разделяют этих свойств и поэтому не удовлетворяют требованиям переносимости для двоичных данных электронной почты.

Процесс кодирования преобразует 3 входных символа в виде 24-битной группы, обрабатывая их слева направо. Эти группы затем рассматриваются как 4 соединенные 6-битные группы, каждая из которых транслируется в одиночный символ алфавита base64. При кодировании base64, входной поток байтов должен быть упорядочен старшими битами вперед.

Каждая 6-битная группа используется как индекс для массива 64-х печатных символов. Символ, на который указывает значение индекса, помещается в выходную строку. Эти символы выбраны так, чтобы быть универсально представимыми и исключают символы, имеющие специальное значение для SMTP-транспорта («.», CR, LF) и для синтаксиса вложенных тел MIME («-»).

 Таблица: Алфавит Base64

Выходной поток (закодированные байты) должен иметь длину строк не более 76 символов. Все признаки перевода строки и другие символы, отсутствующие в таблице 1, должны быть проигнорированы декодером base64. Среди данных в Base64 символы, не перечисленные в табл. 1, переводы строки и т.п. должны говорить об ошибке передачи данных, и, соответственно, почтовая программа должна оповестить пользователя о ней.

Если в хвосте потока кодируемых данных осталось меньше, чем 24 бита, справа добавляются нулевые биты до образования целого числа 6-битных групп. А до конца 24-битной группы остается от 0 до 3-х недостающих 6-битных групп, вместо каждой из которых ставится символ-заполнитель «=». Поскольку весь входной поток представляет собой целое число 8-битных групп (т.е., просто байтных значений), то возможны лишь следующие случаи:

(1) входной поток как раз оканчивается 24-битной группой. В таком случае, выходной поток будет оканчиваться четырьмя символами Base64 без символа «=»;

(2) хвост входного потока имеет длину 8 бит. Тогда в конце выходного кода будут два символа Base64, с добавлением двух символов «=»;

(3) хвост входного потока имеет длину 16 бит. Тогда в конце выходного будут стоять три символа Base64 и один символ «=».

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

Любые бессмысленные последовательности в коде Base64 вроде «=====» должны быть игнорированы.

Основано на:

Спецификация RFC 1521 «MIME — Multipurpose Internet Mail Extensions. Part one.»

Перевод: Антон Воронин

Приложение Ж
Описание стандарта ISBN

Международное агентство ISBN присваивает идентификатор группы, который обозначает либо группу стран (например, 0 — для англоязычных стран: Великобритании, США, Австралии, Канады, Ирландии и других), либо отдельную страну (например, 933 — для ШР). Количество цифр в идентификаторе группы зависит от годового объема книжной продукции страны.

Идентификаторы группы устанавливается международным агентством ISBN в следующих диапазонах чисел:

0–7

60–94

950–997

9980–9989

99900–99999

<...>

1. Общие положения

1.1. Международный стандартный номер книги — универсальный идентификационный код, проставляемый на книгах и брошюрах.

1.2. В соответствии с ГОСТ 16447-70 «Издания. Термины и определения основных видов»   книга — непериодическое текстовое издание объемом свыше 48 страниц, брошюра — непериодическое текстовое издание объемом свыше четырех, но не более 48 страниц.

<...>

3. Состав и структура ISBN

3.1. Международный стандартный номер книги состоит из аббревиатуры ISBN (независимо от языка издания книги или брошюры),  и 10 цифр.

3.2. Дня обозначения цифровой части ISBN     применяется арабские цифры от 0 до 9. Последняя цифра    ISBN -   контрольная — может быть римской цифрой X, используемой для обозначения числа 10.

3.3. Цифровая часть ISBN состоит из четырех групп цифр, содержащих различное количество цифровых знаков, отделяемых друг от друга дефисом.

Цифровая часть отделяется от аббревиатуры ISBN пробелом.

3.4. Четыре группы цифр ISBN располагаются в следующей последовательности:

1) идентификатор группы;

2) идентификатор издательства;

3) порядковый идентификатор книги;

4) контрольная цифра.

Hапример:  ISBN 5-05-000746-1, где

5 — идентификатор СССР;

06 — идентификатор издательства «Радуга»;

000746 — порядковый идентификатор книги;

1 — контрольная цифра.

3.5. Идентификатор группы устанавливается Международным агентством ISBN.

СССР присвоен однозначный идентификатор 5.

3.6. Идентификатор издательства присваивается Всесоюзной книжной палатой.

Идентификатор издательства вместе с идентификатором группы служит для идентификации издательства на международном уровне.

3.6.1. Идентификаторы издательства могут быть индивидуальными и собирательными.

Советским издательствам присвоены только индивидуальные идентификаторы.

3.6.2. Идентификатор издательства может содержать различное количество цифровых знаков (от двух до семи) в зависимости от объма выпускаемой книжной продукции.

Издательствам с большим объемом книжной продукции присваивается идентификатор с наименьшим количеством цифровых знаков. Издательством с небольшим объемом книжной продукции присваивается идентификатор с большим количеством цифровых знаков. Идентификаторы издательств устанавливается в пределах следующих диапазонов:

двузначные идентификаторы 00 – 19

трехзначные 200 – 609

четырехзначные 7000 – 0499

пятизначные 85000 – 09999

шестизначные 900000 – 949999

семизначные 9500000 – 9997999

3.7. Порядковый идентификатор книги служит для идентификации конкретного издания.

Порядковый идентификатор книги присваивается издательством.

3.7.1. Количество цифровых знаков порядкового идентификатора книги зависит от идентификатора издательства. Порядковый ISBN книги может содержать от одной до шести цифр. с таким расчетом, чтобы вместе с идентификатором группы, издательства и контрольной цифрой ISBN насчитывал десять цифр. Hапример:

ISBN 5-02-000000-0 («Hаука»)

ISBN 5-229-000000-0 («Металлургия»)

ISBN 5-85700-000-0 («Белорус. сов. энцикл.»)

ISBN 5-269-00000-0 («Сов. художник»)

3.0. Контрольная цифра служит для проверки правильности написания цифровой  части ISBN  и вычисляется следующим образом: каждая цифра, входящая в состав ISBN    умножается на числовой весовой коэффициент — от 10 до 2.

Результаты умножений на весовые коэффициент складываются. Сумма произведений делится на модуль 11 — (постоянный делитель).

Из модуля 11 вычитается остаток от деления, который и является контрольной цифрой. Если остатка нет, контрольной цифрой является  0, если остаток 10, он записывается как X. Hапример:

Цифровая часть: 505000746

Весовые коэффициенты, расположенные в порядке убывания:

10 9 8  7 6 5 4  3  2

Результаты умножения на весовые коэффициенты:

50 0 40 0 0 0 28 12 12

Сумма произведений: 50 + 40+ 28 + 12 + 12 = 142

Сумма делится на модуль 142: 11 = 12 + остаток 10

Из модуля вычитается остаток 10: 11-10=1

Результат — контрольная цифра 1

Таким образом, полный ISBN будет:   5-05-000746-1

Из «Инструкции о присвоении Международного стандартного номера книги в СССР» (утверждено 11.02.1987)

www.lib.ru

Приложение З
Попытка анализа влияния «пиратов» на тиражи книг

Какова роль «пиратских библиотек» в рыночной судьбе книги?

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

Здесь действует один непреложный закон. При опережающем спросе читатель купит товар любого качества, лишь бы он удовлетворял основному параметру спроса. «Casual» Робски написан языком школьного сочинения. Про «Мечеть Парижской Богоматери» даже восторженные поклонники говорят, что книга вообще-то чтению поддается с трудом. «Золото бунта» тоже при чтении пытается «словить клинА», но уже по другой причине (Иванова, собственно, по этой причине и ждали-дожидались много лет).

При ответном спросе всегда требуется облегченный товар. За него может сойти многослойная конструкция, замаскированная под облегченную, но все-таки Дэн Браун, тупой, как ступа, обыграет «свежего Пелевина» по умолчанию.

И только в ситуации отложенного спроса, когда автор сам под себя формирует читателя, говорит с ним, а не заигрывает, пытается открыть новые горизонты или подвинуть старые, есть возможность успешно продать Глубокий и Неоднозначный Текст. Да, это рискованный маркетинг. Но именно так появляется большинство лонгселлеров.

Разумеется, один и и тот же автор может крутиться во всех трех означенных сферах. Даже с равным успехом или равным неуспехом.

И тут мы возвращаемся к животрепещущему вопросу современности — какова роль «пиратских библиотек» в рыночной судьбе книги?

Как ни странно, в ситуации опережающего спроса пираты могут «отъесть» у автора не так уж много. Процентов десять-пятнадцать. Казалось бы, читатель ждет — не дождется товара и готов схватить любой текст, хоть бумажный, хоть электронный — ан нет. При опережающем спросе читатель всегда заранее знает, какую версию товара он будет брать. Если нацелен строго на электронку, ее и возьмет. Если хочет бумажную книгу, пробежится по магазинам. Тех, кто, не утерпев, все-таки слопал электронку, хотя целился на «бумагу», будет мало, и каждый второй купит «бумагу» позже.

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

А вот для книг ответного спроса пираты действительно опасны. Тут число нелегальных скачек может не просто равняться бумажному тиражу, но и превосходить его.

Юля Остапенко напомнила мне фразу, которую я несколько лет назад обронил в расстройстве: «Куда вы прёте?! Фантастов и так как грязи!». Да, фантастов как грязи, коллеги. А будет еще больше. И все молодые-талантливые, и все хотят хороших продаж. Чтобы наконец-то заняться любимым делом всерьез — плотно засесть дома и штамповать книгу за книгой.

Лично я гляжу в будущее со здоровым сарказмом. У меня из-за наступления «электронного читателя» на рынок тиражи могут стабилизироваться, но вряд ли упадут. Когда придет новое поколение, читающее только с монитора, и кое для кого из авторов наступит тотальный колхоз, родители этих «электронных читателей» по-прежнему будут покупать мои бумажные книжки. Потому что я до сегодняшнего дня своего потребителя лажал довольно редко, а больше радовал, чем надеюсь заниматься и впредь.

Олег Дивов. Страничка ЖЖ

Приложение И
Копирайт и новая война луддитов

Плач бумажного автора в электронную эпоху.

Информационные потоки прошли три порога, испытали три революции.

1. «Делай как я, сынок!» — лишь в учениках сохранялась мудрость древних. Устного наследия, распеваемого у костров, едва ли набиралось на мегабайтную дискетку.

2. Первая революция: изобретение письменности. Знаки на камне, глиняные таблички, папирусы, телячья кожа. Грандиозный шаг вперёд — возникают библиотеки, писаные законы, книги и грамотные люди, которые их читают. Информация начинает стремительно накапливаться — пора вытаскивать гигабайтную флешку. Но рукописная книга стоила целое состояние. Средний землянин ни одной книги в доме не имел, даже библии.

3. XV век. Вторая революция — Гутенберга. Матрица перевернула мир! Книга размножилась, подешевела и добралась до социальных низов. Хоть библия, хоть Пинкертон. Тогда и сложился классический канон книжного бизнеса и авторского права: автор право имеет и пишет, издатель продаёт и делится с автором, читатель оплачивает эту цепь и плачет над умершей Офелией. Терабайты слёз и формул, кляуз и воззваний заполнили ноосферу.

4. 20 лет назад джинн вырвался из бутылки и показал всем электрическую кузькину мать третьей инфореволюции. Компьютеры, Интернет, электронные книги. Информационный поток, основанный на протёртой древесине и свинцовых буквах в чёрной краске, полностью сменился: информация стала практически бесплатно размножаемой, пересылаемой и читаемой. И каноническая схема «автор-издатель-читатель» затрещала по швам (объяснять? думаю не надо). А что будет дальше, когда для плавания в море информации появится умный киберсекретарь и учитель типа Робби…

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

Давайте не будем фантазировать, а обратимся к вариантам, существующим в объективной реальности.

Назовём «читательской» каноническую версию инфопотока: автор пишет, издатель распространяет, читатель финансирует. Название даём согласно источнику финансирования.

Но известны три других варианта поддержки инфопотоков — и все бесплатные для конечного потребителя:

1. Государственный. Государство оплачивает телеканал — и он становится бесплатным для зрителей. Государство может финансировать и распространение наиболее важных книг и журналов — например, научных. Наиболее массовый и яркий пример: на наше время (70-е — 80-е) учебники в школах были бесплатные. Каждый имел свой комплект. Потом стали давать с возвратом, а потом…

2. Частный. Пример — нынешнее коммерческое телевидение, спонсируемое рекламодателями. Есть некоммерческие тиви-каналы, финансируемые частными спонсорами-меценатами. Есть бесплатные газеты, журналы и телефонные книги, которые живут на рекламные деньги.

3. Добровольный. Авторы-добровольцы пишут, кто-то держит сайт для этих текстов, а читатель бесплатно их качает. Тут Самиздат и прочие интернет библиотеки с самодеятельными авторами. Перевод Гарри Поттера за несколько дней бригадой добровольных переводчиков. Этот вариант информационного потока допускает добровольную плату авторам и сайтам.

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

Если канонический «читательский» вариант книготорговли начинает пробуксовывать — то что делать?

Попробовать запретить свободное распространение? По-моему, это будет очередная луддитская война, заранее обреченная на проигрыш. Свободного размножения и распространения информации раньше не было попросту по техническим причинам, сейчас оно появилось. Нельзя запретить его по причинам противоречия между новыми возможностями и традиционными отношениями «автор-издатель-читатель».

ТРЕТЬЯ ИНФОРМАЦИОННАЯ РЕВОЛЮЦИЯ. Это не просто слова: меняется целый пласт сложившихся отношений, целые отрасли. Можно воевать за сохранение старого, а можно попробовать построить новое.

Я выступаю не только как читатель, но и как автор текстов: научных и художественных. И тех и тех набралось по паре толстых книжек, хотя первые пишутся на порядок медленнее. Поэтому интересы обеих сторон мне близки. И я вовсе не хочу, чтобы профессиональные писатели исчезли как класс.

Полагаю, что современному книгоизданию нужны ВСЕ схемы распространения и финансирования, включая традиционную.

1. «Читательская схема». Распространение бумажной книги параллельно электронной версии — явление неоднозначное. Среди тех, кто ЗНАЕТ о выходе книги, оно уменьшает число покупателей. Но одновременно интернет-распространение электронной копии резко увеличивает число людей, который именно так УЗНАЛИ о выходе этой книги. Это вполне может повысить бумажные продажи. Мой опыт отслеживания интернет-продаж «Астровитянки» свидетельствует — её продаваемость повысилась. Книга попала в магазины в начале июня 2008, в августе она появилась в интернет-библиотеках, что вызвало бурную полемику и рост продаж. В начале ноября издательство сделало допечатку тиража. Но вряд ли это универсальное правило. Кроме того, если через лет десять читатель перейдет в основном на электронные книги, то продажа бумажных книг резко уменьшится и перестанет играть доминирующую роль в книготорговле. Но бумажная книга останется — подарок, дань традиции, ниша любителей, малышей и пожилых людей. Поэтому читатель продолжит своё финансирование бумажного книгоиздания.

2. «Государственная схема». Если при одной из существующих государственных библиотек сделать электронный отдел, в который библиотека будет ЗАКУПАТЬ права на лучшие книги, то это решит многие проблемы. Автор закупаемой книги получит некий начальный гонорар и процент от будущих скачиваний (с отдельными расценками по детективам и математическим монографиям), а налогоплательщик — право бесплатного пользования этими текстами. Это лишь одна из возможностей — причем абсолютно реальная. Тут надежда и на межгосударственную конкуренцию: первые страны, которые перейдут на такое бесплатное (для читетеля) распространение информации, получат наибольший выигрыш в уровне образования населения — и бОльшую конкурентоспособность в мире.

3. «Частная схема». Здесь море вариантов. Библиотеки популярных книг при интернет-газетах. Книги повышают посещаемость газеты и рекламные доходы, авторы получают гонорары (часть рекламных доходов газеты). Или: частные корпорации платят гонорар автору книги, и получают право поместить на обложку скромную, но гордую надпись: книга сделана бесплатной для широкого читателя благодаря магазину «Южная мебель» — адрес, сайт. Распространение книги дает компании рекламу. Это не утопия — я видел такие «культурные рекламы» в США. Какой-нибудь «Боинг» спонсирует кучу культурных мероприятий.

4. «Добровольная схема». Этот вариант не предусматривает оплаты авторам, поэтому останется для энтузиастов.

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

Конечно, все эти проблемы нового электронного книгоиздания ужасно сложны, но разве кто-то обещал тебе легкой жизни, сынок?

Ник Гарькавый. Страничка ЖЖ

notes

Примечания

1

BBS — board bulletin system, компьютерная доска объявлений. Обычно представляла собой домашний ПК под управлением специального софта, подключаясь к которому напрямую по телефонной линии, пользователи могли обмениваться сообщениями и скачивать выложенные там файлы. Скачивание файлов обычно было лимитировано. Чтобы увеличить лимит, пользователю необходимо было повышать свой ранг, закачивая на BBS, полезные, с точки зрения хозяина BBS, файлы. Таким образом, BBS были предтечами не только сетевых файловых хранилищ, но и современных файлообменных сетей.

2

Esc-последовательности — последовательность кодов, в которой первый код, обычно десятичный 27 (ESCAPE), является признаком управляющей последовательности, а несколько следующих за ним — командой. Вначале ESC-последовательности использовались для управления печатью, позднее стали использоваться для оформления документов. Сейчас стремительно вытесняются XML.

3

Тэги (tags) — текстовые команды, используемые в гипертекстовой разметке. Заключены в угловые скобки. Бывают одинарные <tag> (или, сообразно специфике XML, <tag/>) и парные <tag>данные</tag>. Могут иметь дополнительные характеристики — атрибуты <tag attribyte="sense">.

1.1

Две других трактовки понятия «книга», как-то:

2. Сшитые в один переплёт чистые или разграфленные большие листы бумаги для записей.

и

3. Крупное подразделение литературного произведения, состоящее из многих глав.

представляют собой частные случаи и поэтому к предмету нашего обсуждения не относятся.

1.2

Digital Rights Management, буквально, управление цифровыми правами, говоря проще — защита от несанкционированного копирования.

1.3

Гильоширная сетка, гильоши — специальные трудновоспроизводимые узоры, наносимые на деньги, документы, ценные бумаги, для защиты их от подделки.

1.4

Anti-aliasing — сглаживание картинки при масштабировании.

2.1

Подробное описание BASE64 cм. приложение E.

2.2

UTF-8 — это ASCII-совместимая многобайтная кодировка Unicode.

В отличие от стандартного Unicode, в utf-8 cимволы  с  кодами  от  0x00000000   до 0x0000007f (стандартный набор US-ASCII) кодируются как байты с кодами от 0x00 до 0x7f (совместимость с кодовой таблицей ASCII).  Это  означает, что файлы и строки, содержащие только 7-битные ASCII-символы, будут  иметь одинаковое представление как в ASCII, так и в UTF-8.

3.1

HTA-приложение — приложение, выполняющееся средствами браузера. Фактически, это скрипт.

4.1

Букмейкер (bookmaker (англ., жарг. новояз)) — дословно, создатель книги, но не ее автор. Хотя, в принципе, первое второму не мешает… Не путать с букмекерами!

4.2

Описание ISBN см. приложение Ж.

5.1

Хак — нестандартное использование возможностей софта. Недостатком решений, использующие такие уловки, является непредсказуемый результат, при условиях применения, отличающихся от стандартных.

5.2

Клип-арт (clip-art) — библиотеки картинок, поставляемые вместе (или дополнительно) с графическими пакетами.

5.3

Альманах — непериодический сборник литературных произведений разных авторов.

5.4

Конечно, если вы подойдете к отделению милиции и начнете орать что есть мочи: «Вяжите меня люди, я нелицензионные книжки в Сеть выкладываю!», рано или поздно это тамошнему народу надоест и кто-нибудь выйдет, дабы побудить вас заткнуться... :))

5.5

Критерий приемлемости я оставляю всецело на усмотрение читателя-букмейкера. Каждый выбирает по себе…

7.1

NAG-screen — назойливое окошко с требованием регистрации, периодически появляющееся при использоании большинства shareware-продуктов. Считается, что оно должно побудить пользователя уплатить деньги за программу.

---*---