Pull to refresh

PHP Manual с комментариями пользователей в chm

Reading time3 min
Views5.6K
Навеяно вот этим: Похапе мануал обновился

Мне лично удобней пользоваться CHM версией руководства по PHP — быстрый поиск удобен, а интернет не всегда доступен. Но у официальной справки нет встроенных пользовательских комментариев, которые зачастую бывают очень полезны. Ранее они были в Extended-версии руководства, но сейчас она уже не поддерживается.

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

Потребуются (все делается под Windows):

  1. распаковываем all.bz2 куда-нибудь, например в папку TMP
  2. Декомпилируем туда же chm:

    hh -decompile TMP php_manual_en.chm


    получим файлы: all, php_manual_en.hhc, php_manual_en.hhk и папку RES со всеми html-файлами справки.
  3. Внедрим в HTML-ки комментарии при помощи простого PHP-скрипта:

    $notes=fopen('tmp/all', 'r');
    while($note=fgets($notes))
    {
     list($id, $sect, $rate, $time, $user, $text)=explode('|', $note);

     //Подсветка кода средствами PHP
     $text=highlight_string(base64_decode($text), true); 
     //избавимся от длинных не переносящихся строк
     $text=preg_replace('/(?<=\w)[&]nbsp;(?=\w)/', ' ', $text);


     $file=file_get_contents('tmp/res/'.$sect.'.html');
     
     $note_body='
    <div id="usernotes">
      <div class="note">
       <span>'
    .strftime('%d.%m.%y %H:%M', $time).'</span> <strong>'.$user.'</strong><br />
       <div class="text">
        <div class="phpcode">
          <code>
            '
    .$text.'
          </code>
        </div>
       </div>
      </div>
    </div>
    '
    ;

     //в файле комментарии будут выстроены в обратном порядке - самые новые сверху
     $file=preg_replace('%(?=<hr /><div class="manualnavbar")%', $note_body, $file);

     file_put_contents('tmp/res/'.$sect.'.html', $file);
    }

    * This source code was highlighted with Source Code Highlighter.

Создадим в папке TMP файл php_manual_en_notes.hhp:

[OPTIONS]
Binary TOC=Yes
Compatibility=1.1 or later
Compiled file=php_manual_notes_en.chm
Contents file=php_manual_en.hhc
Default Window=manual
Display compile progress=No
Full-text search=Yes
Index file=php_manual_en.hhk
Language=0x409 Английский (США)
Title=PHP Manual

[WINDOWS]
manual="PHP Manual","php_manual_en.hhc","php_manual_en.hhk","res/index.html","res/index.html",,,,,0x2520,,0x386e,,0x30000,,,,,,0

[INFOTYPES]


Откроем созданный файл в HTML Help Workshop. Компилируем и получаем готовый CHM-файл.
А впрочем… нет, не совсем готовый :) При компиляции произошло две ошибки:

HHC5013: Error: URL reference in the TOC cannot be resolved: "res\pharfileinfo.chmod.html".
HHC5013: Error: URL reference in the TOC cannot be resolved: "res\function.chmod.html".


Если заглянуть в файлы .hhc и .hhk — можно предположить что дело в не так написанном слэше, но на самом деле это не так. Эксперименты показали, что HTML Help Workshop выдает такую ошибку, если в названии файла встречается строка ".chm". Поэтому переименуем файлы в pharfileinfo_chmod.html и function_chmod.html и заменим ссылки на них в файлах .hhc и .hhk.

Вот теперь компилируется без ошибок.

Скачать готовый файл (актуальность на 18.08.09) можно здесь.
UPD: файл обновлен, добавлена подсветка кода, исправлены длинные строки
файл должен быть на 23 мб — приношу извинения, файл в 10 мб собрался неправильно.

Tags:
Hubs:
Total votes 36: ↑34 and ↓2+32
Comments33

Articles