我在C#中使用自己的基本语法高亮编辑器。我已经完成了关键字,功能等的自动着色。我不需要任何其他花哨的东西,如自动代码缩进。
但是,我希望有一个代码minify / maxify按钮。没有什么花哨。我只是希望它能够在任何左括号之前自动设置换行符,并在其后面使用制表符或更改SelectionIndent Property自动设置换行符。
这样的事情:
test { test { test } test }
变为:
test
{
test
{
test
}
}
当然,缩小按钮应该完全相反,将所有内容放在一行。
我已尝试使用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 :(得分:2)
我的想法:你需要解析文本,计算{和}的当前嵌套级别。
对于找到的每个{或},根据当前嵌套级别确定正确的空格 - 字符串 - 前(前缀)和空格 - 字符串 - 后(后缀)(例如,仅为\ n {\ n为第一级) )。
查看是否已存在所需的前缀。如果没有,删除任何现有的空格,然后添加前缀。对后缀执行相同的操作。