12月 232009
 
2011.12.11
2011年12月1日にGoogle Translate API v1が利用できなくなりました。
そのため、当プラグインも動作しない状態になりました。
このまま公開していても意味がないので、公開停止したいと思います。
いままで使ってくださった皆さんありがとうございました。

Google Chrome Extension に満足いく英和&和英アプリがなかったので自分でつくってみたメモ。

本当は Firefox で便利だった fastlookupalc をまんま模倣したかったけど、肝心の英訳をしてくれる Alc(英辞郎 on the WEB) が残念ながら規約的にプラグインから利用できない?ようだったので、代わりに excite 翻訳と google 翻訳を利用しました。
(2010/01/16 追記:excite 翻訳に関しても、利用を制約・制限される可能性があるもよう orz)

個人的にあったら便利だなーと思ってた、「英単語は意味や品詞や用例」を「その他長文や英語以外の文字は単純に翻訳」的な機能(というほどのものではないけど)をつけてみました。

インストール

FastLookUp for Chrome インストールページ

ソース

fastlookup-for-chrome.git

コミット履歴

Commit History

使い方

Ctrl を押しながらマウスでピーっと文字を選択すると翻訳結果がポップアップ。
多々ある fast lookup 系と同じ形式。

いまのところフォントサイズとかショートカットキーが変更出来ます。
(2010/03/25: フォントカラーや背景カラーも変えられるようになりました。)

つくって思ったこと

ブラウザ互換を気にせず、javascript ることの素晴らしさ。
謳い文句通り、作るの簡単。
テスト的なインストールもアンインストールも簡単。
デバッグ環境は、Firebug に比べると少し物足りなかった。使いこなせてないだけかも。

参考

Chrome extension tutorial: チュートリアル。
Bubble Translate: Chrome extension やら CSS やらたくさん参考にさせていただきました。いっぱい模倣してます。
AutoPatchWork: 複雑で全部は追いきれてないですが、こちらも Chrome extension 作成にあたって参考にさせていただきました。
fastlookupalc: そもそも移植したかったスクリプト。とにかく発想がすばらすぃ。

 

条件コンパイルを試したメモ。
ある条件のときに、特定のソースコードをコンパイルから除外 or 包含する。
libevent の configure を参考にしました。
通信システム(select, poll, epoll, …etc)の有無をチェックしてコンパイル対象を選択するとこが今回の目的にピッタリ。

書いたコード一覧

hello.c

#include <stdio.h>
#include <hello.h>
#include "config.h"
 
#ifdef HAVE_DOG
extern const struct helloop dogop;
#endif
#ifdef HAVE_CAT
extern const struct helloop catop;
#endif
 
const struct helloop *ops[] = { 
#ifdef HAVE_DOG
    &dogop,
#endif
#ifdef HAVE_CAT
    &catop,
#endif
    NULL
};
 
int main()
{
    int i;
    for( i = 0; ops[i] != NULL; ++i ){
        ops[i]->func( i );
    }   
    return 0;
}

hello.h

#ifndef HELLO_H_
#define HELLO_H_
 
struct helloop
{
    void (*func)(int);
};
 
#endif

dog.c

#include <stdio.h>
#include "hello.h"
 
static void func_dog( int num );
 
const struct helloop dogop = { 
    func_dog
};
 
static void func_dog( int num )
{
    printf( "Hello dog. num:%d\n", num );
}

cat.c

#include <stdio.h>
#include "hello.h"
 
void func_cat( int num );
 
const struct helloop catop = { 
    func_cat
};
 
void func_cat( int num )
{
    printf( "Hello cat. num:%d\n", num );
}

configure.ac

AC_PREREQ(2.59)
AC_INIT(automake-cond, 0.1, none)
AC_CONFIG_SRCDIR([hello.h])
AC_CONFIG_HEADER([config.h])
AM_INIT_AUTOMAKE
AC_PROG_CC
 
# テストコード。
# yes なら dog.c をコンパイル対象に。
have_dog="yes"
if test "$have_dog" = "yes"
then
    AC_SUBST([COMPILE_OBJS], 'dog.$(OBJEXT)')
    AC_DEFINE(HAVE_DOG, 1, [Define dog.])
fi
 
# yes なら cat.c をコンパイル対象に。
have_cat="no"
if test "$have_cat" = "yes"
then
    AC_SUBST([COMPILE_OBJS], 'cat.$(OBJEXT)')
    AC_DEFINE(HAVE_CAT, 1, [Define cat.])
fi
 
AC_C_CONST
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

Makefile.am

bin_PROGRAMS = hello
hello_SOURCES = hello.c hello.h
EXTRA_hello_SOURCES = dog.c cat.c
hello_LDADD = @COMPILE_OBJS@
hello_DEPENDENCIES = @COMPILE_OBJS@

実行

configure.ac の中で have_dog=yes, have_cat=no と設定しているから最終的に dog.c がコンパイル&リンクされ func_dog() が呼ばれる。

$ ./configure
$ make
$ ./hello
Hello dog. num:0

参考

autotools + 使い方
ソースの条件コンパイル