Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » GoldenDict (часть 2)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

Открыть новую тему     Написать ответ в эту тему

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предыдущее обсуждение: Часть 1




 
Актуальная версия 1.5.0:
Windоws Qt 4.8.6 или Qt 5.12.3, последний EXE-файл: 1.5.0-18-g59363bc9.
Плагин dsengine.dll для Qt 5.6-based версии на Windows XP: dsengine_5.6.1_for_XP.7z
как собрать актуальный рабочий комплект для windows (без словарей)
MacOSX 1.5.0-18-g59363bc9 Intel; архив прежних версий: на github (09.2012–04.2019), на sourceforge (06.2016–04.2019)
 
Расширенная настройка интерфейса
 
GoldenDict — новая словарная программа, обладающая следующими особенностями:  
 
  • Графический интерфейс на основе табов, для создания которого использована библиотека Qt;
  • Интеграция с html-движком WebKit для корректного представления материалов в html-формате;
  • Поддержка подключения словарей в форматах: Babylon (.bgl/.gls), StarDict (.ifo/.dict./.idx/.syn), Dictd (.index/.dict), ABBYY Lingvo (.dsl тексты и аудиоматериалы .lsa/.dat, .lsd - только в Android), XDXF, AARD, SLOB, ZIM, MDX/MDD, EPWING;
  • Система морфологии, которая находит основы слов при поиске, улучшая его результаты, а также дает рекомендации по правильному написанию слов. Используются обычные словари Hunspell/Myspell;
  • Поддержка индексации звуковых файлов в директориях, формируя из них словари аудио-произношений;
  • Поддержка отправки запросов в Wikipedia, Wiktionary и другие MediaWiki сайты;
  • Режим работы в роли глобальной для всего десктопа всплывающей подсказки, позволяющий выводить информацию для выделенного или помещенного в буфер обмена слова из любого текста внешней программы;
  • Для загрузки доступна версия, имеющая в комплекте набор англо-русско-английских словарей, словарей морфологии и примеры произношения слов на английском языке.  
     
    Программа позиционируется как функциональная замена StarDict, поддерживающая большее количество форматов файлов и более качественное их отображение. Программа умышленно не вводит собственного формата файлов, ставя вместо этого задачу наиболее полно поддержать все популярные существующие.
     
    Официальные Early Access билды для Windоws :: для MacOSX :: для Linux.
    Официальные Development билды для Windоws.
    Официальный форум поддержки GoldenDict.
    Официальный баг-трэкер.
     
    Параллельные топики:
    GoldenDict - New Level - Разработка новых форматов словарей для GD: DSLGD, HTMLGD; подключение речевых движков; режим закладок; варианты полнотекстового поиска.
     
    Как сжимать словари в формат .dz для использования в GoldenDict :: DictZip 1.12.1 (latest) :: Оболочка DictUI
     
    Ссылки на готовые сборки
     
    Ссылки на словари для GoldenDict

  • Всего записей: 38836 | Зарегистр. 26-02-2002 | Отправлено: 11:50 23-02-2017 | Исправлено: yozhic, 22:10 16-03-2024
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ramanuki
     
    Проверил с таким контентом:
    Далее

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 22:42 11-03-2017 | Исправлено: andreyefgs, 22:52 11-03-2017
    ramanuki



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andreyefgs
    Локальный сервер мало у кого есть в хозяйстве.

    Всего записей: 805 | Зарегистр. 07-08-2013 | Отправлено: 23:12 11-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ramanuki
     
    Проблема открытия картинок в дефолтной смотрелке Accomplished!!!
     
    Вот код:

    Код:
    собака1
    <script>
    function openpic(img){
        var a = img.parentNode;
        var link = img.src;
        a.setAttribute("href", link);
        img.removeAttribute("onclick");
    }
    </script>
    dog <a><img onclick="openpic(this)" src="dog.png"></a>

     
    Вот что имеем в инспекторе до клика по картинке:
       
     
    После:

    Цитата:
       

     
    Результат:

    Цитата:
       

     
    ЗЫ
    Зачем нужны полные локальные ссылки, когда и работают и такие bres://fafde81262e119bd7017f36064f219d1/dog.png
    А их можно взять из атрибута src картинки

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 01:00 12-03-2017 | Исправлено: andreyefgs, 01:01 12-03-2017
    Itkind

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди, я поражаюсь вашими знаниями и вашей работы.

    Всего записей: 177 | Зарегистр. 03-09-2012 | Отправлено: 04:59 12-03-2017
    ramanuki



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Зачем нужны полные локальные ссылки, когда и работают и такие bres://fafde81262e119bd7017f36064f219d1/dog.png  

     
    А они одни и те же у всех?
     
    Добавлено:
    Это, видно, зашифрованный путь к словарю - он уникальный в пределах словаря. А при изменении адреса словаря на диске тоже поменяется.
     
    Добавлено:
    Похоже, что из-за него и картинка не отображается, потому что адрес у нее становится таким: <img src="bres://40950d17310235a8b7dc9d353ee050b/http://site.ru/files/test.jpg">

    Всего записей: 805 | Зарегистр. 07-08-2013 | Отправлено: 09:47 12-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ramanuki

    Цитата:
    Похоже, что из-за него и картинка не отображается, потому что адрес у нее становится таким: <img src="bres://40950d17310235a8b7dc9d353ee050b/http://site.ru/files/test.jpg">  

     
    Из этого примера сложно понять, что вы пытались сделать.
    Если выложите gls файл (сырец) с картинками, то я отредактирую его так, чтобы картинки открывались в во внешней смотрелке. Поэтом можете использовать этот словарь как пример, шаблон.
     

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 10:33 12-03-2017 | Исправлено: andreyefgs, 10:47 12-03-2017
    ramanuki



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Из этого примера сложно понять, что вы пытались сделать.

     
    Это я к своему сообщению от  18:11 11-03-2017:
     

    Цитата:
    С картинками, как вариант, было бы удобно делать так: миниатюру хранить в ресурсах словаря, а полный вариант картинки размещать в интернете, типа:  
     
    <a href="http://site.ru/files/test.jpg"><img src="res/test.jpg"></a>  
     
    А вот вывести картинку из интернета не получилось (по такому принципу):  
     
    <a href="http://site.ru/files/test.jpg"><img src="http://site.ru/files/test.jpg"></a>

     
    ... т.е. не получилось из-за того, что путь (согласно инспектору) превращается в
     
     <img src="bres://40950d17310235a8b7dc9d353ee050b/http://site.ru/files/test.jpg">
     

    Всего записей: 805 | Зарегистр. 07-08-2013 | Отправлено: 10:39 12-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ЗЫ
     

    Цитата:
    А они одни и те же у всех?  

     

    Цитата:
       

     
    Два файла лежат в одной папке с gls файлом.
    Как видно из скриншота начало (bres://fafde81262e119bd7017f36064f219d1) у них совпадает
     
    ЗЗЫ
    fafde81262e119bd7017f36064f219d1
    не меняется даже если картинки разнести по разным статьям, этот код получается каким-то образом из путей
     
    Но я не советую его статическим образом использовать, словарь будет непортабельным, лучше динамически добывать и вставлять куда следует.
     
     
     

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 10:48 12-03-2017 | Исправлено: andreyefgs, 10:48 12-03-2017
    ramanuki



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andreyefgs
    Под "всеми" я имел в виду юзеров. У другого человека этот адрес, скорее всего, будет иным, т.к. при перемещении словаря этот хеш меняется.
     
    Надо спросить у Abs62, можно ли этот адрес восстанавливать.

    Всего записей: 805 | Зарегистр. 07-08-2013 | Отправлено: 10:58 12-03-2017 | Исправлено: ramanuki, 10:59 12-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ramanuki

    Цитата:
    ... т.е. не получилось из-за того, что путь (согласно инспектору) превращается в
     
     <img src="bres://40950d17310235a8b7dc9d353ee050b/http://site.ru/files/test.jpg">  

     
     
    Вот рабочий код для использования внешних картинок с программным фиксингом ссылок.
     

    Код:
     
    cat1
    <article>
    <a href="https://pbs.twimg.com/profile_images/664169149002874880/z1fmxo00.jpg"><img style="display:none" src="https://pbs.twimg.com/profile_images/737359467742912512/t_pzvyZZ_400x400.jpg"></a>  
        <script>
            var scr = document.getElementsByTagName('script');
            scr = scr[scr.length - 1];
            var images = scr.parentNode.getElementsByTagName('img');
            for (var i = 0; i < images.length; i++)
            {
                if (/^bres.*http.*$/.test(images[i].src))
                {
                    images[i].setAttribute("src", images[i].src.replace(/^.*(https?.*)$/, "$1"));
                    images[i].style.display = 'inline';
                }
            }
        </script>
    </article>
     

     
    Использование контейнера <article> обязательно (т.е. нужен родительская пара <tag></tag>  для  <script></script> и остального контента статьи, название тега может быть другим). Javascript для фиксинга должен быть внизу.
     
    ЗЫ
    Внутри тега img используйте style="display:none", чтобы не мелькала синяя иконка (которая отображается если браузер не может показать картинку)
     
    ЗЗЫ
    И на всякий случай, весь код  (любой, не только приведённый выше) лучше изолировать с помощью анонимной функции:

    Код:
    <script>
    (function (){
    ...
    })();
    </script>


    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 11:24 12-03-2017 | Исправлено: andreyefgs, 13:23 12-03-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andreyefgs

    Цитата:
    Вот рабочий код для использования внешних картинок с программным фиксингом ссылок.

    Вы лучше скажите, какого формата словарь делаете, что там не так и как должно быть. Потому что "bres://40950d17310235a8b7dc9d353ee050b/http://site.ru/files/test.jpg" - это явный косяк преобразования ссылок, который не даст отобразиться картинке. GD, встречая в ссылках "http://", должен оставлять их как есть, не пытаясь добавлять "bres://". А насчёт вывода картинок во внешний просмотрщик я ещё подумаю.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 12:46 12-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
     
    Формат GLS
    Проблема №1:
     
    Имеется статья:
    заголовок1
    кот: <img src="https://pbs.twimg.com/profile_images/664169149002874880/z1fmxo00.jpg">
     
    Получается:

    Цитата:
       
     

     
    В инспекторе:

    Код:
    <div class="glsdict"><div class="glsdict_headwords">заголовок1</div>кот: <img src="bres://fafde81262e119bd7017f36064f219d1/https://pbs.twimg.com/profile_images/664169149002874880/z1fmxo00.jpg">
    </div>
     

     
    Нужно, чтобы ссылка на внешнюю картинку (/^http/) не модифицировалась.
     
    Проблема №2:
    Показ картинок по клику во внешней смотрелке.
     
    ЗЫ
    Пока есть рабочие фиксы обоих проблем с использованием js, но в идеале конечно будет лучше если они будут решены на другом уровне.

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 13:16 12-03-2017 | Исправлено: andreyefgs, 13:26 12-03-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andreyefgs

    Цитата:
    Проблема №1:

    Поправил - goldendict-1.5.0-RC2-59-g5b80f75(EXE only).7z.

    Цитата:
    Проблема №2:
    Показ картинок по клику во внешней смотрелке.

    Будем думать. Намётки есть, но надо ещё посмотреть, как оно выйдет.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 15:09 12-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Поправил - goldendict-1.5.0-RC2-59-g5b80f75(EXE only).7z

    Спасибо, проверил - теперь норм.

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 15:46 12-03-2017 | Исправлено: andreyefgs, 15:46 12-03-2017
    andreyefgs



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Написал новую версию расширения для Firefox для вызова GD через контекстное меню
     
    Скачать
     
    Изменения:
     
    1)Теперь можно использовать и на Windows
     
    2)Отказался от python в пользу node.js, следовательно для работы расширения требуется наличие node.js
     
    3)Опционально используются новые ключи: --popup-group-name и --group-name
    Расширение будет нормально работать только с версией GD, которая поддерживает эти ключи.
     
    4)Расширение использует детектор языка страницы и на основе выявленного языка и данных в настройках выбирает имя группы для ключей.
     
    И другое.
    ___________________________
     
    Инструкция в файле README.txt, скриншоты в папке "screenshots"
     
     

    Всего записей: 1533 | Зарегистр. 16-10-2005 | Отправлено: 21:03 12-03-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    По поводу крайних правок в gls.cc, а также в сопутствующем stardict.cc.  
    Часть регулярки:

    Код:
    ((?!(data|https?|ftp):)[^\"']*)

    Я так понимаю, что протокол не надо захватывать в группу. Поэтому, целесообразнее было бы сделать так:
     

    Код:
    ((?!(?:data|https?|ftp):)[^\"']*)

     
    То же самое здесь:

    Код:
    <a(\\s*[^>]*)href=['\"](bword://)?([^'\"]+)['\"]

    Лучше заменить на  

    Код:
    <a(\\s*[^>]*)href=['\"](?:bword://)?([^'\"]+)['\"]

     
    Тогда в  

    Код:
    QString link = linksReg.cap( 3 );

    Можно опять откатиться на 2-ю группу.
     
    И ещё общий для всех регулярок момент. Напр.:

    Код:
    (<\\s*link\\s+[^>]*href\\s*=\\s*[\"']+)((?!(data|https?|ftp):)[^\"']*)

    Здесь из-за выделенного болдом получается многократный откат. Столько раз, сколько символов от href до конца тега. Кроме того, даже если протокол присутствует, откат всё равно будет происходить пока не дойдёт до href, и только потом, дойдя до протокола, регулярка даст ненахождение. Может, стоит применить более гибкую логику, типа как в MDX? Тем более здесь всё проще...
     
    Другой вариант, можно сделать так:

    Код:
    (<\\s*link(?=\\s)(?:(?![\\s\"']href\\s*=)[^>])+href\\s*=\\s*[\"']+)((?!(?:data|https?|ftp):)[^\"']*)

    Если href идёт сразу за link, то выделенное израсходует только две попытки (точнее с лукапом от шести).

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 04:40 13-03-2017 | Исправлено: Romul81, 04:55 13-03-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    Я так понимаю, что протокол не надо захватывать в группу. Поэтому, целесообразнее было бы сделать так:

    Я чего-то не понимаю. Как он может захватиться, если там негативный предпросмотр, то бишь прописанное обязано отсутствовать при срабатывании регулярки?

    Цитата:
    Можно опять откатиться на 2-ю группу.

    Резонно.

    Цитата:
    Здесь из-за выделенного болдом получается многократный откат. Столько раз, сколько символов от href до конца тега. Кроме того, даже если протокол присутствует, откат всё равно будет происходить пока не дойдёт до href, и только потом, дойдя до протокола, регулярка даст ненахождение. Может, стоит применить более гибкую логику, типа как в MDX?

    А не проще урезать регулярке жадность через setMinimal(true)?


    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 10:53 13-03-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    Как он может захватиться, если там негативный предпросмотр, то бишь прописанное обязано отсутствовать при срабатывании регулярки?

    Совершенно верно - он и не захватится. Но с точки зрения регулярки (точнее поискового движка) под него (протокол) выделяется отдельная, третья группа захвата, что вовсе не обязательно.
     

    Цитата:
    А не проще урезать регулярке жадность через setMinimal(true)?

    Тоже можно. Но тогда нужно искать закрывающую кавычку (одну из).
     
    З.Ы. Кстати, в старом HTML очень часто значения атрибутов были без кавычек (если в них не было пробелов). Может, на будущее, этот момент тоже как-то учесть?.. Ладно в GLS, а вот в Stardict точно не помешало бы...

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 11:04 13-03-2017 | Исправлено: Romul81, 11:15 13-03-2017
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Romul81

    Цитата:
    Но с точки зрения регулярки (точнее поискового движка) под него (протокол) выделяется отдельная, третья группа захвата, что вовсе не обязательно.

    А это не проблемы движка, если он выделяет группу захвата под то, что обязано отсутствовать?
    И кстати, в вашем варианте двоеточие всё равно остаётся вне пределов "(?:)".

    Цитата:
    Но тогда нужно искать закрывающую кавычку (одну из).

    Это как?

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 11:14 13-03-2017 | Исправлено: Abs62, 11:16 13-03-2017
    Romul81



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62

    Цитата:
    А это не проблемы движка, если он выделяет группу захвата под то, что обязано отсутствовать?

    Так работают регулярные выражения. Тем более, не думаю, что движок QRegExp относится к наиболее оптимизированным. К тому же, судя по той информации, которую я о нём читал, у него имеются куда более серьёзные проблемы - в первую очередь общее быстродействие. Поэтому, о микрооптимизациях речи не идёт.
     

    Цитата:
    И кстати, в вашем варианте двоеточие всё равно остаётся вне пределов

    Оно и должно там быть. Вся конструкция, вместе с двоеточием попадает в Negative Lookahead.
    Вот, гляньте как оно работает: https://regex101.com/r/KKj37M/1
    И попробуйте удалить двоеточие из искомого текста в TEST STRING.
     
    Добавлено:

    Цитата:
    Это как?

     

    Код:
    ((?!(data|https?|ftp):)[^\"']*)

    В нежадном режиме найдёт только ноль или один символ. Поэтому справа надо будет ставить Lookahead (?=[\"']). Тогда выражение захватит всё до закрывающей кавычки (двойной или одинарной).
     
    Добавлено:

    Цитата:
    А это не проблемы движка, если он выделяет группу захвата под то, что обязано отсутствовать?

    Кстати, не хотел бы лезть в дебри, но вполне могут быть ситуации, когда нужно захватить несуществующую группу, чтоб сослаться на неё далее в выражении. Конкретные реализации могут отличаться у разных диалектов, но в общем - "не всё так однозначно".
     
    В данном случае выигрыш, кончено, микроскопический, но если группа не нужна и её можно не захватывать, то зачем её захватывать?.. :smile:

    Всего записей: 1327 | Зарегистр. 03-03-2008 | Отправлено: 11:27 13-03-2017 | Исправлено: Romul81, 11:40 13-03-2017
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175

    Компьютерный форум Ru.Board » Компьютеры » Программы » GoldenDict (часть 2)


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru