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