鬼車

Joni

JoniのApplyCaseFold.javaを眺めてみると、5.9.1で追加した CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASSがもう入っている。これは、/(?i:[^a-g])/と書いたときに ignore caseが否定より外側にあるのに先に適用される現状の仕様に疑問を持ったので、冗談半…

mbc_enc_len() (5)

ソースコードは読んだつもりですが、 チェックする関数を作る方法は分かりませんでした。方法は、xxx_mbc_enc_len()に文字列の終了位置を引数に追加した形の関数を新しく作ります。その中で参照するバイトの位置が文字列の範囲に収まっているか、文字の終了…

mbc_enc_len() (4)

鬼車が扱うことのできるエンコーディングについて 知っているのは結局は鬼車だけなので、少なくとも 鬼車の提供する関数を使って「不完全なバイトを含まない」 ことをチェックできないと安心して使えません。ソースを見ればわかります。チェックする関数を作…

結合文字

将来にわたって鬼車がUnicode結合文字を1文字として 扱うことができない(するつもりがない)というのは、 いちユーザとして悲しい宣言です。そのような宣言をした記憶はまったくありませんが? 反対に、サポートすると宣言した覚えもありません。 Unicode結合…

mbc_enc_len() (3)

akr> そうすると、Unicode の結合文字をひとつの文字として 扱うのは難しそうですねぇ。必要なら、鬼車に手を入れてもらうしかありません。 終了位置もチェックする関数をOnigEncodingTypeに追加して、アプリケーションからはmbc_enc_len()の代わりに、そち…

mbc_enc_len() (2)

「別の話」と言われればそうですが、鬼車に渡される文字列は、一文字を完成していない不完全なバイト列は含まないことを条件にしているので、バイト列の終了位置をチェックしなくてよいという意味では共通の話です。 不完全なバイト列を渡した場合の動作は保…

mbc_enc_len()

mbc_enc_len(UChar* p)が、文字列の終了位置を引数で渡していないので、文字のバイト列が途中で切れているときに問題を起こすのではないか、という件について説明しておきます。 終了位置をチェックしていないのは意図的です。かなり前にruby-devで、utf-8の…

リリース

4.7.1をリリース。 以前指摘された、ONIG_OPTION_SINGLELINEでの仕様を修正。

Perl 5.9.5との機能比較(2)

Perl 5.9.5に合わせるのは、ONIG_SYNTAX_PERLだけを考えていました。それなら、ONIG_SYNTAX_RUBYで同じ記号を別の意味で使っていても関係ないです。他の案としては、ONIG_SYNTAX_RUBYを捨てて、ONIG_SYNTAX_ONIGURUMAというのを新しく作った上で、表記をなる…

Perl 5.9.5との機能比較

検索で見つけたページ。 Perl 5.9.5 で拡張された正規表現の概要 および、その Oniguruma との比較 まだきちんとチェックしてはいないが、Perlとの違いが多くなってきている。6.0ぐらいのタイミングで、少しは近づけるようにしたい。 鬼車の番号指定後方参照…

ベンチマーク

5.9.0とPCRE 7.2の速度比較をしてみた。(文字コードはUTF-8) デフォルトの状態では、鬼車のほうが2.26倍速かった。 USE_COMBINATION_EXPLOSION_CHECKとUSE_CRNL_AS_LINE_TERMINATORを有効にした状態では、鬼車のほうが2.18倍速かった。 4.xの頃にUSE_COMBINA…

リリース

5.9.0をリリース。 かなり変更していて、中途半端な状態。この段階でリリースしたくはなかったが、幾つかバグも出ているので仕方ない。使う側には関係ないし、問題ないと思うが。

COW page

鬼車に対して、パッチ付きのメールが来た。 > size .libs/libonig.so text data bss dec hex filename 273707 5284 680 279671 44477 .libs/libonig.so > Because the data section is larger than 4096 bytes, it means that every process that is linked …

backslash

なるほど。確かに正規表現パターンの最後がbackslashで終わるとき、それがエスケープの意味である筈はないから、backslash文字と解釈するという方法も考えられる。 Regexp.new("aaa\\") # これをエラーにしない aaa\でも、そういう特別ルールを作ると、パタ…

リリース

2.5.9をリリース。 2.xは2006年末で保守終了していた。しかしそれを承知でパッチを送ってきた人が居たので、それを取り込んで2.5.9としてリリースした。2.5.9以降は、その人に保守をお願いすることにした。 変更内容は、ruby1.8.6対応。

valgrind

5.8.0に酷いバグが二個見つかった。その内一個は、5.0のときから存在していたような気がする。テストは通っていたので、長い間見逃していた。 先週、ある構造体定義のメンバの位置を変更しただけで落ちる、という現象が見つかって、今日まで原因が発見できな…

リリース

4.7.0をリリース。 64bit環境で落ちるという指摘を受けたので修正。 5.xも同様だが、いつ頃出すか未定。

Mona OS

higepon氏から、鬼車がMona OSで動いたという報告を受けた。 ソースは全く修正なしで、alloca()を足すだけで動いたそうだ。 嬉しい。

リリース

5.8.0をリリース。 \r\nの正式対応(regenc.hの中のUSE_CRNL_AS_LINE_TERMINATORを有効にする必要がある)。 \r\n以外には、あまり変更はない。

\r\nの対応

完了した。来週にはリリースする。 どのようなテストを書けばよいのかよく分からなかったので、三十個しかテストパターンを書いていない。それでも一個バグを見つけることが出来た。

\r\nの対応

昨年末に約束した、改行が\r\nの場合をサポートする作業をこれから始める。以前から実装は入っているのだが、テストプログラムを書くのが面倒で、今までやる気が起きなかった。

5.7.0がマージされた件について

このまま放置すると、私のほうが方針を変えたと思われるので事実を書いておきます。 私の方針は最初から全く変わっていない この件について、関係者からメールが来たことは一度もない 従って、話し合いをしたこともない ある日突然、5.7.0がRubyにコミットさ…

partial matching (3)

partial matchingをパターン全体のオプションのつもりで考えていたが、パターンの一部分に対する指定にすることも考えられる。 /abc(?P:def)gh/例えばこのように書くと、"def"の途中か前後の位置で文字列が終端している場合にもマッチングが成功する。"ab"な…

partial matching (2)

最初は、マッチング処理の途中で文字列が終端に達した場合をチェックする方法を考えていたが、正規表現パターンを書き換える方法も検討してみた。後者のほうが、partial matchingでない場合の速度に影響を与えないので良いと思う。 /ab/ ==> /a(?:b|\z)|\z/…

meDB

久しぶりに、鬼車を使っているというメールを貰った。 meDB (テキストデータベースツール) http://medb.enhiro.com/

範囲指定

onig_search()では対象となる文字列に関して、str, end, start, rangeの四個の引数を渡すようになっている。(str, end)が文字列全体の範囲で、(start, range)が検索範囲。検索範囲と言っても、マッチング開始位置がその範囲内にあれば良いという意味で、マッ…

リリース

5.6.1と4.6.2をリリース。 5.xには、5.0.0の時点からずっとバグがあることが見つかったので、その修正。但し、ONIG_ESCAPE_UCHAR_COLLISIONを使用して、oniguruma.hの中のUChar定義を無効にしているアプリケーションにしか影響はない。

ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP

名前付きグループで、今まで使用していた表記<name>に対しては、ONIG_SYN_OP2_QMARK_LT_NAMED_GROUPで文法要素としての有効/無効を指定できるようになっていたが、新しく追加した表記'name'に対しては、対応するものを用意しなかった。 これは忘れていたわけではな</name>…

リリース

5.6.0をリリース 名前付きグループの表記で、名前をシングルクォートで囲む方法を追加。 (?'name'...) \k'name' \g'name'

Oniguruma for Ruby

Oniguruma for Ruby 鬼車を利用する拡張ライブラリ。 もしかすると、鬼車2.xの保守を止めたことが関係しているのかも。 鬼車がUTF-16LEをサポートした時点で、Ruby1.8/1.6に組み込むにはRuby本体にかなり変更が必要になった。鬼車が2.xと3.x以降に分裂したの…