bolega
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору решил я все-таки разобраться, что такое изменилось в djvulibre версиях 3.5.27-3.5.28, что код СК перестал быть совместим с ним. Пока что обнаружил две вещи: 1) ошибка при извлечении чанка INCL в случае если его нет, т.е. когда djvu вообще не содержит словарь. В версии 3.5.25 djvulibre просто не извлекает этот чанк, более поздние версии возвращают ошибку. Ладно, пусть будет ошибка. 2) оказалось, при создании djvu из отдельных файлов-чанков чанк имя файла INCL в новых версиях не должно содержать пути! Это очень странно, т.к. для всех остальных типов файлов djvulibre ожидает в командной строке полное имя. Ладно, формирую командную строку с чанком INCL без пути. Как и ожидалось, возникает другая ошибка, типа INCL-файл не найден, что и следовало ожидать. Выход только один - запускать djvulibre, предварительно делая папку с INCL-файлом текущей папкой операционной системы. Так все начинает работать. Вот фрагмент кода Леона Боту djvumake.cpp: старая версия 3.5.25 (из командной строки из полного имени файла извлекается только имя): Цитата: else if (!dargv[i].cmp("INCL=",5)) { create_incl_chunk(iff, "INCL", GURL::Filename::UTF8(5+(const char *)dargv[i]).fname()); } | новая версия 3.5.27 (из командной строки просто берется имя какое есть): Цитата: else if (!dargv[i].cmp("INCL=",5)) { create_incl_chunk(iff, "INCL", (const char *)GUTF8String(dargv[i].substr(5,-1))); } | Дальше по коду идет проверка, что в имени нет символов /\\ , если есть (а в полном пути они обязательно есть), djvumake считает это катастрофой и вылетает, вместо того, чтобы просто отбросить от имени файла его путь, как это было в предыдущих версиях. Интересно, что такая трактовка имени применяется только к одному типу чанка. После того, как я подстроился под эти изменения, СК нормально сгенерировал сложный djvu-файл. Буду еще тестировать, возможно, что еще чего-нибудь вылезет. | Всего записей: 4408 | Зарегистр. 09-09-2002 | Отправлено: 21:40 15-12-2022 | Исправлено: bolega, 08:17 16-12-2022 |
|