PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Linux » Просмотрщик CHM-файлов.


Просмотрщик CHM-файлов.

Сообщений 1 страница 13 из 13

1

Скачать: 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)

0

2

Нужно по возможности работать с данными в памяти не извлекая на диск.

0

3

Пётр
Я не вижу такой возможности, на странице обращение к файлам css, png, как это будет работать?

Я с утра поиск не доделал, и не выкладывал, сейчас добавил архив с иконками и отдельным окном поиска с галками: "учитывать регистр", "целое слово", "от начала слова" и это не мешает Backspace.

Интересная ситуация на Linux, сначала проблема TOC-файла (Table of Contents.hhc), сразу переделал в UTF-8, что говорит о том что в Linux придётся добавлять проверку кодировки и перекодировать при необходимости из cp1251 в UTF-8.

Разгадал проблему в Linux, надо использовать префикс file:/// чтобы файлы открывались в веб-гаджете.

Ещё проблема в Linux - регистрозависимость файлов. В дереве 95% с этим проблем нет, а вот ссылки в текстах имеют проблемы. Они обрабатываются браузерным движком, в который влезть невозможно. По факту невозможно просто извлечь CHM-файл и получить доступ, можно либо рассчитывать на везение, либо делать доводку извлечённых файлов.

Отредактировано AZJIO (04.01.2025 03:27:17)

0

4

Использую http://www.ulduzsoft.com/kchmviewer
Вполне нормально работающая программка.
Был опыт распаковки и использования, но в другой оболочке. https://www.cronos.ru/download-demo.html
Были загружены несколько CHM для разных программ/языков и использовались в едином информационном пространстве.

0

5

Пётр написал(а):

Нужно по возможности работать с данными в памяти не извлекая на диск.

Возможно получится если сделать виртуальный диск.
Может быть проще сделать через сокеты и программно "на лету" подменять ссылки на файлы картинок и стилей.

0

6

PiGeMa написал(а):

Использую http://www.ulduzsoft.com/kchmviewer

Я как раз его проблемы и озвучил. xchm ещё больше проблем.

PiGeMa написал(а):

Возможно получится если сделать виртуальный диск.

Если бы можно файл монтировать htfs-файл как диск без распаковки и нативно обращаться к сжатым файлам, то это было бы приемлемо, а если распаковывать, то какая разница, будет ли это виртуальный диск или физический.

——————————————————————————
У меня получилось распаковать CHM автоматически при первом открытии командой:

Код:
RunProgram("C:\Program Files\7-Zip\7z.exe", "x " + #q$ + chmfile$ + #q$ + " -o" + #q$ + dir0$ + #q$ + " * -r -aos" , "", #PB_Program_Hide | #PB_Program_Wait)

на Linux тоже получилось:

Код:
RunProgram("7z", "x " + ReplaceString(chmfile$, " ", "\ ") + " -o" + ReplaceString(dir0$, " ", "\ ") + " * -r -aos" , "", #PB_Program_Hide | #PB_Program_Wait)	

Отредактировано AZJIO (05.01.2025 23:14:41)

0

7

Установил маленькую библиотечку

Код:
sudo aptitude install libchm-bin

И всё пошло

Код:
extract_chmLib file.chm /tmp/chm/

0

8

PiGeMa
Спасибо если что, но думаю с 7zip тоже универсально получается, так как прога просто обязана быть на каждом компе, прога первой необходимости.

——————————————————————————
Обновил прогу на яндексе.
Теперь кроме распаковки происходит ещё проверка кодировки файла содержания TOC.hhc и если он ANSI, то будет преобразован в UTF-8 использую кодовую страницу cp1251 дав ей имя 0.hhc с последующим поиском *.hhc и так как при сортировке .hhc будет первой в списке, то берётся этот файл.
Добавлена кнопка открытия, которая открывает новый CHM-файл для просмотра.

В плане добавить все открытые справки в ini-файл и кнопкой "меню" выбирать их.

0

9

Есть ещё вариант использовать расширение  Firefox для работы с CHM файлами.

0

10

PiGeMa написал(а):

Есть ещё вариант использовать расширение  Firefox для работы с CHM файлами.

И что, этот плагин может из ком-строки IDE открыть страницу с переданным словом?

0

11

Трудно что то сказать, надо пробовать. Испытаний не было.

0

12

В отношении мнемокодов символов отправил личное сообщение.

0

13

версия 0.6.8
Добавлен глобальный поиск по html-страницам.
Вывод результата "Подсчитать" теперь с генерацией html-страницы.

версия 0.7.0
Добавлен поиск по html-странице, с подсвечиванием найденного

версия 0.7.1
Исправление удаление комментариев в TOC, не удалялись.
Окно поиска как панель инструментов, чтобы не было кнопки на панели задач.

Отредактировано AZJIO (16.01.2025 21:10:22)

0


Вы здесь » PureBasic - форум » PureBasic для Linux » Просмотрщик CHM-файлов.