diff options
| author | nyamatongwe <devnull@localhost> | 2000-07-19 10:56:26 +0000 | 
|---|---|---|
| committer | nyamatongwe <devnull@localhost> | 2000-07-19 10:56:26 +0000 | 
| commit | 6c5c75f748e56a3fa9a927693d380593aa5e045e (patch) | |
| tree | 89fc7f76b0c86de40b685aead50ea5b5eb4a2f9a /src/LexHTML.cxx | |
| parent | 1587d8de29c630ca23f14231fd98a4f5e5e677d1 (diff) | |
| download | scintilla-mirror-6c5c75f748e56a3fa9a927693d380593aa5e045e.tar.gz | |
Speed ups by Steve.
Diffstat (limited to 'src/LexHTML.cxx')
| -rw-r--r-- | src/LexHTML.cxx | 52 | 
1 files changed, 28 insertions, 24 deletions
| diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx index 38f3614e0..cb6eadaab 100644 --- a/src/LexHTML.cxx +++ b/src/LexHTML.cxx @@ -63,7 +63,8 @@ static int PrintScriptingIndicatorOffset(Accessor &styler, unsigned int start, u  	return iResult;  } -static int ScriptOfState(int state, int defaultScript) { +//static int ScriptOfState(int state,int defaultScript) +static int ScriptOfState(int state) {  	int scriptLanguage;  	if ((state >= SCE_HP_START) && (state <= SCE_HP_IDENTIFIER)) { @@ -75,7 +76,8 @@ static int ScriptOfState(int state, int defaultScript) {  	} else if ((state >= SCE_HPHP_DEFAULT) && (state <= SCE_HPHP_STRINGEOL)) {  		scriptLanguage = eScriptPHP;  	} else { -		scriptLanguage = defaultScript; +		//		scriptLanguage = defaultScript; +		scriptLanguage = eScriptNone;  	}  	return scriptLanguage; @@ -322,7 +324,8 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  	int defaultScript = (lineState >> 4) & 0x0F; // 4 bits  	int beforePreProc = (lineState >> 8) & 0xFF; // 8 bits -	int scriptLanguage = ScriptOfState(state, defaultScript); +	//	int scriptLanguage = ScriptOfState(state,defaultScript); +	int scriptLanguage = ScriptOfState(state);  	bool fold = styler.GetPropertyInt("fold");  	int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK; @@ -330,20 +333,16 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  	int visChars = 0;  	char chPrev = ' '; -	char chPrev2 = ' '; +	char ch = ' ';  	styler.StartSegment(startPos);  	int lengthDoc = startPos + length;  	for (int i = startPos; i < lengthDoc; i++) { -		char ch = styler[i]; +		char chPrev2 = chPrev; +		chPrev = ch; +		ch = styler[i];  		char chNext = styler.SafeGetCharAt(i + 1);  		char chNext2 = styler.SafeGetCharAt(i + 2); -		// decide what is the current state to print (depending of the script tag) -		StateToPrint = statePrintForState(state, inScriptType); - -		if (fold && !isspace(ch)) -			visChars++; -  		// Handle DBCS codepages  		if (styler.IsLeadByte(ch)) {  			chPrev2 = ' '; @@ -352,11 +351,16 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  			continue;  		} +		if (fold && !isspace(ch)) +			visChars++; + +		// handle script folding  		if (fold) {  			switch (scriptLanguage) {  			case eScriptJS:  			case eScriptPHP: -			case eScriptVBS: +				//not currently supported				case eScriptVBS: +  				if ((ch == '{') || (ch == '}')) {  					levelCurrent += (ch == '{') ? 1 : -1;  				} @@ -366,10 +370,9 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  					levelCurrent++;  				} else if ((ch == '\n') && !((chNext == '\r') && (chNext2 == '\n')) && (chNext != '\n')) {  					// check if the number of tabs is lower than the level -					char chTmp = '§';  					int Findlevel = (levelCurrent & ~SC_FOLDLEVELBASE) * 8;  					for (int j = 0;Findlevel > 0;j++) { -						chTmp = styler.SafeGetCharAt(i + j + 1); +						char chTmp = styler.SafeGetCharAt(i + j + 1);  						if (chTmp == '\t') {  							Findlevel -= 8;  						}	else if (chTmp == ' ') { @@ -386,6 +389,9 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  			}  		} +		// decide what is the current state to print (depending of the script tag) +		StateToPrint = statePrintForState(state, inScriptType); +  		if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {  			// New line -> record any line state onto /next/ line  			if (fold) { @@ -406,7 +412,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  		}  		// generic end of script processing -		if ((inScriptType == eNonHtmlScript) && (ch == '<') && (chNext == '/')) { +		else if ((inScriptType == eNonHtmlScript) && (ch == '<') && (chNext == '/')) {  			// Check if it's the end of the script tag (or any other HTML tag)  			switch (state) {  				// in these cases, you can embed HTML tags (to confirm !!!!!!!!!!!!!!!!!!!!!!) @@ -425,6 +431,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  				styler.ColourTo(i - 1, StateToPrint);  				state = SCE_H_TAGUNKNOWN;  				inScriptType = eHtml; +				scriptLanguage = eScriptNone;  				i += 2;  				continue;  				break; @@ -433,7 +440,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  		/////////////////////////////////////  		// handle the start of PHP pre-processor = Non-HTML -		if ((ch == '<') && (chNext == '?')) { +		else if ((ch == '<') && (chNext == '?')) {  			styler.ColourTo(i - 1, StateToPrint);  			beforePreProc = state;  			scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment() + 2, i + 10, eScriptPHP); @@ -452,7 +459,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  		}  		// handle the start of ASP pre-processor = Non-HTML -		if ((ch == '<') && (chNext == '%')) { +		else if ((ch == '<') && (chNext == '%')) {  			styler.ColourTo(i - 1, StateToPrint);  			beforePreProc = state;  			if (inScriptType == eNonHtmlScript) @@ -479,7 +486,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  		}  		// handle the end of a pre-processor = Non-HTML -		if (((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) && ((ch == '?') || (ch == '%')) && (chNext == '>')) { +		else if (((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) && ((ch == '?') || (ch == '%')) && (chNext == '>')) {  			if (state == SCE_H_ASPAT) {  				defaultScript = segIsScriptingIndicator(styler, styler.GetStartSegment(), i - 1, defaultScript);  			} @@ -513,6 +520,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  				inScriptType = eNonHtmlScript;  			else  				inScriptType = eHtml; +			scriptLanguage = eScriptNone;  			continue;  		}  		///////////////////////////////////// @@ -1064,8 +1072,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  			} else if (isoperator(ch)) {  				styler.ColourTo(i, SCE_HB_DEFAULT);  			} -		} -		if (state == SCE_HBA_DEFAULT) {    // One of the above succeeded +		} else if (state == SCE_HBA_DEFAULT) {    // One of the above succeeded  			if (ch == '\"') {  				state = SCE_HBA_STRING;  			} else if (ch == '\'') { @@ -1075,8 +1082,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  			} else if (isoperator(ch)) {  				styler.ColourTo(i, SCE_HBA_DEFAULT);  			} -		} -		if (state == SCE_HJ_DEFAULT) {    // One of the above succeeded +		} else if (state == SCE_HJ_DEFAULT) {    // One of the above succeeded  			if (ch == '/' && chNext == '*') {  				if (styler.SafeGetCharAt(i + 2) == '*')  					state = SCE_HJ_COMMENTDOC; @@ -1094,8 +1100,6 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty  				styler.ColourTo(i, SCE_HJ_SYMBOLS);  			}  		} -		chPrev2 = chPrev; -		chPrev = ch;  	}  	StateToPrint = statePrintForState(state, inScriptType); | 
