diff options
Diffstat (limited to 'lexlib/StyleContext.h')
| -rw-r--r-- | lexlib/StyleContext.h | 212 | 
1 files changed, 0 insertions, 212 deletions
diff --git a/lexlib/StyleContext.h b/lexlib/StyleContext.h deleted file mode 100644 index c9ff4efbb..000000000 --- a/lexlib/StyleContext.h +++ /dev/null @@ -1,212 +0,0 @@ -// Scintilla source code edit control -/** @file StyleContext.h - ** Lexer infrastructure. - **/ -// Copyright 1998-2004 by Neil Hodgson <neilh@scintilla.org> -// This file is in the public domain. - -#ifndef STYLECONTEXT_H -#define STYLECONTEXT_H - -namespace Scintilla { - -// All languages handled so far can treat all characters >= 0x80 as one class -// which just continues the current token or starts an identifier if in default. -// DBCS treated specially as the second character can be < 0x80 and hence -// syntactically significant. UTF-8 avoids this as all trail bytes are >= 0x80 -class StyleContext { -	LexAccessor &styler; -	IDocument *multiByteAccess; -	Sci_PositionU endPos; -	Sci_PositionU lengthDocument; - -	// Used for optimizing GetRelativeCharacter -	Sci_PositionU posRelative; -	Sci_PositionU currentPosLastRelative; -	Sci_Position offsetRelative; - -	void GetNextChar() { -		if (multiByteAccess) { -			chNext = multiByteAccess->GetCharacterAndWidth(currentPos+width, &widthNext); -		} else { -			chNext = static_cast<unsigned char>(styler.SafeGetCharAt(currentPos+width, 0)); -			widthNext = 1; -		} -		// End of line determined from line end position, allowing CR, LF, -		// CRLF and Unicode line ends as set by document. -		if (currentLine < lineDocEnd) -			atLineEnd = static_cast<Sci_Position>(currentPos) >= (lineStartNext-1); -		else // Last line -			atLineEnd = static_cast<Sci_Position>(currentPos) >= lineStartNext; -	} - -public: -	Sci_PositionU currentPos; -	Sci_Position currentLine; -	Sci_Position lineDocEnd; -	Sci_Position lineStartNext; -	bool atLineStart; -	bool atLineEnd; -	int state; -	int chPrev; -	int ch; -	Sci_Position width; -	int chNext; -	Sci_Position widthNext; - -	StyleContext(Sci_PositionU startPos, Sci_PositionU length, -                        int initStyle, LexAccessor &styler_, char chMask='\377') : -		styler(styler_), -		multiByteAccess(nullptr), -		endPos(startPos + length), -		posRelative(0), -		currentPosLastRelative(0x7FFFFFFF), -		offsetRelative(0), -		currentPos(startPos), -		currentLine(-1), -		lineStartNext(-1), -		atLineEnd(false), -		state(initStyle & chMask), // Mask off all bits which aren't in the chMask. -		chPrev(0), -		ch(0), -		width(0), -		chNext(0), -		widthNext(1) { -		if (styler.Encoding() != EncodingType::eightBit) { -			multiByteAccess = styler.MultiByteAccess(); -		} -		styler.StartAt(startPos /*, chMask*/); -		styler.StartSegment(startPos); -		currentLine = styler.GetLine(startPos); -		lineStartNext = styler.LineStart(currentLine+1); -		lengthDocument = static_cast<Sci_PositionU>(styler.Length()); -		if (endPos == lengthDocument) -			endPos++; -		lineDocEnd = styler.GetLine(lengthDocument); -		atLineStart = static_cast<Sci_PositionU>(styler.LineStart(currentLine)) == startPos; - -		// Variable width is now 0 so GetNextChar gets the char at currentPos into chNext/widthNext -		width = 0; -		GetNextChar(); -		ch = chNext; -		width = widthNext; - -		GetNextChar(); -	} -	// Deleted so StyleContext objects can not be copied. -	StyleContext(const StyleContext &) = delete; -	StyleContext &operator=(const StyleContext &) = delete; -	void Complete() { -		styler.ColourTo(currentPos - ((currentPos > lengthDocument) ? 2 : 1), state); -		styler.Flush(); -	} -	bool More() const noexcept { -		return currentPos < endPos; -	} -	void Forward() { -		if (currentPos < endPos) { -			atLineStart = atLineEnd; -			if (atLineStart) { -				currentLine++; -				lineStartNext = styler.LineStart(currentLine+1); -			} -			chPrev = ch; -			currentPos += width; -			ch = chNext; -			width = widthNext; -			GetNextChar(); -		} else { -			atLineStart = false; -			chPrev = ' '; -			ch = ' '; -			chNext = ' '; -			atLineEnd = true; -		} -	} -	void Forward(Sci_Position nb) { -		for (Sci_Position i = 0; i < nb; i++) { -			Forward(); -		} -	} -	void ForwardBytes(Sci_Position nb) { -		const Sci_PositionU forwardPos = currentPos + nb; -		while (forwardPos > currentPos) { -			const Sci_PositionU currentPosStart = currentPos; -			Forward(); -			if (currentPos == currentPosStart) { -				// Reached end -				return; -			} -		} -	} -	void ChangeState(int state_) noexcept { -		state = state_; -	} -	void SetState(int state_) { -		styler.ColourTo(currentPos - ((currentPos > lengthDocument) ? 2 : 1), state); -		state = state_; -	} -	void ForwardSetState(int state_) { -		Forward(); -		styler.ColourTo(currentPos - ((currentPos > lengthDocument) ? 2 : 1), state); -		state = state_; -	} -	Sci_Position LengthCurrent() const { -		return currentPos - styler.GetStartSegment(); -	} -	int GetRelative(Sci_Position n, char chDefault='\0') { -		return static_cast<unsigned char>(styler.SafeGetCharAt(currentPos+n, chDefault)); -	} -	int GetRelativeCharacter(Sci_Position n) { -		if (n == 0) -			return ch; -		if (multiByteAccess) { -			if ((currentPosLastRelative != currentPos) || -				((n > 0) && ((offsetRelative < 0) || (n < offsetRelative))) || -				((n < 0) && ((offsetRelative > 0) || (n > offsetRelative)))) { -				posRelative = currentPos; -				offsetRelative = 0; -			} -			const Sci_Position diffRelative = n - offsetRelative; -			const Sci_Position posNew = multiByteAccess->GetRelativePosition(posRelative, diffRelative); -			const int chReturn = multiByteAccess->GetCharacterAndWidth(posNew, nullptr); -			posRelative = posNew; -			currentPosLastRelative = currentPos; -			offsetRelative = n; -			return chReturn; -		} else { -			// fast version for single byte encodings -			return static_cast<unsigned char>(styler.SafeGetCharAt(currentPos + n, 0)); -		} -	} -	bool Match(char ch0) const { -		return ch == static_cast<unsigned char>(ch0); -	} -	bool Match(char ch0, char ch1) const { -		return (ch == static_cast<unsigned char>(ch0)) && (chNext == static_cast<unsigned char>(ch1)); -	} -	bool Match(const char *s) { -		if (ch != static_cast<unsigned char>(*s)) -			return false; -		s++; -		if (!*s) -			return true; -		if (chNext != static_cast<unsigned char>(*s)) -			return false; -		s++; -		for (int n=2; *s; n++) { -			if (*s != styler.SafeGetCharAt(currentPos+n, 0)) -				return false; -			s++; -		} -		return true; -	} -	// Non-inline -	bool MatchIgnoreCase(const char *s); -	void GetCurrent(char *s, Sci_PositionU len); -	void GetCurrentLowered(char *s, Sci_PositionU len); -}; - -} - -#endif  | 
