[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