忍者ブログ
natsuの秘密基地です
はまり
はまり一件ごとのお話の流れです
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
プロフィール
HN:
natsu
性別:
男性
趣味:
酒など
自己紹介:
ここに書かれていることはフィクションです。
ブログ内検索
アクセス解析
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

前のはメイン文にずらずら書いたけど、クラスでまとめたら、
より、それっぽくなるような気がする。
なので、それっぽくする。
 
一つ、ソースファイルを作る。
二つ、クラスを作る。
三つ、オブジェクトを使うための変数を作る。
 
解りにくいけど、個数の話ね。
 
 
まずOnigiri.mを作る。
 
そこに、開始点と終了点を保持するデータ型と、
検索処理を行うクラスを作る。
 
検索処理に渡すパラメータは、
検索対象の文字列。
パターン。
結果の入るMutableArray。
Arrayは開始点と終了点を保持するデータ型が列をなす。
 
 
検索処理クラスからインスタンスを初めて作ったとき、
ライブラリをロードして、
ライブラリのインターフェイスのハンドルをもらっておく。
 
で、その検索処理クラスのインスタンスを使えば
文字列が検索できる。
 
インスタンスの最後の一つを解放したとき、
ライブラリが解放される。
 
って感じでよいんじゃないでしょうか。
 
 
実はdlopenやdlcloseは自前でカウンタを持っていて、
オープンするごとに+1、クローズするごとに-1、
しているらしい。
 
無理に自前で参照カウンタを持つ必要はないとおもう。
私は持ってるけど。

 
アプリ開始時に初期化、終了時に解放。
でももちろんいいし、
こっちの方が効率がいいと思う。
 
 
 
 
 
 
例のごとく、解凍されたディレクトリに、
libonig.2.dylib
libonig.a
oniguruma.h
を仕込んでみてください。
 
あと、結果だけども、
鬼車的にはendはマッチした文字列の
終端の次のindexをさすみたい。
 
 
 
私のonigiri::searchは、
文字列中で検索条件に引っかかったものは、
すべて洗い出したいんだけども、
正規表現によっては今の作りじゃそれができない。
ってこのへんはよくわかんないんだけど。
 
たとえば、
"zzzaffbdailfbafb"
"a.*?b"
だと
三つ引っかかりそうな気がするけど、
一つしか引っかからない。
 
 
ちなみに私は、do whileかなんかで回しゃいいんしょ。
ぐらいにしか思ってない。
 
 
ほかにもちょっと改造が必要。
日本語対応もしたい。
あと、シンタックスはrubyじゃなくてperlで。
 
 
んじゃあ、そんな感じに直しますか。
 
PR
OgreKitっていうものがあるみたいですね。
鬼車をラッピングしてMac向けの機能を追加しているようだ。


私はよく見ていないからわからないけど、
だいたいこういうものは一般的にいって、使いやすいんだと思う。
 
だから、今作っているアプリで正規表現検索を使いたいなら、
これを使えばいいんだとおもった。
 
 
 
だが、しかし、それより私が興味あるのはdlopen。
 
 
ウィンドウズ環境で、
C言語の寄せ集めでDLLを作ったとして、
DLLをロードしてその関数へのポインタを取得するAPIがあったような。
そんな気がするんです。
 
覚えてないですけど。
 
こんなんでオブジェクトを作成して関数で返したり、
できたんだかできなかったんだか覚えてないですけど。
 
 
インポートライブラリ?なんすかそれ。
 
 
っていう勢いなわけです。
 
 
 
ライブラリの中に関数やら構造体のインスタンスやらの、
シンボルが潜んでいるんでそれをロードして使えばいいわけです。
こんなかんじ?
 
 
 
 
解凍されたディレクトリに、
libonig.2.dylib
libonig.a
oniguruma.h
を仕込んでみてください。
ビルド完了時のシェルがちゃんと動けばいいんだけど。
 
パッケージの中にFrameworksディレクトリを作って、
ライブラリを送り込みたかったんで。
 
 
Xcodeでターゲットでファイルをコピー、かなんかでやりたかったけど、
プロジェクトにライブラリを含めなきゃならないみたいなので。
 
libonig.aは多分必要ないんです。
ただ、なんやかんややってるときに、
フレームワークとしてlibonig.2.dylibをプロジェクトに含めて、
ターゲット、ファイルをコピー、の項目にこれを入れておいたら、
libonig.aも勝手にコピーされてたので。
 
でも、自分が使う限り、libonig.aはいらなかった。動いたし。
 
あと、メモリーリークががんがんにおこるのも気にしないでね。
そこはまあ、自分的にどうでもよかったというか。
 
 
 
自分に対して2行ぐらいだから書けといいたい。
 
 
 
んで、ヘッダで定義されているdefineとかが使えないんですが、
まあ、適宜に宣言するということで。
 
注意したいのはOnigurumaのサンプルと違って、
OnigDefaultSyntaxではなくOnigSyntaxRuby
を使っていること。
 
OnigSyntaxRubyのシンボルをロードすると、
構造体インスタンスのハンドルがかえるんですけど、
OnigDefaultSyntaxのシンボルをロードすると、
構造体インスタンスのポインタのハンドルがかえる。
 
型がそこはかとなく違ってしまうわけなんですねぇ。
なので、OnigDefaultSyntaxを使いたい場合は、
 
void **p_OnigDefaultSyntax    = dlsym(p, "OnigDefaultSyntax");
 
r = (*p_onig_new)(&reg, pattern, pattern + strlen((char* )pattern),
ONIG_OPTION_DEFAULT, p_OnigEncodingASCII, *p_OnigDefaultSyntax, &einfo);
 
としなきゃなんないだろうなと、思ったり思わなかったり。
OnigSyntaxRubyでいいんじゃないでしょうか。
結局OnigDefaultSyntaxは&OnigSyntaxRubyだし。
 
 
そうね。私だったら、
OnigSyntaxPerlですわ。
 


うん。もちろん。ここではまり倒したよ。

 



 
で、実は正規表現について詳しくない。ってのは内緒ね。
 
 
鬼車をとってきて、
がらがら回してみましょうということで。
 
解凍したらいつものとおりやっていく。
 
./configure
make
 
.libsにライブラリが出来る。
 
sudo make install
 
で、インストールされる。
Xcodeからもフレームワークとして追加できるようになる。
 
フレームワークとして追加して、
main.mに鬼車のサイトからとってきたサンプルを
べったり貼付ける。

ステップ実行。
ぽんぽん。
 
 
あらー。嘘みたい。うごくうごく。
 
 
うまくいったと思ったんですが、
リリースビルドがうまくいかない。
リンカがシンボルを見つけられてないような感じ。
 
で、デバッグの方もコンソールを見ると、
make installでインストールされた先のライブラリを見てる。
で、バンドルの中のFrameworksに入るように工夫したり、
いろいろやってみたけど、どうもうまく動く気配はない。
 

まあ、そうでしょ。
それ自体、XcodeやMacを意識してないだろうから。
動いたときたまげたもん。


 

アプリケーションバンドルの中に動的リンクなライブラリがあって、
それを実行時、プログラムに使ってもらえるのが理想。
 


 
そう。生じゃ食べられないときは調理すればいいんです。



 
とりあえず、
sudo make uninstall。
 
続く。
 


Copyright (C) 2010 NEST,
All right Resieved.*Powered by ニンジャブログ *Designed by にこるん  / 忍者ブログ / [PR]