ScintillaNET:如何获取点击单词的周围符号



我在VisualStudio/C#中使用ScintillaNET。当用户点击文本中的特定单词(LMB或RMB(时,我需要获得周围的符号。例如:

This is <a test> to show my <problem>

在这种情况下,如果用户点击单词";测试";,我想检索"0"one_answers"0"之间的整个块<quot;以及">";,所以我需要得到<a test>。如果用户点击";"问题";我需要<problem>

我知道我可以得到插入符号的位置,然后";导航";(对于循环(在位置(向左(之前,以找到"循环"的第一个出现<";,那么";导航";在插入符号位置之后(向右(找到第一个出现的">";。

但是,还有其他更好的方法来实现这一点吗?闪烁体提供了一些找到它们的方法吗?

谢谢你的帮助!

我用这段代码找到了一个变通方法,但坦率地说,我希望找到一个更好的解决方案:

const char CHAR_START_BLOCK = '[';
const char CHAR_END_BLOCK = ']';
if(e.Button == MouseButtons.Right) {
int leftPos = -1;
int rightPos = -1;
//
// Search for CHAR_START_BLOCK
//
for(int i = scintilla1.CurrentPosition; i >= 1; i--) {
if(scintilla1.GetCharAt(i) == CHAR_START_BLOCK) {
leftPos = i;
break;
}
if(scintilla1.GetCharAt(i) == 'r') {
break;
}

if( (scintilla1.GetCharAt(i) == CHAR_END_BLOCK) && (i != scintilla1.CurrentPosition)) {
break;
}
}
if(leftPos != -1) {
//
// Search for CHAR_END_BLOCK
//
string currentLine = scintilla1.Lines[scintilla1.CurrentLine].Text;
for(int i = scintilla1.CurrentPosition; i <= (scintilla1.CurrentPosition + currentLine.len()); i++) {
if(scintilla1.GetCharAt(i) == CHAR_END_BLOCK) {
rightPos = i;
break;
}
}
LogManager.addLog("LEFT/RIGHT: " + scintilla1.GetTextRange(leftPos, (rightPos + 1 - leftPos)));
}
}

最新更新