Свободные словари (часть 1)

Пролог

Я с нетерпением ждал нового Show Leopard. Как только долгожданный диск стал доступен, тут же был приобретен за кровные 990р :). С приобретением нового лицензионного продукта, решил окончательно покончить с остатками вареза на своем маке. Началась война за чистоту содержимого давно. В этот раз дошел до последнего рубежа (надеюсь все остальное уже «чисто»): словари Lingvo. О словарях речь и пойдет.

Попытка номер раз

Большая часть простых пользователей для начала попытается найти готовое (и красивое решение). Выбор программы: Сама реализация от Apple меня очень даже устраивает. Но есть один нюанс … готовые словари. К сожалению родной Dictionary.app согласен работать только с одним форматом словарей, а именно *.dictionary. Выбор словарей: Жаль но готовых русско-английский/англо-русский словарей я не нашел (возможно не дано). Адаптация словарей: Если нет готовых (и «родных») словарей надо найти конвертер. Как мне кажется самая большая коллекция свободных (и к тому же довольно объемных) словарей расположена на xdxf.revdanica.com. Портал может предложить 2 вида словарей: XDXF и StarDict. Значит надо найти конвертер для этих форматов. И о чудо есть прекрасный проект, где можно найти DictUnifier который позволит нам превратить StarDict словарь в Apple Dictionary словарь. К сожалению проект скорее мертв чем жив (последние обновления в приложение датированы Мартом 31, 2008). И полученный словарь не всегда работает в Dictionary.app.

Попытка номер два

Альтернативные программные продукты (бесплатные конечно). Что мы имеем из готового? Как оказалось, не много :(. В основном это старые малопригодные к работе приложения. Приводить их список особого смысла думаю нет.

Попытка номер три

А почему мы обошли стороной StarDict (скомпилированный под Mac), так любезно предоставленный разработчиками StarDict. Ответ прост. Таким продуктом пользоваться не хочется: Выглядит оно может и хорошо (все в мире относительно). screen-shot-2009-10-01-at-6.18.48-pm.png Но вот интеграции с ОС просто нет. Пример: попробуем свернуть окошко (cmd + h), и о «чудо» мы его теперь не «вернем» (закрываем, и открываем заново).

Попытка номер ...

Наверное пора сдаваться. Готовых решений нет. Но постойте ведь мы же пользуемся UNIX системой! Конечно! Надо найти что-то из MacPorts. Увы ничего… Ничего страшного! Ведь мы же не безрукие (хочется верить), «адаптируем» сами. И тут какраз нашелся консольный вариант StarDict: sdcv. Ура!!! Осталось только собрать это чуда для себя :). Качаем, распаковываем, открываем терминал, и…: pkgconfig и glib2 никто (из Apple) установить в систему не «успел» %). Я пошел простым путем: зачем делать самому, можно взять готовое. Устанавливаем всем известный (надеюсь это так %) ) MacPorts и вперед:
$ port deps glib2
Full Name: glib2 @2.20.5+darwin
Build Dependencies:   pkgconfig
Library Dependencies: gettext, libiconv, perl5, python_select
$ sudo port install glib2
Затем «собираем» sdcv:
$ cd sdcv-0.4.2
$ ./configure --prefix=/opt/local
$ make
$ make check
$ sudo make install
$ make clean
Но не все так просто, нас ждет две трудности (для шага make)
  1. Ошибочка в lib.cpp
    lib.cpp: In member function ‘const gchar* offset_index::read_first_on_page_key(glong)’: 
    lib.cpp:516: error: no matching function for call to ‘min(long unsigned int, guint32&)’ 
    К счастью решается просто: в форему написано что в svn уже поправили (берем новую версию файла). Вот кстати можно взять патчик отдельно.
  2. getopt.h содержит «не правильное» для «нас» определение функции getopt().
    In file included from sdcv.cpp:33: 
    ./getopt.h:146: 
    error: declaration of C function ‘int getopt()’ conflicts with /usr/include/unistd.h:458: 
    error: previous declaration ‘int getopt(int, char* const*, const char*)’ here 
    Решение еще проще: Меняем стоку «extern int getopt ();» на «extern int getopt (int __argc, char *const *__argv, const char *__shortopts);» в вышу указанном файле. Вот diff -u для оригинала и измененного:
    --- getopt.h_orig    2005-01-12 00:11:10.000000000 +0300
    +++ getopt.h    2009-10-01 20:38:22.000000000 +0400
    @@ -143,7 +143,8 @@
        errors, only prototype getopt for the GNU C library.  */
     extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
     # else /* not __GNU_LIBRARY__ */
    -extern int getopt ();
    +extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
     # endif /* __GNU_LIBRARY__ */
     
     # ifndef __need_getopt
После этого все «соберется». Складываем словари (предварительно скаченные с xdxf.revdanica.com) в ~/.stardict/dic и вуаля.

Немного вольностей

Но вот беда. Вывод sdcv не очень красочный:
screen-shot-2009-10-01-at-8.48.03-pm.png
Но как это и полагается, мы пойдем своим путем. А именно: напишем скрипт-оболочку (скорее помятую обертку). И получим что-то вроде этого:
screen-shot-2009-10-01-at-8.48.17-pm.png
Помоему уже не плохо. Скрипт можно взять здесь. Сильно прошу не судить (написан был быстро и без особых претензий).

Эпилог

Так как проект sdcv тоже больше похож на мертвеца, думаю что следующий шаг будет в написании чего-то самому. Жаль только что из всех языков программирования сейчас пользуюсь только perl/ksh. Другие позабыл уже давно. Поэтому волонтеры заинтересованные в написании альтернативы Dictionary.app и представленного здесь «Костылъ.арр», могут обращаться. В данный момент начил осваивать GUI в Xcode. Надеюсь на продолжение истории…

No comments:

Post a Comment