Сообщений 0    Оценка 75        Оценить  
Система Orphus

Объединение CHM-файлов

Автор: Алексей Кирюшкин
The RSDN Group

Источник: RSDN Magazine #4-2003
Опубликовано: 07.02.2004
Исправлено: 10.12.2016
Версия текста: 1.0
Введение
Создание CHM-мастер-файла
Исходные данные
Объединяем содержания, Table Of Contents (TOC)
Объединяем индексы и информацию для поиска
Добавление общего содержания ко всем остальным CHM-файлам
Необходимые замечания
Ссылки

Введение

В статье "HHCOLREG. Регистрация HTMLHELP коллекций", рассматривался способ объединения нескольких CHM-файлов при помощи специального текстового файла в HtmlHelp-коллекцию. Способ прост в реализации и достаточно удобен в использовании, за одним-единственным исключением – перед началом работы с коллекцией ее надо зарегистрировать на машине пользователя. Нередки, однако, случаи, когда справка должна находится на внешнем носителе (например, на CD) и при работе с ней не предполагается вносить какие-либо изменения в конфигурацию системы пользователя, возможно, у пользователя даже нет на это прав. В этом случае можно применить другой, однако более трудоемкий способ объединения CHM–файлов на основе CHM-мастер-файла.

Создание CHM-мастер-файла

Исходные данные

Попробуем объединить 2 chm-файла: first.chm:


Рисунок 1. First.chm - содержание


Рисунок 2. First.chm - индекс

и second.chm:


Рисунок 3. Second.chm - содержание


Рисунок 4. Second.chm - индекс

В свойствах проекта каждого из объединяемых CHM (включая мастер-файл) должно быть разрешено создание Binary Index. Чтобы эта возможность стала доступной, свойство Compatibility необходимо установить в 1.1 or later:


Рисунок 5

Создадим новый HtmlHelp-проект, master.hpp, с одной единственной страничкой, после чего скомпилируем его. Результат этих действий приведён на рисунках 6 и 7:


Рисунок 6. Master.chm – содержание заготовки


Рисунок 7. Master.chm – индекс заготовки

В свойствах проекта мастер-файла обязательно должна быть снята галочка Create a binary TOC, иначе объединения содержаний не произойдет:


Рисунок 8

Объединяем содержания, Table Of Contents (TOC)

Открываем проект master.hpp на закладке Contents, вызываем контекстное меню, выбираем Insert File, и в появившемся окошке вводим first.chm::\first.hhc, аналогично добавляем к мастер-проекту содержание second.chm:


Рисунок 9. Объединение содержаний CHM-файлов в проекте мастер-файла.

После компиляции проекта можно открыть master.chm и убедиться в объединении содержания всех трех chm-файлов:


Рисунок 10. Master.chm – объединенное содержание master.chm, first.chm и second.chm

Как видно из рисунка, HTML Help Workshop помещает включаемые содержания внутрь содержания мастер-файла, хотя в дизайнере (вкладка Contents) они находятся на одном уровне. Если необходимо, чтобы содержания мастер-файла и включаемых файлов располагались на одном уровне, придется вручную (во всяком случае, других способов я не знаю) в текстовом редакторе отредактировать файл master.hhc – вынести информацию о включаемых содержаниях из тегов <UL> содержания мастер-файла:

по умолчанию

<UL>
...содержание мастер файла...
...подключаемые содержания...
...еще содержание мастер файла...
</UL>

должно быть:

<UL>
...содержание мастер файла...
</UL>
...подключаемые содержания...
<UL>
...еще содержание мастер файла...
</UL>

После перекомпиляции проекта содержание мастер-файла будет иметь следующий вид:


Рисунок 11. Master.chm – объединенное содержание master.chm, first.chm и second.chm после "ручного" редактирования master.hhc.

Включение содержаний (INCLUDE: xxxxx.chm::\xxxxx.hhc) производится рекурсивно, т.е. включаемое содержание в свою очередь также может включать в себя содержание еще одного CHM-файла и т.д.

Объединяем индексы и информацию для поиска

Открываем свойства проекта master.hpp на закладке Merge Files и добавляем в список first.chm и second.chm:


Рисунок 12. Изменение свойств проекта для объединения индексов и базы для поиска

ПРЕДУПРЕЖДЕНИЕ

Не нужно добавлять в этот список файл master.chm

После перекомпиляции проекта открываем master.chm и убеждаемся, что произошло объединение индексов всех трех файлов:


Рисунок 13. Master.chm – объединенный индекс

Если необходимо, чтобы при открытии любого из объединямых таким образом CHM-файлов (в данном примере – first.chm, second.chm) был доступен общий индекс и поиск по всем файлам, необходимо повторить эту операцию для проектов каждого из CHM-файлов. При этом необходимо следить за тем, чтобы CHM-файл не попал в список Merge Files своего собственного проекта.

ПРИМЕЧАНИЕ

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

Добавление общего содержания ко всем остальным CHM-файлам

Если необходимо, чтобы при открытии любого из объединенных CHM-файлов, показывалось общее содержание, необходимо в настройках каждого из проектов перейти к настройке типов окон (Add/Modify Window Definitions) и на закладке Files исправить имя "родного" hhc-файла с содержанием на путь к содержанию мастер-файла в формате master.chm::\master.hhc:


Рисунок 14. Добавление общего содержания для каждого из CHM-файлов.

Операцию нужно повторить для каждого CHM, кроме мастер-файла.

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


Рисунок 15. Second.chm – общее содержание

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

Необходимые замечания

  1. Все CHM-файлы должны располагаться в одном каталоге.
  2. Для работы с созданным объединением критичным является наличие только мастер-файла, любой другой CHM-файл может отсутствовать. При этом, естественно, в объединенной справке будет отсутствовать его содержимое, но ее работоспособность не нарушится.

Иногда рекомендуют при распространении CHM-файлов на защищенном от записи носителе распространять вместе с ними CHW-файлы, создающиеся в одном каталоге с CHM при первом обращении к индексной информации. Однако эксперименты в Windows XP показывают, что при работе с созданной нами объединенной справкой с компакт-диска (CD) необходимые CHW-файлы успешно создаются на локальном диске в каталоге .\Documents and Settings\Your_Name\Application Data\Microsoft\HTML Help.

Ссылки

  1. Helpware.net. How to merge CHM

Эта статья опубликована в журнале RSDN Magazine #4-2003. Информацию о журнале можно найти здесь
    Сообщений 0    Оценка 75        Оценить