55using System . Threading . Tasks ;
66using Microsoft . VisualStudio . Package ;
77using Microsoft . VisualStudio . TextManager . Interop ;
8+ using System . Diagnostics ;
89namespace Company . NimrodVS
910{
1011 public enum TTokenClass : int
@@ -69,7 +70,7 @@ public NimrodTokenizer(string source)
6970 m_source = source ;
7071 start = 0 ;
7172 end = - 1 ;
72- advanceOne ( ) ;
73+ advanceOne ( NimrodScannerFlags . None ) ;
7374 }
7475 private static int skipChar ( string str , char chr , int idx )
7576 {
@@ -87,8 +88,12 @@ private static int skipChar(string str, char chr, int idx)
8788 }
8889 return idx ;
8990 }
90- public void advanceOne ( )
91+ public void advanceOne ( NimrodScannerFlags flags )
9192 {
93+ /*if (m_source.Contains("else:"))
94+ {
95+ Debugger.Break();
96+ }*/
9297 start = end + 1 ;
9398 if ( end >= m_source . Length )
9499 {
@@ -100,7 +105,7 @@ public void advanceOne()
100105 kind = TTokenClass . gtEof ;
101106 return ;
102107 }
103- if ( m_source [ start ] == '#' )
108+ if ( m_source [ start ] == '#' && flags == NimrodScannerFlags . None )
104109 {
105110 kind = TTokenClass . gtComment ;
106111 end = m_source . Length ;
@@ -139,6 +144,7 @@ public void advanceOne()
139144 }
140145 else
141146 {
147+
142148 if ( start >= m_source . Length )
143149 {
144150 kind = TTokenClass . gtEof ;
@@ -152,6 +158,7 @@ public void advanceOne()
152158 var quoteIdx = m_source . IndexOf ( '"' , searchStart ) ;
153159 var parenIdx = m_source . IndexOf ( '(' , searchStart ) ;
154160 var starIdx = m_source . IndexOf ( '*' , searchStart ) ;
161+ var colonIdx = m_source . IndexOf ( ':' , searchStart ) ;
155162 end = spaceIdx ;
156163 if ( end == - 1 )
157164 {
@@ -163,7 +170,7 @@ public void advanceOne()
163170 {
164171 kind = TTokenClass . gtIdentifier ;
165172 end = parenIdx ;
166- tokenEnd = parenIdx ;
173+ tokenEnd = parenIdx - 1 ;
167174 }
168175 if ( starIdx != - 1 && starIdx < end )
169176 {
@@ -176,6 +183,11 @@ public void advanceOne()
176183 end = quoteIdx - 1 ;
177184 tokenEnd = quoteIdx ;
178185 }
186+ if ( colonIdx != - 1 && colonIdx < end )
187+ {
188+ end = colonIdx ;
189+ tokenEnd = colonIdx - 1 ;
190+ }
179191
180192 nextToken = m_source . Substring ( start , ( end - start ) ) ;
181193
@@ -239,7 +251,10 @@ public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state)
239251 case TTokenClass . gtStringLit :
240252 tokenInfo . Type = TokenType . String ;
241253 tokenInfo . Color = TokenColor . String ;
242- flags ^= NimrodScannerFlags . NormalStringLit ;
254+ if ( ! flags . HasFlag ( NimrodScannerFlags . RawStringLit ) )
255+ {
256+ flags ^= NimrodScannerFlags . NormalStringLit ;
257+ }
243258 break ;
244259 case TTokenClass . gtLongStringLit :
245260 tokenInfo . Type = TokenType . String ;
@@ -297,7 +312,7 @@ public bool ScanTokenAndProvideInfoAboutIt(TokenInfo tokenInfo, ref int state)
297312 state = ( int ) flags ;
298313 tokenInfo . StartIndex = m_tokenizer . Start ;
299314 tokenInfo . EndIndex = m_tokenizer . End ;
300- m_tokenizer . advanceOne ( ) ;
315+ m_tokenizer . advanceOne ( flags ) ;
301316 return true ;
302317 }
303318
0 commit comments