Objective-C・日本語対応ctags.exeをWindows上でコンパイルする

  • 投稿日:
  • by
  • カテゴリ:

ニッチすぎて涙が出そう。

サクラエディタで使うのでctagsにターゲット。

さくっとみつかる以下のもの。

splhack ctags objc 日本語対応版

Objective-C 対応 Exuberant Ctags の日本語対応版です。

Githubからzipを落としてVS2010でコンパイル。

splhack-ctags-objc-ja · GitHub

 

VS2010のコマンドプロンプトで、

nmake -f mk_mvc.mak

 

あっさりctags.exeができました。ただし、上記ブログエントリには、

 

configure オプション—enable-japanese-support 追加 (デフォルトで日本語対応機能OFF)

 

とありましたので、mk_mvc.makファイルの以下の部分にKANJIを定義してしておきました。

@ mk_mvc.mak

・・・

include source.mak

REGEX_DEFINES = -DHAVE_REGCOMP -DREGEX_MALLOC -DSTDC_HEADERS=1
DEFINES = -DWIN32 $(REGEX_DEFINES) -DKANJI
INCLUDES = -I. -Ignu_regex
OPT = /O2

・・・

(太字部分-DKANJIを追加)

#これって、もしかしてやらんでいいのかな?

その他、追加されてるっぽい、guess.cなどがコンパイルされてobjができていたぽいことまでは確認しています。やっつけなので、深入りはしないつもりで。

 

 

サクラエディタから以下のようにコマンドラインを指定したらいい感じでした。

20130302205024

コマンドラインオプション:ctags -R --langmap=objc:.h.m --languages=objc

# オプションていうか、コマンドラインそのものですな。

あとはF12のタグジャンプ、Shit+F12のタグジャンプバックでサクサクというわけです。

 

JSONKitのソースのタグファイルを生成したサンプルの抜粋:

-allObjects    JSONKit.m    829;"    M    interface:JKDictionaryEnumerator
-allObjects    JSONKit.m    850;"    C    implementation:JKDictionaryEnumerator
-clearCache    JSONKit.h    149;"    M    interface:JSONDecoder
-clearCache    JSONKit.m    2142;"    C    implementation:JSONDecoder
-copyWithZone:    JSONKit.m    1095;"    C    implementation:JKDictionary
-copyWithZone:    JSONKit.m    807;"    C    implementation:JKArray
-count    JSONKit.m    1013;"    C    implementation:JKDictionary
-count    JSONKit.m    736;"    C    implementation:JKArray

 

でまぁ、配布条件とはよく確認していないですが、バイナリとmk_vmc.mkを置いておきます。

 

VS2010でコンパイル済みバイナリ

VC98でコンパイル済みバイナリ

 

 

(追記)

タグファイル生成のダイアログに書いたコマンドは、

--langmap=objc:.h.m --languages=objc

だけ効いているのかも。コマンドラインで実行したのと結果が違う。

ctags -R --langmap=objc:.h.m --languages=objcの結果サンプル:

-allObjects    .\JSONKit.m    /^- (NSArray *)allObjects$/;"    C    implementation:JKDictionaryEnumerator
-allObjects    .\JSONKit.m    /^- (NSArray *)allObjects;$/;"    M    interface:JKDictionaryEnumerator
-clearCache    .\JSONKit.h    /^- (void)clearCache;$/;"    M    interface:JSONDecoder
-clearCache    .\JSONKit.m    /^- (void)clearCache$/;"    C    implementation:JSONDecoder
-copyWithZone:    .\JSONKit.m    /^- (id)copyWithZone:(NSZone *)zone$/;"    C    implementation:JKArray
-copyWithZone:    .\JSONKit.m    /^- (id)copyWithZone:(NSZone *)zone$/;"    C    implementation:JKDictionary
-count    .\JSONKit.m    /^- (NSUInteger)count$/;"    C    implementation:JKArray
-count    .\JSONKit.m    /^- (NSUInteger)count$/;"    C    implementation:JKDictionary

 

サクラは--fieldsオプションでいい感じのフォーマットを吐き出させてるわけか。

-xオプションでクロスリファレンスを吐かせてるわけか。

(追記)

つーことはただのタブ区切りだから、

sed –e ‘s/^[\+\i]//’ –e ‘/^!.*/d’ tags |cut –f 1 | uniq > foobar.kwd

的なワンライナーで、サクラ用の補完キーワードファイルも生成できるというわけですね。

20130303001219

ctagsはヘッダだけからでも抽出できるので、標準ライブラリのキーワードを抽出しておけば、さらにおいしくいただけそうですな。

ああでも、メソッドも抽出したくなってきた。cut2段でいけるかな。でもそれはまた今度。