[svn] r6562: vs-plugin/trunk/Nemerle.VsIntegration: NemerleLanguage.cs NemerleScanner.cs

NoiseEHC svnadmin at nemerle.org
Sun Aug 20 16:53:07 CEST 2006


Log:
Updated NemerleScanner + operator coloring.

Author: NoiseEHC
Date: Sun Aug 20 16:53:06 2006
New Revision: 6562

Modified:
   vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs
   vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs

Modified: vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs	(original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/NemerleLanguage.cs	Sun Aug 20 16:53:06 2006
@@ -56,9 +56,10 @@
 			new NemerleColorableItem("Keyword", COLORINDEX.CI_BLUE, COLORINDEX.CI_USERTEXT_BK),
 			new NemerleColorableItem("Comment", COLORINDEX.CI_DARKGREEN, COLORINDEX.CI_USERTEXT_BK),
 			new NemerleColorableItem("Identifier", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK),
-			new NemerleColorableItem("String", COLORINDEX.CI_MAROON, COLORINDEX.CI_USERTEXT_BK),
-			new NemerleColorableItem("Number", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK),
-      new NemerleColorableItem("Text", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK)
+            new NemerleColorableItem("String", COLORINDEX.CI_DARKBLUE, COLORINDEX.CI_USERTEXT_BK),
+            new NemerleColorableItem("Number", COLORINDEX.CI_DARKBLUE, COLORINDEX.CI_USERTEXT_BK),
+            new NemerleColorableItem("Text", COLORINDEX.CI_SYSPLAINTEXT_FG, COLORINDEX.CI_USERTEXT_BK),
+            new NemerleColorableItem("Operator", COLORINDEX.CI_RED, COLORINDEX.CI_USERTEXT_BK)
     };
 
 		public override void Dispose()

Modified: vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs
==============================================================================
--- vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs	(original)
+++ vs-plugin/trunk/Nemerle.VsIntegration/NemerleScanner.cs	Sun Aug 20 16:53:06 2006
@@ -1,62 +1,56 @@
-/***************************************************************************
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-This code is licensed under the Visual Studio SDK license terms.
-THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
-ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
-IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
-PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
-
-***************************************************************************/
-
 using Microsoft.VisualStudio.Package;
 using Nemerle.Compiler;
-using Nemerle.Completion2;
 
 namespace Microsoft.Samples.VisualStudio.NemerleLanguageService
 {
-	public class NemerleScanner : IScanner
-	{
-		public NemerleScanner()
+	class NemerleScanner : IScanner
 		{
-			LexerHack lexerHack = new LexerHack();
-			ManagerClass manager = new ManagerClass(new CompilationOptions());
-			_lexer = lexerHack.lexer;
-		}
+		static LexerHack _Root = new LexerHack();
 
-		LexerColorizer _lexer;
+		public NemerleScanner() {
+			lexer = _Root.lexer;
+		}
 
-		#region IScanner Members
+		LexerColorizer lexer;
 
-		public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, 
-			ref int state)
+		enum TC
 		{
-			LexerColorizer.SyntaxToken tok = _lexer.GetSyntaxToken(ref state);
+			Text = 0,
+			Keyword = 1,
+			Comment = 2,
+			Identifier = 3,
+			String = 4,
+			Number = 5,
+			//Text = 6,
+			Operator = 7,
+		}
+
+		// Its calling depends on IVsColorizer.GetStateMaintenanceFlag, which defaults to true.
+		public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state) {
+			LexerColorizer.SyntaxToken tok = lexer.GetSyntaxToken(ref state);
 
 			// TokenInfo is only read in *.LanguageService.dll
 			tokenInfo.Trigger = TokenTriggers.None;
-			switch (tok.Token)
-			{
+			switch(tok.Token) {
 				case SyntaxType.EndOfFile:
 					return false;
 
 				case SyntaxType.Keyword:
-					tokenInfo.Color = TokenColor.Keyword;
+					tokenInfo.Color = (TokenColor)TC.Keyword;
 					tokenInfo.Type = TokenType.Keyword;
 					break;
 
 				case SyntaxType.Identifier:
-					tokenInfo.Color = TokenColor.Identifier;
+					tokenInfo.Color = (TokenColor)TC.Identifier;
 					tokenInfo.Type = TokenType.Identifier;
 					break;
 
 				case SyntaxType.OperatorDot:
 				case SyntaxType.OperatorBrace:
 				case SyntaxType.Operator:
-					tokenInfo.Color = TokenColor.Keyword;
+					tokenInfo.Color = (TokenColor)TC.Operator;
 					tokenInfo.Type = TokenType.Operator;
-					switch (tok.Token)
-					{
+					switch(tok.Token) {
 						case SyntaxType.OperatorBrace:
 							tokenInfo.Trigger = TokenTriggers.MatchBraces;
 							break;
@@ -69,30 +63,30 @@
 					break;
 
 				case SyntaxType.Comment:
-					tokenInfo.Color = TokenColor.Comment;
-					if (state == 0)
+					tokenInfo.Color = (TokenColor)TC.Comment;
+					if(state == 0)
 						tokenInfo.Type = TokenType.LineComment;
 					else
 						tokenInfo.Type = TokenType.Comment;
 					break;
 
 				case SyntaxType.CharLiteral:
-					tokenInfo.Color = TokenColor.String;
+					tokenInfo.Color = (TokenColor)TC.String;
 					tokenInfo.Type = TokenType.Literal;
 					break;
 
 				case SyntaxType.IntLiteral:
-					tokenInfo.Color = TokenColor.Number;
+					tokenInfo.Color = (TokenColor)TC.Number;
 					tokenInfo.Type = TokenType.Literal;
 					break;
 
 				case SyntaxType.StringLiteral:
-					tokenInfo.Color = TokenColor.String;
+					tokenInfo.Color = (TokenColor)TC.String;
 					tokenInfo.Type = TokenType.String;
 					break;
 
 				default:
-					tokenInfo.Color = TokenColor.Text;
+					tokenInfo.Color = (TokenColor)TC.Text;
 					tokenInfo.Type = TokenType.Text;
 					break;
 			}
@@ -100,24 +94,21 @@
 			tokenInfo.StartIndex = tok.StartPos;
 			tokenInfo.EndIndex = tok.EndPos;
 
-			// Nemerle _lexer count columns from 0, and the EndPos is inclusive.
-			// That is VS expects.
-			// System.Diagnostics.Trace.WriteLine(string.Format("{0},{1} : {2}", 
-			//   tok.StartPos, tok.EndPos, tok.Token.ToString()));
-
-			//TODO: it has to handle whitespace and # (pragma, region, etc)
-			// currently it handles } as a token starting from the beginning of 
-			// line...
+			// Nemerle lexer counts columns from 0, and the EndPos is inclusive. That is VS expects.
+			System.Diagnostics.Trace.WriteLine(string.Format("{0},{1} : {2} = '{3}'", tok.StartPos, tok.EndPos, tok.Token.ToString(), _laststring.Substring(tok.StartPos, tok.EndPos - tok.StartPos + 1)));
+
+			//TODO: it has to handle # (pragma, region, etc)
 
 			return true;
 		}
 
-		public void SetSource(string source, int offset)
-		{
-			_lexer.SetString(source, offset);
+		string _laststring; // only for debugging ScanTokenAndProvideInfoAboutIt
+
+		// The current implementation in *.LanguageService.dll always uses offset 0.
+		public void SetSource(string source, int offset) {
+			lexer.SetString(source, offset);
+			_laststring = source;
 			//System.Diagnostics.Trace.WriteLine(source);
 		}
-
-		#endregion
 	}
 }
\ No newline at end of file



More information about the svn mailing list