Скачать: yandex upload.ee
Тема на оф.форуме.
видео по chmViewer
скриншот (Windows), скриншот (Linux)
Задался желанием сделать для Linux просмотрщик для CHM-файлов, так как существующие аналогичные программы имеют некоторые неудобства, например:
1. Открывается каждый раз в новом окне запуская моструозную программу заново.
2. Шрифт каждый раз мелкий и приходится кликать на веб-форме и крутить колесо с нажатым Ctrl, чтобы увеличить шрифт.
3. Не работает кнопка Backspace и боковая кнопка мыши для возврата на предыдущую страницу. Хотя и в моей попытке это имеет проблему, если я повешу на неё хоткей, то я не могу стирать текст в поле поиска, разве что сделать его во всплывающем окне.
На данный момент infratec дал код, который позволяет открыть CHM файл как архив и вытащить из него пути к внутренним файлам, их позиции и длину, но в сжатом виде. Эти файлы ещё требуется распаковать и infratec заявил, что сделает это.
Я же, даже если infratec не сделает разжатие, то я сделаю извлечение всего архива внешними командами 7zip, получив в папке конфигов %APPDATA% папку вида "имя_CHM_файла_размер", при открытии страницы если папка уже существует для конкретного размера CHM-файла, то просто подхватит существующую и будет открывать из него файлы. То есть если у файла другой размер, то это уже будет другая папка. Вероятность что у CHM-файла будет одинаковое имя и размер, но разное содержимое - 0,001%, поэтому я не буду получать его хеш-сумму, так-как это затратно.
Если же infratec сделает модуль, позволяющий получить индивидуальные страницы из архива, то нет необходимости делать разжатую копию CHM-файла в %APPDATA%, а вместо этого в %temp% можно создать временную папку и извлекать в неё отдельный затребованный файл. Конечно же при этом нужно найти все ссылки на странице на локальные файлы (css, png и т.д.) и извлечь их тоже, при этом запуск для любой справки будет происходить мгновенно.
Надо посмотреть, возможно придётся сделать собственный формат TOC (дерево заголовков), чтобы вместо парсинга регулярными выражениями (0,4 сек на справку PureBasic) сделать более быстрый конфиг по принципу "файл|заголовок", тогда повторный запуск будет ещё быстрее, если прога обнаружит собственный файл.
На данный момент я тестирую упрощённый вариант, то есть распаковали CHM по указанному пути (или другой путь, указав в коде) и запускаем прогу, видим что дерево работает и открывает html-файлы. То есть даже если в линукс придётся работать по такой схеме, это уже выгодно отличается от текущего варианта. Осталось сделать обработку ком-строки и можно будет работать со справкой в линукс в привычном виде.
Отредактировано AZJIO (Вчера 08:05:24)