diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/LexTADS3.cxx | 1376 | 
1 files changed, 688 insertions, 688 deletions
| diff --git a/src/LexTADS3.cxx b/src/LexTADS3.cxx index 71f2919e7..7cc85f1f9 100644 --- a/src/LexTADS3.cxx +++ b/src/LexTADS3.cxx @@ -7,7 +7,7 @@  /*   * TADS3 is a language designed by Michael J. Roberts for the writing of text - * based games.	 TADS comes from Text Adventure Development System.  It has good + * based games.  TADS comes from Text Adventure Development System.  It has good   * support for the processing and outputting of formatted text and much of a   * TADS program listing consists of strings.   * @@ -56,7 +56,7 @@ static const int T3_INT_EXPRESSION_IN_TAG = 4;  static const int T3_HTML_SQUOTE = 8;  static inline bool IsEOL(const int ch, const int chNext) { -	return (ch == '\r' && chNext != '\n') || (ch == '\n'); +        return (ch == '\r' && chNext != '\n') || (ch == '\n');  }  /* @@ -77,552 +77,552 @@ static inline bool IsEOLSkip(StyleContext &sc)      /* test for CR-LF */      if (sc.ch == '\r' && sc.chNext == '\n')      { -	/* got CR-LF - skip the CR and indicate that we're at a newline */ -	sc.Forward(); -	return true; +        /* got CR-LF - skip the CR and indicate that we're at a newline */ +        sc.Forward(); +        return true;      }      /*  -     *	 in other cases, we have at most a 1-character newline, so do the -     *	 normal IsEOL test  +     *   in other cases, we have at most a 1-character newline, so do the +     *   normal IsEOL test        */      return IsEOL(sc.ch, sc.chNext);  }  static inline bool IsASpaceOrTab(const int ch) { -	return ch == ' ' || ch == '\t'; +        return ch == ' ' || ch == '\t';  }  static inline bool IsATADS3Operator(const int ch) { -	return ch == '=' || ch == '{' || ch == '}' || ch == '(' || ch == ')' -		|| ch == '[' || ch == ']' || ch == ',' || ch == ':' || ch == ';' -		|| ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%' -		|| ch == '?' || ch == '!' || ch == '<' || ch == '>' || ch == '|' -		|| ch == '@' || ch == '&' || ch == '~'; +        return ch == '=' || ch == '{' || ch == '}' || ch == '(' || ch == ')' +                || ch == '[' || ch == ']' || ch == ',' || ch == ':' || ch == ';' +                || ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%' +                || ch == '?' || ch == '!' || ch == '<' || ch == '>' || ch == '|' +                || ch == '@' || ch == '&' || ch == '~';  }  static inline bool IsAWordChar(const int ch) { -	return isalnum(ch) || ch == '_' || ch == '.'; +        return isalnum(ch) || ch == '_';  }  static inline bool IsAWordStart(const int ch) { -	return isalpha(ch) || ch == '_'; +        return isalpha(ch) || ch == '_';  }  static inline bool IsAHexDigit(const int ch) { -	int lch = tolower(ch); -	return isdigit(lch) || lch == 'a' || lch == 'b' || lch == 'c' -		|| lch == 'd' || lch == 'e' || lch == 'f'; +        int lch = tolower(ch); +        return isdigit(lch) || lch == 'a' || lch == 'b' || lch == 'c' +                || lch == 'd' || lch == 'e' || lch == 'f';  }  static inline bool IsAnHTMLChar(int ch) { -	return isalnum(ch) || ch == '-' || ch == '_' || ch == '.'; +        return isalnum(ch) || ch == '-' || ch == '_' || ch == '.';  }  static inline bool IsADirectiveChar(int ch) { -	return isalnum(ch) || isspace(ch) || ch == '-' || ch == '/'; +        return isalnum(ch) || isspace(ch) || ch == '-' || ch == '/';  }  static inline bool IsANumberStart(StyleContext &sc) { -	return isdigit(sc.ch) -		|| (!isdigit(sc.chPrev) && sc.ch == '.' && isdigit(sc.chNext)); +        return isdigit(sc.ch) +                || (!isdigit(sc.chPrev) && sc.ch == '.' && isdigit(sc.chNext));  }  inline static void ColouriseTADS3Operator(StyleContext &sc) { -	int initState = sc.state; -	int c = sc.ch; -	sc.SetState(c == '{' || c == '}' ? SCE_T3_BRACE : SCE_T3_OPERATOR); -	sc.ForwardSetState(initState); +        int initState = sc.state; +        int c = sc.ch; +        sc.SetState(c == '{' || c == '}' ? SCE_T3_BRACE : SCE_T3_OPERATOR); +        sc.ForwardSetState(initState);  }  static void ColouriseTADSHTMLString(StyleContext &sc, int &lineState) { -	int endState = sc.state; -	int chQuote = sc.ch; -	int chString = (lineState & T3_SINGLE_QUOTE) ? '\'' : '"'; -	if (endState == SCE_T3_HTML_STRING) { -		if (lineState&T3_SINGLE_QUOTE) { -			endState = SCE_T3_S_STRING; -			chString = '\''; -		} else if (lineState&T3_INT_EXPRESSION) { -			endState = SCE_T3_X_STRING; -			chString = '"'; -		} else { -			endState = SCE_T3_HTML_DEFAULT; -			chString = '"'; -		} -		chQuote = (lineState & T3_HTML_SQUOTE) ? '\'' : '"'; -	} else { -		sc.SetState(SCE_T3_HTML_STRING); -		sc.Forward(); -	} -	if (chQuote == '"') -		lineState &= ~T3_HTML_SQUOTE;  -	else -		lineState |= T3_HTML_SQUOTE; - -	while (sc.More()) { -		if (IsEOL(sc.ch, sc.chNext)) { -			return; -		} -		if (sc.ch == chQuote) { -			sc.ForwardSetState(endState); -			return; -		} -		if (sc.Match('\\', static_cast<char>(chQuote))) { -			sc.Forward(2); -			sc.SetState(endState); -			return; -		} -		if (sc.ch == chString) { -			sc.SetState(SCE_T3_DEFAULT); -			return; -		} - -		if (sc.Match('<', '<')) { -			lineState |= T3_INT_EXPRESSION | T3_INT_EXPRESSION_IN_TAG; -			sc.SetState(SCE_T3_X_DEFAULT); -			sc.Forward(2); -			return; -		} - -		if (sc.Match('\\', static_cast<char>(chQuote)) -			|| sc.Match('\\', static_cast<char>(chString)) -			|| sc.Match('\\', '\\')) { -			sc.Forward(2); -		} else { -			sc.Forward(); -		} -	} +        int endState = sc.state; +        int chQuote = sc.ch; +        int chString = (lineState & T3_SINGLE_QUOTE) ? '\'' : '"'; +        if (endState == SCE_T3_HTML_STRING) { +                if (lineState&T3_SINGLE_QUOTE) { +                        endState = SCE_T3_S_STRING; +                        chString = '\''; +                } else if (lineState&T3_INT_EXPRESSION) { +                        endState = SCE_T3_X_STRING; +                        chString = '"'; +                } else { +                        endState = SCE_T3_HTML_DEFAULT; +                        chString = '"'; +                } +                chQuote = (lineState & T3_HTML_SQUOTE) ? '\'' : '"'; +        } else { +                sc.SetState(SCE_T3_HTML_STRING); +                sc.Forward(); +        } +        if (chQuote == '"') +                lineState &= ~T3_HTML_SQUOTE;  +        else +                lineState |= T3_HTML_SQUOTE; + +        while (sc.More()) { +                if (IsEOL(sc.ch, sc.chNext)) { +                        return; +                } +                if (sc.ch == chQuote) { +                        sc.ForwardSetState(endState); +                        return; +                } +                if (sc.Match('\\', static_cast<char>(chQuote))) { +                        sc.Forward(2); +                        sc.SetState(endState); +                        return; +                } +                if (sc.ch == chString) { +                        sc.SetState(SCE_T3_DEFAULT); +                        return; +                } + +                if (sc.Match('<', '<')) { +                        lineState |= T3_INT_EXPRESSION | T3_INT_EXPRESSION_IN_TAG; +                        sc.SetState(SCE_T3_X_DEFAULT); +                        sc.Forward(2); +                        return; +                } + +                if (sc.Match('\\', static_cast<char>(chQuote)) +                        || sc.Match('\\', static_cast<char>(chString)) +                        || sc.Match('\\', '\\')) { +                        sc.Forward(2); +                } else { +                        sc.Forward(); +                } +        }  }  static void ColouriseTADS3HTMLTagStart(StyleContext &sc) { -	sc.SetState(SCE_T3_HTML_TAG); -	sc.Forward(); -	if (sc.ch == '/') { -		sc.Forward(); -	} -	while (IsAnHTMLChar(sc.ch)) { -		sc.Forward(); -	} +        sc.SetState(SCE_T3_HTML_TAG); +        sc.Forward(); +        if (sc.ch == '/') { +                sc.Forward(); +        } +        while (IsAnHTMLChar(sc.ch)) { +                sc.Forward(); +        }  }  static void ColouriseTADS3HTMLTag(StyleContext &sc, int &lineState) { -	int endState = sc.state; -	int chQuote = '"'; -	int chString = '\''; -	switch (endState) { -		case SCE_T3_S_STRING: -			ColouriseTADS3HTMLTagStart(sc); -			sc.SetState(SCE_T3_HTML_DEFAULT); -			chQuote = '\''; -			chString = '"'; -			break; -		case SCE_T3_D_STRING: -		case SCE_T3_X_STRING: -			ColouriseTADS3HTMLTagStart(sc); -			sc.SetState(SCE_T3_HTML_DEFAULT); -			break; -		case SCE_T3_HTML_DEFAULT: -			if (lineState&T3_SINGLE_QUOTE) { -				endState = SCE_T3_S_STRING; -				chQuote = '\''; -				chString = '"'; -			} else if (lineState&T3_INT_EXPRESSION) { -				endState = SCE_T3_X_STRING; -			} else { -				endState = SCE_T3_D_STRING; -			} -			break; -	} - -	while (sc.More()) { -		if (IsEOL(sc.ch, sc.chNext)) { -			return; -		} -		if (sc.Match('/', '>')) { -			sc.SetState(SCE_T3_HTML_TAG); -			sc.Forward(2); -			sc.SetState(endState); -			return; -		} -		if (sc.ch == '>') { -			sc.SetState(SCE_T3_HTML_TAG); -			sc.ForwardSetState(endState); -			return; -		} -		if (sc.ch == chQuote) { -			sc.SetState(endState); -			return; -		} -		if (sc.Match('\\', static_cast<char>(chQuote))) { -			sc.Forward(); -			ColouriseTADSHTMLString(sc, lineState); -			if (sc.state == SCE_T3_X_DEFAULT) -			    break; -		} else if (sc.ch == chString) { -			ColouriseTADSHTMLString(sc, lineState); -		} else if (sc.ch == '=') { -			ColouriseTADS3Operator(sc); -		} else { -			sc.Forward(); -		} -	} +        int endState = sc.state; +        int chQuote = '"'; +        int chString = '\''; +        switch (endState) { +                case SCE_T3_S_STRING: +                        ColouriseTADS3HTMLTagStart(sc); +                        sc.SetState(SCE_T3_HTML_DEFAULT); +                        chQuote = '\''; +                        chString = '"'; +                        break; +                case SCE_T3_D_STRING: +                case SCE_T3_X_STRING: +                        ColouriseTADS3HTMLTagStart(sc); +                        sc.SetState(SCE_T3_HTML_DEFAULT); +                        break; +                case SCE_T3_HTML_DEFAULT: +                        if (lineState&T3_SINGLE_QUOTE) { +                                endState = SCE_T3_S_STRING; +                                chQuote = '\''; +                                chString = '"'; +                        } else if (lineState&T3_INT_EXPRESSION) { +                                endState = SCE_T3_X_STRING; +                        } else { +                                endState = SCE_T3_D_STRING; +                        } +                        break; +        } + +        while (sc.More()) { +                if (IsEOL(sc.ch, sc.chNext)) { +                        return; +                } +                if (sc.Match('/', '>')) { +                        sc.SetState(SCE_T3_HTML_TAG); +                        sc.Forward(2); +                        sc.SetState(endState); +                        return; +                } +                if (sc.ch == '>') { +                        sc.SetState(SCE_T3_HTML_TAG); +                        sc.ForwardSetState(endState); +                        return; +                } +                if (sc.ch == chQuote) { +                        sc.SetState(endState); +                        return; +                } +                if (sc.Match('\\', static_cast<char>(chQuote))) { +                        sc.Forward(); +                        ColouriseTADSHTMLString(sc, lineState); +                        if (sc.state == SCE_T3_X_DEFAULT) +                            break; +                } else if (sc.ch == chString) { +                        ColouriseTADSHTMLString(sc, lineState); +                } else if (sc.ch == '=') { +                        ColouriseTADS3Operator(sc); +                } else { +                        sc.Forward(); +                } +        }  }  static void ColouriseTADS3Keyword(StyleContext &sc, -							WordList *keywordlists[],	unsigned int endPos) { -	char s[250]; -	WordList &keywords = *keywordlists[0]; -	WordList &userwords1 = *keywordlists[1]; -	WordList &userwords2 = *keywordlists[2]; -	WordList &userwords3 = *keywordlists[3]; -	int initState = sc.state; -	sc.SetState(SCE_T3_IDENTIFIER); -	while (sc.More() && (IsAWordChar(sc.ch))) { -		sc.Forward(); -	} -	sc.GetCurrent(s, sizeof(s)); -	if ( strcmp(s, "is") == 0 || strcmp(s, "not") == 0) { -		// have to find if "in" is next -		int n = 1; -		while (n + sc.currentPos < endPos && IsASpaceOrTab(sc.GetRelative(n))) -			n++; -		if (sc.GetRelative(n) == 'i' && sc.GetRelative(n+1) == 'n') { -			sc.Forward(n+2); -			sc.ChangeState(SCE_T3_KEYWORD); -		} -	} else if (keywords.InList(s)) { -		sc.ChangeState(SCE_T3_KEYWORD); -	} else if (userwords3.InList(s)) { -		sc.ChangeState(SCE_T3_USER3); -	} else if (userwords2.InList(s)) { -		sc.ChangeState(SCE_T3_USER2); -	} else if (userwords1.InList(s)) { -		sc.ChangeState(SCE_T3_USER1); -	} -	sc.SetState(initState); +                                                        WordList *keywordlists[],       unsigned int endPos) { +        char s[250]; +        WordList &keywords = *keywordlists[0]; +        WordList &userwords1 = *keywordlists[1]; +        WordList &userwords2 = *keywordlists[2]; +        WordList &userwords3 = *keywordlists[3]; +        int initState = sc.state; +        sc.SetState(SCE_T3_IDENTIFIER); +        while (sc.More() && (IsAWordChar(sc.ch))) { +                sc.Forward(); +        } +        sc.GetCurrent(s, sizeof(s)); +        if ( strcmp(s, "is") == 0 || strcmp(s, "not") == 0) { +                // have to find if "in" is next +                int n = 1; +                while (n + sc.currentPos < endPos && IsASpaceOrTab(sc.GetRelative(n))) +                        n++; +                if (sc.GetRelative(n) == 'i' && sc.GetRelative(n+1) == 'n') { +                        sc.Forward(n+2); +                        sc.ChangeState(SCE_T3_KEYWORD); +                } +        } else if (keywords.InList(s)) { +                sc.ChangeState(SCE_T3_KEYWORD); +        } else if (userwords3.InList(s)) { +                sc.ChangeState(SCE_T3_USER3); +        } else if (userwords2.InList(s)) { +                sc.ChangeState(SCE_T3_USER2); +        } else if (userwords1.InList(s)) { +                sc.ChangeState(SCE_T3_USER1); +        } +        sc.SetState(initState);  }  static void ColouriseTADS3MsgParam(StyleContext &sc, int &lineState) { -	int endState = sc.state; -	int chQuote = '"'; -	switch (endState) { -		case SCE_T3_S_STRING: -			sc.SetState(SCE_T3_MSG_PARAM); -			sc.Forward(); -			chQuote = '\''; -			break; -		case SCE_T3_D_STRING: -		case SCE_T3_X_STRING: -			sc.SetState(SCE_T3_MSG_PARAM); -			sc.Forward(); -			break; -		case SCE_T3_MSG_PARAM: -			if (lineState&T3_SINGLE_QUOTE) { -				endState = SCE_T3_S_STRING; -				chQuote = '\''; -			} else if (lineState&T3_INT_EXPRESSION) { -				endState = SCE_T3_X_STRING; -			} else { -				endState = SCE_T3_D_STRING; -			} -			break; -	} -	while (sc.More() && sc.ch != '}' && sc.ch != chQuote) { -		if (IsEOL(sc.ch, sc.chNext)) { -			return; -		} -		if (sc.ch == '\\') { -			sc.Forward(); -		} -		sc.Forward(); -	} -	if (sc.ch == chQuote) { -		sc.SetState(endState); -	} else { -		sc.ForwardSetState(endState); -	} +        int endState = sc.state; +        int chQuote = '"'; +        switch (endState) { +                case SCE_T3_S_STRING: +                        sc.SetState(SCE_T3_MSG_PARAM); +                        sc.Forward(); +                        chQuote = '\''; +                        break; +                case SCE_T3_D_STRING: +                case SCE_T3_X_STRING: +                        sc.SetState(SCE_T3_MSG_PARAM); +                        sc.Forward(); +                        break; +                case SCE_T3_MSG_PARAM: +                        if (lineState&T3_SINGLE_QUOTE) { +                                endState = SCE_T3_S_STRING; +                                chQuote = '\''; +                        } else if (lineState&T3_INT_EXPRESSION) { +                                endState = SCE_T3_X_STRING; +                        } else { +                                endState = SCE_T3_D_STRING; +                        } +                        break; +        } +        while (sc.More() && sc.ch != '}' && sc.ch != chQuote) { +                if (IsEOL(sc.ch, sc.chNext)) { +                        return; +                } +                if (sc.ch == '\\') { +                        sc.Forward(); +                } +                sc.Forward(); +        } +        if (sc.ch == chQuote) { +                sc.SetState(endState); +        } else { +                sc.ForwardSetState(endState); +        }  }  static void ColouriseTADS3LibDirective(StyleContext &sc, int &lineState) { -	int initState = sc.state; -	int chQuote = '"'; -	switch (initState) { -		case SCE_T3_S_STRING: -			sc.SetState(SCE_T3_LIB_DIRECTIVE); -			sc.Forward(2); -			chQuote = '\''; -			break; -		case SCE_T3_D_STRING: -			sc.SetState(SCE_T3_LIB_DIRECTIVE); -			sc.Forward(2); -			break; -		case SCE_T3_LIB_DIRECTIVE: -			if (lineState&T3_SINGLE_QUOTE) { -				initState = SCE_T3_S_STRING; -				chQuote = '\''; -			} else { -				initState = SCE_T3_D_STRING; -			} -			break; -	} -	while (sc.More() && IsADirectiveChar(sc.ch)) { -		if (IsEOL(sc.ch, sc.chNext)) { -			return; -		} -		sc.Forward(); -	}; -	if (sc.ch == '>' || !sc.More()) { -		sc.ForwardSetState(initState); -	} else if (sc.ch == chQuote) { -		sc.SetState(initState); -	} else { -		sc.ChangeState(initState); -		sc.Forward(); -	} +        int initState = sc.state; +        int chQuote = '"'; +        switch (initState) { +                case SCE_T3_S_STRING: +                        sc.SetState(SCE_T3_LIB_DIRECTIVE); +                        sc.Forward(2); +                        chQuote = '\''; +                        break; +                case SCE_T3_D_STRING: +                        sc.SetState(SCE_T3_LIB_DIRECTIVE); +                        sc.Forward(2); +                        break; +                case SCE_T3_LIB_DIRECTIVE: +                        if (lineState&T3_SINGLE_QUOTE) { +                                initState = SCE_T3_S_STRING; +                                chQuote = '\''; +                        } else { +                                initState = SCE_T3_D_STRING; +                        } +                        break; +        } +        while (sc.More() && IsADirectiveChar(sc.ch)) { +                if (IsEOL(sc.ch, sc.chNext)) { +                        return; +                } +                sc.Forward(); +        }; +        if (sc.ch == '>' || !sc.More()) { +                sc.ForwardSetState(initState); +        } else if (sc.ch == chQuote) { +                sc.SetState(initState); +        } else { +                sc.ChangeState(initState); +                sc.Forward(); +        }  }  static void ColouriseTADS3String(StyleContext &sc, int &lineState) { -	int chQuote = sc.ch; -	int endState = sc.state; -	switch (sc.state) { -		case SCE_T3_DEFAULT: -		case SCE_T3_X_DEFAULT: -			if (chQuote == '"') { -				if (sc.state == SCE_T3_DEFAULT) { -					sc.SetState(SCE_T3_D_STRING); -				} else { -					sc.SetState(SCE_T3_X_STRING); -				} -				lineState &= ~T3_SINGLE_QUOTE; -			} else { -				sc.SetState(SCE_T3_S_STRING); -				lineState |= T3_SINGLE_QUOTE; -			} -			sc.Forward(); -			break; -		case SCE_T3_S_STRING: -			chQuote = '\''; -			endState = lineState&T3_INT_EXPRESSION ? -				SCE_T3_X_DEFAULT : SCE_T3_DEFAULT; -			break; -		case SCE_T3_D_STRING: -			chQuote = '"'; -			endState = SCE_T3_DEFAULT; -			break; -		case SCE_T3_X_STRING: -			chQuote = '"'; -			endState = SCE_T3_X_DEFAULT; -			break; -	} -	while (sc.More()) { -		if (IsEOL(sc.ch, sc.chNext)) { -			return; -		} -		if (sc.ch == chQuote) { -			sc.ForwardSetState(endState); -			return; -		} -		if (sc.state == SCE_T3_D_STRING && sc.Match('<', '<')) { -			lineState |= T3_INT_EXPRESSION; -			sc.SetState(SCE_T3_X_DEFAULT); -			sc.Forward(2); -			return; -		} -		if (sc.Match('\\', static_cast<char>(chQuote)) -		    || sc.Match('\\', '\\')) { -			sc.Forward(2); -		} else if (sc.ch == '{') { -			ColouriseTADS3MsgParam(sc, lineState); -		} else if (sc.Match('<', '.')) { -			ColouriseTADS3LibDirective(sc, lineState); -		} else if (sc.ch == '<') { -			ColouriseTADS3HTMLTag(sc, lineState); -			if (sc.state == SCE_T3_X_DEFAULT) -				return; -		} else { -			sc.Forward(); -		} -	} +        int chQuote = sc.ch; +        int endState = sc.state; +        switch (sc.state) { +                case SCE_T3_DEFAULT: +                case SCE_T3_X_DEFAULT: +                        if (chQuote == '"') { +                                if (sc.state == SCE_T3_DEFAULT) { +                                        sc.SetState(SCE_T3_D_STRING); +                                } else { +                                        sc.SetState(SCE_T3_X_STRING); +                                } +                                lineState &= ~T3_SINGLE_QUOTE; +                        } else { +                                sc.SetState(SCE_T3_S_STRING); +                                lineState |= T3_SINGLE_QUOTE; +                        } +                        sc.Forward(); +                        break; +                case SCE_T3_S_STRING: +                        chQuote = '\''; +                        endState = lineState&T3_INT_EXPRESSION ? +                                SCE_T3_X_DEFAULT : SCE_T3_DEFAULT; +                        break; +                case SCE_T3_D_STRING: +                        chQuote = '"'; +                        endState = SCE_T3_DEFAULT; +                        break; +                case SCE_T3_X_STRING: +                        chQuote = '"'; +                        endState = SCE_T3_X_DEFAULT; +                        break; +        } +        while (sc.More()) { +                if (IsEOL(sc.ch, sc.chNext)) { +                        return; +                } +                if (sc.ch == chQuote) { +                        sc.ForwardSetState(endState); +                        return; +                } +                if (sc.state == SCE_T3_D_STRING && sc.Match('<', '<')) { +                        lineState |= T3_INT_EXPRESSION; +                        sc.SetState(SCE_T3_X_DEFAULT); +                        sc.Forward(2); +                        return; +                } +                if (sc.Match('\\', static_cast<char>(chQuote)) +                    || sc.Match('\\', '\\')) { +                        sc.Forward(2); +                } else if (sc.ch == '{') { +                        ColouriseTADS3MsgParam(sc, lineState); +                } else if (sc.Match('<', '.')) { +                        ColouriseTADS3LibDirective(sc, lineState); +                } else if (sc.ch == '<') { +                        ColouriseTADS3HTMLTag(sc, lineState); +                        if (sc.state == SCE_T3_X_DEFAULT) +                                return; +                } else { +                        sc.Forward(); +                } +        }  }  static void ColouriseTADS3Comment(StyleContext &sc, int endState) { -	sc.SetState(SCE_T3_BLOCK_COMMENT); -	while (sc.More()) { -		if (IsEOL(sc.ch, sc.chNext)) { -			return; -		} -		if (sc.Match('*', '/')) { -			sc.Forward(2); -			sc.SetState(endState); -			return; -		} -		sc.Forward(); -	} +        sc.SetState(SCE_T3_BLOCK_COMMENT); +        while (sc.More()) { +                if (IsEOL(sc.ch, sc.chNext)) { +                        return; +                } +                if (sc.Match('*', '/')) { +                        sc.Forward(2); +                        sc.SetState(endState); +                        return; +                } +                sc.Forward(); +        }  }  static void ColouriseToEndOfLine(StyleContext &sc, int initState, int endState) { -	sc.SetState(initState); -	while (sc.More()) { -		if (sc.ch == '\\') { -			sc.Forward(); -			if (IsEOLSkip(sc)) { -					return; -			} -		} -		if (IsEOL(sc.ch, sc.chNext)) { -			sc.SetState(endState); -			return; -		} -		sc.Forward(); -	} +        sc.SetState(initState); +        while (sc.More()) { +                if (sc.ch == '\\') { +                        sc.Forward(); +                        if (IsEOLSkip(sc)) { +                                        return; +                        } +                } +                if (IsEOL(sc.ch, sc.chNext)) { +                        sc.SetState(endState); +                        return; +                } +                sc.Forward(); +        }  }  static void ColouriseTADS3Number(StyleContext &sc) { -	int endState = sc.state; -	bool inHexNumber = false; -	bool seenE = false; -	bool seenDot = sc.ch == '.'; -	sc.SetState(SCE_T3_NUMBER); -	if (sc.More()) { -		sc.Forward(); -	} -	if (sc.chPrev == '0' && tolower(sc.ch) == 'x') { -		inHexNumber = true; -		sc.Forward(); -	} -	while (sc.More()) { -		if (inHexNumber) { -			if (!IsAHexDigit(sc.ch)) { -				break; -			} -		} else if (!isdigit(sc.ch)) { -			if (!seenE && tolower(sc.ch) == 'e') { -				seenE = true; -				seenDot = true; -				if (sc.chNext == '+' || sc.chNext == '-') { -					sc.Forward(); -				} -			} else if (!seenDot && sc.ch == '.') { -				seenDot = true; -			} else { -				break; -			} -		} -		sc.Forward(); -	} -	sc.SetState(endState); +        int endState = sc.state; +        bool inHexNumber = false; +        bool seenE = false; +        bool seenDot = sc.ch == '.'; +        sc.SetState(SCE_T3_NUMBER); +        if (sc.More()) { +                sc.Forward(); +        } +        if (sc.chPrev == '0' && tolower(sc.ch) == 'x') { +                inHexNumber = true; +                sc.Forward(); +        } +        while (sc.More()) { +                if (inHexNumber) { +                        if (!IsAHexDigit(sc.ch)) { +                                break; +                        } +                } else if (!isdigit(sc.ch)) { +                        if (!seenE && tolower(sc.ch) == 'e') { +                                seenE = true; +                                seenDot = true; +                                if (sc.chNext == '+' || sc.chNext == '-') { +                                        sc.Forward(); +                                } +                        } else if (!seenDot && sc.ch == '.') { +                                seenDot = true; +                        } else { +                                break; +                        } +                } +                sc.Forward(); +        } +        sc.SetState(endState);  }  static void ColouriseTADS3Doc(unsigned int startPos, int length, int initStyle, -							   WordList *keywordlists[], Accessor &styler) { -	int visibleChars = 0; -	int bracketLevel = 0; -	int lineState = 0; -	unsigned int endPos = startPos + length; -	int lineCurrent = styler.GetLine(startPos); -	if (lineCurrent > 0) { -		lineState = styler.GetLineState(lineCurrent-1); -	} -	StyleContext sc(startPos, length, initStyle, styler); - -	while (sc.More()) { - -		if (IsEOL(sc.ch, sc.chNext)) { -			styler.SetLineState(lineCurrent, lineState); -			lineCurrent++; -			visibleChars = 0; -			sc.Forward(); -			if (sc.ch == '\n') { -				sc.Forward(); -			} -		} - -		switch(sc.state) { -			case SCE_T3_PREPROCESSOR: -			case SCE_T3_LINE_COMMENT: -				ColouriseToEndOfLine(sc, sc.state, lineState&T3_INT_EXPRESSION ? -					SCE_T3_X_DEFAULT : SCE_T3_DEFAULT); -				break; -			case SCE_T3_S_STRING: -			case SCE_T3_D_STRING: -			case SCE_T3_X_STRING: -				ColouriseTADS3String(sc, lineState); -				visibleChars++; -				break; -			case SCE_T3_MSG_PARAM: -				ColouriseTADS3MsgParam(sc, lineState); -				break; -			case SCE_T3_LIB_DIRECTIVE: -				ColouriseTADS3LibDirective(sc, lineState); -				break; -			case SCE_T3_HTML_DEFAULT: -				ColouriseTADS3HTMLTag(sc, lineState); -				break; -			case SCE_T3_HTML_STRING: -				ColouriseTADSHTMLString(sc, lineState); -				break; -			case SCE_T3_BLOCK_COMMENT: -				ColouriseTADS3Comment(sc, lineState&T3_INT_EXPRESSION ? -					SCE_T3_X_DEFAULT : SCE_T3_DEFAULT); -				break; -			case SCE_T3_DEFAULT: -			case SCE_T3_X_DEFAULT: -				if (IsASpaceOrTab(sc.ch)) { -					sc.Forward(); -				} else if (sc.ch == '#' && visibleChars == 0) { -					ColouriseToEndOfLine(sc, SCE_T3_PREPROCESSOR, sc.state); -				} else if (sc.Match('/', '*')) { -					ColouriseTADS3Comment(sc, sc.state); -					visibleChars++; -				} else if (sc.Match('/', '/')) { -					ColouriseToEndOfLine(sc, SCE_T3_LINE_COMMENT, sc.state); -				} else if (sc.ch == '"') { -					bracketLevel = 0; -					ColouriseTADS3String(sc, lineState); -					visibleChars++; -				} else if (sc.ch == '\'') { -					ColouriseTADS3String(sc, lineState); -					visibleChars++; -				} else if (sc.state == SCE_T3_X_DEFAULT && bracketLevel == 0 -						   && sc.Match('>', '>')) { -					sc.Forward(2); -					sc.SetState(SCE_T3_D_STRING); -					if (lineState & T3_INT_EXPRESSION_IN_TAG) -						sc.SetState(SCE_T3_HTML_STRING); -					lineState &= ~(T3_SINGLE_QUOTE|T3_INT_EXPRESSION -						       |T3_INT_EXPRESSION_IN_TAG); -				} else if (IsATADS3Operator(sc.ch)) { -					if (sc.state == SCE_T3_X_DEFAULT) { -						if (sc.ch == '(') { -							bracketLevel++; -						} else if (sc.ch == ')' && bracketLevel > 0) { -							bracketLevel--; -						} -					} -					ColouriseTADS3Operator(sc); -					visibleChars++; -				} else if (IsANumberStart(sc)) { -					ColouriseTADS3Number(sc); -					visibleChars++; -				} else if (IsAWordStart(sc.ch)) { -					ColouriseTADS3Keyword(sc, keywordlists, endPos); -					visibleChars++; -				} else if (sc.Match("...")) { -					sc.SetState(SCE_T3_IDENTIFIER); -					sc.Forward(3); -					sc.SetState(SCE_T3_DEFAULT); -				} else { -					sc.Forward(); -					visibleChars++; -				} -				break; -			default: -				sc.SetState(SCE_T3_DEFAULT); -				sc.Forward(); -		} -	} -	sc.Complete(); +                                                           WordList *keywordlists[], Accessor &styler) { +        int visibleChars = 0; +        int bracketLevel = 0; +        int lineState = 0; +        unsigned int endPos = startPos + length; +        int lineCurrent = styler.GetLine(startPos); +        if (lineCurrent > 0) { +                lineState = styler.GetLineState(lineCurrent-1); +        } +        StyleContext sc(startPos, length, initStyle, styler); + +        while (sc.More()) { + +                if (IsEOL(sc.ch, sc.chNext)) { +                        styler.SetLineState(lineCurrent, lineState); +                        lineCurrent++; +                        visibleChars = 0; +                        sc.Forward(); +                        if (sc.ch == '\n') { +                                sc.Forward(); +                        } +                } + +                switch(sc.state) { +                        case SCE_T3_PREPROCESSOR: +                        case SCE_T3_LINE_COMMENT: +                                ColouriseToEndOfLine(sc, sc.state, lineState&T3_INT_EXPRESSION ? +                                        SCE_T3_X_DEFAULT : SCE_T3_DEFAULT); +                                break; +                        case SCE_T3_S_STRING: +                        case SCE_T3_D_STRING: +                        case SCE_T3_X_STRING: +                                ColouriseTADS3String(sc, lineState); +                                visibleChars++; +                                break; +                        case SCE_T3_MSG_PARAM: +                                ColouriseTADS3MsgParam(sc, lineState); +                                break; +                        case SCE_T3_LIB_DIRECTIVE: +                                ColouriseTADS3LibDirective(sc, lineState); +                                break; +                        case SCE_T3_HTML_DEFAULT: +                                ColouriseTADS3HTMLTag(sc, lineState); +                                break; +                        case SCE_T3_HTML_STRING: +                                ColouriseTADSHTMLString(sc, lineState); +                                break; +                        case SCE_T3_BLOCK_COMMENT: +                                ColouriseTADS3Comment(sc, lineState&T3_INT_EXPRESSION ? +                                        SCE_T3_X_DEFAULT : SCE_T3_DEFAULT); +                                break; +                        case SCE_T3_DEFAULT: +                        case SCE_T3_X_DEFAULT: +                                if (IsASpaceOrTab(sc.ch)) { +                                        sc.Forward(); +                                } else if (sc.ch == '#' && visibleChars == 0) { +                                        ColouriseToEndOfLine(sc, SCE_T3_PREPROCESSOR, sc.state); +                                } else if (sc.Match('/', '*')) { +                                        ColouriseTADS3Comment(sc, sc.state); +                                        visibleChars++; +                                } else if (sc.Match('/', '/')) { +                                        ColouriseToEndOfLine(sc, SCE_T3_LINE_COMMENT, sc.state); +                                } else if (sc.ch == '"') { +                                        bracketLevel = 0; +                                        ColouriseTADS3String(sc, lineState); +                                        visibleChars++; +                                } else if (sc.ch == '\'') { +                                        ColouriseTADS3String(sc, lineState); +                                        visibleChars++; +                                } else if (sc.state == SCE_T3_X_DEFAULT && bracketLevel == 0 +                                                   && sc.Match('>', '>')) { +                                        sc.Forward(2); +                                        sc.SetState(SCE_T3_D_STRING); +                                        if (lineState & T3_INT_EXPRESSION_IN_TAG) +                                                sc.SetState(SCE_T3_HTML_STRING); +                                        lineState &= ~(T3_SINGLE_QUOTE|T3_INT_EXPRESSION +                                                       |T3_INT_EXPRESSION_IN_TAG); +                                } else if (IsATADS3Operator(sc.ch)) { +                                        if (sc.state == SCE_T3_X_DEFAULT) { +                                                if (sc.ch == '(') { +                                                        bracketLevel++; +                                                } else if (sc.ch == ')' && bracketLevel > 0) { +                                                        bracketLevel--; +                                                } +                                        } +                                        ColouriseTADS3Operator(sc); +                                        visibleChars++; +                                } else if (IsANumberStart(sc)) { +                                        ColouriseTADS3Number(sc); +                                        visibleChars++; +                                } else if (IsAWordStart(sc.ch)) { +                                        ColouriseTADS3Keyword(sc, keywordlists, endPos); +                                        visibleChars++; +                                } else if (sc.Match("...")) { +                                        sc.SetState(SCE_T3_IDENTIFIER); +                                        sc.Forward(3); +                                        sc.SetState(SCE_T3_DEFAULT); +                                } else { +                                        sc.Forward(); +                                        visibleChars++; +                                } +                                break; +                        default: +                                sc.SetState(SCE_T3_DEFAULT); +                                sc.Forward(); +                } +        } +        sc.Complete();  }  /* @@ -630,15 +630,15 @@ static void ColouriseTADS3Doc(unsigned int startPos, int length, int initStyle,   // default style   silverKey : Key 'small silver key' 'small silver key' -	"A small key glints in the sunlight. " +        "A small key glints in the sunlight. "   ;   and   silverKey : Key { -	'small silver key' -	'small silver key' -	"A small key glints in the sunlight. " +        'small silver key' +        'small silver key' +        "A small key glints in the sunlight. "   }   Some constructs mandate one or the other, but usually the author has may choose @@ -665,7 +665,7 @@ static void ColouriseTADS3Doc(unsigned int startPos, int length, int initStyle,   Just seen a punctuation character & now waiting for an identifier to start.   expectingIdentifier == false && expectingIdentifier == truee - We were in an identifier and have seen space.	Now waiting to see a punctuation + We were in an identifier and have seen space.  Now waiting to see a punctuation   character   Space, comments & preprocessor directives are always acceptable and are @@ -677,24 +677,24 @@ static const int T3_EXPECTINGIDENTIFIER = 1 << 13;  static const int T3_EXPECTINGPUNCTUATION = 1 << 14;  static inline bool IsStringTransition(int s1, int s2) { -	return s1 != s2 -		&& (s1 == SCE_T3_S_STRING || s1 == SCE_T3_X_STRING -			|| s1 == SCE_T3_D_STRING && s2 != SCE_T3_X_DEFAULT) -		&& s2 != SCE_T3_LIB_DIRECTIVE -		&& s2 != SCE_T3_MSG_PARAM -		&& s2 != SCE_T3_HTML_TAG -		&& s2 != SCE_T3_HTML_STRING; +        return s1 != s2 +                && (s1 == SCE_T3_S_STRING || s1 == SCE_T3_X_STRING +                        || s1 == SCE_T3_D_STRING && s2 != SCE_T3_X_DEFAULT) +                && s2 != SCE_T3_LIB_DIRECTIVE +                && s2 != SCE_T3_MSG_PARAM +                && s2 != SCE_T3_HTML_TAG +                && s2 != SCE_T3_HTML_STRING;  }  static inline bool IsATADS3Punctuation(const int ch) { -	return ch == ':' || ch == ',' || ch == '(' || ch == ')'; +        return ch == ':' || ch == ',' || ch == '(' || ch == ')';  }  static inline bool IsAnIdentifier(const int style) { -	return style == SCE_T3_IDENTIFIER -		|| style == SCE_T3_USER1 -		|| style == SCE_T3_USER2 -		|| style == SCE_T3_USER3; +        return style == SCE_T3_IDENTIFIER +                || style == SCE_T3_USER1 +                || style == SCE_T3_USER2 +                || style == SCE_T3_USER3;  }  static inline bool IsAnOperator(const int style) { @@ -702,203 +702,203 @@ static inline bool IsAnOperator(const int style) {  }  static inline bool IsSpaceEquivalent(const int ch, const int style) { -	return isspace(ch) -		|| style == SCE_T3_BLOCK_COMMENT -		|| style == SCE_T3_LINE_COMMENT -		|| style == SCE_T3_PREPROCESSOR; +        return isspace(ch) +                || style == SCE_T3_BLOCK_COMMENT +                || style == SCE_T3_LINE_COMMENT +                || style == SCE_T3_PREPROCESSOR;  }  static char peekAhead(unsigned int startPos, unsigned int endPos, -					  Accessor &styler) { -	for (unsigned int i = startPos; i < endPos; i++) { -		int style = styler.StyleAt(i); -		char ch = styler[i]; -		if (!IsSpaceEquivalent(ch, style)) { -			if (IsAnIdentifier(style)) { -				return 'a'; -			} -			if (IsATADS3Punctuation(ch)) { -				return ':'; -			} -			if (ch == '{') { -				return '{'; -			} -			return '*'; -		} -	} -	return ' '; +                                          Accessor &styler) { +        for (unsigned int i = startPos; i < endPos; i++) { +                int style = styler.StyleAt(i); +                char ch = styler[i]; +                if (!IsSpaceEquivalent(ch, style)) { +                        if (IsAnIdentifier(style)) { +                                return 'a'; +                        } +                        if (IsATADS3Punctuation(ch)) { +                                return ':'; +                        } +                        if (ch == '{') { +                                return '{'; +                        } +                        return '*'; +                } +        } +        return ' ';  }  static void FoldTADS3Doc(unsigned int startPos, int length, int initStyle, -			    WordList *[], Accessor &styler) { -	unsigned int endPos = startPos + length; -	int lineCurrent = styler.GetLine(startPos); -	int levelCurrent = SC_FOLDLEVELBASE; -	if (lineCurrent > 0) -		levelCurrent = styler.LevelAt(lineCurrent-1) >> 16; -	int seenStart = levelCurrent & T3_SEENSTART; -	int expectingIdentifier = levelCurrent & T3_EXPECTINGIDENTIFIER; -	int expectingPunctuation = levelCurrent & T3_EXPECTINGPUNCTUATION; -	levelCurrent &= SC_FOLDLEVELNUMBERMASK; -	int levelMinCurrent = levelCurrent; -	int levelNext = levelCurrent; -	char chNext = styler[startPos]; -	int styleNext = styler.StyleAt(startPos); -	int style = initStyle; -	char ch = chNext; -	int stylePrev = style; -	bool redo = false; -	for (unsigned int i = startPos; i < endPos; i++) { -		if (redo) { -			redo = false; -			i--; -		} else { -			ch = chNext; -			chNext = styler.SafeGetCharAt(i + 1); -			stylePrev = style; -			style = styleNext; -			styleNext = styler.StyleAt(i + 1); -		} -		bool atEOL = IsEOL(ch, chNext); - -		if (levelNext == SC_FOLDLEVELBASE) { -			if (IsSpaceEquivalent(ch, style)) { -				if (expectingPunctuation) { -					expectingIdentifier = 0; -				} -				if (style == SCE_T3_BLOCK_COMMENT) { -					levelNext++; -				} -			} else if (ch == '{') { -				levelNext++; -				seenStart = 0; -			} else if (ch == '\'' || ch == '"' || ch == '[') { -				levelNext++; -				if (seenStart) { -					redo = true; -				} -			} else if (ch == ';') { -				seenStart = 0; -				expectingIdentifier = 0; -				expectingPunctuation = 0; -			} else if (expectingIdentifier && expectingPunctuation) { -				if (IsATADS3Punctuation(ch)) { -					if (ch == ')' && peekAhead(i+1, endPos, styler) != '{') { -						levelNext++; -					} else { -						expectingPunctuation = 0; -					} -				} else if (!IsAnIdentifier(style)) { -					levelNext++; -				} -			} else if (expectingIdentifier && !expectingPunctuation) { -				if (!IsAnIdentifier(style)) { -					levelNext++; -				} else { -					expectingPunctuation = T3_EXPECTINGPUNCTUATION; -				} -			} else if (!expectingIdentifier && expectingPunctuation) { -				if (!IsATADS3Punctuation(ch)) { -					levelNext++; -				} else { -					if (ch == ')' && peekAhead(i+1, endPos, styler) != '{') { -						levelNext++; -					} else { -						expectingIdentifier = T3_EXPECTINGIDENTIFIER; -						expectingPunctuation = 0; -					} -				} -			} else if (!expectingIdentifier && !expectingPunctuation) { -				if (IsAnIdentifier(style)) { -					seenStart = T3_SEENSTART; -					expectingIdentifier = T3_EXPECTINGIDENTIFIER; -					expectingPunctuation = T3_EXPECTINGPUNCTUATION; -				} -			} - -			if (levelNext != SC_FOLDLEVELBASE && style != SCE_T3_BLOCK_COMMENT) { -				expectingIdentifier = 0; -				expectingPunctuation = 0; -			} - -		} else if (levelNext == SC_FOLDLEVELBASE+1 && seenStart -				   && ch == ';' && IsAnOperator(style)) { -			levelNext--; -			seenStart = 0; -		} else if (style == SCE_T3_BLOCK_COMMENT) { -			if (stylePrev != SCE_T3_BLOCK_COMMENT) { -				levelNext++; -			} else if (styleNext != SCE_T3_BLOCK_COMMENT && !atEOL) { -				// Comments don't end at end of line and the next character may be unstyled. -				levelNext--; -			} -		} else if (ch == '\'' || ch == '"') { -			if (IsStringTransition(style, stylePrev)) { -				if (levelMinCurrent > levelNext) { -					levelMinCurrent = levelNext; -				} -				levelNext++; -			} else if (IsStringTransition(style, styleNext)) { -				levelNext--; -			} -		} else if (IsAnOperator(style)) { -			if (ch == '{' || ch == '[') { -				// Measure the minimum before a '{' to allow -				// folding on "} else {" -				if (levelMinCurrent > levelNext) { -					levelMinCurrent = levelNext; -				} -				levelNext++; -			} else if (ch == '}' || ch == ']') { -				levelNext--; -			} -		} - -		if (atEOL) { -			if (seenStart && levelNext == SC_FOLDLEVELBASE) { -				switch (peekAhead(i+1, endPos, styler)) { -					case ' ': -					case '{': -						break; -					case '*': -						levelNext++; -						break; -					case 'a': -						if (expectingPunctuation) { -							levelNext++; -						} -						break; -					case ':': -						if (expectingIdentifier) { -							levelNext++; -						} -						break; -				} -				if (levelNext != SC_FOLDLEVELBASE) { -					expectingIdentifier = 0; -					expectingPunctuation = 0; -				} -			} -			int lev = levelMinCurrent | (levelNext | expectingIdentifier -				| expectingPunctuation | seenStart) << 16; -			if (levelMinCurrent < levelNext) -				lev |= SC_FOLDLEVELHEADERFLAG; -			if (lev != styler.LevelAt(lineCurrent)) { -				styler.SetLevel(lineCurrent, lev); -			} -			lineCurrent++; -			levelCurrent = levelNext; -			levelMinCurrent = levelCurrent; -		} -	} +                            WordList *[], Accessor &styler) { +        unsigned int endPos = startPos + length; +        int lineCurrent = styler.GetLine(startPos); +        int levelCurrent = SC_FOLDLEVELBASE; +        if (lineCurrent > 0) +                levelCurrent = styler.LevelAt(lineCurrent-1) >> 16; +        int seenStart = levelCurrent & T3_SEENSTART; +        int expectingIdentifier = levelCurrent & T3_EXPECTINGIDENTIFIER; +        int expectingPunctuation = levelCurrent & T3_EXPECTINGPUNCTUATION; +        levelCurrent &= SC_FOLDLEVELNUMBERMASK; +        int levelMinCurrent = levelCurrent; +        int levelNext = levelCurrent; +        char chNext = styler[startPos]; +        int styleNext = styler.StyleAt(startPos); +        int style = initStyle; +        char ch = chNext; +        int stylePrev = style; +        bool redo = false; +        for (unsigned int i = startPos; i < endPos; i++) { +                if (redo) { +                        redo = false; +                        i--; +                } else { +                        ch = chNext; +                        chNext = styler.SafeGetCharAt(i + 1); +                        stylePrev = style; +                        style = styleNext; +                        styleNext = styler.StyleAt(i + 1); +                } +                bool atEOL = IsEOL(ch, chNext); + +                if (levelNext == SC_FOLDLEVELBASE) { +                        if (IsSpaceEquivalent(ch, style)) { +                                if (expectingPunctuation) { +                                        expectingIdentifier = 0; +                                } +                                if (style == SCE_T3_BLOCK_COMMENT) { +                                        levelNext++; +                                } +                        } else if (ch == '{') { +                                levelNext++; +                                seenStart = 0; +                        } else if (ch == '\'' || ch == '"' || ch == '[') { +                                levelNext++; +                                if (seenStart) { +                                        redo = true; +                                } +                        } else if (ch == ';') { +                                seenStart = 0; +                                expectingIdentifier = 0; +                                expectingPunctuation = 0; +                        } else if (expectingIdentifier && expectingPunctuation) { +                                if (IsATADS3Punctuation(ch)) { +                                        if (ch == ')' && peekAhead(i+1, endPos, styler) != '{') { +                                                levelNext++; +                                        } else { +                                                expectingPunctuation = 0; +                                        } +                                } else if (!IsAnIdentifier(style)) { +                                        levelNext++; +                                } +                        } else if (expectingIdentifier && !expectingPunctuation) { +                                if (!IsAnIdentifier(style)) { +                                        levelNext++; +                                } else { +                                        expectingPunctuation = T3_EXPECTINGPUNCTUATION; +                                } +                        } else if (!expectingIdentifier && expectingPunctuation) { +                                if (!IsATADS3Punctuation(ch)) { +                                        levelNext++; +                                } else { +                                        if (ch == ')' && peekAhead(i+1, endPos, styler) != '{') { +                                                levelNext++; +                                        } else { +                                                expectingIdentifier = T3_EXPECTINGIDENTIFIER; +                                                expectingPunctuation = 0; +                                        } +                                } +                        } else if (!expectingIdentifier && !expectingPunctuation) { +                                if (IsAnIdentifier(style)) { +                                        seenStart = T3_SEENSTART; +                                        expectingIdentifier = T3_EXPECTINGIDENTIFIER; +                                        expectingPunctuation = T3_EXPECTINGPUNCTUATION; +                                } +                        } + +                        if (levelNext != SC_FOLDLEVELBASE && style != SCE_T3_BLOCK_COMMENT) { +                                expectingIdentifier = 0; +                                expectingPunctuation = 0; +                        } + +                } else if (levelNext == SC_FOLDLEVELBASE+1 && seenStart +                                   && ch == ';' && IsAnOperator(style)) { +                        levelNext--; +                        seenStart = 0; +                } else if (style == SCE_T3_BLOCK_COMMENT) { +                        if (stylePrev != SCE_T3_BLOCK_COMMENT) { +                                levelNext++; +                        } else if (styleNext != SCE_T3_BLOCK_COMMENT && !atEOL) { +                                // Comments don't end at end of line and the next character may be unstyled. +                                levelNext--; +                        } +                } else if (ch == '\'' || ch == '"') { +                        if (IsStringTransition(style, stylePrev)) { +                                if (levelMinCurrent > levelNext) { +                                        levelMinCurrent = levelNext; +                                } +                                levelNext++; +                        } else if (IsStringTransition(style, styleNext)) { +                                levelNext--; +                        } +                } else if (IsAnOperator(style)) { +                        if (ch == '{' || ch == '[') { +                                // Measure the minimum before a '{' to allow +                                // folding on "} else {" +                                if (levelMinCurrent > levelNext) { +                                        levelMinCurrent = levelNext; +                                } +                                levelNext++; +                        } else if (ch == '}' || ch == ']') { +                                levelNext--; +                        } +                } + +                if (atEOL) { +                        if (seenStart && levelNext == SC_FOLDLEVELBASE) { +                                switch (peekAhead(i+1, endPos, styler)) { +                                        case ' ': +                                        case '{': +                                                break; +                                        case '*': +                                                levelNext++; +                                                break; +                                        case 'a': +                                                if (expectingPunctuation) { +                                                        levelNext++; +                                                } +                                                break; +                                        case ':': +                                                if (expectingIdentifier) { +                                                        levelNext++; +                                                } +                                                break; +                                } +                                if (levelNext != SC_FOLDLEVELBASE) { +                                        expectingIdentifier = 0; +                                        expectingPunctuation = 0; +                                } +                        } +                        int lev = levelMinCurrent | (levelNext | expectingIdentifier +                                | expectingPunctuation | seenStart) << 16; +                        if (levelMinCurrent < levelNext) +                                lev |= SC_FOLDLEVELHEADERFLAG; +                        if (lev != styler.LevelAt(lineCurrent)) { +                                styler.SetLevel(lineCurrent, lev); +                        } +                        lineCurrent++; +                        levelCurrent = levelNext; +                        levelMinCurrent = levelCurrent; +                } +        }  }  static const char * const tads3WordList[] = { -	"TADS3 Keywords", -	"User defined 1", -	"User defined 2", -	"User defined 3", -	0 +        "TADS3 Keywords", +        "User defined 1", +        "User defined 2", +        "User defined 3", +        0  };  LexerModule lmTADS3(SCLEX_TADS3, ColouriseTADS3Doc, "tads3", FoldTADS3Doc, tads3WordList); | 
