« マッチ箱 | トップページ | あけましておめでとうございます »

2008年12月25日 (木)

Zaurusでエディタを作ろう~ 7

第7回。画面表示その他3(クォートされた文字列、行コメント)

クォート文字で囲まれた行コメント開始文字も正常に再現される(行コメントとして認識されない)ことを考慮に入れたかったので、システムとしてクォート文字列に対応させることにします。

ZEditorでは自分はクォート文字列を正規表現で実現させてたのですが、QRegExpが貧弱なため満足のいくものではありませんでした。じゃぁ鬼車ならいいのかって言うとそういうことではなくて、速度優先させるならやはり専用に実装したほうがいいはずです。

面倒なのは上に書いた様に、それぞれの状態が他方の効果に影響を与える可能性があるという点です。またクォート文字もシングルクォートとダブルクォートと2種類あり、行コメントと今回はまだ実装していないブロックコメント開始、終了を含めると、5種類の文字列の状態をチェックする必要があります。あ、行コメント2個設定出来るようにしてあるから6種類か。

シングル、ダブルの各クォート、行コメント開始x2、ブロックコメント開始、終了と1行の文字列に対して6つ検索して、一番先頭に近い物から有効化させるというやり方が一番単純なのですが、ここでまた問題になるのがブロックコメントは複数行にまたがるって事です。で、いっそのことブロックコメントは別処理にする事にして解説も次回以降にまわすのはいいのですが、クォート文字列も言語によっては複数行にまたがる場合があるってのも問題です。
が、クォート文字列が複数行にまたがるコーディングって美しくないと思いませんか? …そんな身勝手な理由でクォート文字列の複数行対応も無かったことにしちゃいます。

…と、ここまで割り切れば結構単純になってきました。

Memo_2

1行に対して…
・行コメント開始文字が検出された場合は、以降コメントとしてリストに登録。次の行へ
・クォート文字が最初に検出された場合は、同じクォート文字が現れるまで探す。あったとしてもエスケープされてる場合(閉じクォート直前にいくつエスケープ文字が連続してるか数え、奇数ならエスケープ。)は次を探す。
・クォート文字が対で見つかったらリストに登録。以降を行コメント開始文字も含めて再検索。対で見つからなかったら最初のクォート文字の次の文字から行コメント開始文字も含めて再検索。
#図だとエスケープされたクォートしか見つからなかった時の処理がアレですが、そこは脳内補間してください。

流れ的にはこんな感じ。逆に変なこだわりとして、やりたくなかったのがクォート開始を見つけた時点でその後を文字列として色を着けちゃう事。
対を見つけて初めて有効としたかったわけです。まぁ、気にしない人にとってはどっちでもいい仕様なので無駄な処理だったりもしたりしますが、妥協ばかりじゃ作ってて楽しくないし、出来た物に対しても愛着湧けないんで拘りもそれなりに必要でしょう。
さらに、自分はこっちの方がコーディングしてて"気持ちいい"んですよ、動き的に。
ブロックコメントではは妥協しちゃうかもしれないですがw

あ、リストってのは第3回で解説したColorSyntaxListの事です。paintCell()内でコイツに従って強調文字列として描画するので。

…な~んて、さらっと分かってるように書いて来ますが、本当にこの方法で正しいのかは自分でもわかりませんw
まぁ、動いてるんでOKと言えばOKなんですが、もっと他にいいロジックが在ったりするかもしれませんし、無いかもしれません。
実際、このロジックに固まるまで4、5回以上ロジックとか構造体諸々を変更してたりしますし、ブロックコメント処理でもコレ以上に試行錯誤してるので、ソレにあわせて細かい調整とかしてるのもあわせると、相当仕様変更(?)してます。締め切りがある仕事じゃ絶対出来ない芸当ですw 要するに手探り状態ってわけですが。
さらに、ここまでやってもまたなんか不具合出てくるかもしれないし、違う機能が欲しくなった時に相当書き換えなきゃいけなくなるかもしれない…
まぁ、自分が想定したロジックで綺麗にコーディング出来て、納得できる速度で動いて、それが正常な結果を返してくれれば(それが一番重要だけど)自分的には満足感一杯です(^-^
趣味プロなんてそんなもんです。
っと、ちょっと脱線。結局言いたいのは「参考にするのはいいけど、エディタコーディングの王道とは違うかもしれないし間違ってるかもしれないから鵜呑みしないでね☆」って事です。つまり責任放棄

|

« マッチ箱 | トップページ | あけましておめでとうございます »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Zaurusでエディタを作ろう~ 7:

« マッチ箱 | トップページ | あけましておめでとうございます »