本文整理汇总了C#中ScintillaNET.Scintilla.GetStyleAt方法的典型用法代码示例。如果您正苦于以下问题:C# Scintilla.GetStyleAt方法的具体用法?C# Scintilla.GetStyleAt怎么用?C# Scintilla.GetStyleAt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ScintillaNET.Scintilla
的用法示例。
在下文中一共展示了Scintilla.GetStyleAt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Style
public void Style(Scintilla scintilla, int startPos, int endPos)
{
// 改行コードをWindowsフォーマット(CR+LF)またはUnixフォーマット(LF)から
// Macフォーマット(CR)にしたときに発生する例外(IndexOutOfRangeException)を回避
startPos = startPos < 0 ? 0 : startPos;
endPos = endPos > scintilla.TextLength ? scintilla.TextLength : endPos;
int lineNumber = scintilla.LineFromPosition(startPos);
startPos = scintilla.Lines[lineNumber].Position;
char chBeforePrev = '\0';
char chPrev = '\0';
char ch = '\0';
char chNext = '\0';
char chAfterNext = '\0';
int length = 0;
ParseState state = ParseState.None;
switch (scintilla.GetStyleAt(startPos - 1)) {
case HspLexer.StylePreprocessor:
state = ParseState.AfterPreprocessor;
break;
case HspLexer.StyleString:
state = ParseState.String;
break;
case HspLexer.StyleComment:
state = ParseState.Comment;
break;
}
scintilla.StartStyling(startPos);
int currentPos = startPos;
int currentLine = lineNumber;
int currentLineStartPos = startPos;
int currentLineEndPos = scintilla.Lines[lineNumber].EndPosition;
while (currentPos < endPos) {
chBeforePrev = (char)scintilla.GetCharAt(currentPos - 2);
chPrev = (char)scintilla.GetCharAt(currentPos - 1);
ch = (char)scintilla.GetCharAt(currentPos);
chNext = (char)scintilla.GetCharAt(currentPos + 1);
chAfterNext = (char)scintilla.GetCharAt(currentPos + 2);
Process:
switch (state) {
case ParseState.None:
if (ch == '\"') {
// 文字列
scintilla.SetStyling(1, HspLexer.StyleStringLine);
state = ParseState.StringLine;
} else if (ch == '{' && chNext == '\"') {
// 複数行文字列
scintilla.SetStyling(2, HspLexer.StyleString);
state = ParseState.String;
++currentPos;
} else if (ch == '\'') {
// 文字
scintilla.SetStyling(1, HspLexer.StyleCharacter);
state = ParseState.Character;
} else if (ch == ';') {
// 単一行コメント
scintilla.SetStyling(1, HspLexer.StyleCommentLine);
state = ParseState.CommentLine;
} else if (ch == '/' && chNext == '/') {
// 単一行コメント
scintilla.SetStyling(2, HspLexer.StyleCommentLine);
state = ParseState.CommentLine;
++currentPos;
} else if (ch == '/' && chNext == '*') {
// 複数行コメント
scintilla.SetStyling(2, HspLexer.StyleComment);
state = ParseState.Comment;
++currentPos;
} else if (ch == '*' && (Char.IsLetter(chNext) || chNext == '_') &&
String.IsNullOrWhiteSpace(scintilla.GetTextRange(
currentLineStartPos, currentPos - currentLineStartPos))) {
// ラベル
scintilla.SetStyling(2, HspLexer.StyleLabel);
state = ParseState.Label;
++currentPos;
} else if (ch == '#' && length == 0 &&
String.IsNullOrWhiteSpace(scintilla.GetTextRange(
currentLineStartPos, currentPos - currentLineStartPos))) {
// プリプロセッサ
state = ParseState.Preprocessor;
goto Process;
} else if ((Char.IsLetter(ch) || ch == '_') && length == 0) {
// 識別子
state = ParseState.Identifier;
goto Process;
} else if (ch == ':') {
// 行区切り
currentLineStartPos = currentPos + 1;
scintilla.SetStyling(1, HspLexer.StyleDefault);
} else if (ch == '\0') {
// NULL文字の場合はすぐreturn
return;
} else {
scintilla.SetStyling(1, HspLexer.StyleDefault);
//.........这里部分代码省略.........