aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CellBuffer.cxx9
-rw-r--r--src/CellBuffer.h2
-rw-r--r--src/ContractionState.cxx6
-rw-r--r--src/ContractionState.h4
-rw-r--r--src/Document.h1
-rw-r--r--src/Editor.cxx13
-rw-r--r--src/Editor.h1
-rw-r--r--src/LexHTML.cxx882
8 files changed, 258 insertions, 660 deletions
diff --git a/src/CellBuffer.cxx b/src/CellBuffer.cxx
index 130b289e6..68bcde2ed 100644
--- a/src/CellBuffer.cxx
+++ b/src/CellBuffer.cxx
@@ -186,6 +186,12 @@ void LineVector::ExpandLevels(int sizeNew) {
}
}
+void LineVector::ClearLevels() {
+ delete []levels;
+ levels = 0;
+ sizeLevels = 0;
+}
+
void LineVector::InsertValue(int pos, int value) {
//Platform::DebugPrintf("InsertValue[%d] = %d\n", pos, value);
if ((lines + 2) >= size) {
@@ -1070,3 +1076,6 @@ int CellBuffer::GetLevel(int line) {
}
}
+void CellBuffer::ClearLevels() {
+ lv.ClearLevels();
+}
diff --git a/src/CellBuffer.h b/src/CellBuffer.h
index acac9fa2f..4a1ecb398 100644
--- a/src/CellBuffer.h
+++ b/src/CellBuffer.h
@@ -58,6 +58,7 @@ public:
void Expand(int sizeNew);
void ExpandLevels(int sizeNew=-1);
+ void ClearLevels();
void InsertValue(int pos, int value);
void SetValue(int pos, int value);
void Remove(int pos);
@@ -220,6 +221,7 @@ public:
int SetLevel(int line, int level);
int GetLevel(int line);
+ void ClearLevels();
};
#define CELL_SIZE 2
diff --git a/src/ContractionState.cxx b/src/ContractionState.cxx
index 0b987b81b..0558b4c36 100644
--- a/src/ContractionState.cxx
+++ b/src/ContractionState.cxx
@@ -200,3 +200,9 @@ bool ContractionState::SetExpanded(int lineDoc, bool expanded) {
}
return false;
}
+
+void ContractionState::ShowAll() {
+ delete []lines;
+ lines = 0;
+ size = 0;
+}
diff --git a/src/ContractionState.h b/src/ContractionState.h
index 9e17a7693..2c344efee 100644
--- a/src/ContractionState.h
+++ b/src/ContractionState.h
@@ -42,9 +42,11 @@ public:
bool GetVisible(int lineDoc) const;
bool SetVisible(int lineDocStart, int lineDocEnd, bool visible);
-
+
bool GetExpanded(int lineDoc) const;
bool SetExpanded(int lineDoc, bool expanded);
+
+ void ShowAll();
};
#endif
diff --git a/src/Document.h b/src/Document.h
index b8f24ebe1..524cce605 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -156,6 +156,7 @@ public:
int SetLevel(int line, int level);
int GetLevel(int line) { return cb.GetLevel(line); }
+ void ClearLevels() { cb.ClearLevels(); }
int GetLastChild(int lineParent, int level=-1);
int GetFoldParent(int line);
diff --git a/src/Editor.cxx b/src/Editor.cxx
index e7e415c7b..118bc42d2 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -1502,6 +1502,13 @@ void Editor::ClearAll() {
SetVerticalScrollPos();
}
+void Editor::ClearDocumentStyle() {
+ pdoc->StartStyling(0, '\377');
+ pdoc->SetStyleFor(pdoc->Length(), 0);
+ cs.ShowAll();
+ pdoc->ClearLevels();
+}
+
void Editor::Cut() {
Copy();
ClearSelection();
@@ -3347,7 +3354,11 @@ LRESULT Editor::WndProc(UINT iMessage, WPARAM wParam, LPARAM lParam) {
ClearAll();
return 0;
- case SCI_SETUNDOCOLLECTION:
+ case SCI_CLEARDOCUMENTSTYLE:
+ ClearDocumentStyle();
+ return 0;
+
+ case SCI_SETUNDOCOLLECTION:
pdoc->SetUndoCollection(wParam);
return 0;
diff --git a/src/Editor.h b/src/Editor.h
index fb5ac9d8b..6297c5de7 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -209,6 +209,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
virtual void AddCharUTF(char *s, unsigned int len);
void ClearSelection();
void ClearAll();
+ void ClearDocumentStyle();
void Cut();
void PasteRectangular(int pos, const char *ptr, int len);
virtual void Copy() = 0;
diff --git a/src/LexHTML.cxx b/src/LexHTML.cxx
index 506f9a491..26b9111b7 100644
--- a/src/LexHTML.cxx
+++ b/src/LexHTML.cxx
@@ -3,11 +3,11 @@
// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
#include "Platform.h"
@@ -17,7 +17,13 @@
#include "Scintilla.h"
#include "SciLexer.h"
+#define SCE_HA_JS (SCE_HJA_START - SCE_HJ_START)
+#define SCE_HA_VBS (SCE_HBA_START - SCE_HB_START)
+#define SCE_HA_PYTHON (SCE_HPA_START - SCE_HP_START)
+
enum { eScriptNone = 0, eScriptJS, eScriptVBS, eScriptPython, eScriptPHP, eScriptXML };
+enum { eHtml = 0, eNonHtmlScript, eNonHtmlPreProc, eNonHtmlScriptPreProc };
+
static int segIsScriptingIndicator(Accessor &styler, unsigned int start, unsigned int end, int prevValue) {
char s[30 + 1];
s[0] = '\0';
@@ -57,6 +63,23 @@ static int PrintScriptingIndicatorOffset(Accessor &styler, unsigned int start, u
return iResult;
}
+static int statePrintForState(int state, int inScriptType)
+{
+ int StateToPrint;
+
+ if ((state >= SCE_HP_START) && (state <= SCE_HP_IDENTIFIER)) {
+ StateToPrint = state + ((inScriptType == eNonHtmlScript)?0:SCE_HA_PYTHON);
+ } else if ((state >= SCE_HB_START) && (state <= SCE_HB_STRINGEOL)) {
+ StateToPrint = state + ((inScriptType == eNonHtmlScript)?0:SCE_HA_VBS);
+ } else if ((state >= SCE_HJ_START) && (state <= SCE_HJ_STRINGEOL)) {
+ StateToPrint = state + ((inScriptType == eNonHtmlScript)?0:SCE_HA_JS);
+ } else {
+ StateToPrint = state;
+ }
+
+ return StateToPrint;
+}
+
static void classifyAttribHTML(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.') ||
(styler[start] == '-') || (styler[start] == '#');
@@ -114,7 +137,7 @@ static int classifyTagHTML(unsigned int start, unsigned int end,
}
static void classifyWordHTJS(unsigned int start, unsigned int end,
- WordList &keywords, Accessor &styler) {
+ WordList &keywords, Accessor &styler, int inScriptType) {
char chAttr = SCE_HJ_WORD;
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
if (wordIsNumber)
@@ -128,28 +151,10 @@ static void classifyWordHTJS(unsigned int start, unsigned int end,
if (keywords.InList(s))
chAttr = SCE_HJ_KEYWORD;
}
- styler.ColourTo(end, chAttr);
+ styler.ColourTo(end, statePrintForState(chAttr, inScriptType));
}
-static void classifyWordHTJSA(unsigned int start, unsigned int end,
- WordList &keywords, Accessor &styler) {
- char chAttr = SCE_HJA_WORD;
- bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
- if (wordIsNumber)
- chAttr = SCE_HJA_NUMBER;
- else {
- char s[30 + 1];
- for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
- s[i] = styler[start + i];
- s[i + 1] = '\0';
- }
- if (keywords.InList(s))
- chAttr = SCE_HJA_KEYWORD;
- }
- styler.ColourTo(end, chAttr);
-}
-
-static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
+static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, int inScriptType) {
char chAttr = SCE_HB_IDENTIFIER;
bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
if (wordIsNumber)
@@ -166,38 +171,14 @@ static int classifyWordHTVB(unsigned int start, unsigned int end, WordList &keyw
chAttr = SCE_HB_COMMENTLINE;
}
}
- styler.ColourTo(end, chAttr);
+ styler.ColourTo(end, statePrintForState(chAttr, inScriptType));
if (chAttr == SCE_HB_COMMENTLINE)
return SCE_HB_COMMENTLINE;
else
return SCE_HB_DEFAULT;
}
-static int classifyWordHTVBA(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
- char chAttr = SCE_HBA_IDENTIFIER;
- bool wordIsNumber = isdigit(styler[start]) || (styler[start] == '.');
- if (wordIsNumber)
- chAttr = SCE_HBA_NUMBER;
- else {
- char s[30 + 1];
- for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
- s[i] = static_cast<char>(tolower(styler[start + i]));
- s[i + 1] = '\0';
- }
- if (keywords.InList(s)) {
- chAttr = SCE_HBA_WORD;
- if (strcmp(s, "rem") == 0)
- chAttr = SCE_HBA_COMMENTLINE;
- }
- }
- styler.ColourTo(end, chAttr);
- if (chAttr == SCE_HBA_COMMENTLINE)
- return SCE_HBA_COMMENTLINE;
- else
- return SCE_HBA_DEFAULT;
-}
-
-static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord) {
+static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord, int inScriptType) {
bool wordIsNumber = isdigit(styler[start]);
char s[30 + 1];
for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
@@ -213,33 +194,13 @@ static void classifyWordHTPy(unsigned int start, unsigned int end, WordList &key
chAttr = SCE_HP_NUMBER;
else if (keywords.InList(s))
chAttr = SCE_HP_WORD;
- styler.ColourTo(end, chAttr);
- strcpy(prevWord, s);
-}
-
-static void classifyWordHTPyA(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler, char *prevWord) {
- bool wordIsNumber = isdigit(styler[start]);
- char s[30 + 1];
- for (unsigned int i = 0; i < end - start + 1 && i < 30; i++) {
- s[i] = styler[start + i];
- s[i + 1] = '\0';
- }
- char chAttr = SCE_HPA_IDENTIFIER;
- if (0 == strcmp(prevWord, "class"))
- chAttr = SCE_HPA_CLASSNAME;
- else if (0 == strcmp(prevWord, "def"))
- chAttr = SCE_HPA_DEFNAME;
- else if (wordIsNumber)
- chAttr = SCE_HPA_NUMBER;
- else if (keywords.InList(s))
- chAttr = SCE_HPA_WORD;
- styler.ColourTo(end, chAttr);
+ styler.ColourTo(end, statePrintForState(chAttr, inScriptType));
strcpy(prevWord, s);
}
// Update the word colour to default or keyword
// Called when in a PHP word
-static void classifyWordHTPHPA(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
+static void classifyWordHTPHP(unsigned int start, unsigned int end, WordList &keywords, Accessor &styler) {
char chAttr = SCE_HPHP_DEFAULT;
bool wordIsNumber = isdigit(styler[start]);
if (wordIsNumber)
@@ -257,25 +218,26 @@ static void classifyWordHTPHPA(unsigned int start, unsigned int end, WordList &k
}
// Return the first state to reach when entering a scripting language
-static int StateForScript(int scriptLanguage, int inScriptTag) {
+static int StateForScript(int scriptLanguage) {
+ int Result;
switch (scriptLanguage) {
case eScriptVBS:
- if (inScriptTag)
- return SCE_HB_START;
- else
- return SCE_HBA_START;
+ Result = SCE_HB_START;
+ break;
case eScriptPython:
- if (inScriptTag)
- return SCE_HP_START;
- else
- return SCE_HPA_START;
+ Result = SCE_HP_START;
+ break;
case eScriptPHP:
- return SCE_HPHP_DEFAULT;
+ Result = SCE_HPHP_DEFAULT;
+ break;
case eScriptXML:
- return SCE_H_TAGUNKNOWN;
+ Result = SCE_H_TAGUNKNOWN;
+ break;
default :
- return SCE_HJ_START;
+ Result = SCE_HJ_START;
+ break;
}
+ return Result;
}
inline bool ishtmlwordchar(char ch) {
@@ -305,11 +267,11 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
// Lexer for HTML requires more lexical states (7 bits worth) than most lexers
styler.StartAt(startPos, 127);
- bool lastTagWasScript = false;
char prevWord[200];
prevWord[0] = '\0';
int scriptLanguage = eScriptJS;
int state = initStyle;
+ int StateToPrint = state;
// If inside a tag, it may be a script tag, so reread from the start to ensure any language tags are seen
if (InTagState(state)) {
@@ -324,10 +286,14 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
int lineCurrent = styler.GetLine(startPos);
if (lineCurrent > 0)
lineState = styler.GetLineState(lineCurrent);
- int beforeNonHTML = (lineState & 0x01) >> 0;
- int inNonHTML = (lineState & 0x02) >> 1;
- int inScriptTag = (lineState & 0x04) >> 2;
- int defaultScript = (lineState & 0xF0) >> 4;
+ int inScriptType = (lineState >> 0) & 0x03; // 2 bits
+ int defaultScript = (lineState >> 4) & 0x0F; // 4 bits
+ int beforePreProc = (lineState >> 8) & 0xFF; // 8 bits
+
+ bool fold = styler.GetPropertyInt("fold");
+ int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
+ int levelCurrent = levelPrev;
+ int visChars = 0;
char chPrev = ' ';
char chPrev2 = ' ';
@@ -338,6 +304,12 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
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 = ' ';
@@ -348,44 +320,47 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
if ((ch == '\r' && chNext != '\n') || (ch == '\n')) {
// New line -> record any line state onto /next/ line
+ if (fold) {
+ int lev = levelPrev;
+ if (visChars == 0)
+ lev |= SC_FOLDLEVELWHITEFLAG;
+ if ((levelCurrent > levelPrev) && (visChars > 0))
+ lev |= SC_FOLDLEVELHEADERFLAG;
+ styler.SetLevel(lineCurrent, lev);
+ visChars = 0;
+ levelPrev = levelCurrent;
+ }
lineCurrent++;
styler.SetLineState(lineCurrent,
- (beforeNonHTML & 0x01) | ((inNonHTML & 0x01) << 1) | ((inScriptTag & 0x01) << 2) | ((defaultScript & 0x0F) << 4));
+ ((inScriptType & 0x03) << 0) |
+ ((defaultScript & 0x0F) << 4) |
+ ((beforePreProc & 0xFF) << 8));
}
- if (inScriptTag && (ch == '<') && (chNext == '/')) {
+ if (fold && (ch == '{') || (ch == '}')) {
+ levelCurrent += (ch == '{') ? 1 : -1;
+ }
+
+ // generic end of script processing
+ 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 !!!!!!!!!!!!!!!!!!!!!!)
case SCE_H_DOUBLESTRING:
case SCE_H_SINGLESTRING:
- case SCE_HJ_COMMENTLINE:
case SCE_HJ_DOUBLESTRING:
case SCE_HJ_SINGLESTRING:
- case SCE_HJA_COMMENTLINE:
- case SCE_HJA_DOUBLESTRING:
- case SCE_HJA_SINGLESTRING:
- case SCE_HB_COMMENTLINE:
case SCE_HB_STRING:
- case SCE_HBA_COMMENTLINE:
- case SCE_HBA_STRING:
- case SCE_HP_COMMENTLINE:
case SCE_HP_STRING:
case SCE_HP_TRIPLE:
case SCE_HP_TRIPLEDOUBLE:
- case SCE_HPA_COMMENTLINE:
- case SCE_HPA_STRING:
- case SCE_HPA_TRIPLE:
- case SCE_HPA_TRIPLEDOUBLE:
break;
default :
// maybe we should check here if it's a tag and if it's SCRIPT
-
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_H_TAGUNKNOWN;
- inNonHTML = 0;
- inScriptTag = 0;
- i++;
+ inScriptType = eHtml;
+ i+=2;
continue;
break;
}
@@ -394,22 +369,32 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
/////////////////////////////////////
// handle the start of PHP pre-processor = Non-HTML
if ((ch == '<') && (chNext == '?')) {
- styler.ColourTo(i - 1, state);
- beforeNonHTML = state;
- scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment(), i + 10, eScriptPHP);
- i += 1 + PrintScriptingIndicatorOffset(styler, i + 2, i + 10);
+ styler.ColourTo(i - 1, StateToPrint);
+ beforePreProc = state;
+ scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment() + 2, i + 10, eScriptPHP);
+ i++;
+ i += PrintScriptingIndicatorOffset(styler, styler.GetStartSegment() + 2, i + 10);
if (scriptLanguage == eScriptXML)
styler.ColourTo(i, SCE_H_XMLSTART);
else
styler.ColourTo(i, SCE_H_QUESTION);
- state = StateForScript(scriptLanguage, inScriptTag);
- inNonHTML = 1;
+ state = StateForScript(scriptLanguage);
+ if (inScriptType == eNonHtmlScript)
+ inScriptType = eNonHtmlScriptPreProc;
+ else
+ inScriptType = eNonHtmlPreProc;
continue;
}
+
// handle the start of ASP pre-processor = Non-HTML
if ((ch == '<') && (chNext == '%')) {
- styler.ColourTo(i - 1, state);
- beforeNonHTML = state;
+ styler.ColourTo(i - 1, StateToPrint);
+ beforePreProc = state;
+ if (inScriptType == eNonHtmlScript)
+ inScriptType = eNonHtmlScriptPreProc;
+ else
+ inScriptType = eNonHtmlPreProc;
+
if (chNext2 == '@') {
i += 2; // place as if it was the second next char treated
state = SCE_H_ASPAT;
@@ -421,92 +406,47 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
i++; // place as if it was the next char treated
}
- state = StateForScript(defaultScript, inScriptTag);
+ state = StateForScript(defaultScript);
}
styler.ColourTo(i, SCE_H_ASP);
- inNonHTML = 1;
- inScriptTag = 0;
continue;
}
- /////////////////////////////////////
- /////////////////////////////////////
- // handle of end of a pre-processor = Non-HTML
- /* this code is probably un-used (kept for safety)
- if (inNonHTML && inScriptTag && (ch == '<') && (chNext == '/')) {
- // Bounce out of any ASP mode
- switch (state)
- {
- case SCE_HJA_WORD:
- classifyWordHTJSA(styler.GetStartSegment(), i - 1, keywords2, styler);
- break;
- case SCE_HBA_WORD:
- classifyWordHTVBA(styler.GetStartSegment(), i - 1, keywords3, styler);
- break;
- case SCE_HPA_WORD:
- classifyWordHTPyA(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord);
- break;
- case SCE_HPHP_WORD:
- classifyWordHTPHPA(styler.GetStartSegment(), i - 1, keywords5, styler);
- break;
- default :
- styler.ColourTo(i - 1, state);
- break;
- }
- if ((ch == '<') && (chNext == '/')) {
- state = SCE_H_TAGUNKNOWN;
- } else {
- i++;
- if (ch == '%')
- styler.ColourTo(i, SCE_H_ASP);
- else
- // styler.ColourTo(i, SCE_H_XMLEND);
- styler.ColourTo(i, SCE_HPHP_);
- state = beforeNonHTML;
- }
- beforeNonHTML = SCE_H_DEFAULT;
- inNonHTML = 0;
- inScriptTag = 0;
- continue;
- }
- */
+
// handle the end of a pre-processor = Non-HTML
- if (inNonHTML && ((ch == '?') || (ch == '%')) && (chNext == '>')) {
+ if (((inScriptType == eNonHtmlPreProc) || (inScriptType == eNonHtmlScriptPreProc)) && ((ch == '?') || (ch == '%')) && (chNext == '>')) {
if (state == SCE_H_ASPAT) {
defaultScript = segIsScriptingIndicator(styler, styler.GetStartSegment(), i - 1, defaultScript);
}
// Bounce out of any ASP mode
switch (state) {
- case SCE_HJA_WORD:
- classifyWordHTJSA(styler.GetStartSegment(), i - 1, keywords2, styler);
+ case SCE_HJ_WORD:
+ classifyWordHTJS(styler.GetStartSegment(), i - 1, keywords2, styler, inScriptType);
break;
- case SCE_HBA_WORD:
- classifyWordHTVBA(styler.GetStartSegment(), i - 1, keywords3, styler);
+ case SCE_HB_WORD:
+ classifyWordHTVB(styler.GetStartSegment(), i - 1, keywords3, styler, inScriptType);
break;
- case SCE_HPA_WORD:
- classifyWordHTPyA(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord);
+ case SCE_HP_WORD:
+ classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord, inScriptType);
break;
case SCE_HPHP_WORD:
- classifyWordHTPHPA(styler.GetStartSegment(), i - 1, keywords5, styler);
+ classifyWordHTPHP(styler.GetStartSegment(), i - 1, keywords5, styler);
break;
default :
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
break;
}
- if ((ch == '<') && (chNext == '/')) {
- state = SCE_H_TAGUNKNOWN;
- } else {
- i++;
- if (ch == '%')
- styler.ColourTo(i, SCE_H_ASP);
- else if (scriptLanguage == eScriptXML)
- styler.ColourTo(i, SCE_H_XMLEND);
- else
- styler.ColourTo(i, SCE_H_QUESTION);
- state = beforeNonHTML;
- }
- beforeNonHTML = SCE_H_DEFAULT;
- inNonHTML = 0;
- inScriptTag = 0;
+ i++;
+ if (ch == '%')
+ styler.ColourTo(i, SCE_H_ASP);
+ else if (scriptLanguage == eScriptXML)
+ styler.ColourTo(i, SCE_H_XMLEND);
+ else
+ styler.ColourTo(i, SCE_H_QUESTION);
+ state = beforePreProc;
+ if (inScriptType == eNonHtmlScriptPreProc)
+ inScriptType = eNonHtmlScript;
+ else
+ inScriptType = eHtml;
continue;
}
/////////////////////////////////////
@@ -514,7 +454,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
switch (state) {
case SCE_H_DEFAULT:
if (ch == '<') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_H_TAGUNKNOWN;
} else if (ch == '&') {
styler.ColourTo(i - 1, SCE_H_DEFAULT);
@@ -522,20 +462,20 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
}
break;
case SCE_H_COMMENT:
- if ((ch == '>') && (chPrev == '-')) {
- styler.ColourTo(i, state);
+ if ((ch == '>') && (chPrev == '-') && (chPrev2 == '-')) {
+ styler.ColourTo(i, StateToPrint);
state = SCE_H_DEFAULT;
}
break;
case SCE_H_CDATA:
if ((ch == '>') && (chPrev == ']') && (chPrev2 == ']')) {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_H_DEFAULT;
}
break;
case SCE_H_ENTITY:
if (ch == ';') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_H_DEFAULT;
}
if (ch != '#' && !isalnum(ch)) { // Should check that '#' follows '&', but it is unlikely anyway...
@@ -546,16 +486,15 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
case SCE_H_TAGUNKNOWN:
if (!ishtmlwordchar(ch) && ch != '/' && ch != '-' && ch != '[') {
int eClass = classifyTagHTML(styler.GetStartSegment(), i - 1, keywords, styler);
- lastTagWasScript = eClass == SCE_H_SCRIPT;
- if (lastTagWasScript) {
- inScriptTag = 1;
- scriptLanguage = eScriptJS; // default to javascript
+ if (eClass == SCE_H_SCRIPT) {
+ inScriptType = eNonHtmlScript;
+ scriptLanguage = defaultScript;
eClass = SCE_H_TAG;
}
if ((ch == '>') && (eClass != SCE_H_COMMENT)) {
styler.ColourTo(i, SCE_H_TAG);
- if (lastTagWasScript) {
- state = StateForScript(scriptLanguage, inScriptTag);
+ if (inScriptType == eNonHtmlScript) {
+ state = StateForScript(scriptLanguage);
} else {
state = SCE_H_DEFAULT;
}
@@ -572,14 +511,14 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
break;
case SCE_H_ATTRIBUTE:
if (!ishtmlwordchar(ch) && ch != '/' && ch != '-') {
- if (lastTagWasScript) {
+ if (inScriptType == eNonHtmlScript) {
scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment(), i - 1, scriptLanguage);
}
classifyAttribHTML(styler.GetStartSegment(), i - 1, keywords, styler);
if (ch == '>') {
styler.ColourTo(i, SCE_H_TAG);
- if (lastTagWasScript) {
- state = StateForScript(scriptLanguage, inScriptTag);
+ if (inScriptType == eNonHtmlScript) {
+ state = StateForScript(scriptLanguage);
} else {
state = SCE_H_DEFAULT;
}
@@ -590,39 +529,39 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
break;
case SCE_H_OTHER:
if (ch == '>') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
styler.ColourTo(i, SCE_H_TAG);
- if (lastTagWasScript) {
- state = StateForScript(scriptLanguage, inScriptTag);
+ if (inScriptType == eNonHtmlScript) {
+ state = StateForScript(scriptLanguage);
} else {
state = SCE_H_DEFAULT;
}
} else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_H_DOUBLESTRING;
} else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_H_SINGLESTRING;
} else if (ch == '/' && chNext == '>') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
styler.ColourTo(i + 1, SCE_H_TAGEND);
i++;
ch = chNext;
state = SCE_H_DEFAULT;
} else if (ch == '?' && chNext == '>') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
styler.ColourTo(i + 1, SCE_H_XMLEND);
i++;
ch = chNext;
state = SCE_H_DEFAULT;
} else if (ishtmlwordchar(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_H_ATTRIBUTE;
}
break;
case SCE_H_DOUBLESTRING:
if (ch == '\"') {
- if (lastTagWasScript) {
+ if (inScriptType == eNonHtmlScript) {
scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment(), i, scriptLanguage);
}
styler.ColourTo(i, SCE_H_DOUBLESTRING);
@@ -631,7 +570,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
break;
case SCE_H_SINGLESTRING:
if (ch == '\'') {
- if (lastTagWasScript) {
+ if (inScriptType == eNonHtmlScript) {
scriptLanguage = segIsScriptingIndicator(styler, styler.GetStartSegment(), i, scriptLanguage);
}
styler.ColourTo(i, SCE_H_SINGLESTRING);
@@ -642,49 +581,45 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
case SCE_HJ_START:
case SCE_HJ_SYMBOLS:
if (iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_WORD;
} else if (ch == '/' && chNext == '*') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
if (chNext2 == '*')
state = SCE_HJ_COMMENTDOC;
else
state = SCE_HJ_COMMENT;
} else if (ch == '/' && chNext == '/') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_COMMENTLINE;
} else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_DOUBLESTRING;
} else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_SINGLESTRING;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
} else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_COMMENTLINE;
} else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_COMMENTLINE;
i += 2;
} else if (isoperator(ch)) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_HJ_SYMBOLS);
+ styler.ColourTo(i - 1, StateToPrint);
+ styler.ColourTo(i, statePrintForState(SCE_HJ_SYMBOLS, inScriptType));
state = SCE_HJ_DEFAULT;
} else if ((ch == ' ') || (ch == '\t')) {
if (state == SCE_HJ_START) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_DEFAULT;
}
}
break;
case SCE_HJ_WORD:
if (!iswordchar(ch)) {
- classifyWordHTJS(styler.GetStartSegment(), i - 1, keywords2, styler);
+ classifyWordHTJS(styler.GetStartSegment(), i - 1, keywords2, styler, inScriptType);
//styler.ColourTo(i - 1, eHTJSKeyword);
state = SCE_HJ_DEFAULT;
if (ch == '/' && chNext == '*') {
@@ -699,11 +634,11 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
} else if (ch == '\'') {
state = SCE_HJ_SINGLESTRING;
} else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_COMMENTLINE;
i += 2;
} else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HJ_SYMBOLS);
+ styler.ColourTo(i, statePrintForState(SCE_HJ_SYMBOLS, inScriptType));
state = SCE_HJ_DEFAULT;
}
}
@@ -711,26 +646,14 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
case SCE_HJ_COMMENT:
case SCE_HJ_COMMENTDOC:
if (ch == '/' && chPrev == '*') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HJ_DEFAULT;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i + 1, SCE_H_TAGEND);
- i++;
- ch = chNext;
- state = SCE_H_DEFAULT;
- inScriptTag = 0;
}
break;
case SCE_HJ_COMMENTLINE:
if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, SCE_HJ_COMMENTLINE);
+ styler.ColourTo(i - 1, statePrintForState(SCE_HJ_COMMENTLINE, inScriptType));
state = SCE_HJ_DEFAULT;
- } else if ((ch == '<') && (chNext == '/')) {
- // Common to hide end script tag in comment
- styler.ColourTo(i - 1, SCE_HJ_COMMENTLINE);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
}
break;
case SCE_HJ_DOUBLESTRING:
@@ -739,12 +662,16 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
i++;
}
} else if (ch == '\"') {
- styler.ColourTo(i, SCE_HJ_DOUBLESTRING);
+ styler.ColourTo(i, statePrintForState(SCE_HJ_DOUBLESTRING, inScriptType));
state = SCE_HJ_DEFAULT;
i++;
ch = chNext;
+ } else if ((inScriptType == eNonHtmlScript) && (ch == '-') && (chNext == '-') && (chNext2 == '>')) {
+ styler.ColourTo(i - 1, StateToPrint);
+ state = SCE_HJ_COMMENTLINE;
+ i += 2;
} else if (isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_STRINGEOL;
}
break;
@@ -754,206 +681,64 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
i++;
}
} else if (ch == '\'') {
- styler.ColourTo(i, SCE_HJ_SINGLESTRING);
+ styler.ColourTo(i, statePrintForState(SCE_HJ_SINGLESTRING, inScriptType));
state = SCE_HJ_DEFAULT;
i++;
ch = chNext;
+ } else if ((inScriptType == eNonHtmlScript) && (ch == '-') && (chNext == '-') && (chNext2 == '>')) {
+ styler.ColourTo(i - 1, StateToPrint);
+ state = SCE_HJ_COMMENTLINE;
+ i += 2;
} else if (isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_STRINGEOL;
}
break;
case SCE_HJ_STRINGEOL:
if (!isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HJ_DEFAULT;
} else if (!isLineEnd(chNext)) {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HJ_DEFAULT;
}
break;
- case SCE_HJA_DEFAULT:
- case SCE_HJA_START:
- case SCE_HJA_SYMBOLS:
- if (iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_WORD;
- } else if (ch == '/' && chNext == '*') {
- styler.ColourTo(i - 1, state);
- if (chNext2 == '*')
- state = SCE_HJA_COMMENTDOC;
- else
- state = SCE_HJA_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_COMMENTLINE;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_DOUBLESTRING;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_SINGLESTRING;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
- } else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
- styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_COMMENTLINE;
- } else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_COMMENTLINE;
- i += 2;
- } else if (isoperator(ch)) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_HJA_SYMBOLS);
- state = SCE_HJA_DEFAULT;
- } else if ((ch == ' ') || (ch == '\t')) {
- if (state == SCE_HJA_START) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_DEFAULT;
- }
- }
- break;
- case SCE_HJA_WORD:
- if (!iswordchar(ch)) {
- classifyWordHTJSA(styler.GetStartSegment(), i - 1, keywords2, styler);
- //styler.ColourTo(i - 1, eHTJSKeyword);
- state = SCE_HJA_DEFAULT;
- if (ch == '/' && chNext == '*') {
- if (chNext2 == '*')
- state = SCE_HJA_COMMENTDOC;
- else
- state = SCE_HJA_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- state = SCE_HJA_COMMENTLINE;
- } else if (ch == '\"') {
- state = SCE_HJA_DOUBLESTRING;
- } else if (ch == '\'') {
- state = SCE_HJA_SINGLESTRING;
- } else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_COMMENTLINE;
- i += 2;
- } else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HJA_SYMBOLS);
- state = SCE_HJA_DEFAULT;
- }
- }
- break;
- case SCE_HJA_COMMENT:
- case SCE_HJA_COMMENTDOC:
- if (ch == '/' && chPrev == '*') {
- styler.ColourTo(i, state);
- state = SCE_HJA_DEFAULT;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i + 1, SCE_H_TAGEND);
- i++;
- ch = chNext;
- state = SCE_H_DEFAULT;
- inScriptTag = 0;
- }
- break;
- case SCE_HJA_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, SCE_HJA_COMMENTLINE);
- state = SCE_HJA_DEFAULT;
- } else if ((ch == '<') && (chNext == '/')) {
- // Common to hide end script tag in comment
- styler.ColourTo(i - 1, SCE_HJA_COMMENTLINE);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
- }
- break;
- case SCE_HJA_DOUBLESTRING:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- }
- } else if (ch == '\"') {
- styler.ColourTo(i, SCE_HJA_DOUBLESTRING);
- state = SCE_HJA_DEFAULT;
- i++;
- ch = chNext;
- } else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_COMMENTLINE;
- i += 2;
- } else if (isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_STRINGEOL;
- }
- break;
- case SCE_HJA_SINGLESTRING:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- }
- } else if (ch == '\'') {
- styler.ColourTo(i, SCE_HJA_SINGLESTRING);
- state = SCE_HJA_DEFAULT;
- i++;
- ch = chNext;
- } else if ((ch == '-') && (chNext == '-') && (chNext2 == '>')) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_COMMENTLINE;
- i += 2;
- } else if (isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_STRINGEOL;
- }
- break;
- case SCE_HJA_STRINGEOL:
- if (!isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HJA_DEFAULT;
- } else if (!isLineEnd(chNext)) {
- styler.ColourTo(i, state);
- state = SCE_HJA_DEFAULT;
- }
- break;
case SCE_HB_DEFAULT:
case SCE_HB_START:
if (iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_WORD;
} else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_COMMENTLINE;
} else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_STRING;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
} else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_COMMENTLINE;
} else if (isoperator(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
styler.ColourTo(i, SCE_HB_DEFAULT);
state = SCE_HB_DEFAULT;
} else if ((ch == ' ') || (ch == '\t')) {
if (state == SCE_HB_START) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_DEFAULT;
}
}
break;
case SCE_HB_WORD:
if (!iswordchar(ch)) {
- state = classifyWordHTVB(styler.GetStartSegment(), i - 1, keywords3, styler);
+ state = classifyWordHTVB(styler.GetStartSegment(), i - 1, keywords3, styler, inScriptType);
if (state == SCE_HB_DEFAULT) {
if (ch == '\"') {
state = SCE_HB_STRING;
} else if (ch == '\'') {
state = SCE_HB_COMMENTLINE;
} else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HB_DEFAULT);
+ styler.ColourTo(i, statePrintForState(SCE_HB_DEFAULT,inScriptType));
state = SCE_HB_DEFAULT;
}
}
@@ -961,129 +746,44 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
break;
case SCE_HB_STRING:
if (ch == '\"') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HB_DEFAULT;
i++;
ch = chNext;
} else if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_STRINGEOL;
}
break;
case SCE_HB_COMMENTLINE:
if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_DEFAULT;
- } else if ((ch == '<') && (chNext == '/')) {
- // Common to hide end script tag in comment
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
}
break;
case SCE_HB_STRINGEOL:
if (!isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HB_DEFAULT;
} else if (!isLineEnd(chNext)) {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HB_DEFAULT;
}
break;
- case SCE_HBA_DEFAULT:
- case SCE_HBA_START:
- if (iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_WORD;
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_COMMENTLINE;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_STRING;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
- } else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
- styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_COMMENTLINE;
- } else if (isoperator(ch)) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_HBA_DEFAULT);
- state = SCE_HBA_DEFAULT;
- } else if ((ch == ' ') || (ch == '\t')) {
- if (state == SCE_HBA_START) {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_DEFAULT;
- }
- }
- break;
- case SCE_HBA_WORD:
- if (!iswordchar(ch)) {
- state = classifyWordHTVBA(styler.GetStartSegment(), i - 1, keywords3, styler);
- if (state == SCE_HBA_DEFAULT) {
- if (ch == '\"') {
- state = SCE_HBA_STRING;
- } else if (ch == '\'') {
- state = SCE_HBA_COMMENTLINE;
- } else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HBA_DEFAULT);
- state = SCE_HBA_DEFAULT;
- }
- }
- }
- break;
- case SCE_HBA_STRING:
- if (ch == '\"') {
- styler.ColourTo(i, state);
- state = SCE_HBA_DEFAULT;
- i++;
- ch = chNext;
- } else if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_STRINGEOL;
- }
- break;
- case SCE_HBA_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_DEFAULT;
- } else if ((ch == '<') && (chNext == '/')) {
- // Common to hide end script tag in comment
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
- }
- break;
- case SCE_HBA_STRINGEOL:
- if (!isLineEnd(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HBA_DEFAULT;
- } else if (!isLineEnd(chNext)) {
- styler.ColourTo(i, state);
- state = SCE_HBA_DEFAULT;
- }
- break;
case SCE_HP_DEFAULT:
case SCE_HP_START:
if (iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HP_WORD;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
} else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HP_COMMENTLINE;
} else if (ch == '#') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HP_COMMENTLINE;
} else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
if (chNext == '\"' && chNext2 == '\"') {
i += 2;
state = SCE_HP_TRIPLEDOUBLE;
@@ -1091,10 +791,10 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
chPrev = ' ';
chNext = styler.SafeGetCharAt(i + 1);
} else {
- state = SCE_HP_STRING;
+ state = statePrintForState(SCE_HP_STRING,inScriptType);
}
} else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
if (chNext == '\'' && chNext2 == '\'') {
i += 2;
state = SCE_HP_TRIPLE;
@@ -1105,18 +805,18 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
state = SCE_HP_CHARACTER;
}
} else if (isoperator(ch)) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_HP_OPERATOR);
+ styler.ColourTo(i - 1, StateToPrint);
+ styler.ColourTo(i, statePrintForState(SCE_HP_OPERATOR, inScriptType));
} else if ((ch == ' ') || (ch == '\t')) {
if (state == SCE_HP_START) {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HP_DEFAULT;
}
}
break;
case SCE_HP_WORD:
if (!iswordchar(ch)) {
- classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord);
+ classifyWordHTPy(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord, inScriptType);
state = SCE_HP_DEFAULT;
if (ch == '#') {
state = SCE_HP_COMMENTLINE;
@@ -1141,15 +841,15 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
state = SCE_HP_CHARACTER;
}
} else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HP_OPERATOR);
+ styler.ColourTo(i, statePrintForState(SCE_HP_OPERATOR, inScriptType));
}
}
break;
case SCE_HP_COMMENTLINE:
if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HP_DEFAULT;
- }
+ }
break;
case SCE_HP_STRING:
if (ch == '\\') {
@@ -1159,7 +859,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (ch == '\"') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HP_DEFAULT;
}
break;
@@ -1171,143 +871,22 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (ch == '\'') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HP_DEFAULT;
}
break;
case SCE_HP_TRIPLE:
if (ch == '\'' && chPrev == '\'' && chPrev2 == '\'') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HP_DEFAULT;
}
break;
case SCE_HP_TRIPLEDOUBLE:
if (ch == '\"' && chPrev == '\"' && chPrev2 == '\"') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HP_DEFAULT;
}
break;
- case SCE_HPA_DEFAULT:
- case SCE_HPA_START:
- if (iswordstart(ch)) {
- styler.ColourTo(i - 1, state);
- state = SCE_HPA_WORD;
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
- } else if ((ch == '<') && (chNext == '!') && (chNext2 == '-') &&
- styler.SafeGetCharAt(i + 3) == '-') {
- styler.ColourTo(i - 1, state);
- state = SCE_HPA_COMMENTLINE;
- } else if (ch == '#') {
- styler.ColourTo(i - 1, state);
- state = SCE_HPA_COMMENTLINE;
- } else if (ch == '\"') {
- styler.ColourTo(i - 1, state);
- if (chNext == '\"' && chNext2 == '\"') {
- i += 2;
- state = SCE_HPA_TRIPLEDOUBLE;
- ch = ' ';
- chPrev = ' ';
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- state = SCE_HPA_STRING;
- }
- } else if (ch == '\'') {
- styler.ColourTo(i - 1, state);
- if (chNext == '\'' && chNext2 == '\'') {
- i += 2;
- state = SCE_HPA_TRIPLE;
- ch = ' ';
- chPrev = ' ';
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- state = SCE_HPA_CHARACTER;
- }
- } else if (isoperator(ch)) {
- styler.ColourTo(i - 1, state);
- styler.ColourTo(i, SCE_HPA_OPERATOR);
- } else if ((ch == ' ') || (ch == '\t')) {
- if (state == SCE_HPA_START) {
- styler.ColourTo(i - 1, state);
- state = SCE_HPA_DEFAULT;
- }
- }
- break;
- case SCE_HPA_WORD:
- if (!iswordchar(ch)) {
- classifyWordHTPyA(styler.GetStartSegment(), i - 1, keywords4, styler, prevWord);
- state = SCE_HPA_DEFAULT;
- if (ch == '#') {
- state = SCE_HPA_COMMENTLINE;
- } else if (ch == '\"') {
- if (chNext == '\"' && chNext2 == '\"') {
- i += 2;
- state = SCE_HPA_TRIPLEDOUBLE;
- ch = ' ';
- chPrev = ' ';
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- state = SCE_HPA_STRING;
- }
- } else if (ch == '\'') {
- if (chNext == '\'' && chNext2 == '\'') {
- i += 2;
- state = SCE_HPA_TRIPLE;
- ch = ' ';
- chPrev = ' ';
- chNext = styler.SafeGetCharAt(i + 1);
- } else {
- state = SCE_HPA_CHARACTER;
- }
- } else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HPA_OPERATOR);
- }
- }
- break;
- case SCE_HPA_COMMENTLINE:
- if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
- state = SCE_HPA_DEFAULT;
- }
- break;
- case SCE_HPA_STRING:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (ch == '\"') {
- styler.ColourTo(i, state);
- state = SCE_HPA_DEFAULT;
- }
- break;
- case SCE_HPA_CHARACTER:
- if (ch == '\\') {
- if (chNext == '\"' || chNext == '\'' || chNext == '\\') {
- i++;
- ch = chNext;
- chNext = styler.SafeGetCharAt(i + 1);
- }
- } else if (ch == '\'') {
- styler.ColourTo(i, state);
- state = SCE_HPA_DEFAULT;
- }
- break;
- case SCE_HPA_TRIPLE:
- if (ch == '\'' && chPrev == '\'' && chPrev2 == '\'') {
- styler.ColourTo(i, state);
- state = SCE_HPA_DEFAULT;
- }
- break;
- case SCE_HPA_TRIPLEDOUBLE:
- if (ch == '\"' && chPrev == '\"' && chPrev2 == '\"') {
- styler.ColourTo(i, state);
- state = SCE_HPA_DEFAULT;
- }
- break;
///////////// start - PHP state handling
case SCE_HPHP_WORD:
if (!iswordchar(ch)) {
@@ -1326,11 +905,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
} else {
state = SCE_HPHP_DEFAULT;
}
- classifyWordHTPHPA(styler.GetStartSegment(), i - 1, keywords5, styler);
- } else if ((ch == '<') && (chNext == '/')) {
- styler.ColourTo(i - 1, state);
- state = SCE_H_TAGUNKNOWN;
- inScriptTag = 0;
+ classifyWordHTPHP(styler.GetStartSegment(), i - 1, keywords5, styler);
}
break;
case SCE_HPHP_NUMBER:
@@ -1347,13 +922,13 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
break;
case SCE_HPHP_COMMENT:
if (ch == '/' && chPrev == '*') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HPHP_DEFAULT;
}
break;
case SCE_HPHP_COMMENTLINE:
if (ch == '\r' || ch == '\n') {
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
state = SCE_HPHP_DEFAULT;
}
break;
@@ -1365,7 +940,7 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (ch == '\"') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HPHP_DEFAULT;
} else if (chNext == '\r' || chNext == '\n') {
styler.ColourTo(i - 1, SCE_HPHP_STRINGEOL);
@@ -1383,14 +958,14 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
chNext = styler.SafeGetCharAt(i + 1);
}
} else if (ch == '\'') {
- styler.ColourTo(i, state);
+ styler.ColourTo(i, StateToPrint);
state = SCE_HPHP_DEFAULT;
}
break;
case SCE_HPHP_STRINGEOL:
break;
case SCE_HPHP_DEFAULT:
- styler.ColourTo(i - 1, state);
+ styler.ColourTo(i - 1, StateToPrint);
if (isdigit(ch)) {
state = SCE_HPHP_NUMBER;
} else if (iswordstart(ch)) {
@@ -1451,29 +1026,20 @@ static void ColouriseHyperTextDoc(unsigned int startPos, int length, int initSty
styler.ColourTo(i, SCE_HJ_SYMBOLS);
}
}
- if (state == SCE_HJA_DEFAULT) { // One of the above succeeded
- if (ch == '/' && chNext == '*') {
- if (styler.SafeGetCharAt(i + 2) == '*')
- state = SCE_HJA_COMMENTDOC;
- else
- state = SCE_HJA_COMMENT;
- } else if (ch == '/' && chNext == '/') {
- state = SCE_HJA_COMMENTLINE;
- } else if (ch == '\"') {
- state = SCE_HJA_DOUBLESTRING;
- } else if (ch == '\'') {
- state = SCE_HJA_SINGLESTRING;
- } else if (iswordstart(ch)) {
- state = SCE_HJA_WORD;
- } else if (isoperator(ch)) {
- styler.ColourTo(i, SCE_HJA_SYMBOLS);
- }
- }
chPrev2 = chPrev;
chPrev = ch;
}
- styler.ColourTo(lengthDoc - 1, state);
+ StateToPrint = statePrintForState(state,inScriptType);
+ styler.ColourTo(lengthDoc - 1, StateToPrint);
+
+ // Fill in the real level of the next line, keeping the current flags as they will be filled in later
+ if (fold) {
+ int flagsNext = styler.LevelAt(lineCurrent) & ~SC_FOLDLEVELNUMBERMASK;
+ //styler.SetLevel(lineCurrent, levelCurrent | flagsNext);
+ styler.SetLevel(lineCurrent, levelPrev | flagsNext);
+
+ }
}
LexerModule lmHTML(SCLEX_HTML, ColouriseHyperTextDoc);