Поиск по этому блогу

пятница, 9 ноября 2012 г.

В поисках жирного шрифта: разбор структуры скрытых файлов TX2 на Ectaco JetBook Mini

Итак, как я уже обнаруживал ранее, книгу, отображаемую полужирным шрифтом, читать на JetBook Mini намного приятней и контрастней. Несколько раз заходя к структуре fb2 с разных сторон с применением нескольких программ, успеха добиться не удалось, зато выяснилось, что нужно копать не fb2, а tx2, скрытые файлы, появляющиеся после открытия книжки в формате fb2 на JetBook Mini.
Они находятся в той же папке, где и лежат fb2-файлы, но не видны стандартными средствами Windows (даже если у вас включена опция "Показывать скрытые файлы"). Их можно увидеть и открыть через некоторые файловые менеджеры, например EF Commander (отличный и легкий файл-менеджер, не бесплатная программа, но есть на некоторых трекерах с лечением от жадности).

Открываем файл tx2. Название у него отличается от названия книги, представлено в виде ряда цифр, но открыв его Блокнотом или AkelPad'ом или другим текстовым редактором, мы легко сможем понять по тексту, к какой книге он относится.

Необходимо заметить, что изначально эту статью я писал на работе, где установлена Windows 7, и в "родном" Блокноте Windows 7 спецсимволы tx2-файлов видны как разные значки, о чем идет речь ниже, а дома, когда я открыл tx2-файл в Windows XP, вместо любых спецсимволов были просто квадратики. Однако в редакторе Notepad++ и в Windows XP и в Windows 7 спецсимволы представлены особыми значками - буквенными сочетаниями.

Благодаря поддержке Liapa-NNZ с форума the-ebook я смог увидеть некоторые интересные нюансы строения файла tx2. Каждое, подчеркиваю, каждое слово заголовка выделено специальными символами, обозначающими жирный шрифт и центрирование. Т.е. наоборот, сначала идет символ, отвечающий за центрирование (в Блокноте (Windows 7) он выглядит как Т-образная рамка, повернутая в левую сторону), а следом - второй символ - отвечающий за полужирное начертание (Т-образная рамка, повернутая вправо). И закрывает эту синтаксическую конструкцию один и тот же символ (значок - стрелка вверх).



После нескольких экспериментов с изменением текста в tx2-файле и просмотре, как выглядит результат на JetBook Mini, я обнаружил, что с помощью стандартных средств Windows 7 (Блокнот), можно удалить (через функцию "Заменить" и поставить - заменить символ на ничего) все символы, отвечающие за центрирование и все символы, отвечающие за полужирное начертание и также все символы, которые закрывают эту конструкцию. А после этого для чтобы сделать текст, который нужен нам полужирным (например, весь текст книги), нам нужно поставить символ "Т-образная рамка вправо" перед КАЖДЫМ СЛОВОМ текста... Проверил на нескольких словах. Это работает.


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

Чуть позже...

Дальнейшие эксперименты показали элегантное решение проблемы. Давайте еще раз рассмотрим АЛГОРИТМ УСТАНОВКИ ЖИРНОГО ШРИФТА во всем тексте книги FB2 на электронной книге Ectaco JetBook Mini:

1. В Блокноте открываем tx2-файл, связанный с fb2-книгой.
2. Затем выполняем функцию "Заменить" и заменяем пробел, т.е. " " на "пробел и слитно с ним написанный символ, отвечающий за полужирное начертание текста". И нажимаем "Заменить все".
3. Сохраняем файл. 



Теперь открываем книгу на читалке JetBook Mini. Текст жирный везде (кроме окончаний слов, которые переносятся на следующую строчку), пытаемся листать и видим несоответствие конца одной страницы и начала следующей. А теперь внимание! Меняем размер шрифта. Читалка пересчитывает страницы исходя уже из имеющегося жирного шрифта и все теперь нормально листается и текст не отгрызается нигде. Вот такая вот технология получилась! 

Спасибо Liapa-NNZ за подсказку! А теперь и правда было бы хорошо сделать програмку, которая может пакетным образом конвертировать tx2-файлы в каталоге с подкаталогами и автоматически таким вот образом делать жирное начертание шрифта. Ну и не забывайте при первом открытии такой вот переделанной книги изменять размер шрифта на любой (вероятно, это надо будет сделать два раза чтобы вернуть любимый размер шрифта).


А теперь несколько картинок, как выглядит файл tx2 в программе - редакторе текста Akelpad (в Windows XP) (в стандартном Блокноте Windows XP у меня те же квадратики) и в программе Notepad++ (в обеих версиях Windows XP и Windows 7):

Akeplad, Windows XP

Блокнот, Windows 7

Notepad++, Windows XP

Notepad++, Windows 7

Кстати, курсив выделяется значком стрелка вправо (если вы открыли tx2 в Windows 7 Блокноте). А теперь давайте посмотрим на значки - буквенные комбинации для этих тегов при открытии tx2-файла в Notepad++: ETB - центрирование, EM - полужирный, SUB - курсив, CAN - конец тега (завершающий знак). Т.е. если нам нужно чтобы все слова были выделены жирным, мы заменяем в Notepad++ "пробел" на "пробелEM" и делаем "Заменить все". А еще проще будет полуавтоматический пакетный режим замены через Notepad++: открываем все документы tx2, в которых предполагается замена символов, выбираем пункт меню "Поиск"=>"Замена" или нажимаем Ctrl+H и там уже заменяем пробел на пробелСИМВОЛ_ПОЛУЖИРНОГО_ШРИФТА и нажимаем кнопку "Заменить все во всех открытых документах".




И напоследок фотографии обработанной таким образом книги (все размеры шрифта):

Сначала самый мелкий шрифт (без переделки файла, т.е. оригинал):


А теперь тот же самый размер шрифта, но уже переделанный файл:


И так далее шрифты по возрастанию до последнего:








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

В перспективе было бы отлично написать программу (или найти того, кто напишет), которая бы делала все то же, но в пакетном варианте. Т.е. указать папку с подкаталогами (желательно), где есть преобразованные файлы (другими словами, указать флэшку JetBook Mini) и нажать кнопку. И чтоб все открытые книги стали с полужирным шрифтом.

Всем удачи! До новых встреч.

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

Оригинальный файл fb2: 318 Кб
Конвертированный (tx2): 345 Кб
Файл после добавления символов: 396 Кб

Итого имеем: tx2 с жирным шрифтом больше начального tx2 на 15%, а если сравнить оригинальный fb2 и жирный tx2 - то больше на 24%.

Кроме того, давайте посчитаем, сколько нужно свободного места оставлять на флэшке при условии открытия всех книг (и если все книги будут у нас в fb2-формате). Получается что книгами нужно наполнять не более 44% от объема флэшки. Т.е. если флэшка у нас 1Gb, то не более 450 Мб, если 2, то 900 мб, если 4, то не более 1,75 Gb, если 8 - то не более 3,5 Gb, ну и если 16 Gb, то не более 7 Gb. Еще раз уточню, что это, разумеется, приблизительные подсчеты (не учтены idx файлы, но они занимают очень мало).

По поводу пакетной замены текста в файлах tx2 - есть нюанс - многие программы не видят скрытые от системы файлы, и, соответственно не могут поменять текст внутри. Перепробовал ряд программ, я нашел альтернативу: Notepad++ может заменять текст в файлах именно в пакетном режиме, хотя честно скажу - делает это достаточно долго (почему - загадка?, в 23 файлах он провел эту процедуру замены за несколько минут). Кроме этого, предварительно файлы я скопировал через EF Commander на жесткий диск в отдельный каталог. А после замены заменил ими родные файлы на карте читалки. В общем, можно сказать, что проще будет заменять Блокнотом, открывая файл прямо на карте читалки через EF Commander.

Комментариев нет:

Отправить комментарий