DWORD CCrystalTextView:: ParseLineSiod (DWORD dwCookie, int nLineIndex, TEXTBLOCK * pBuf, int &nActualItems) { int nLength = GetLineLength (nLineIndex); if (nLength == 0) return dwCookie & COOKIE_EXT_COMMENT; LPCTSTR pszChars = GetLineChars (nLineIndex); BOOL bFirstChar = (dwCookie & ~COOKIE_EXT_COMMENT) == 0; BOOL bRedefineBlock = TRUE; BOOL bWasCommentStart = FALSE; BOOL bDecIndex = FALSE; int nIdentBegin = -1; BOOL bDefun = FALSE; int nPrevI = -1; int I=0; for (I = 0;; nPrevI = I, I = ::CharNext(pszChars+I) - pszChars) { if (I == nPrevI) { // CharNext did not advance, so we're at the end of the string // and we already handled this character, so stop break; } if (bRedefineBlock) { int nPos = I; if (bDecIndex) nPos = nPrevI; if (dwCookie & (COOKIE_COMMENT | COOKIE_EXT_COMMENT)) { DEFINE_BLOCK (nPos, COLORINDEX_COMMENT); } else if (dwCookie & (COOKIE_CHAR | COOKIE_STRING)) { DEFINE_BLOCK (nPos, COLORINDEX_STRING); } else { if (xisalnum (pszChars[nPos]) || pszChars[nPos] == '.') { DEFINE_BLOCK (nPos, COLORINDEX_NORMALTEXT); } else { DEFINE_BLOCK (nPos, COLORINDEX_OPERATOR); bRedefineBlock = TRUE; bDecIndex = TRUE; goto out; } } bRedefineBlock = FALSE; bDecIndex = FALSE; } out: // Can be bigger than length if there is binary data // See bug #1474782 Crash when comparing SQL with with binary data if (I >= nLength) break; if (dwCookie & COOKIE_COMMENT) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } // String constant "...." if (dwCookie & COOKIE_STRING) { if (pszChars[I] == '"' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || pszChars[nPrevI] == '\\' && *::CharPrev(pszChars, pszChars + nPrevI) == '\\'))) { dwCookie &= ~COOKIE_STRING; bRedefineBlock = TRUE; } continue; } // Char constant '..' if (dwCookie & COOKIE_CHAR) { if (pszChars[I] == '\'' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || pszChars[nPrevI] == '\\' && *::CharPrev(pszChars, pszChars + nPrevI) == '\\'))) { dwCookie &= ~COOKIE_CHAR; bRedefineBlock = TRUE; } continue; } // Extended comment /*....*/ if (dwCookie & COOKIE_EXT_COMMENT) { // if (I > 0 && pszChars[I] == ';' && pszChars[nPrevI] == '|') if ((I > 1 && pszChars[I] == ';' && pszChars[nPrevI] == '|' /*&& *::CharPrev(pszChars, pszChars + nPrevI) != ';'*/ && !bWasCommentStart) || (I == 1 && pszChars[I] == ';' && pszChars[nPrevI] == '|')) { dwCookie &= ~COOKIE_EXT_COMMENT; bRedefineBlock = TRUE; } bWasCommentStart = FALSE; continue; } if (I > 0 && pszChars[I] != '|' && pszChars[nPrevI] == ';') { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } // Normal text if (pszChars[I] == '"') { DEFINE_BLOCK (I, COLORINDEX_STRING); dwCookie |= COOKIE_STRING; continue; } if (pszChars[I] == '\'') { // if (I + 1 < nLength && pszChars[I + 1] == '\'' || I + 2 < nLength && pszChars[I + 1] != '\\' && pszChars[I + 2] == '\'' || I + 3 < nLength && pszChars[I + 1] == '\\' && pszChars[I + 3] == '\'') if (!I || !xisalnum (pszChars[nPrevI])) { DEFINE_BLOCK (I, COLORINDEX_STRING); dwCookie |= COOKIE_CHAR; continue; } } if (I > 0 && pszChars[I] == '|' && pszChars[nPrevI] == ';') { DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT); dwCookie |= COOKIE_EXT_COMMENT; bWasCommentStart = TRUE; continue; } bWasCommentStart = FALSE; if (bFirstChar) { if (!xisspace (pszChars[I])) bFirstChar = FALSE; } if (pBuf == NULL) continue; // We don't need to extract keywords, // for faster parsing skip the rest of loop if (xisalnum (pszChars[I]) || pszChars[I] == '.') { if (nIdentBegin == -1) nIdentBegin = I; } else { if (nIdentBegin >= 0) { if (IsSiodKeyword (pszChars + nIdentBegin, I - nIdentBegin)) { if (!_tcsnicmp (_T ("defun"), pszChars + nIdentBegin, 5)) { bDefun = TRUE; } DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); } else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1); } else if (IsUser2Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER2); } else if (IsSiodNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } else { bool bFunction = FALSE; if (!bDefun) { for (int j = nIdentBegin; --j >= 0;) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = TRUE; } break; } } } if (!bFunction) { for (int j = I; j >= 0; j--) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = TRUE; } break; } } } if (bFunction) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME); } } bRedefineBlock = TRUE; bDecIndex = TRUE; nIdentBegin = -1; } } } if (nIdentBegin >= 0) { if (IsSiodKeyword (pszChars + nIdentBegin, I - nIdentBegin)) { if (!_tcsnicmp (_T ("defun"), pszChars + nIdentBegin, 5)) { bDefun = TRUE; } DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); } else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1); } else if (IsUser2Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER2); } else if (IsSiodNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } else { bool bFunction = FALSE; if (!bDefun) { for (int j = nIdentBegin; --j >= 0;) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = TRUE; } break; } } } if (!bFunction) { for (int j = I; j >= 0; j--) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = TRUE; } break; } } } if (bFunction) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME); } } } dwCookie &= COOKIE_EXT_COMMENT; return dwCookie; }
DWORD CrystalLineParser::ParseLineAsp (DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems) { if (nLength == 0) return dwCookie & (COOKIE_EXT_COMMENT|COOKIE_EXT_USER1); bool bFirstChar = (dwCookie & ~(COOKIE_EXT_COMMENT|COOKIE_EXT_USER1)) == 0; bool bRedefineBlock = true; bool bDecIndex = false; int nIdentBegin = -1; int nPrevI = -1; int I=0; for (I = 0;; nPrevI = I, I = static_cast<int>(::CharNext(pszChars+I) - pszChars)) { if (I == nPrevI) { // CharNext did not advance, so we're at the end of the string // and we already handled this character, so stop break; } if (bRedefineBlock) { int nPos = I; if (bDecIndex) nPos = nPrevI; if (dwCookie & (COOKIE_COMMENT | COOKIE_EXT_COMMENT)) { DEFINE_BLOCK (nPos, COLORINDEX_COMMENT); } else if (dwCookie & (COOKIE_CHAR | COOKIE_STRING)) { DEFINE_BLOCK (nPos, COLORINDEX_STRING); } else if (dwCookie & COOKIE_PREPROCESSOR) { DEFINE_BLOCK (nPos, COLORINDEX_PREPROCESSOR); } else if (dwCookie & COOKIE_EXT_USER1) { DEFINE_BLOCK (nPos, COLORINDEX_NORMALTEXT); } else { if (xisalnum (pszChars[nPos]) || pszChars[nPos] == '.') { DEFINE_BLOCK (nPos, COLORINDEX_NORMALTEXT); } else { DEFINE_BLOCK (nPos, COLORINDEX_OPERATOR); bRedefineBlock = true; bDecIndex = true; goto out; } } bRedefineBlock = false; bDecIndex = false; } out: // Can be bigger than length if there is binary data // See bug #1474782 Crash when comparing SQL with with binary data if (I >= nLength || pszChars[I] == 0) break; if (dwCookie & COOKIE_COMMENT) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } // String constant "...." if (dwCookie & COOKIE_STRING) { if (pszChars[I] == '"' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || *::CharPrev(pszChars, pszChars + nPrevI) == '\\'))) { dwCookie &= ~COOKIE_STRING; bRedefineBlock = true; } continue; } // Char constant '..' if (dwCookie & COOKIE_CHAR) { if (pszChars[I] == '\'' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || *::CharPrev(pszChars, pszChars + nPrevI) == '\\'))) { dwCookie &= ~COOKIE_CHAR; bRedefineBlock = true; } continue; } // Extended comment <!--....--> if (dwCookie & COOKIE_EXT_COMMENT) { if (!(dwCookie & COOKIE_EXT_USER1)) { if (I > 1 && pszChars[I] == '>' && pszChars[nPrevI] == '-' && *::CharPrev(pszChars, pszChars + nPrevI) == '-') { dwCookie &= ~COOKIE_EXT_COMMENT; bRedefineBlock = true; } } continue; } if ((dwCookie & COOKIE_EXT_USER1) && pszChars[I] == '\'') { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } // Extended comment <?....?> if (dwCookie & COOKIE_EXT_USER1) { if (I > 0 && pszChars[I] == '>' && (pszChars[nPrevI] == '?' || pszChars[nPrevI] == '%')) { dwCookie &= ~COOKIE_EXT_USER1; bRedefineBlock = true; continue; } } // Normal text if ((dwCookie & (COOKIE_PREPROCESSOR|COOKIE_EXT_USER1)) && pszChars[I] == '"') { DEFINE_BLOCK (I, COLORINDEX_STRING); dwCookie |= COOKIE_STRING; continue; } if ((dwCookie & (COOKIE_PREPROCESSOR|COOKIE_EXT_USER1)) && pszChars[I] == '\'') { // if (I + 1 < nLength && pszChars[I + 1] == '\'' || I + 2 < nLength && pszChars[I + 1] != '\\' && pszChars[I + 2] == '\'' || I + 3 < nLength && pszChars[I + 1] == '\\' && pszChars[I + 3] == '\'') if (!I || !xisalnum (pszChars[nPrevI])) { DEFINE_BLOCK (I, COLORINDEX_STRING); dwCookie |= COOKIE_CHAR; continue; } } if (!(dwCookie & COOKIE_EXT_USER1)) { if (!(dwCookie & COOKIE_EXT_USER1) && I < nLength - 3 && pszChars[I] == '<' && pszChars[I + 1] == '!' && pszChars[I + 2] == '-' && pszChars[I + 3] == '-') { DEFINE_BLOCK (I, COLORINDEX_COMMENT); I += 3; dwCookie |= COOKIE_EXT_COMMENT; dwCookie &= ~COOKIE_PREPROCESSOR; continue; } } if (bFirstChar) { if (!xisspace (pszChars[I])) bFirstChar = false; } // User1 start: <? if (I < nLength && pszChars[I] == '<' && I < nLength - 1 && (pszChars[I + 1] == '?' || pszChars[I + 1] == '%')) { DEFINE_BLOCK (I, COLORINDEX_NORMALTEXT); dwCookie |= COOKIE_EXT_USER1; nIdentBegin = -1; continue; } if (pBuf == nullptr) continue; // We don't need to extract keywords, // for faster parsing skip the rest of loop if (xisalnum (pszChars[I]) || pszChars[I] == '.') { if (nIdentBegin == -1) nIdentBegin = I; } else { if (nIdentBegin >= 0) { if (dwCookie & COOKIE_PREPROCESSOR) { if (IsHtmlKeyword (pszChars + nIdentBegin, I - nIdentBegin) && (pszChars[nIdentBegin - 1] == _T ('<') || pszChars[nIdentBegin - 1] == _T ('/'))) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); } else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1); } else if (IsAspNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } else { goto next; } } else if (dwCookie & COOKIE_EXT_USER1) { if (IsAspKeyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); } else if (IsAspNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } else { bool bFunction = false; for (int j = I; j < nLength; j++) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = true; } break; } } if (bFunction) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME); } else { goto next; } } } else if (dwCookie & COOKIE_USER1) { if (IsUser2Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER2); } else { goto next; } } bRedefineBlock = true; bDecIndex = true; nIdentBegin = -1; next: ; } // Preprocessor start: < or bracket if (!(dwCookie & COOKIE_EXT_USER1) && I < nLength && pszChars[I] == '<' && !(I < nLength - 3 && pszChars[I + 1] == '!' && pszChars[I + 2] == '-' && pszChars[I + 3] == '-')) { DEFINE_BLOCK (I, COLORINDEX_OPERATOR); DEFINE_BLOCK (I + 1, COLORINDEX_PREPROCESSOR); dwCookie |= COOKIE_PREPROCESSOR; nIdentBegin = -1; continue; } // User1 end: ?> if (dwCookie & COOKIE_EXT_USER1) { if (I > 0 && pszChars[I] == '>' && (pszChars[nPrevI] == '?' || pszChars[nPrevI] == '%')) { dwCookie &= ~COOKIE_EXT_USER1; nIdentBegin = -1; bRedefineBlock = true; bDecIndex = true; continue; } } // Preprocessor end: > or bracket if (dwCookie & COOKIE_PREPROCESSOR) { if (pszChars[I] == '>') { dwCookie &= ~COOKIE_PREPROCESSOR; nIdentBegin = -1; bRedefineBlock = true; bDecIndex = true; continue; } } // Preprocessor start: & if (!(dwCookie & COOKIE_EXT_USER1) && pszChars[I] == '&') { dwCookie |= COOKIE_USER1; nIdentBegin = -1; continue; } // Preprocessor end: ; if (dwCookie & COOKIE_USER1) { if (pszChars[I] == ';') { dwCookie &= ~COOKIE_USER1; nIdentBegin = -1; continue; } } } } if (nIdentBegin >= 0 && (dwCookie & COOKIE_PREPROCESSOR)) { if (IsHtmlKeyword (pszChars + nIdentBegin, I - nIdentBegin) && (pszChars[nIdentBegin - 1] == _T ('<') || pszChars[nIdentBegin - 1] == _T ('/'))) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); } else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1); } else if (IsUser2Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER2); } else if (IsAspNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } else { bool bFunction = false; for (int j = I; j < nLength; j++) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = true; } break; } } if (bFunction) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME); } } } else if (nIdentBegin >= 0 && (dwCookie & COOKIE_EXT_USER1)) { if (IsAspKeyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); } else if (IsAspNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } else { bool bFunction = false; for (int j = I; j < nLength; j++) { if (!xisspace (pszChars[j])) { if (pszChars[j] == '(') { bFunction = true; } break; } } if (bFunction) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME); } } } dwCookie &= (COOKIE_EXT_COMMENT | COOKIE_STRING | COOKIE_PREPROCESSOR | COOKIE_EXT_USER1); return dwCookie; }
DWORD CCrystalTextView:: ParseLineBatch (DWORD dwCookie, int nLineIndex, TEXTBLOCK * pBuf, int &nActualItems) { int nLength = GetLineLength (nLineIndex); if (nLength == 0) return dwCookie & COOKIE_EXT_COMMENT; LPCTSTR pszChars = GetLineChars (nLineIndex); bool bFirstChar = (dwCookie & ~COOKIE_EXT_COMMENT) == 0; bool bRedefineBlock = true; bool bDecIndex = false; int nIdentBegin = -1; int nPrevI = -1; int I=0; for (I = 0;; nPrevI = I, I = CharNext(pszChars+I) - pszChars) { if (I == nPrevI) { // CharNext did not advance, so we're at the end of the string // and we already handled this character, so stop break; } if (bRedefineBlock) { int nPos = I; if (bDecIndex) nPos = nPrevI; if (dwCookie & (COOKIE_COMMENT | COOKIE_EXT_COMMENT)) { DEFINE_BLOCK (nPos, COLORINDEX_COMMENT); } else if (dwCookie & (COOKIE_CHAR | COOKIE_STRING)) { DEFINE_BLOCK (nPos, COLORINDEX_STRING); } else if (dwCookie & COOKIE_PREPROCESSOR) { DEFINE_BLOCK (nPos, COLORINDEX_PREPROCESSOR); } else { if (pszChars[nPos] == _T ('_') || pszChars[nPos] == _T ('@') || xisalnum (pszChars[nPos]) || pszChars[nPos] == '.') { DEFINE_BLOCK (nPos, COLORINDEX_NORMALTEXT); } else { DEFINE_BLOCK (nPos, COLORINDEX_OPERATOR); bRedefineBlock = true; bDecIndex = true; goto out; } } bRedefineBlock = false; bDecIndex = false; } out: // Can be bigger than length if there is binary data // See bug #1474782 Crash when comparing SQL with with binary data if (I >= nLength) break; if (dwCookie & COOKIE_COMMENT) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } // String constant "...." if (dwCookie & COOKIE_STRING) { if (pszChars[I] == '"' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || pszChars[nPrevI] == '\\' && *::CharPrev(pszChars, pszChars + nPrevI) == '\\'))) { dwCookie &= ~COOKIE_STRING; bRedefineBlock = true; } continue; } // Char constant '..' if (dwCookie & COOKIE_CHAR) { if (pszChars[I] == '\'' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || pszChars[nPrevI] == '\\' && *::CharPrev(pszChars, pszChars + nPrevI) == '\\'))) { dwCookie &= ~COOKIE_CHAR; bRedefineBlock = true; } continue; } if (dwCookie & COOKIE_PREPROCESSOR) { DEFINE_BLOCK (I, COLORINDEX_PREPROCESSOR); dwCookie |= COOKIE_PREPROCESSOR; break; } // Normal text if (pszChars[I] == '"') { DEFINE_BLOCK (I, COLORINDEX_STRING); dwCookie |= COOKIE_STRING; continue; } if (pszChars[I] == '\'') { // if (I + 1 < nLength && pszChars[I + 1] == '\'' || I + 2 < nLength && pszChars[I + 1] != '\\' && pszChars[I + 2] == '\'' || I + 3 < nLength && pszChars[I + 1] == '\\' && pszChars[I + 3] == '\'') if (!I || !xisalnum (pszChars[nPrevI])) { DEFINE_BLOCK (I, COLORINDEX_STRING); dwCookie |= COOKIE_CHAR; continue; } } if (bFirstChar) { if (nLength >= I + 4 &&!_tcsnicmp (pszChars + I, _T ("TEXT"), 4)) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_EXT_COMMENT; continue; } if (nLength >= I + 7 &&!_tcsnicmp (pszChars + I, _T ("ENDTEXT"), 7)) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie &= ~COOKIE_EXT_COMMENT; continue; } if (dwCookie & COOKIE_EXT_COMMENT) continue; if (nLength >= I + 3 && !_tcsnicmp (pszChars + I, _T ("REM"), 3) && (xisspace (pszChars[I + 3]) || nLength == I + 3)) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } if (pszChars[I] == ':') { if (nLength > I + 2 && !(xisalnum (pszChars[I+1]) || xisspace (pszChars[I+1]))) { DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; } DEFINE_BLOCK (I, COLORINDEX_PREPROCESSOR); dwCookie |= COOKIE_PREPROCESSOR; continue; } if (!xisspace (pszChars[I])) bFirstChar = false; } if (pBuf == NULL) continue; // We don't need to extract keywords, // for faster parsing skip the rest of loop if (pszChars[I] == _T ('_') || pszChars[I] == _T ('@') || xisalnum (pszChars[I]) || pszChars[I] == '.') { if (nIdentBegin == -1) nIdentBegin = I; } else { if (nIdentBegin >= 0) { if ((dwCookie & COOKIE_PREPROCESSOR)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_PREPROCESSOR); } else { if (dwCookie & COOKIE_EXT_COMMENT) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_COMMENT); } else if (IsBatKeyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); if ((I - nIdentBegin ==4 && !_tcsnicmp (pszChars + nIdentBegin, _T ("GOTO"), 4)) || (I - nIdentBegin ==5 && !_tcsnicmp (pszChars + nIdentBegin, _T ("GOSUB"), 5)) ) { dwCookie=COOKIE_PREPROCESSOR; } } else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1); } else if (IsUser2Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER2); } else if (IsBatNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } } bRedefineBlock = true; bDecIndex = true; nIdentBegin = -1; } } } if (nIdentBegin >= 0) { if (dwCookie & COOKIE_EXT_COMMENT) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_COMMENT); } else if (IsBatKeyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); if ((I - nIdentBegin ==4 && !_tcsnicmp (pszChars + nIdentBegin, _T ("GOTO"), 4)) || (I - nIdentBegin ==5 && !_tcsnicmp (pszChars + nIdentBegin, _T ("GOSUB"), 5)) ) { dwCookie=COOKIE_PREPROCESSOR; } } else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1); } else if (IsUser2Keyword (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER2); } else if (IsBatNumber (pszChars + nIdentBegin, I - nIdentBegin)) { DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER); } } dwCookie &= COOKIE_EXT_COMMENT; return dwCookie; }