Google Chart を使った数式ツールを作ってみた(2)

執筆日時:

f:id:daruyanagi:20130115205240p:plain

Google Chart を使った数式ツールを作ってみた - だるろぐ の続き。さすがにもう少し完成度を上げようと思って、

なんかを、ちびちびと実装。そのうち欲が出てきて、[Tab]キーでブラケット移動なんかもしたいなぁ、と思い始めた。で、とりあえず考えたのかこんなの。

private void FormulaText_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Tab)
{
e.Handled = true; // 握りつぶす!

var text = FormulaText.Text; int start = FormulaText.SelectionStart; int end = -1; FormulaText.SelectionLength = 0;

if ((Keyboard.Modifiers & ModifierKeys.Shift) != ModifierKeys.Shift) { start = text.IndexOf('{', start); if (start < 0) return; FormulaText.SelectionStart = start + 1;

end = text.IndexOf('}', FormulaText.SelectionStart); if (end < 0) return; FormulaText.SelectionLength = end - start - 1; } else // Shift + Tab キー {

} } }

f:id:daruyanagi:20130115205746p:plain

適当に書いたのだけど、これでも案外使える感じになった。ただ、

f:id:daruyanagi:20130115205946p:plain

ネスト(入れ子)が認識できない。あと、[Shift]+[Tab]キーで逆向きに移動したいけれど、これがなかなかめんどくさい。{} だけじゃなくて () にも対応させたい、なんて考えだすと破たんするのが目に見えてるし。

というわけで、解決策は正規表現か、構文解析かって感じなんだけど。正規表現も大変だし、しかも限界が見えているので、ここは頑張って簡単な構文解析をするべきかと思っている。