Сайт и HTML Help (CHM) из одного исходника
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 24.11.18 12:31
Оценка:
В каком виде удобнее держать оглавление HTML Help (CHM), чтобы параллельно и без лишних операций поддерживать одну и ту же документацию как на сайте, так и в отдельно распространяемом CHM-файле?

HTML-страницы там, как известно, одни и те же, а вот оглавление для CHM описывается в TOC-файле, в XML специального формата. То есть, нужны средства автопреобразования либо из TOC в HTML-оглавление для сайта, либо обратно, либо из чего-то третьего и в TOC, и в HTML-оглавление.

Есть такое?
html help chm toc site
Re: Сайт и HTML Help (CHM) из одного исходника
От: vsb Казахстан  
Дата: 24.11.18 13:32
Оценка: +1
Можно написать XSLT для преобразования XML во что угодно, в том числе в HTML.
Re[2]: Сайт и HTML Help (CHM) из одного исходника
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 24.11.18 13:34
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Можно написать XSLT для преобразования XML во что угодно, в том числе в HTML.


Написать можно на чем угодно, но вдруг что-то готовое есть.
Re: Сайт и HTML Help (CHM) из одного исходника
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 25.11.18 07:11
Оценка: 4 (1)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Есть такое?

Я так понимаю, у вас есть готовый статический сайт с навигацией, и вы просто хотите запаковать его в CHM? Если да, то увы простого способа сделать навигацию там и там я не знаю.
Мы делали иначе — собирали документацию в MAML-формате, обрабатывали с помощью Sandcastle Help File Builder (SHFB) и выдавали все нужные нам форматы — и сайт и CHM.

Но это, по сути то, что предлагают многие платные систем документирования — делаешь всё у них, в их редакторе, а потом генерируешь нужные форматы.

Плюс SHFB
— бесплатный
— открытый
— есть сторонние плагины (например, сгенерировать документацию по XSD)
— работает как проект в студии или как standalone приложение
— сборка построена на MSBuild — легко включить в релиз-процесс

Если заинтересуетесь, взгляните на документацию http://ewsoftware.github.io/SHFB/ — она как раз собрана в самом SHFB, а исходный проект (из которого это собиралось) тут

P.S. Только имейте в виду, что исходно Sandcastle делался для генерации документации по XML-комментариям из C# и VB.Net поэтому исходно там много функционала именно для этих нужд.
Re[2]: Сайт и HTML Help (CHM) из одного исходника
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 25.11.18 16:05
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

МР>Я так понимаю, у вас есть готовый статический сайт с навигацией, и вы просто хотите запаковать его в CHM?


Наоборот — есть исходники для изготовления CHM из HHP/HHC стандартным компилятором от MS. Хочется то же самое выкладывать на сайте, но перспектива заниматься еще и ручной синхронизацией оглавлений расстраивает. По сути, только в оглавлениях и дело, остальное — просто набор файлов.

МР>Мы делали иначе — собирали документацию в MAML-формате, обрабатывали с помощью Sandcastle Help File Builder (SHFB) и выдавали все нужные нам форматы — и сайт и CHM.


Спасибо, посмотрю SHFB, но сложноват, на первый взгляд.
Re: Сайт и HTML Help (CHM) из одного исходника
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 26.11.18 20:07
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>В каком виде удобнее держать оглавление HTML Help (CHM), чтобы параллельно и без лишних операций поддерживать одну и ту же документацию как на сайте, так и в отдельно распространяемом CHM-файле?


ЕМ>HTML-страницы там, как известно, одни и те же, а вот оглавление для CHM описывается в TOC-файле, в XML специального формата. То есть, нужны средства автопреобразования либо из TOC в HTML-оглавление для сайта, либо обратно, либо из чего-то третьего и в TOC, и в HTML-оглавление.


ЕМ>Есть такое?


У меня сайт генерировался в HTML и CHM препроцессором (Template Toolkit).

  Болванка для оглавления(?) CHM выглядела так
  [% MACRO menu_help_list BLOCK %]
    <UL>
      [% FOREACH el = navigation.siblings %]
      <LI><OBJECT type="text/sitemap">
               <param name="Name" value="[% FILTER html %][% el.1 %][% END %]">
               <param name="Local" value="[% root %][% navigation.current_dir %][% el.0 %]">
        </OBJECT>
      [% END %]
    </UL>
  [% END %]

  [% BLOCK menu_help_list1 %]
      [% local__open=0 %]
      [% FOREACH el = navigation.siblings %]
       [% IF el.2==id -%][% IF local__open==0 %][% local__open=1 %]<UL>[% END %]
        <LI><OBJECT type="text/sitemap">
          <param name="Name" value="[% FILTER html %][% el.1 %][% END %]">
          <param name="Local" value="[% root %][% navigation.current_dir %][% el.0 %]">
         </OBJECT>
 
         [% content %]
       [%- END %]
      [% END %][% IF local__open==1 %]</UL>[% END %]
  [% END %]

  [% PROCESS misc %]

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
</HEAD><BODY>
<OBJECT type="text/site properties">
    <param name="ImageType" value="Folder">
</OBJECT>

    [%# ------------------------------------------------------------- %]
    [% PROCESS news %]
    [% news_text = menu_help_list %]

    [%# ------------------------------------------------------------- %]
    [% PROCESS license %]
    [% license_text = menu_help_list %]

    [%# ------------------------------------------------------------- %]
    [% PROCESS examples %]
    [% samples_text = menu_help_list %] [%# используется в doc_text_x %]
    
    [%# ------------------------------------------------------------- %]
    [% PROCESS doc %]
    
    [% doc_text__examples  = BLOCK %]
        [% WRAPPER menu_help_list1 id="examples" %][% samples_text %][% END %]
    [% END %]
    [% doc_text__mssql = BLOCK %]
        [% WRAPPER menu_help_list1 id="mssql" %][% END %]
    [% END %]
    [% doc_text__ibp_props = BLOCK %]
        [% WRAPPER menu_help_list1 id="ibp_props" %][% END %]
    [% END %]
    [% doc_text__other     = BLOCK %]
        [% WRAPPER menu_help_list1 id="" %][% END %]
    [% END %]

    [%# ------------------------------------------------------------- %]
    [% PROCESS root %]

    <UL>
      [% FOREACH el = navigation.siblings %]

         <LI><OBJECT type="text/sitemap">
              <param name="Name" value="[% el.1 %]">
              [% IF el.0 == "purchase.html" ||
                    el.0 == "download.html" %]
                  <param name="Local" value="[% www_root %][% el.0 %]">
              [% ELSE %]
                  <param name="Local" value="[% root %][% navigation.current_dir %][% el.0 %]">
              [% END %]
         </OBJECT>

        [% SWITCH el.0 %]
              
        [% CASE "news.html" %]
           [% news_text %]
        [% CASE "license.html" %]
           [% license_text %]
        [% CASE "documentation.html" %]
          [% doc_text__examples %]

          <UL>
            <LI><OBJECT type="text/sitemap">
              <param name="Name" value="[% c_help_topic_title__doc__IBProvider_And_MSSQL_Services %]">
              <param name="Local" value="[% root %][% navigation.current_dir %]documentation.html#mssql">
            </OBJECT>
            [% doc_text__mssql %]
          </UL>

          <UL>
            <LI><OBJECT type="text/sitemap">
              <param name="Name" value="[% c_help_topic_title__doc__IBProvider_Objects_Properties %]">
              <param name="Local" value="[% root %][% navigation.current_dir %]documentation.html#ibp_props">
            </OBJECT>
            [% doc_text__ibp_props %]
          </UL>

          [% doc_text__other %]
        [% END %]
      [% END %]
    </UL>


</BODY></HTML>

Но потом (в 2015-ом) сайт переехал на WP и на CHM был положен болт
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: Сайт и HTML Help (CHM) из одного исходника
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 28.11.18 17:46
Оценка:
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>У меня сайт генерировался в HTML и CHM препроцессором (Template Toolkit).


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