diff options
| -rw-r--r-- | doc/ScintillaHistory.html | 11 | ||||
| -rw-r--r-- | include/SciLexer.h | 1 | ||||
| -rw-r--r-- | include/Scintilla.iface | 1 | ||||
| -rw-r--r-- | lexers/LexCPP.cxx | 42 | 
4 files changed, 55 insertions, 0 deletions
| diff --git a/doc/ScintillaHistory.html b/doc/ScintillaHistory.html index 99bee8d89..866193753 100644 --- a/doc/ScintillaHistory.html +++ b/doc/ScintillaHistory.html @@ -459,6 +459,17 @@        </li>      </ul>      <h3> +       <a href="http://prdownloads.sourceforge.net/scintilla/scite342.zip?download">Release 3.4.2</a> +    </h3> +    <ul> +	<li> +	Released 1 April 2014. +	</li> +	<li> +	C++ lexer can highlight task marker keywords in comments as SCE_C_TASKMARKER. +	</li> +    <ul> +    <h3>         <a href="http://prdownloads.sourceforge.net/scintilla/scite341.zip?download">Release 3.4.1</a>      </h3>      <ul> diff --git a/include/SciLexer.h b/include/SciLexer.h index cb4079b8c..cd8b581aa 100644 --- a/include/SciLexer.h +++ b/include/SciLexer.h @@ -169,6 +169,7 @@  #define SCE_C_PREPROCESSORCOMMENT 23  #define SCE_C_PREPROCESSORCOMMENTDOC 24  #define SCE_C_USERLITERAL 25 +#define SCE_C_TASKMARKER 26  #define SCE_D_DEFAULT 0  #define SCE_D_COMMENT 1  #define SCE_D_COMMENTLINE 2 diff --git a/include/Scintilla.iface b/include/Scintilla.iface index 7040b63a9..02cb97193 100644 --- a/include/Scintilla.iface +++ b/include/Scintilla.iface @@ -2711,6 +2711,7 @@ val SCE_C_HASHQUOTEDSTRING=22  val SCE_C_PREPROCESSORCOMMENT=23  val SCE_C_PREPROCESSORCOMMENTDOC=24  val SCE_C_USERLITERAL=25 +val SCE_C_TASKMARKER=26  # Lexical states for SCLEX_D  lex D=SCLEX_D SCE_D_  val SCE_D_DEFAULT=0 diff --git a/lexers/LexCPP.cxx b/lexers/LexCPP.cxx index 76a47e058..a78e72e2b 100644 --- a/lexers/LexCPP.cxx +++ b/lexers/LexCPP.cxx @@ -83,6 +83,30 @@ static bool followsReturnKeyword(StyleContext &sc, LexAccessor &styler) {  	return !*s;  } +static void highlightTaskMarker(StyleContext &sc, LexAccessor &styler, +		int activity, WordList &markerList, bool caseSensitive){ +	if ((isoperator(sc.chPrev) || IsASpace(sc.chPrev)) && markerList.Length()) { +		char marker[50]; +		int currPos = (int) sc.currentPos; +		int i = 0; +		while (i < 50) { +			char ch = styler.SafeGetCharAt(currPos + i); +			if (IsASpace(ch) || isoperator(ch)) { +				break; +			} +			if (caseSensitive) +				marker[i] = ch; +			else +				marker[i] = tolower(ch); +			i++; +		} +		marker[i] = '\0'; +		if (markerList.InList(marker)) { +			sc.SetState(SCE_C_TASKMARKER|activity); +		} +	} +} +  static std::string GetRestOfLine(LexAccessor &styler, int start, bool allowSpace) {  	std::string restOfLine;  	int i =0; @@ -249,6 +273,7 @@ static const char *const cppWordLists[] = {              "Documentation comment keywords",              "Global classes and typedefs",              "Preprocessor definitions", +            "Task marker and error marker keywords",              0,  }; @@ -328,6 +353,7 @@ class LexerCPP : public ILexerWithSubStyles {  	WordList keywords3;  	WordList keywords4;  	WordList ppDefinitions; +	WordList markerList;  	std::map<std::string, std::string> preprocessorDefinitionsStart;  	OptionsCPP options;  	OptionSetCPP osCPP; @@ -452,6 +478,9 @@ int SCI_METHOD LexerCPP::WordListSet(int n, const char *wl) {  	case 4:  		wordListN = &ppDefinitions;  		break; +	case 5: +		wordListN = &markerList; +		break;  	}  	int firstModification = -1;  	if (wordListN) { @@ -511,6 +540,7 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  	int visibleChars = 0;  	bool lastWordWasUUID = false;  	int styleBeforeDCKeyword = SCE_C_DEFAULT; +	int styleBeforeTaskMarker = SCE_C_DEFAULT;  	bool continuationLine = false;  	bool isIncludePreprocessor = false;  	bool isStringInPreprocessor = false; @@ -725,6 +755,9 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  				if (sc.Match('*', '/')) {  					sc.Forward();  					sc.ForwardSetState(SCE_C_DEFAULT|activitySet); +				} else { +					styleBeforeTaskMarker = SCE_C_COMMENT; +					highlightTaskMarker(sc, styler, activitySet, markerList, caseSensitive);  				}  				break;  			case SCE_C_COMMENTDOC: @@ -742,6 +775,9 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  			case SCE_C_COMMENTLINE:  				if (sc.atLineStart && !continuationLine) {  					sc.SetState(SCE_C_DEFAULT|activitySet); +				} else { +					styleBeforeTaskMarker = SCE_C_COMMENTLINE; +					highlightTaskMarker(sc, styler, activitySet, markerList, caseSensitive);  				}  				break;  			case SCE_C_COMMENTLINEDOC: @@ -880,6 +916,12 @@ void SCI_METHOD LexerCPP::Lex(unsigned int startPos, int length, int initStyle,  				if (sc.atLineEnd || sc.ch == ')') {  					sc.SetState(SCE_C_DEFAULT|activitySet);  				} +				break; +			case SCE_C_TASKMARKER: +				if (isoperator(sc.ch) || IsASpace(sc.ch)) { +					sc.SetState(styleBeforeTaskMarker|activitySet); +					styleBeforeTaskMarker = SCE_C_DEFAULT; +				}  		}  		if (sc.atLineEnd && !atLineEndBeforeSwitch) { | 
