From d6b296827686f29bd497e1185384758ce7406b6f Mon Sep 17 00:00:00 2001 From: Takashi Sawanaka Date: Sat, 23 Nov 2019 09:53:49 +0900 Subject: [PATCH] Fix osdn issue #39771: an identifier before an apostrophe is not highlighted. --- Externals/crystaledit/editlib/basic.cpp | 95 +++++++++++++-------------------- 1 file changed, 37 insertions(+), 58 deletions(-) diff --git a/Externals/crystaledit/editlib/basic.cpp b/Externals/crystaledit/editlib/basic.cpp index 357802ef4..68a867d50 100644 --- a/Externals/crystaledit/editlib/basic.cpp +++ b/Externals/crystaledit/editlib/basic.cpp @@ -339,6 +339,39 @@ IsBasicNumber (LPCTSTR pszChars, int nLength) return true; } +inline void +DefineIdentiferBlock(const TCHAR *pszChars, int nLength, CrystalLineParser::TEXTBLOCK * pBuf, int &nActualItems, int nIdentBegin, int I) +{ + if (IsBasicKeyword (pszChars + nIdentBegin, I - nIdentBegin)) + { + DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); + } + else if (IsBasicNumber (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); + } + } +} + DWORD CrystalLineParser::ParseLineBasic (DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems) { @@ -417,6 +450,8 @@ out: if (pszChars[I] == '\'') { + if (nIdentBegin >= 0) + DefineIdentiferBlock(pszChars, nLength, pBuf, nActualItems, nIdentBegin, I); DEFINE_BLOCK (I, COLORINDEX_COMMENT); dwCookie |= COOKIE_COMMENT; break; @@ -449,34 +484,7 @@ out: { if (nIdentBegin >= 0) { - if (IsBasicKeyword (pszChars + nIdentBegin, I - nIdentBegin)) - { - DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); - } - else if (IsBasicNumber (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); - } - } + DefineIdentiferBlock(pszChars, nLength, pBuf, nActualItems, nIdentBegin, I); bRedefineBlock = true; bDecIndex = true; nIdentBegin = -1; @@ -485,36 +493,7 @@ out: } if (nIdentBegin >= 0) - { - if (IsBasicKeyword (pszChars + nIdentBegin, I - nIdentBegin)) - { - DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD); - } - else if (IsBasicNumber (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); - } - } - } + DefineIdentiferBlock(pszChars, nLength, pBuf, nActualItems, nIdentBegin, I); dwCookie &= COOKIE_EXT_COMMENT; return dwCookie; -- 2.11.0