Пролог
Я с нетерпением ждал нового 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. Ответ прост. Таким продуктом пользоваться не хочется: Выглядит оно может и хорошо (все в мире относительно).  Но вот интеграции с ОС просто нет. Пример: попробуем свернуть окошко (cmd + h), и о «чудо» мы его теперь не «вернем» (закрываем, и открываем заново).
 Но вот интеграции с ОС просто нет. Пример: попробуем свернуть окошко (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) 
- Ошибочка в 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 уже поправили (берем новую версию файла). Вот кстати можно взять патчик отдельно.
- 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 не очень красочный:   
Но как это и полагается, мы пойдем своим путем.  А именно: напишем скрипт-оболочку (скорее помятую обертку). И получим что-то вроде этого:   
Помоему уже не плохо. Скрипт можно взять здесь. Сильно прошу не судить (написан был быстро и без особых претензий).     
Эпилог
Так как проект sdcv тоже больше похож на мертвеца, думаю что следующий шаг будет в написании чего-то самому. Жаль только что из всех языков программирования сейчас пользуюсь только perl/ksh. Другие позабыл уже давно.  Поэтому волонтеры заинтересованные в написании альтернативы Dictionary.app и представленного здесь «Костылъ.арр», могут обращаться.  В данный момент начил осваивать GUI в Xcode.  Надеюсь на продолжение истории… 
 
No comments:
Post a Comment