Google Chart を使った数式ツールを作ってみた(2)
執筆日時:
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 キー {
} } }
適当に書いたのだけど、これでも案外使える感じになった。ただ、
ネスト(入れ子)が認識できない。あと、[Shift]+[Tab]キーで逆向きに移動したいけれど、これがなかなかめんどくさい。{} だけじゃなくて () にも対応させたい、なんて考えだすと破たんするのが目に見えてるし。
というわけで、解決策は正規表現か、構文解析かって感じなんだけど。正規表現も大変だし、しかも限界が見えているので、ここは頑張って簡単な構文解析をするべきかと思っている。