New user registration is currently disabled due to spam abuse / Регистрация новых пользователей в настоящее время приостановлена из-за злоупотреблений спаммерами

Формат Zbedic, bedic

Ветка для общения разработчиков и координации разработки

Формат Zbedic, bedic

Postby C2BlEv » Tue May 05, 2009 4:15 pm

У меня скопилось некоторое количество словарей в этом формате для зауруса. Даже конвертировал сам. Насколько сложно будет добавить поддержку этого формата (описание по линкам ниже)? Если сложно, тогда я как-нибудь конвертану некоторые словари в дсл, которых там еще нет.

http://bedic.sourceforge.net/
http://www.oesf.org/forum/index.php?sho ... &hl=zbedic
C2BlEv
Модератор
 
Posts: 215
Joined: Tue May 05, 2009 3:45 pm

Re: Формат Zbedic, bedic

Postby ikm » Tue May 05, 2009 5:22 pm

В принципе, несложно. Большинство форматов делалось просто copy-paste с формата bgl (bgl.hh и bgl.cc). Проще всего стартовать так: берёте исходники того формата, который по сути ближе всего к желаемому, или знакомому вам (хотя это не так важно). Дальше просто копируете их в новые .hh и .cc и переписываете всё, переименовывая и меняя всё в процессе. По крайней мере, личн мне так удобнее всего. Последний раз я так делал dictd, ушло часа 4.

Конечно, там с непривычки не сразу разобраться :) Сразу несколько пояснений:

1) Словари создает функция makeDictionaries(), которая для каждого формата своя. Ей дается список путей, где надо искать словари. На выходе она дает список указателей (sptr) на готовые объекты словарей (базовый класс Dictionary). Если надо произвести индексацию, она дергает в процессе специальный объект, информируя об этом программу, чтобы та нарисовала об этом окошко скучающему пользователю.
2) Сейчас все словари используют один и тот же базовый класс индексации. Я рекомендую продолжать так делать, потому что часть проблем он берет на себя и обеспечивает корректное сворачивание при поиске.
3) Большинство запросов к словарям реализовано асинхронно. Там создается специальный объект (Request), который испускает сигналы, когда данные в нём появляются. Обычно создание этих данных происходит в другом треде. На практике это означает, что часть структур словаря надо защитить mutex'ами. Обычно это индексный файл и файл данных.
4) В словарях много кода написано не на Qt-шных класссах, а просто с STL или и вовсе libc. Просто когда-то планировался порт на симбиан, в будущем он может и состояться, как может состояться и порт на winmobile и тп. Сейчас Qt туда понемногу проникла, но все-таки она там больше гость до сих пор. Тут вам виднее, делайте, как вам удобнее. В принципе, желательно делать так же, как и другие словари реализованы, но они не всегда идеальны.
5) wstring. Отдельная история, но думаю, об этом надо упомянуть. Во всех системах размер wchar_t равен 4 байтам (UCS-4), кроме windows, в которой используется UTF-16. Весь код работы с wstring был изначально написан в расчете на UCS-4. При портировании на Windows в этом оказалась проблема, потому что UCS это не UTF. Полная эпопея описана в wstring.hh. Краткая версия: под Windows используется собственный wstring и wchar, под все остальные системы используются стандартные. При этом надо использовать gd::wstring и gd::wchar. Конец истории про wstring.
5) Подключение формата (вызов makeDictionaries()) находится в loaddictionaries.cc.
6) В коде, особенно в хедерах, множество комментариев - читайте их.
7) Задавайте любые вопросы.
ikm
Автор GoldenDict
 
Posts: 1595
Joined: Wed Feb 04, 2009 10:40 am

Re: Формат Zbedic, bedic

Postby C2BlEv » Fri May 08, 2009 6:15 pm

Понял, спасибо. Не под силу мне. Тогда сделаю дсл из тех словарей.
C2BlEv
Модератор
 
Posts: 215
Joined: Tue May 05, 2009 3:45 pm


Return to Разработка

Who is online

Users browsing this forum: No registered users and 11 guests

cron