OSDN Git Service

editlib: Add Lua syntax highlighting
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 17 Mar 2019 13:28:43 +0000 (22:28 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 17 Mar 2019 13:28:43 +0000 (22:28 +0900)
53 files changed:
Externals/crystaledit/Sample/SampleStatic.vs2015.vcxproj
Externals/crystaledit/Sample/SampleStatic.vs2015.vcxproj.filters
Externals/crystaledit/Sample/SampleStatic.vs2017.vcxproj
Externals/crystaledit/Sample/SampleStatic.vs2017.vcxproj.filters
Externals/crystaledit/Sample/SampleStatic.vs2019.vcxproj
Externals/crystaledit/Sample/SampleStatic.vs2019.vcxproj.filters
Externals/crystaledit/editlib/ccrystaltextview.cpp
Externals/crystaledit/editlib/ccrystaltextview.h
Externals/crystaledit/editlib/crystallineparser.h
Externals/crystaledit/editlib/lua.cpp [new file with mode: 0644]
Src/Merge.rc
Src/Merge.vs2015.vcxproj
Src/Merge.vs2015.vcxproj.filters
Src/Merge.vs2017.vcxproj
Src/Merge.vs2017.vcxproj.filters
Src/Merge.vs2019.vcxproj
Src/Merge.vs2019.vcxproj.filters
Src/resource.h
Translations/WinMerge/Basque.po
Translations/WinMerge/Brazilian.po
Translations/WinMerge/Bulgarian.po
Translations/WinMerge/Catalan.po
Translations/WinMerge/ChineseSimplified.po
Translations/WinMerge/ChineseTraditional.po
Translations/WinMerge/Croatian.po
Translations/WinMerge/Czech.po
Translations/WinMerge/Danish.po
Translations/WinMerge/Dutch.po
Translations/WinMerge/English.pot
Translations/WinMerge/Finnish.po
Translations/WinMerge/French.po
Translations/WinMerge/Galician.po
Translations/WinMerge/German.po
Translations/WinMerge/Greek.po
Translations/WinMerge/Hungarian.po
Translations/WinMerge/Italian.po
Translations/WinMerge/Japanese.po
Translations/WinMerge/Korean.po
Translations/WinMerge/Lithuanian.po
Translations/WinMerge/Norwegian.po
Translations/WinMerge/Persian.po
Translations/WinMerge/Polish.po
Translations/WinMerge/Portuguese.po
Translations/WinMerge/Romanian.po
Translations/WinMerge/Russian.po
Translations/WinMerge/Serbian.po
Translations/WinMerge/Sinhala.po
Translations/WinMerge/Slovak.po
Translations/WinMerge/Slovenian.po
Translations/WinMerge/Spanish.po
Translations/WinMerge/Swedish.po
Translations/WinMerge/Turkish.po
Translations/WinMerge/Ukrainian.po

index 8b290d2..68f73e9 100644 (file)
     <ClCompile Include="..\editlib\java.cpp" />\r
     <ClCompile Include="..\editlib\LineInfo.cpp" />\r
     <ClCompile Include="..\editlib\lisp.cpp" />\r
+    <ClCompile Include="..\editlib\lua.cpp" />\r
     <ClCompile Include="..\editlib\memcombo.cpp" />\r
     <ClCompile Include="..\editlib\nsis.cpp" />\r
     <ClCompile Include="..\editlib\pascal.cpp" />\r
index 830bf40..967f934 100644 (file)
     <ClCompile Include="..\editlib\plain.cpp">\r
       <Filter>editlib\parsers</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\editlib\lua.cpp">\r
+      <Filter>editlib\parsers</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="Sample.rc">\r
index 1da5677..6463916 100644 (file)
     <ClCompile Include="..\editlib\java.cpp" />\r
     <ClCompile Include="..\editlib\LineInfo.cpp" />\r
     <ClCompile Include="..\editlib\lisp.cpp" />\r
+    <ClCompile Include="..\editlib\lua.cpp" />\r
     <ClCompile Include="..\editlib\memcombo.cpp" />\r
     <ClCompile Include="..\editlib\nsis.cpp" />\r
     <ClCompile Include="..\editlib\pascal.cpp" />\r
index 830bf40..967f934 100644 (file)
     <ClCompile Include="..\editlib\plain.cpp">\r
       <Filter>editlib\parsers</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\editlib\lua.cpp">\r
+      <Filter>editlib\parsers</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ResourceCompile Include="Sample.rc">\r
index 86e02da..81c17cf 100644 (file)
     <ClCompile Include="..\editlib\java.cpp" />
     <ClCompile Include="..\editlib\LineInfo.cpp" />
     <ClCompile Include="..\editlib\lisp.cpp" />
+    <ClCompile Include="..\editlib\lua.cpp" />
     <ClCompile Include="..\editlib\memcombo.cpp" />
     <ClCompile Include="..\editlib\nsis.cpp" />
     <ClCompile Include="..\editlib\pascal.cpp" />
index 259d561..e24c9b3 100644 (file)
     <ClCompile Include="..\editlib\plain.cpp">
       <Filter>editlib\parsers</Filter>
     </ClCompile>
+    <ClCompile Include="..\editlib\lua.cpp">
+      <Filter>editlib\parsers</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="Sample.rc">
index e19e704..e18fba8 100644 (file)
@@ -302,6 +302,7 @@ CCrystalTextView::TextDefinition CCrystalTextView::m_SourceDefs[] =
     CCrystalTextView::SRC_INSTALLSHIELD, _T ("InstallShield"), _T ("rul"), &CrystalLineParser::ParseLineIS, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T ("//"), (DWORD)-1,
     CCrystalTextView::SRC_JAVA, _T ("Java"), _T ("java,jav,js"), &CrystalLineParser::ParseLineJava, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T ("//"), (DWORD)-1,
     CCrystalTextView::SRC_LISP, _T ("AutoLISP"), _T ("lsp,dsl"), &CrystalLineParser::ParseLineLisp, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T (";|"), _T ("|;"), _T (";"), (DWORD)-1,
+    CCrystalTextView::SRC_LUA, _T ("Lua"), _T ("lua"), &CrystalLineParser::ParseLineLua, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("--[["), _T ("--]]"), _T ("--"), (DWORD)-1,
     CCrystalTextView::SRC_NSIS, _T ("NSIS"), _T ("nsi,nsh"), &CrystalLineParser::ParseLineNsis, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T (";"), (DWORD)-1,
     CCrystalTextView::SRC_PASCAL, _T ("Pascal"), _T ("pas"), &CrystalLineParser::ParseLinePascal, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("{"), _T ("}"), _T (""), (DWORD)-1,
     CCrystalTextView::SRC_PERL, _T ("Perl"), _T ("pl,pm,plx"), &CrystalLineParser::ParseLinePerl, SRCOPT_AUTOINDENT|SRCOPT_EOLNUNIX, /*4,*/ _T (""), _T (""), _T ("#"), (DWORD)-1,
index eff164c..c17c61d 100644 (file)
@@ -724,6 +724,7 @@ public :
       SRC_INSTALLSHIELD,
       SRC_JAVA,
       SRC_LISP,
+      SRC_LUA,
       SRC_NSIS,
       SRC_PASCAL,
       SRC_PERL,
index 2a5a914..54f5e47 100644 (file)
@@ -32,6 +32,8 @@ if (pBuf != nullptr)\
 #define COOKIE_SET_EXT_COMMENT_DEPTH(cookie, depth) (cookie) = (((cookie) & 0xF0FFFFFF) | ((depth) << 24))\r
 #define COOKIE_GET_RAWSTRING_NUMBER_COUNT(cookie) (((cookie) & 0xF0000000) >> 28)\r
 #define COOKIE_SET_RAWSTRING_NUMBER_COUNT(cookie, count) (cookie) = (((cookie) & 0x0FFFFFFF) | ((count) << 28))\r
+#define COOKIE_GET_LUA_EQUALS_SIGN_COUNT(cookie) (((cookie) & 0xF0000000) >> 28)\r
+#define COOKIE_SET_LUA_EQUALS_SIGN_COUNT(cookie, count) (cookie) = (((cookie) & 0x0FFFFFFF) | ((count) << 28))\r
 \r
 namespace CrystalLineParser\r
 {\r
@@ -59,6 +61,7 @@ DWORD ParseLineInnoSetup(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEX
 DWORD ParseLineIS(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
 DWORD ParseLineJava(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
 DWORD ParseLineLisp(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
+DWORD ParseLineLua(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
 DWORD ParseLineNsis(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
 DWORD ParseLinePascal(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
 DWORD ParseLinePerl(DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
diff --git a/Externals/crystaledit/editlib/lua.cpp b/Externals/crystaledit/editlib/lua.cpp
new file mode 100644 (file)
index 0000000..4371a7a
--- /dev/null
@@ -0,0 +1,355 @@
+///////////////////////////////////////////////////////////////////////////\r
+//  File:       lua.cpp\r
+//  Version:    1.0.0.0\r
+//  Created:    17-May-2019\r
+//\r
+//  Copyright:  Stcherbatchenko Andrei, portions by Takashi Sawanaka\r
+//  E-mail:     sdottaka@users.sourceforge.net\r
+//\r
+//  Lua syntax highlighing definition\r
+//\r
+//  You are free to use or modify this code to the following restrictions:\r
+//  - Acknowledge me somewhere in your about box, simple "Parts of code by.."\r
+//  will be enough. If you can't (or don't want to), contact me personally.\r
+//  - LEAVE THIS HEADER INTACT\r
+////////////////////////////////////////////////////////////////////////////\r
+\r
+#include "StdAfx.h"\r
+#include "crystallineparser.h"\r
+#include "SyntaxColors.h"\r
+#include "string_util.h"\r
+#include <algorithm>\r
+\r
+#ifdef _DEBUG\r
+#define new DEBUG_NEW\r
+#endif\r
+\r
+//  Lua keywords\r
+static LPCTSTR s_apszLuaKeywordList[] =\r
+  {\r
+_T ("and"),\r
+_T ("break"),\r
+_T ("do"),\r
+_T ("else"),\r
+_T ("elseif"),\r
+_T ("end"),\r
+_T ("false"),\r
+_T ("for"),\r
+_T ("function"),\r
+_T ("if"),\r
+_T ("in"),\r
+_T ("local"),\r
+_T ("nil"),\r
+_T ("not"),\r
+_T ("or"),\r
+_T ("repeat"),\r
+_T ("return"),\r
+_T ("then"),\r
+_T ("true"),\r
+_T ("until"),\r
+_T ("while"),\r
+  };\r
+\r
+static bool\r
+IsLuaKeyword (LPCTSTR pszChars, int nLength)\r
+{\r
+  return ISXKEYWORD (s_apszLuaKeywordList, pszChars, nLength);\r
+}\r
+\r
+static bool\r
+IsLuaNumber (LPCTSTR pszChars, int nLength)\r
+{\r
+  if (nLength > 2 && pszChars[0] == '0')\r
+    {\r
+      if (pszChars[1] == 'x')\r
+        {\r
+          for (int I = 2; I < nLength; I++)\r
+            {\r
+              if (_istdigit (pszChars[I]) || (pszChars[I] >= 'A' && pszChars[I] <= 'F') ||\r
+                    (pszChars[I] >= 'a' && pszChars[I] <= 'f') || pszChars[I] == '_')\r
+                continue;\r
+              return false;\r
+            }\r
+          return true;\r
+        }\r
+      else if (pszChars[1] == 'o')\r
+        {\r
+          for (int I = 2; I < nLength; I++)\r
+            {\r
+              if ((pszChars[I] >= '0' && pszChars[I] <= '7') || pszChars[I] == '_')\r
+                continue;\r
+              return false;\r
+            }\r
+          return true;\r
+        }\r
+      else if (pszChars[1] == 'b')\r
+        {\r
+          for (int I = 2; I < nLength; I++)\r
+            {\r
+              if ((pszChars[I] >= '0' && pszChars[I] <= '1') || pszChars[I] == '_')\r
+                continue;\r
+              return false;\r
+            }\r
+          return true;\r
+        }\r
+    }\r
+  if (!_istdigit (pszChars[0]) && pszChars[0] != '.')\r
+    return false;\r
+  for (int I = 1; I < nLength; I++)\r
+    {\r
+      if (!_istdigit (pszChars[I]) && pszChars[I] != '+' &&\r
+            pszChars[I] != '-' && pszChars[I] != '.' && pszChars[I] != 'e' &&\r
+            pszChars[I] != 'E' && pszChars[I] != '_')\r
+        return false;\r
+    }\r
+  return true;\r
+}\r
+\r
+DWORD\r
+CrystalLineParser::ParseLineLua (DWORD dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems)\r
+{\r
+  if (nLength == 0)\r
+    return dwCookie & (COOKIE_EXT_COMMENT | COOKIE_RAWSTRING | 0xFF000000);\r
+\r
+  bool bRedefineBlock = true;\r
+  bool bDecIndex = false;\r
+  int nIdentBegin = -1;\r
+  int nPrevI = -1;\r
+  int I=0;\r
+  for (I = 0;; nPrevI = I, I = static_cast<int>(::CharNext(pszChars+I) - pszChars))\r
+    {\r
+      if (I == nPrevI)\r
+        {\r
+          // CharNext did not advance, so we're at the end of the string\r
+          // and we already handled this character, so stop\r
+          break;\r
+        }\r
+\r
+      if (bRedefineBlock)\r
+        {\r
+          int nPos = I;\r
+          if (bDecIndex)\r
+            nPos = nPrevI;\r
+          if (dwCookie & (COOKIE_COMMENT | COOKIE_EXT_COMMENT))\r
+            {\r
+              DEFINE_BLOCK (nPos, COLORINDEX_COMMENT);\r
+            }\r
+          else if (dwCookie & (COOKIE_CHAR | COOKIE_STRING | COOKIE_RAWSTRING))\r
+            {\r
+              DEFINE_BLOCK (nPos, COLORINDEX_STRING);\r
+            }\r
+          else\r
+            {\r
+              if (xisalnum (pszChars[nPos]) || pszChars[nPos] == '.' && nPos > 0 && (!xisalpha (*::CharPrev(pszChars, pszChars + nPos)) && !xisalpha (*::CharNext(pszChars + nPos))))\r
+                {\r
+                  DEFINE_BLOCK (nPos, COLORINDEX_NORMALTEXT);\r
+                }\r
+              else\r
+                {\r
+                  DEFINE_BLOCK (nPos, COLORINDEX_OPERATOR);\r
+                  bRedefineBlock = true;\r
+                  bDecIndex = true;\r
+                  goto out;\r
+                }\r
+            }\r
+          bRedefineBlock = false;\r
+          bDecIndex = false;\r
+        }\r
+out:\r
+\r
+      // Can be bigger than length if there is binary data\r
+      // See bug #1474782 Crash when comparing SQL with with binary data\r
+      if (I >= nLength || pszChars[I] == 0)\r
+        break;\r
+\r
+      if (dwCookie & COOKIE_COMMENT)\r
+        {\r
+          DEFINE_BLOCK (I, COLORINDEX_COMMENT);\r
+          dwCookie |= COOKIE_COMMENT;\r
+          break;\r
+        }\r
+\r
+      //  String constant "...."\r
+      if (dwCookie & COOKIE_STRING)\r
+        {\r
+          if (pszChars[I] == '"' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || pszChars[nPrevI] == '\\' && *::CharPrev(pszChars, pszChars + nPrevI) == '\\')))\r
+            {\r
+              dwCookie &= ~COOKIE_STRING;\r
+              bRedefineBlock = true;\r
+            }\r
+          continue;\r
+        }\r
+\r
+      //  Char constant '..'\r
+      if (dwCookie & COOKIE_CHAR)\r
+        {\r
+          if (pszChars[I] == '\'' && (I == 0 || I == 1 && pszChars[nPrevI] != '\\' || I >= 2 && (pszChars[nPrevI] != '\\' || pszChars[nPrevI] == '\\' && *::CharPrev(pszChars, pszChars + nPrevI) == '\\')))\r
+            {\r
+              dwCookie &= ~COOKIE_CHAR;\r
+              bRedefineBlock = true;\r
+            }\r
+          continue;\r
+        }\r
+\r
+      //  Raw string constant [[ ... ]], [=[ ... ]=], [==[ ... ]==], ...\r
+      if (dwCookie & COOKIE_RAWSTRING)\r
+        {\r
+          const int nEqualsSignCount = COOKIE_GET_LUA_EQUALS_SIGN_COUNT(dwCookie);\r
+          if (I >= nEqualsSignCount + 1 && pszChars[I] == ']' && pszChars[I - nEqualsSignCount - 1] == ']' && \r
+                         std::all_of(pszChars + I - nEqualsSignCount, pszChars + I, [](const auto c) { return c == '='; }))\r
+            {\r
+              dwCookie &= ~COOKIE_RAWSTRING;\r
+              bRedefineBlock = true;\r
+            }\r
+          continue;\r
+        }\r
+\r
+      //  Extended comment --[[ ... ]] , --[=[ ... ]=], --[==[ ... ]==], ...\r
+      if (dwCookie & COOKIE_EXT_COMMENT)\r
+        {\r
+          const int nEqualsSignCount = COOKIE_GET_LUA_EQUALS_SIGN_COUNT(dwCookie);\r
+          if (I >= nEqualsSignCount + 1 && pszChars[I] == ']' && pszChars[I - nEqualsSignCount - 1] == ']' && \r
+                         std::all_of(pszChars + I - nEqualsSignCount, pszChars + I, [](const auto c) { return c == '='; }))\r
+            {\r
+              dwCookie &= ~COOKIE_EXT_COMMENT;\r
+              bRedefineBlock = true;\r
+            }\r
+          continue;\r
+        }\r
+\r
+      if (I > 0 && pszChars[I] == '-' && pszChars[nPrevI] == '-')\r
+        {\r
+          DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);\r
+          dwCookie |= COOKIE_COMMENT;\r
+          break;\r
+        }\r
+\r
+      //  Normal text\r
+      if (pszChars[I] == '"')\r
+        {\r
+          DEFINE_BLOCK (I, COLORINDEX_STRING);\r
+          dwCookie |= COOKIE_STRING;\r
+          continue;\r
+        }\r
+      if (pszChars[I] == '\'')\r
+        {\r
+          // 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] == '\'')\r
+          if (!I || !xisalnum (pszChars[nPrevI]))\r
+            {\r
+              DEFINE_BLOCK (I, COLORINDEX_STRING);\r
+              dwCookie |= COOKIE_CHAR;\r
+              continue;\r
+            }\r
+        }\r
+      // Raw string [[ ... ]], [=[ ... ]=], [==[ ... ]==], ...\r
+      if (pszChars[I] == '[' && I + 1 < nLength && (pszChars[I + 1] == '[' || pszChars[I + 1] == '='))\r
+        {\r
+          int nEqualsSignCount = 0;\r
+          while (I + 1 + nEqualsSignCount < nLength && pszChars[I + 1 + nEqualsSignCount] == '=')\r
+            ++nEqualsSignCount;\r
+          if (I + 1 + nEqualsSignCount < nLength && pszChars[I + 1 + nEqualsSignCount] == '[')\r
+            {\r
+              DEFINE_BLOCK (I, COLORINDEX_STRING);\r
+              dwCookie |= COOKIE_RAWSTRING;\r
+              COOKIE_SET_LUA_EQUALS_SIGN_COUNT(dwCookie, nEqualsSignCount);\r
+              continue;\r
+            }\r
+        }\r
+         // Extended comment [[ ... ]], [=[ ... ]=], [==[ ... ]==], ...\r
+      if (pszChars[I] == '-' && I + 3 < nLength && pszChars[I + 1] == '-' && pszChars[I + 2] == '[' && (pszChars[I + 3] == '[' || pszChars[I + 3] == '='))\r
+        {\r
+          int nEqualsSignCount = 0;\r
+          while (I + 3 + nEqualsSignCount < nLength && pszChars[I + 3 + nEqualsSignCount] == '=')\r
+            ++nEqualsSignCount;\r
+          if (I + 3 + nEqualsSignCount < nLength && pszChars[I + 3 + nEqualsSignCount] == '[')\r
+            {\r
+              DEFINE_BLOCK (I, COLORINDEX_COMMENT);\r
+              dwCookie |= COOKIE_EXT_COMMENT;\r
+              COOKIE_SET_LUA_EQUALS_SIGN_COUNT(dwCookie, nEqualsSignCount);\r
+              continue;\r
+            }\r
+        }\r
+\r
+      if (pBuf == nullptr)\r
+        continue;               //  We don't need to extract keywords,\r
+      //  for faster parsing skip the rest of loop\r
+\r
+      if (xisalnum (pszChars[I]) || pszChars[I] == '.' && I > 0 && (!xisalpha (pszChars[nPrevI]) && !xisalpha (pszChars[I + 1])))\r
+        {\r
+          if (nIdentBegin == -1)\r
+            nIdentBegin = I;\r
+        }\r
+      else\r
+        {\r
+          if (nIdentBegin >= 0)\r
+            {\r
+              if (IsLuaKeyword (pszChars + nIdentBegin, I - nIdentBegin))\r
+                {\r
+                  DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);\r
+                }\r
+              else if (IsLuaNumber (pszChars + nIdentBegin, I - nIdentBegin))\r
+                {\r
+                  DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER);\r
+                }\r
+              else\r
+                {\r
+                  bool bFunction = false;\r
+\r
+                  for (int j = I; j < nLength; j++)\r
+                    {\r
+                      if (!xisspace (pszChars[j]))\r
+                        {\r
+                          if (pszChars[j] == '(')\r
+                            {\r
+                              bFunction = true;\r
+                            }\r
+                          break;\r
+                        }\r
+                    }\r
+                  if (bFunction)\r
+                    {\r
+                      DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME);\r
+                    }\r
+                }\r
+              bRedefineBlock = true;\r
+              bDecIndex = true;\r
+              nIdentBegin = -1;\r
+            }\r
+        }\r
+    }\r
+\r
+  if (nIdentBegin >= 0)\r
+    {\r
+      if (IsLuaKeyword (pszChars + nIdentBegin, I - nIdentBegin))\r
+        {\r
+          DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);\r
+        }\r
+      else if (IsLuaNumber (pszChars + nIdentBegin, I - nIdentBegin))\r
+        {\r
+          DEFINE_BLOCK (nIdentBegin, COLORINDEX_NUMBER);\r
+        }\r
+      else\r
+        {\r
+          bool bFunction = false;\r
+\r
+          for (int j = I; j < nLength; j++)\r
+            {\r
+              if (!xisspace (pszChars[j]))\r
+                {\r
+                  if (pszChars[j] == '(')\r
+                    {\r
+                      bFunction = true;\r
+                    }\r
+                  break;\r
+                }\r
+            }\r
+          if (bFunction)\r
+            {\r
+              DEFINE_BLOCK (nIdentBegin, COLORINDEX_FUNCNAME);\r
+            }\r
+        }\r
+    }\r
+\r
+  dwCookie &= COOKIE_EXT_COMMENT | COOKIE_RAWSTRING | 0xFF000000;\r
+  return dwCookie;\r
+}\r
index 66b0c64..92bf987 100644 (file)
@@ -2633,6 +2633,7 @@ BEGIN
     IDS_COLORSCHEME_INSTALLSHIELD "InstallShield"\r
     IDS_COLORSCHEME_JAVA    "Java"\r
     IDS_COLORSCHEME_LISP    "AutoLISP"\r
+    IDS_COLORSCHEME_LUA     "Lua"\r
 END\r
 \r
 STRINGTABLE\r
index afece4d..8fbd91d 100644 (file)
     <ClCompile Include="..\Externals\crystaledit\editlib\java.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\LineInfo.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\lisp.cpp" />\r
+    <ClCompile Include="..\Externals\crystaledit\editlib\lua.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\memcombo.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\nsis.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\pascal.cpp" />\r
index 36496d8..7a81b6d 100644 (file)
     <ClCompile Include="..\Externals\crystaledit\editlib\plain.cpp">\r
       <Filter>EditLib\parsers</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\Externals\crystaledit\editlib\lua.cpp">\r
+      <Filter>EditLib\parsers</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="charsets.h">\r
index 811dd91..0ebade6 100644 (file)
     <ClCompile Include="..\Externals\crystaledit\editlib\java.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\LineInfo.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\lisp.cpp" />\r
+    <ClCompile Include="..\Externals\crystaledit\editlib\lua.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\memcombo.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\nsis.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\pascal.cpp" />\r
index 36496d8..7a81b6d 100644 (file)
     <ClCompile Include="..\Externals\crystaledit\editlib\plain.cpp">\r
       <Filter>EditLib\parsers</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\Externals\crystaledit\editlib\lua.cpp">\r
+      <Filter>EditLib\parsers</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="charsets.h">\r
index fbdb6ae..6a41622 100644 (file)
     <ClCompile Include="..\Externals\crystaledit\editlib\java.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\LineInfo.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\lisp.cpp" />\r
+    <ClCompile Include="..\Externals\crystaledit\editlib\lua.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\memcombo.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\nsis.cpp" />\r
     <ClCompile Include="..\Externals\crystaledit\editlib\pascal.cpp" />\r
index 36496d8..7a81b6d 100644 (file)
     <ClCompile Include="..\Externals\crystaledit\editlib\plain.cpp">\r
       <Filter>EditLib\parsers</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="..\Externals\crystaledit\editlib\lua.cpp">\r
+      <Filter>EditLib\parsers</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="charsets.h">\r
index 2fd4cf9..30e4745 100644 (file)
 #define IDS_COLORSCHEME_INSTALLSHIELD   33165\r
 #define IDS_COLORSCHEME_JAVA            33166\r
 #define IDS_COLORSCHEME_LISP            33167\r
-#define IDS_COLORSCHEME_NSIS            33168\r
-#define IDS_COLORSCHEME_PASCAL          33169\r
-#define IDS_COLORSCHEME_PERL            33170\r
-#define IDS_COLORSCHEME_PHP             33171\r
-#define IDS_COLORSCHEME_PO              33172\r
-#define IDS_COLORSCHEME_POWERSHELL      33173\r
-#define IDS_COLORSCHEME_PYTHON          33174\r
-#define IDS_COLORSCHEME_REXX            33175\r
-#define IDS_COLORSCHEME_RSRC            33176\r
-#define IDS_COLORSCHEME_RUBY            33177\r
-#define IDS_COLORSCHEME_RUST            33178\r
-#define IDS_COLORSCHEME_SGML            33179\r
-#define IDS_COLORSCHEME_SH              33180\r
-#define IDS_COLORSCHEME_SIOD            33181\r
-#define IDS_COLORSCHEME_SQL             33182\r
-#define IDS_COLORSCHEME_TCL             33183\r
-#define IDS_COLORSCHEME_TEX             33184\r
-#define IDS_COLORSCHEME_VERILOG         33185\r
-#define IDS_COLORSCHEME_VHDL            33186\r
-#define IDS_COLORSCHEME_XML             33187\r
-#define ID_COLORSCHEME_LAST             33187 // = IDS_COLORSCHEME_XML\r
+#define IDS_COLORSCHEME_LUA             33168\r
+#define IDS_COLORSCHEME_NSIS            33169\r
+#define IDS_COLORSCHEME_PASCAL          33170\r
+#define IDS_COLORSCHEME_PERL            33171\r
+#define IDS_COLORSCHEME_PHP             33172\r
+#define IDS_COLORSCHEME_PO              33173\r
+#define IDS_COLORSCHEME_POWERSHELL      33174\r
+#define IDS_COLORSCHEME_PYTHON          33175\r
+#define IDS_COLORSCHEME_REXX            33176\r
+#define IDS_COLORSCHEME_RSRC            33177\r
+#define IDS_COLORSCHEME_RUBY            33178\r
+#define IDS_COLORSCHEME_RUST            33179\r
+#define IDS_COLORSCHEME_SGML            33180\r
+#define IDS_COLORSCHEME_SH              33181\r
+#define IDS_COLORSCHEME_SIOD            33182\r
+#define IDS_COLORSCHEME_SQL             33183\r
+#define IDS_COLORSCHEME_TCL             33184\r
+#define IDS_COLORSCHEME_TEX             33185\r
+#define IDS_COLORSCHEME_VERILOG         33186\r
+#define IDS_COLORSCHEME_VHDL            33187\r
+#define IDS_COLORSCHEME_XML             33188\r
+#define ID_COLORSCHEME_LAST             33188 // = IDS_COLORSCHEME_XML\r
 #define ID_TOOLBAR_NONE                 33194\r
 #define ID_TOOLBAR_SMALL                33195\r
 #define ID_TOOLBAR_BIG                  33196\r
index a603ce1..2b1da05 100644 (file)
@@ -4769,6 +4769,10 @@ msgstr "Ez Nabarmenduta"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index e6e3d51..0218fa1 100644 (file)
@@ -4869,6 +4869,10 @@ msgstr "Sem Destacar"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index b34d24c..64147be 100644 (file)
@@ -4694,6 +4694,10 @@ msgstr ""
 msgid "Batch"
 msgstr ""
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index fc3e14b..8bb6f89 100644 (file)
@@ -4690,6 +4690,10 @@ msgstr ""
 msgid "Batch"
 msgstr ""
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 9688b58..25b0ffe 100644 (file)
@@ -4693,6 +4693,10 @@ msgstr ""
 msgid "Batch"
 msgstr "批处理"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index c172c2b..374f3fb 100644 (file)
@@ -4781,6 +4781,10 @@ msgstr "無高亮度顯示"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index da2db7a..6622167 100644 (file)
@@ -4766,6 +4766,10 @@ msgstr "Nije označeno"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index fefa50b..1838cf3 100644 (file)
@@ -4697,6 +4697,10 @@ msgstr "Žádné zvýraznění"
 msgid "Batch"
 msgstr ""
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 3c5ec70..7c6d76e 100644 (file)
@@ -4818,6 +4818,10 @@ msgstr "Ingen fremhævning"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 8a35e46..bbdac03 100644 (file)
@@ -4921,6 +4921,10 @@ msgstr "Geen markering"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index ce139fc..f03d426 100644 (file)
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: WinMerge\n"
 "Report-Msgid-Bugs-To: http://bugs.winmerge.org/\n"
-"POT-Creation-Date: 2019-03-09 22:42+0000\n"
+"POT-Creation-Date: 2019-03-17 19:29+0000\n"
 "PO-Revision-Date: \n"
 "Last-Translator: \n"
 "Language-Team: English <winmerge-translate@lists.sourceforge.net>\n"
@@ -3711,6 +3711,10 @@ msgstr ""
 msgid "Batch"
 msgstr ""
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 msgid "Portable Object"
 msgstr ""
index 5521e19..fb43962 100644 (file)
@@ -4523,6 +4523,10 @@ msgstr "Ei korostusta"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 2c6f5d2..9147d84 100644 (file)
@@ -4769,6 +4769,10 @@ msgstr "Pas de surbrillance"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 960402f..d2ccad0 100644 (file)
@@ -4759,6 +4759,10 @@ msgstr "Sen Resaltar"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 463b6b9..cc9a2c0 100644 (file)
@@ -4830,6 +4830,10 @@ msgstr "Keine Hervorhebung"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 43712b1..2a2a5ac 100644 (file)
@@ -4739,6 +4739,10 @@ msgstr "Χωρίς Χρωματισμό Κώδικα"
 msgid "Batch"
 msgstr ""
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 11322d6..a80ada1 100644 (file)
@@ -4666,6 +4666,10 @@ msgstr ""
 msgid "Batch"
 msgstr ""
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index bab70bc..167fe5e 100644 (file)
@@ -4733,6 +4733,10 @@ msgstr ""
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index d4883dd..11726bb 100644 (file)
@@ -4126,6 +4126,10 @@ msgstr "ハイライトなし"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr "Lua"
+
 #: Merge.rc:55B03C15
 msgid "Portable Object"
 msgstr "Portable Object(.po)"
index 27954e3..fedfd9b 100644 (file)
@@ -4870,6 +4870,10 @@ msgstr "강조 표시 없음"
 msgid "Batch"
 msgstr "일괄 처리"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 94a3dac..cf29e1d 100644 (file)
@@ -4059,6 +4059,10 @@ msgstr "Nenaudoti paryškinimo"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 msgid "Portable Object"
 msgstr "Portable Object"
index d6d2b4d..d521fbc 100644 (file)
@@ -4766,6 +4766,10 @@ msgstr "Ingen markering"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 88a95a8..bda8c69 100644 (file)
@@ -4822,6 +4822,10 @@ msgstr " برجسته نکردن "
 msgid "Batch"
 msgstr " دسته "
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index c68032e..74d889a 100644 (file)
@@ -4767,6 +4767,10 @@ msgstr "Bez podświetlenia"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 400b07a..ea48779 100644 (file)
@@ -4526,6 +4526,10 @@ msgstr "Sem Destaque"
 msgid "Batch"
 msgstr "Quantidade"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 0746be4..e9da9f0 100644 (file)
@@ -4740,6 +4740,10 @@ msgstr ""
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 28093df..0062b16 100644 (file)
@@ -4767,6 +4767,10 @@ msgstr "Без выделения"
 msgid "Batch"
 msgstr "Пакет"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 079659f..83c4892 100644 (file)
@@ -4734,6 +4734,10 @@ msgstr "Није означено"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 31dca18..38c613b 100644 (file)
@@ -4764,6 +4764,10 @@ msgstr "No Highlighting"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index b6dd804..09adac7 100644 (file)
@@ -4766,6 +4766,10 @@ msgstr "Bez zvýrazňovania"
 msgid "Batch"
 msgstr "Dávkový"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 7f1772c..b85e22f 100644 (file)
@@ -4770,6 +4770,10 @@ msgstr "Brez osvetljevanja"
 msgid "Batch"
 msgstr "Paket (Batch)"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 18700d2..5286f8b 100644 (file)
@@ -4768,6 +4768,10 @@ msgstr "No Seleccionado"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 8af1360..4c08483 100644 (file)
@@ -4900,6 +4900,10 @@ msgstr "Ingen Markering"
 msgid "Batch"
 msgstr "Sats"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 4374c46..8de9fbd 100644 (file)
@@ -4760,6 +4760,10 @@ msgstr "Vurgulama Yok"
 msgid "Batch"
 msgstr "Batch"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"
index 3c48516..927a82c 100644 (file)
@@ -4766,6 +4766,10 @@ msgstr "Не підсвічувати"
 msgid "Batch"
 msgstr "Бетч"
 
+#: Merge.rc:23B300
+msgid "Lua"
+msgstr ""
+
 #: Merge.rc:55B03C15
 #, c-format
 msgid "Portable Object"