Ich arbeite mit dieser Code . Sie dient der Syntaxhervorhebung in einer RichTextBox
. Ich suche speziell nach der Funktion ProcessLine()
y OnTextChanged()
, die ich entsprechend geändert habe:
protected override void OnTextChanged(EventArgs e)
{
// Calculate stuff here.
m_nContentLength = this.TextLength;
int nCurrentSelectionStart = SelectionStart;
int nCurrentSelectionLength = SelectionLength;
m_bPaint = false;
// Find the start of the current line.
m_nLineStart = nCurrentSelectionStart;
while ((m_nLineStart > 0) && (Text[m_nLineStart - 1] != '\n'))
m_nLineStart--;
// Find the end of the current line.
m_nLineEnd = nCurrentSelectionStart;
while ((m_nLineEnd < Text.Length) && (Text[m_nLineEnd] != '\n'))
m_nLineEnd++;
// Calculate the length of the line.
m_nLineLength = m_nLineEnd - m_nLineStart;
// Get the current line.
m_strLine = Text.Substring(m_nLineStart, m_nLineLength);
// Process this line.
ProcessLine();
m_bPaint = true;
}
// Process a line.
private void ProcessLine()
{
// Save the position and make the whole line black
int nPosition = SelectionStart;
SelectionStart = m_nLineStart;
SelectionLength = m_nLineLength;
SelectionColor = Color.Black;
/*// Process the keywords
ProcessRegex(m_strKeywords, Settings.KeywordColor);
// Process numbers
if(Settings.EnableIntegers)
ProcessRegex("\\b(?:[0-9]*\\.)?[0-9]+\\b", Settings.IntegerColor);
// Process strings
if(Settings.EnableStrings)
ProcessRegex("\"[^\"\\\\\\r\\n]*(?:\\\\.[^\"\\\\\\r\\n]*)*\"", Settings.StringColor);
// Process comments
if(Settings.EnableComments && !string.IsNullOrEmpty(Settings.Comment))
ProcessRegex(Settings.Comment + ".*$", Settings.CommentColor);*/
SelectionStart = nPosition;
SelectionLength = 0;
SelectionColor = Color.Red;
m_nCurSelection = nPosition;
}
-
Meine erste Frage ist, wenn ich in die
ProcessLine()
enOnTextChanged()
habe ich immer einen Zeilenumbruch am Ende vonm_strLine
? Wird der kleinste Wert oderm_strLine
sein " \n " und das größte "any#ofchars+ \n "? -
Und nur damit ich das richtig verstehe,
SelectionStart
ist die Position meines Cursors, wennSelectionLength
Null ist, und wennSelectionLength
größer als Null ist, befindet sich mein Cursor beiSelectStart+SelectionLength
? -
Ich versuche, diesen Code so zu ändern, dass er eine ganze Reihe verschiedener Syntaxausdrücke einfärbt, und ich habe vor, für jede Zeile ein Zeichen nach dem anderen zu verwenden. Wie könnte dies fair, wenn Einfügen oder Laden einer Datei von 20k+ Zeilen?