libag - 有名な The Silver Searcher ですが、ライブラリです
数週間前、友人が私に、テキスト ファイルやバイナリ ファイルの再帰正規表現検索のためのツールを知っているかと尋ねました。 Ag がすぐに思い浮かびましたが、残念ながら、ag(1) はライブラリではなくプログラムです。
不可能ではありませんが、Ag の出力を解析するのは少し面倒ですし、検索ごとに新しいプロセスを生成するのは面倒に思えます。 ripgrep(1) のような同様のツールは JSON 形式で出力できるため、確かに非常に簡単になりますが、ここではまだプロセスの生成と出力の解析について話しています。
こうしてLIBAGは誕生しました。 Libag を使用すると、ag 検索エンジン (およびその機能) を正しい方法で (またはそれに近い方法で) 使用できるようになります。
Libag は可能な限りシンプルにすることを目的としており、検索プロセスを 3 つの単純なステップに分割します。
すべての内部 ag 構造体を初期化します ( ag_init()
経由)
必要なだけ検索を実行します ( ag_search()
経由)。
リソースをクリーンアップします ( ag_finish()
経由)。
カスタム検索設定は、 ag_init_config()
およびag_set_config()
を介して行われます。結果は、ファイル、一致リスト (一致と一致に対応するファイル オフセットを含む)、およびフラグを含む struct ag_result* のリストです。
(完全な例は、examples/ にあります)
#include <libag.h>
...
struct ag_result * * results ;
size_t nresults ;
char * query = "foo" ;
char * paths [ 1 ] = { "." };
/* Initiate Ag library with default options. */
ag_init ();
/* Searches for foo in the current path. */
results = ag_search ( query , 1 , paths , & nresults );
if (! results ) {
printf ( "No result foundn" );
return ( 1 );
}
printf ( "%zu results found\n" , nresults );
/* Show them on the screen, if any. */
for ( size_t i = 0 ; i < nresults ; i ++ ) {
for ( size_t j = 0 ; j < results [ i ] -> nmatches ; j ++ ) {
printf ( "file: %s, match: %sn" ,
results [ i ] -> file , results [ i ] -> matches [ j ] -> match ,
}
}
/* Free all results. */
ag_free_all_results ( results , nresults );
/* Release Ag resources. */
ag_finish ();
...
Libag は、ag のすべての機能 (進行中の作業) (または、少なくともライブラリにとって意味のある機能) をサポートする予定です。さらに、 ag_start_workers()
およびag_stop_workers()
を介してワーカー スレッドを詳細に制御できます (詳細についてはドキュメントを参照してください)。
Libag には、他のプログラミング言語 (Python および Node.js) への (実験的な) バインディング サポートがあります。詳細および詳細なドキュメントについては、bindings/python および bindings/javascript を参照してください。
Libag には、ag: c99 コンパイラーとライブラリ: zlib、lzma、pcre と同じ依存関係が必要です。これらのライブラリは、1 つずつインストールすることも、パッケージ マネージャーによってインストールすることもできます。
Debian に似たディストリビューションの場合、次のようなものになります。
$ sudo apt install libpcre3-dev zlib1g-dev liblzma-dev
(または、ここでの Ag の推奨事項に従ってください)
依存関係が解決されたら、リポジトリのクローンを作成してビルドします。 Libag は Makefile と CMake をサポートしています。ニーズに最も適したものを選択してください。
$ git clone https://github.com/Theldus/libag.git
$ cd libag/
$ make -j4
# Optionally (if you want to install):
$ make install # (PREFIX and DESTDIR allowed here, defaults to /usr/local/)
$ mkdir build/ && cd build/
$ cmake .. -DCMAKE_BUILD_TYPE=Release
$ make -j4
# Optionally (if you want to install):
$ make install
利用可能な各ルーチンの詳細なドキュメントはマンページにあります。また、ソース コードには広範囲にコメントが付けられています (libag.h は必読です)。バインディングと例に関するドキュメントはここにあります。
完全なサンプルは、examples/ フォルダーからも入手でき、便宜のためにライブラリーと一緒に自動的にビルドされます ;-)。
Libag は常にコミュニティにオープンであり、問題、ドキュメント、テスト、新機能、バグ修正、タイプミスなどの貢献を喜んで受け入れます。ようこそ。
Libag は、Apache v2 ライセンスに基づいてライセンスされています。