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

Продолжая «публикацию» о свободных словарях, перенесем военные действия в визуальную среду (а точнее в Dictionary.app).
После некоторых поисков на тему как же заставить работать DictUnifier, было найдено пару патчей. Прежде всего спасибо David’s logbook. Пролистав комментарии можно обнаружить что там есть ссылка на патчик.
Патченная версия работает лучше. Но вот с форматированием проблема. Словарные статьи не как не форматированы, текст идет в одну или несколько длинных строк. К тому же вся словарная статья заключена в тег pre. И мы видем что-то вроде этого:

Это мало мне нравилось. И я подправил (слегка) build_dict.sh. Данный скрипт отвечает за всю логику работы приложения. Добавил я не много. А точнее блок 'butifier'. И вот что получилось:
.
Пропатченный DictUnifier можно скачать с rapidshare.
Прошу заметить что данная версия DictUnifier`а создает файлы в диретрии ~/.sdconv_back.

Зачем?

Все просто: в эту директория копируются исходники для создания словаря (как до butifier так и после). Имея эти файлы можно подправить, то что скрипт не смог.

Удачи.

Свободные словари (часть 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. Надеюсь на продолжение истории…

А где кнопка "OK"?

А где же кнопку ОК взять :) ?