2017-06-04 1 views
1

私はC#の独自の構文ハイライトエディタを開発中です。私はすでにキーワード、関数などの自動色付けを完了しました。私は、自動コードの字下げのような他の派手なものは必要ありません。C#のRichTextEditorのコードインデント。

ただし、コードの縮小/最大化ボタンが必要です。何もない。私はそれを自動的に改行を設定する前に任意の開きかっことその後ろにタブ文字またはSelectionIndent Propertyを変更します。

したがって、このような何か:

test { test { test } test } 

は次のようになります。

test 
{ 
    test 
    { 
     test 
    } 
} 

そしてもちろんの縮小化ボタンが1本のライン上のすべてを入れて、正反対のことをする必要があります。

私は既にRegex.Replace Methodでの作業を試みました。私はそれをうまく動作させることはできませんでしたが、そのアプローチについて考えると、開閉括弧が混ざり合うと問題が発生します。とにかく、これは私があきらめたし、いくつかの助けをあなたたちに依頼することを決めたそれまでは持っていたものされています。もちろん、そのソリューションは間違ったアプローチである

string tabs = ""; 

private void btnMax_Click(object sender, EventArgs e) 
{ 
    var count = codeRichTextBox.Text.Count(x => x == '{'); 
    for(int i=1; i<= count; i++) 
    { 
     // The idea was to add \t to tabs here on each iteration 
    } 
    string pattern = "{"; 
    string replacement = "\n{\n\t"; 
    Regex rgx = new Regex(pattern); 
    string result = rgx.Replace(codeRichTextBox.Text, replacement); 

    codeRichTextBox.Text = result; 
} 

、仕事に行くのではありません。だから代わりに私は何をすべきですか?

編集:いいですが、文字列の一部に既にコードインデントがあることを考慮する必要はありません。 maxifyボタンは、単一の行にある文字列でのみ動作する必要があります。

+0

どのようなアプローチをとっても、文字列やコメントの内側にある角かっこを無視できるほどスマートにしてください。 – RJM

+0

@RJM通常、私はあなたに同意するでしょうが、これはMinecraftのコマンドブロックのエディタになるので、私は100%確実ではありません。しかし、ヒントをありがとう – icecub

答えて

2

私の考え:{と}の現在の入れ子レベルを数えて、テキストを解析する必要があります。

現在のネストレベルに基づいて適切な空白文字列の前(接頭辞)と空白文字列後(接尾辞)を決定します(たとえば、最初の\ n {\ nレベル)。

希望するプレフィックスが既に存在するかどうかを確認してください。存在しない場合は、既存の空白を削除してから接頭辞を追加します。接尾辞も同じです。

+0

興味深い考えが見えます!私はそれで何かに取り組んでいます。あなたに知らせてくれるでしょう:) – icecub

+0

あなたのアイデアを思い描くのに数時間かかりましたが、完璧に動作しています!正しい方向へのポイントをありがとう! – icecub

関連する問題