Page 1 of 1

Формат Zbedic, bedic

PostPosted: Tue May 05, 2009 4:15 pm
by C2BlEv
У меня скопилось некоторое количество словарей в этом формате для зауруса. Даже конвертировал сам. Насколько сложно будет добавить поддержку этого формата (описание по линкам ниже)? Если сложно, тогда я как-нибудь конвертану некоторые словари в дсл, которых там еще нет.

http://bedic.sourceforge.net/
http://www.oesf.org/forum/index.php?sho ... &hl=zbedic

Re: Формат Zbedic, bedic

PostPosted: Tue May 05, 2009 5:22 pm
by ikm
В принципе, несложно. Большинство форматов делалось просто 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) Задавайте любые вопросы.

Re: Формат Zbedic, bedic

PostPosted: Fri May 08, 2009 6:15 pm
by C2BlEv
Понял, спасибо. Не под силу мне. Тогда сделаю дсл из тех словарей.