1 // Scintilla source code edit control
2 /** @file StyleContext.cxx
3  ** Lexer infrastructure.
4  **/
5 // Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org>
6 // This file is in the public domain.
7 
8 #include <cstdlib>
9 #include <cassert>
10 
11 #include "ILexer.h"
12 
13 #include "LexAccessor.h"
14 #include "Accessor.h"
15 #include "StyleContext.h"
16 #include "CharacterSet.h"
17 
18 using namespace Scintilla;
19 
MatchIgnoreCase(const char * s)20 bool StyleContext::MatchIgnoreCase(const char *s) {
21 	if (MakeLowerCase(ch) != static_cast<unsigned char>(*s))
22 		return false;
23 	s++;
24 	if (MakeLowerCase(chNext) != static_cast<unsigned char>(*s))
25 		return false;
26 	s++;
27 	for (int n = 2; *s; n++) {
28 		if (*s !=
29 			MakeLowerCase(styler.SafeGetCharAt(currentPos + n, 0)))
30 			return false;
31 		s++;
32 	}
33 	return true;
34 }
35 
getRange(Sci_PositionU start,Sci_PositionU end,LexAccessor & styler,char * s,Sci_PositionU len)36 static void getRange(Sci_PositionU start,
37 		Sci_PositionU end,
38 		LexAccessor &styler,
39 		char *s,
40 		Sci_PositionU len) {
41 	Sci_PositionU i = 0;
42 	while ((i < end - start + 1) && (i < len-1)) {
43 		s[i] = styler[start + i];
44 		i++;
45 	}
46 	s[i] = '\0';
47 }
48 
GetCurrent(char * s,Sci_PositionU len)49 void StyleContext::GetCurrent(char *s, Sci_PositionU len) {
50 	getRange(styler.GetStartSegment(), currentPos - 1, styler, s, len);
51 }
52 
getRangeLowered(Sci_PositionU start,Sci_PositionU end,LexAccessor & styler,char * s,Sci_PositionU len)53 static void getRangeLowered(Sci_PositionU start,
54 		Sci_PositionU end,
55 		LexAccessor &styler,
56 		char *s,
57 		Sci_PositionU len) {
58 	Sci_PositionU i = 0;
59 	while ((i < end - start + 1) && (i < len-1)) {
60 		s[i] = MakeLowerCase(styler[start + i]);
61 		i++;
62 	}
63 	s[i] = '\0';
64 }
65 
GetCurrentLowered(char * s,Sci_PositionU len)66 void StyleContext::GetCurrentLowered(char *s, Sci_PositionU len) {
67 	getRangeLowered(styler.GetStartSegment(), currentPos - 1, styler, s, len);
68 }
69