<ClCompile Include="..\editlib\parsers\batch.cpp" />\r
<ClCompile Include="..\editlib\ccrystaleditview.cpp" />\r
<ClCompile Include="..\editlib\parsers\crystallineparser.cpp" />\r
+ <ClCompile Include="..\editlib\parsers\javascript.cpp" />\r
<ClCompile Include="..\editlib\renderers\ccrystalrendererdirectwrite.cpp">\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ClCompile Include="..\editlib\dialogs\ceditreplacedlg.cpp">\r
<Filter>editlib\dialogs</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\editlib\utils\hqbitmap.cpp">\r
+ <Filter>Source Files</Filter>\r
+ </ClCompile>\r
+ <ClCompile Include="..\editlib\parsers\javascript.cpp">\r
+ <Filter>editlib\parsers</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ResourceCompile Include="Sample.rc">\r
<ClInclude Include="..\editlib\dialogs\memcombo.h">\r
<Filter>editlib\dialogs</Filter>\r
</ClInclude>\r
+ <ClInclude Include="..\editlib\utils\hqbitmap.h">\r
+ <Filter>Header Files</Filter>\r
+ </ClInclude>\r
</ItemGroup>\r
<ItemGroup>\r
<Image Include="res\mg_icons.bmp">\r
<ClCompile Include="..\editlib\parsers\batch.cpp" />
<ClCompile Include="..\editlib\ccrystaleditview.cpp" />
<ClCompile Include="..\editlib\parsers\crystallineparser.cpp" />
+ <ClCompile Include="..\editlib\parsers\javascript.cpp" />
<ClCompile Include="..\editlib\renderers\ccrystalrendererdirectwrite.cpp">
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<ClCompile Include="..\editlib\dialogs\ceditreplacedlg.cpp">
<Filter>editlib\dialogs</Filter>
</ClCompile>
+ <ClCompile Include="..\editlib\utils\hqbitmap.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\editlib\parsers\javascript.cpp">
+ <Filter>editlib\parsers</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="Sample.rc">
<ClInclude Include="..\editlib\dialogs\memcombo.h">
<Filter>editlib\dialogs</Filter>
</ClInclude>
+ <ClInclude Include="..\editlib\utils\hqbitmap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="res\mg_icons.bmp">
unsigned
CrystalLineParser::ParseLineC (unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems)
{
+ return ParseLineCJava (dwCookie, pszChars, nLength, pBuf, nActualItems, IsCppKeyword, IsUser1Keyword);
+}
+
+unsigned
+CrystalLineParser::ParseLineCJava (unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems,
+ bool (*IsKeyword)(const TCHAR *pszChars, int nLength),
+ bool (*IsUser1Keyword)(const TCHAR *pszChars, int nLength))
+{
if (nLength == 0)
return dwCookie & COOKIE_EXT_COMMENT;
{
if (nIdentBegin >= 0)
{
- if (IsCppKeyword (pszChars + nIdentBegin, I - nIdentBegin))
+ if (IsKeyword (pszChars + nIdentBegin, I - nIdentBegin))
{
DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);
}
- else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin))
+ else if (IsUser1Keyword && IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin))
{
DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1);
}
{
DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);
}
- else if (IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin))
+ else if (IsUser1Keyword && IsUser1Keyword (pszChars + nIdentBegin, I - nIdentBegin))
{
DEFINE_BLOCK (nIdentBegin, COLORINDEX_USER1);
}
// Tabsize is commented out since we have only GUI setting for it now.
// Not removed because we may later want to have per-filetype settings again.
// See ccrystaltextview.h for table declaration.
-TextDefinition m_SourceDefs[37] =
+TextDefinition m_SourceDefs[38] =
{
SRC_PLAIN, _T ("Plain"), _T ("txt,doc,diz"), &ParseLinePlain, SRCOPT_AUTOINDENT, /*4,*/ _T (""), _T (""), _T (""), (DWORD)-1,
SRC_ASP, _T ("ASP"), _T ("asp,ascx"), &ParseLineAsp, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T (""), _T (""), _T ("'"), (DWORD)-1,
SRC_INI, _T ("INI"), _T ("ini,reg,vbp,isl"), &ParseLineIni, SRCOPT_AUTOINDENT|SRCOPT_BRACEGNU|SRCOPT_EOLNUNIX, /*2,*/ _T (""), _T (""), _T (";"), (DWORD)-1,
SRC_INNOSETUP, _T ("InnoSetup"), _T ("iss"), &ParseLineInnoSetup, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("{"), _T ("}"), _T (";"), (DWORD)-1,
SRC_INSTALLSHIELD, _T ("InstallShield"), _T ("rul"), &ParseLineIS, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T ("//"), (DWORD)-1,
- SRC_JAVA, _T ("Java"), _T ("java,jav,js"), &ParseLineJava, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T ("//"), (DWORD)-1,
+ SRC_JAVA, _T ("Java"), _T ("java,jav"), &ParseLineJava, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T ("//"), (DWORD)-1,
+ SRC_JAVASCRIPT, _T ("JavaScript"), _T ("js,json"), &ParseLineJavaScript, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T ("//"), (DWORD)-1,
SRC_LISP, _T ("AutoLISP"), _T ("lsp,dsl"), &ParseLineLisp, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T (";|"), _T ("|;"), _T (";"), (DWORD)-1,
SRC_LUA, _T ("Lua"), _T ("lua"), &ParseLineLua, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("--[["), _T ("]]"), _T ("--"), (DWORD)-1,
SRC_NSIS, _T ("NSIS"), _T ("nsi,nsh"), &ParseLineNsis, SRCOPT_AUTOINDENT|SRCOPT_BRACEANSI, /*2,*/ _T ("/*"), _T ("*/"), _T (";"), (DWORD)-1,
SRC_INNOSETUP,\r
SRC_INSTALLSHIELD,\r
SRC_JAVA,\r
+ SRC_JAVASCRIPT,\r
SRC_LISP,\r
SRC_LUA,\r
SRC_NSIS,\r
unsigned encoding;\r
};\r
\r
-extern TextDefinition m_SourceDefs[37];\r
+extern TextDefinition m_SourceDefs[38];\r
\r
bool IsXKeyword(const TCHAR *pszKey, size_t nKeyLen, const TCHAR *pszKeywordList[], size_t nKeywordListCount, int(*compare)(const TCHAR *, const TCHAR *, size_t));\r
bool IsXNumber(const TCHAR* pszChars, int nLength);\r
unsigned ParseLineBasic(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineBatch(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineC(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
+unsigned ParseLineCJava(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems, bool (*IsKeyword)(const TCHAR *pszChars, int nLength), bool (*IsUser1Keyword)(const TCHAR *pszChars, int nLength));\r
unsigned ParseLineCSharp(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineCss(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineDcl(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineInnoSetup(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineIS(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineJava(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
+unsigned ParseLineJavaScript(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineLisp(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineLua(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned ParseLineNsis(unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems);\r
unsigned
CrystalLineParser::ParseLineCSharp (unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems)
{
- if (nLength == 0)
- return dwCookie & COOKIE_EXT_COMMENT;
-
- bool bFirstChar = (dwCookie & ~COOKIE_EXT_COMMENT) == 0;
- const TCHAR *pszCommentBegin = nullptr;
- const TCHAR *pszCommentEnd = nullptr;
- 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 (xisalnum (pszChars[nPos]) || pszChars[nPos] == '.' && nPos > 0 && (!xisalpha (*::CharPrev(pszChars, pszChars + nPos)) && !xisalpha (*::CharNext(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 ((pszCommentBegin < pszChars + I) && (I > 0 && pszChars[I] == '/' && pszChars[nPrevI] == '*'))
- {
- dwCookie &= ~COOKIE_EXT_COMMENT;
- bRedefineBlock = true;
- pszCommentEnd = pszChars + I + 1;
- }
- continue;
- }
-
- if ((pszCommentEnd < pszChars + I) && (I > 0 && pszChars[I] == '/' && pszChars[nPrevI] == '/'))
- {
- DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);
- dwCookie |= COOKIE_COMMENT;
- break;
- }
-
- // Preprocessor directive #....
- if (dwCookie & COOKIE_PREPROCESSOR)
- {
- if ((pszCommentEnd < pszChars + I) && (I > 0 && pszChars[I] == '*' && pszChars[nPrevI] == '/'))
- {
- DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);
- dwCookie |= COOKIE_EXT_COMMENT;
- }
- continue;
- }
-
- // 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 ((pszCommentEnd < pszChars + I) && (I > 0 && pszChars[I] == '*' && pszChars[nPrevI] == '/'))
- {
- DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);
- dwCookie |= COOKIE_EXT_COMMENT;
- pszCommentBegin = pszChars + I + 1;
- continue;
- }
-
- if (bFirstChar)
- {
- if (pszChars[I] == '#')
- {
- DEFINE_BLOCK (I, COLORINDEX_PREPROCESSOR);
- dwCookie |= COOKIE_PREPROCESSOR;
- continue;
- }
- if (!xisspace (pszChars[I]))
- bFirstChar = false;
- }
-
- 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] == '.' && I > 0 && (!xisalpha (pszChars[nPrevI]) && !xisalpha (pszChars[I + 1])))
- {
- if (nIdentBegin == -1)
- nIdentBegin = I;
- }
- else
- {
- if (nIdentBegin >= 0)
- {
- if (IsCppKeyword (pszChars + nIdentBegin, I - nIdentBegin))
- {
- DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);
- }
- else if (IsXNumber (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);
- }
- }
- bRedefineBlock = true;
- bDecIndex = true;
- nIdentBegin = -1;
- }
- }
- }
-
- if (nIdentBegin >= 0)
- {
- if (IsCppKeyword (pszChars + nIdentBegin, I - nIdentBegin))
- {
- DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);
- }
- else if (IsXNumber (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);
- }
- }
- }
-
- if (pszChars[nLength - 1] != '\\' || IsMBSTrail(pszChars, nLength - 1))
- dwCookie &= COOKIE_EXT_COMMENT;
- return dwCookie;
+ return ParseLineCJava (dwCookie, pszChars, nLength, pBuf, nActualItems, IsCppKeyword, nullptr);
}
{
const TCHAR *pszEnd = _tcsstr(pszChars + I, _T("</script>"));
int nextI = pszEnd ? static_cast<int>(pszEnd - pszChars) : nLength;
- dwCookie = ParseLineJava(dwCookie & ~COOKIE_BLOCK_SCRIPT, pszChars + I, nextI - I, pBuf, nActualItems);
+ dwCookie = ParseLineJavaScript(dwCookie & ~COOKIE_BLOCK_SCRIPT, pszChars + I, nextI - I, pBuf, nActualItems);
if (!pszEnd)
dwCookie |= COOKIE_BLOCK_SCRIPT;
else
{
case SRC_BASIC: pParseLineFunc = ParseLineBasic; break;
case SRC_PHP: pParseLineFunc = ParseLinePhpLanguage; break;
- default: pParseLineFunc = ParseLineJava; break;
+ default: pParseLineFunc = ParseLineJavaScript; break;
}
dwCookie = pParseLineFunc(dwCookie & ~COOKIE_EXT_USER1, pszChars + I, nextI - I, pBuf, nActualItems);
if (!pszEnd)
unsigned
CrystalLineParser::ParseLineJava (unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems)
{
- if (nLength == 0)
- return dwCookie & COOKIE_EXT_COMMENT;
-
- bool bFirstChar = (dwCookie & ~COOKIE_EXT_COMMENT) == 0;
- const TCHAR *pszCommentBegin = nullptr;
- const TCHAR *pszCommentEnd = nullptr;
- 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 (xisalnum (pszChars[nPos]) || pszChars[nPos] == '.' && nPos > 0 && (!xisalpha (*::CharPrev(pszChars, pszChars + nPos)) && !xisalpha (*::CharNext(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 ((pszCommentBegin < pszChars + I) && (I > 0 && pszChars[I] == '/' && pszChars[nPrevI] == '*'))
- {
- dwCookie &= ~COOKIE_EXT_COMMENT;
- bRedefineBlock = true;
- pszCommentEnd = pszChars + I + 1;
- }
- continue;
- }
-
- if ((pszCommentEnd < pszChars + I) && (I > 0 && pszChars[I] == '/' && pszChars[nPrevI] == '/'))
- {
- DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);
- dwCookie |= COOKIE_COMMENT;
- break;
- }
-
- // Preprocessor directive #....
- if (dwCookie & COOKIE_PREPROCESSOR)
- {
- if ((pszCommentEnd < pszChars + I) && (I > 0 && pszChars[I] == '*' && pszChars[nPrevI] == '/'))
- {
- DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);
- dwCookie |= COOKIE_EXT_COMMENT;
- }
- continue;
- }
-
- // 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 ((pszCommentEnd < pszChars + I) && (I > 0 && pszChars[I] == '*' && pszChars[nPrevI] == '/'))
- {
- DEFINE_BLOCK (nPrevI, COLORINDEX_COMMENT);
- dwCookie |= COOKIE_EXT_COMMENT;
- pszCommentBegin = pszChars + I + 1;
- continue;
- }
-
- if (bFirstChar)
- {
- if (pszChars[I] == '#')
- {
- DEFINE_BLOCK (I, COLORINDEX_PREPROCESSOR);
- dwCookie |= COOKIE_PREPROCESSOR;
- continue;
- }
- if (!xisspace (pszChars[I]))
- bFirstChar = false;
- }
-
- 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] == '.' && I > 0 && (!xisalpha (pszChars[nPrevI]) && !xisalpha (pszChars[I + 1])))
- {
- if (nIdentBegin == -1)
- nIdentBegin = I;
- }
- else
- {
- if (nIdentBegin >= 0)
- {
- if (IsJavaKeyword (pszChars + nIdentBegin, I - nIdentBegin))
- {
- DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);
- }
- else if (IsXNumber (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);
- }
- }
- bRedefineBlock = true;
- bDecIndex = true;
- nIdentBegin = -1;
- }
- }
- }
-
- if (nIdentBegin >= 0)
- {
- if (IsJavaKeyword (pszChars + nIdentBegin, I - nIdentBegin))
- {
- DEFINE_BLOCK (nIdentBegin, COLORINDEX_KEYWORD);
- }
- else if (IsXNumber (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);
- }
- }
- }
-
- if (pszChars[nLength - 1] != '\\' || IsMBSTrail(pszChars, nLength - 1))
- dwCookie &= COOKIE_EXT_COMMENT;
- return dwCookie;
+ return ParseLineCJava (dwCookie, pszChars, nLength, pBuf, nActualItems, IsJavaKeyword, nullptr);
}
--- /dev/null
+///////////////////////////////////////////////////////////////////////////
+// File: javascript.cpp
+// Version: 1.1.0.4
+// Updated: 19-Jul-1998
+//
+// Copyright: Ferdinand Prantl, portions by Stcherbatchenko Andrei
+// E-mail: prantl@ff.cuni.cz
+//
+// JavaScript syntax highlighing definition
+//
+// You are free to use or modify this code to the following restrictions:
+// - Acknowledge me somewhere in your about box, simple "Parts of code by.."
+// will be enough. If you can't (or don't want to), contact me personally.
+// - LEAVE THIS HEADER INTACT
+////////////////////////////////////////////////////////////////////////////
+
+#include "StdAfx.h"
+#include "crystallineparser.h"
+#include "../SyntaxColors.h"
+#include "../utils/string_util.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#endif
+
+// JavaScript keywords
+static const TCHAR * s_apszJavaScriptKeywordList[] =
+ {
+ _T ("async"),
+ _T ("await"),
+ _T ("break"),
+ _T ("case"),
+ _T ("catch"),
+ _T ("class"),
+ _T ("const"),
+ _T ("constructor"),
+ _T ("continue"),
+ _T ("debugger"),
+ _T ("default"),
+ _T ("delete"),
+ _T ("do"),
+ _T ("each"),
+ _T ("enum"),
+ _T ("else"),
+ _T ("export"),
+ _T ("extends"),
+ _T ("false"),
+ _T ("finally"),
+ _T ("for"),
+ _T ("function"),
+ _T ("if"),
+ _T ("implements"),
+ _T ("import"),
+ _T ("in"),
+ _T ("instanceof"),
+ _T ("interface"),
+ _T ("let"),
+ _T ("new"),
+ _T ("null"),
+ _T ("of"),
+ _T ("package"),
+ _T ("protected"),
+ _T ("public"),
+ _T ("resolve"),
+ _T ("return"),
+ _T ("static"),
+ _T ("super"),
+ _T ("switch"),
+ _T ("target"),
+ _T ("this"),
+ _T ("throw"),
+ _T ("true"),
+ _T ("try"),
+ _T ("typeof"),
+ _T ("undefined"),
+ _T ("var"),
+ _T ("void"),
+ _T ("while"),
+ _T ("with"),
+ _T ("yield")
+ };
+
+static bool
+IsJavaScriptKeyword (const TCHAR *pszChars, int nLength)
+{
+ return ISXKEYWORD (s_apszJavaScriptKeywordList, pszChars, nLength);
+}
+
+unsigned
+CrystalLineParser::ParseLineJavaScript (unsigned dwCookie, const TCHAR *pszChars, int nLength, TEXTBLOCK * pBuf, int &nActualItems)
+{
+ return ParseLineCJava (dwCookie, pszChars, nLength, pBuf, nActualItems, IsJavaScriptKeyword, nullptr);
+}
<ClCompile Include="..\editlib\parsers\is.cpp" />\r
<ClCompile Include="..\editlib\parsers\isx.cpp" />\r
<ClCompile Include="..\editlib\parsers\java.cpp" />\r
+ <ClCompile Include="..\editlib\parsers\javascript.cpp" />\r
<ClCompile Include="..\editlib\parsers\lisp.cpp" />\r
<ClCompile Include="..\editlib\parsers\lua.cpp" />\r
<ClCompile Include="..\editlib\parsers\nsis.cpp" />\r
<ClCompile Include="htmlTests.cpp">\r
<Filter>Source Files</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\editlib\parsers\javascript.cpp">\r
+ <Filter>Source Files\editlib\parsers</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
</Project>
\ No newline at end of file
<ClCompile Include="..\editlib\parsers\is.cpp" />
<ClCompile Include="..\editlib\parsers\isx.cpp" />
<ClCompile Include="..\editlib\parsers\java.cpp" />
+ <ClCompile Include="..\editlib\parsers\javascript.cpp" />
<ClCompile Include="..\editlib\parsers\lisp.cpp" />
<ClCompile Include="..\editlib\parsers\lua.cpp" />
<ClCompile Include="..\editlib\parsers\nsis.cpp" />
<ClCompile Include="htmlTests.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\editlib\parsers\javascript.cpp">
+ <Filter>Source Files\editlib\parsers</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
IDS_COLORSCHEME_INNOSETUP "InnoSetup"\r
IDS_COLORSCHEME_INSTALLSHIELD "InstallShield"\r
IDS_COLORSCHEME_JAVA "Java"\r
+ IDS_COLORSCHEME_JAVASCRIPT "JavaScript"\r
IDS_COLORSCHEME_LISP "AutoLISP"\r
IDS_COLORSCHEME_LUA "Lua"\r
END\r
<ClCompile Include="..\Externals\crystaledit\editlib\parsers\batch.cpp" />\r
<ClCompile Include="..\Externals\crystaledit\editlib\ccrystaleditview.cpp" />\r
<ClCompile Include="..\Externals\crystaledit\editlib\parsers\crystallineparser.cpp" />\r
+ <ClCompile Include="..\Externals\crystaledit\editlib\parsers\javascript.cpp" />\r
<ClCompile Include="..\Externals\crystaledit\editlib\renderers\ccrystalrendererdirectwrite.cpp">\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ClCompile Include="..\Externals\crystaledit\editlib\utils\hqbitmap.cpp">\r
<Filter>EditLib\Utils</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\Externals\crystaledit\editlib\parsers\javascript.cpp">\r
+ <Filter>EditLib\Parsers\Source Files</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="charsets.h">\r
<ClCompile Include="..\Externals\crystaledit\editlib\parsers\batch.cpp" />\r
<ClCompile Include="..\Externals\crystaledit\editlib\ccrystaleditview.cpp" />\r
<ClCompile Include="..\Externals\crystaledit\editlib\parsers\crystallineparser.cpp" />\r
+ <ClCompile Include="..\Externals\crystaledit\editlib\parsers\javascript.cpp" />\r
<ClCompile Include="..\Externals\crystaledit\editlib\renderers\ccrystalrendererdirectwrite.cpp">\r
<PrecompiledHeader>NotUsing</PrecompiledHeader>\r
</ClCompile>\r
<ClCompile Include="..\Externals\crystaledit\editlib\utils\hqbitmap.cpp">\r
<Filter>EditLib\Utils</Filter>\r
</ClCompile>\r
+ <ClCompile Include="..\Externals\crystaledit\editlib\parsers\javascript.cpp">\r
+ <Filter>EditLib\Parsers\Source Files</Filter>\r
+ </ClCompile>\r
</ItemGroup>\r
<ItemGroup>\r
<ClInclude Include="charsets.h">\r
#define IDS_COLORSCHEME_INNOSETUP 33164\r
#define IDS_COLORSCHEME_INSTALLSHIELD 33165\r
#define IDS_COLORSCHEME_JAVA 33166\r
-#define IDS_COLORSCHEME_LISP 33167\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 IDS_COLORSCHEME_JAVASCRIPT 33167\r
+#define IDS_COLORSCHEME_LISP 33168\r
+#define IDS_COLORSCHEME_LUA 33169\r
+#define IDS_COLORSCHEME_NSIS 33170\r
+#define IDS_COLORSCHEME_PASCAL 33171\r
+#define IDS_COLORSCHEME_PERL 33172\r
+#define IDS_COLORSCHEME_PHP 33173\r
+#define IDS_COLORSCHEME_PO 33174\r
+#define IDS_COLORSCHEME_POWERSHELL 33175\r
+#define IDS_COLORSCHEME_PYTHON 33176\r
+#define IDS_COLORSCHEME_REXX 33177\r
+#define IDS_COLORSCHEME_RSRC 33178\r
+#define IDS_COLORSCHEME_RUBY 33179\r
+#define IDS_COLORSCHEME_RUST 33180\r
+#define IDS_COLORSCHEME_SGML 33181\r
+#define IDS_COLORSCHEME_SH 33182\r
+#define IDS_COLORSCHEME_SIOD 33183\r
+#define IDS_COLORSCHEME_SQL 33184\r
+#define IDS_COLORSCHEME_TCL 33185\r
+#define IDS_COLORSCHEME_TEX 33186\r
+#define IDS_COLORSCHEME_VERILOG 33187\r
+#define IDS_COLORSCHEME_VHDL 33188\r
+#define IDS_COLORSCHEME_XML 33189\r
+#define ID_COLORSCHEME_LAST 33189 // = IDS_COLORSCHEME_XML\r
#define ID_TOOLBAR_NONE 33194\r
#define ID_TOOLBAR_SMALL 33195\r
#define ID_TOOLBAR_BIG 33196\r
</head>
<body>
<h1>Translations Status</h1>
-<p>Status from <strong>2020-12-28</strong>:</p>
+<p>Status from <strong>2020-12-30</strong>:</p>
<h2>WinMerge</h2>
<table class="status">
<tr>
</tr>
<tr>
<td class="left">Arabic</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">921</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">77</td>
+ <td class="right untranslated">78</td>
<td class="center">2019-12-30</td>
</tr>
<tr>
<td class="left">Basque</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">654</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">344</td>
+ <td class="right untranslated">345</td>
<td class="center">2013-02-03</td>
</tr>
<tr>
<td class="left">Brazilian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">985</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">13</td>
+ <td class="right untranslated">14</td>
<td class="center">2020-07-26</td>
</tr>
<tr>
<td class="left">Bulgarian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">889</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">109</td>
+ <td class="right untranslated">110</td>
<td class="center">2019-10-24</td>
</tr>
<tr>
<td class="left">Catalan</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">578</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">420</td>
+ <td class="right untranslated">421</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">ChineseSimplified</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">991</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">7</td>
+ <td class="right untranslated">8</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">ChineseTraditional</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">873</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">125</td>
+ <td class="right untranslated">126</td>
<td class="center">2010-02-19</td>
</tr>
<tr>
<td class="left">Croatian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">645</td>
<td class="right fuzzy">1</td>
- <td class="right untranslated">352</td>
+ <td class="right untranslated">353</td>
<td class="center">2009-02-13</td>
</tr>
<tr>
<td class="left">Czech</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">616</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">382</td>
+ <td class="right untranslated">383</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">Danish</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">654</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">344</td>
+ <td class="right untranslated">345</td>
<td class="center">2013-01-13</td>
</tr>
<tr>
<td class="left">Dutch</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">992</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">6</td>
+ <td class="right untranslated">7</td>
<td class="center">2018-09-06</td>
</tr>
<tr>
<td class="left">English</td>
- <td class="right">998</td>
- <td class="right translated">998</td>
+ <td class="right">999</td>
+ <td class="right translated">999</td>
<td class="right fuzzy">0</td>
<td class="right untranslated">0</td>
- <td class="center">2020-12-28</td>
+ <td class="center">2020-12-30</td>
</tr>
<tr>
<td class="left">Finnish</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">918</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">80</td>
+ <td class="right untranslated">81</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">French</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">911</td>
<td class="right fuzzy">2</td>
- <td class="right untranslated">85</td>
+ <td class="right untranslated">86</td>
<td class="center">2019-06-02</td>
</tr>
<tr>
<td class="left">Galician</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">996</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">2</td>
+ <td class="right untranslated">3</td>
<td class="center">2020-11-28</td>
</tr>
<tr>
<td class="left">German</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">996</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">2</td>
+ <td class="right untranslated">3</td>
<td class="center">2020-11-25</td>
</tr>
<tr>
<td class="left">Greek</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">617</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">381</td>
+ <td class="right untranslated">382</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">Hungarian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">550</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">448</td>
+ <td class="right untranslated">449</td>
<td class="center">2011-01-24</td>
</tr>
<tr>
<td class="left">Italian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">921</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">77</td>
+ <td class="right untranslated">78</td>
<td class="center">2019-07-12</td>
</tr>
<tr>
<td class="left">Japanese</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">998</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">0</td>
+ <td class="right untranslated">1</td>
<td class="center">2020-12-07</td>
</tr>
<tr>
<td class="left">Korean</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">877</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">121</td>
+ <td class="right untranslated">122</td>
<td class="center">2018-02-05</td>
</tr>
<tr>
<td class="left">Lithuanian</td>
- <td class="right">998</td>
- <td class="right translated">996</td>
+ <td class="right">999</td>
+ <td class="right translated">998</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">2</td>
- <td class="center">2020-11-30</td>
+ <td class="right untranslated">1</td>
+ <td class="center">2020-12-29</td>
</tr>
<tr>
<td class="left">Norwegian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">646</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">352</td>
+ <td class="right untranslated">353</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">Persian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">657</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">341</td>
+ <td class="right untranslated">342</td>
<td class="center">2013-08-15</td>
</tr>
<tr>
<td class="left">Polish</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">960</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">38</td>
+ <td class="right untranslated">39</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">Portuguese</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">996</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">2</td>
+ <td class="right untranslated">3</td>
<td class="center">2020-11-29</td>
</tr>
<tr>
<td class="left">Romanian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">575</td>
<td class="right fuzzy">44</td>
- <td class="right untranslated">379</td>
+ <td class="right untranslated">380</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">Russian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">992</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">6</td>
+ <td class="right untranslated">7</td>
<td class="center">2020-11-29</td>
</tr>
<tr>
<td class="left">Serbian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">645</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">353</td>
+ <td class="right untranslated">354</td>
<td class="center"></td>
</tr>
<tr>
<td class="left">Sinhala</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">574</td>
<td class="right fuzzy">64</td>
- <td class="right untranslated">360</td>
+ <td class="right untranslated">361</td>
<td class="center">2010-12-12</td>
</tr>
<tr>
<td class="left">Slovak</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">991</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">7</td>
+ <td class="right untranslated">8</td>
<td class="center">2020-11-02</td>
</tr>
<tr>
<td class="left">Slovenian</td>
- <td class="right">998</td>
- <td class="right translated">996</td>
+ <td class="right">999</td>
+ <td class="right translated">998</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">2</td>
- <td class="center">2020-11-08</td>
+ <td class="right untranslated">1</td>
+ <td class="center">2020-12-29</td>
</tr>
<tr>
<td class="left">Spanish</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">886</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">112</td>
+ <td class="right untranslated">113</td>
<td class="center">2020-04-03</td>
</tr>
<tr>
<td class="left">Swedish</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">921</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">77</td>
+ <td class="right untranslated">78</td>
<td class="center">2019-10-07</td>
</tr>
<tr>
<td class="left">Turkish</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">987</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">11</td>
+ <td class="right untranslated">12</td>
<td class="center">2020-09-08</td>
</tr>
<tr>
<td class="left">Ukrainian</td>
- <td class="right">998</td>
+ <td class="right">999</td>
<td class="right translated">651</td>
<td class="right fuzzy">0</td>
- <td class="right untranslated">347</td>
+ <td class="right untranslated">348</td>
<td class="center">2009-06-13</td>
</tr>
</table>
<td class="right translated">12</td>
<td class="right fuzzy">0</td>
<td class="right untranslated">0</td>
- <td class="center">2019-02-01</td>
+ <td class="center">2020-12-29</td>
</tr>
<tr>
<td class="left">Spanish</td>
<tr>
<td>Slovenian</td>
<td><a href="mailto:iztok.osredkar at institut-oko.si">Iztok Osredkar</a><br><a href="mailto:filip.komar at gmail.com">Filip Komar</a><br><a href="mailto:jrudec@gmail.com">Jadran Rudec</a><br></td>
- <td><a href="mailto:filip.komar at gmail.com">Filip Komar</a><br></td>
+ <td><a href="mailto:filip.komar at gmail.com">Filip Komar</a><br><a href="mailto:jrudec at gmail.com">Jadran Rudec</a><br></td>
<td></td>
<td></td>
</tr>
<?xml version="1.0" encoding="UTF-8"?>
<status>
- <update>2020-12-28</update>
+ <update>2020-12-30</update>
<translations project="WinMerge">
<translation>
<language>Arabic</language>
<file>Arabic.po</file>
<update>2019-12-30</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>921</translated>
<fuzzy>0</fuzzy>
- <untranslated>77</untranslated>
+ <untranslated>78</untranslated>
</strings>
</translation>
<translation>
<file>Basque.po</file>
<update>2013-02-03</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>654</translated>
<fuzzy>0</fuzzy>
- <untranslated>344</untranslated>
+ <untranslated>345</untranslated>
</strings>
<translators>
<translator>
<file>Brazilian.po</file>
<update>2020-07-26</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>985</translated>
<fuzzy>0</fuzzy>
- <untranslated>13</untranslated>
+ <untranslated>14</untranslated>
</strings>
<translators>
<translator>
<file>Bulgarian.po</file>
<update>2019-10-24</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>889</translated>
<fuzzy>0</fuzzy>
- <untranslated>109</untranslated>
+ <untranslated>110</untranslated>
</strings>
<translators>
<translator>
<file>Catalan.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>578</translated>
<fuzzy>0</fuzzy>
- <untranslated>420</untranslated>
+ <untranslated>421</untranslated>
</strings>
<translators>
<translator>
<file>ChineseSimplified.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>991</translated>
<fuzzy>0</fuzzy>
- <untranslated>7</untranslated>
+ <untranslated>8</untranslated>
</strings>
<translators>
<translator>
<file>ChineseTraditional.po</file>
<update>2010-02-19</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>873</translated>
<fuzzy>0</fuzzy>
- <untranslated>125</untranslated>
+ <untranslated>126</untranslated>
</strings>
<translators>
<translator>
<file>Croatian.po</file>
<update>2009-02-13</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>645</translated>
<fuzzy>1</fuzzy>
- <untranslated>352</untranslated>
+ <untranslated>353</untranslated>
</strings>
<translators>
<translator>
<file>Czech.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>616</translated>
<fuzzy>0</fuzzy>
- <untranslated>382</untranslated>
+ <untranslated>383</untranslated>
</strings>
<translators>
<translator>
<file>Danish.po</file>
<update>2013-01-13</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>654</translated>
<fuzzy>0</fuzzy>
- <untranslated>344</untranslated>
+ <untranslated>345</untranslated>
</strings>
<translators>
<translator>
<file>Dutch.po</file>
<update>2018-09-06</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>992</translated>
<fuzzy>0</fuzzy>
- <untranslated>6</untranslated>
+ <untranslated>7</untranslated>
</strings>
<translators>
<translator>
<translation template="1">
<language>English</language>
<file>English.pot</file>
- <update>2020-12-28</update>
+ <update>2020-12-30</update>
<strings>
- <count>998</count>
- <translated>998</translated>
+ <count>999</count>
+ <translated>999</translated>
<fuzzy>0</fuzzy>
<untranslated>0</untranslated>
</strings>
<file>Finnish.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>918</translated>
<fuzzy>0</fuzzy>
- <untranslated>80</untranslated>
+ <untranslated>81</untranslated>
</strings>
</translation>
<translation>
<file>French.po</file>
<update>2019-06-02</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>911</translated>
<fuzzy>2</fuzzy>
- <untranslated>85</untranslated>
+ <untranslated>86</untranslated>
</strings>
<translators>
<translator maintainer="1">
<file>Galician.po</file>
<update>2020-11-28</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>996</translated>
<fuzzy>0</fuzzy>
- <untranslated>2</untranslated>
+ <untranslated>3</untranslated>
</strings>
<translators>
<translator>
<file>German.po</file>
<update>2020-11-25</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>996</translated>
<fuzzy>0</fuzzy>
- <untranslated>2</untranslated>
+ <untranslated>3</untranslated>
</strings>
<translators>
<translator maintainer="1">
<file>Greek.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>617</translated>
<fuzzy>0</fuzzy>
- <untranslated>381</untranslated>
+ <untranslated>382</untranslated>
</strings>
<translators>
<translator>
<file>Hungarian.po</file>
<update>2011-01-24</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>550</translated>
<fuzzy>0</fuzzy>
- <untranslated>448</untranslated>
+ <untranslated>449</untranslated>
</strings>
<translators>
<translator>
<file>Italian.po</file>
<update>2019-07-12</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>921</translated>
<fuzzy>0</fuzzy>
- <untranslated>77</untranslated>
+ <untranslated>78</untranslated>
</strings>
<translators>
<translator>
<file>Japanese.po</file>
<update>2020-12-07</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>998</translated>
<fuzzy>0</fuzzy>
- <untranslated>0</untranslated>
+ <untranslated>1</untranslated>
</strings>
<translators>
<translator>
<file>Korean.po</file>
<update>2018-02-05</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>877</translated>
<fuzzy>0</fuzzy>
- <untranslated>121</untranslated>
+ <untranslated>122</untranslated>
</strings>
<translators>
<translator>
<translation>
<language>Lithuanian</language>
<file>Lithuanian.po</file>
- <update>2020-11-30</update>
+ <update>2020-12-29</update>
<strings>
- <count>998</count>
- <translated>996</translated>
+ <count>999</count>
+ <translated>998</translated>
<fuzzy>0</fuzzy>
- <untranslated>2</untranslated>
+ <untranslated>1</untranslated>
</strings>
<translators>
<translator>
<file>Norwegian.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>646</translated>
<fuzzy>0</fuzzy>
- <untranslated>352</untranslated>
+ <untranslated>353</untranslated>
</strings>
<translators>
<translator>
<file>Persian.po</file>
<update>2013-08-15</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>657</translated>
<fuzzy>0</fuzzy>
- <untranslated>341</untranslated>
+ <untranslated>342</untranslated>
</strings>
<translators>
<translator>
<file>Polish.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>960</translated>
<fuzzy>0</fuzzy>
- <untranslated>38</untranslated>
+ <untranslated>39</untranslated>
</strings>
<translators>
<translator>
<file>Portuguese.po</file>
<update>2020-11-29</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>996</translated>
<fuzzy>0</fuzzy>
- <untranslated>2</untranslated>
+ <untranslated>3</untranslated>
</strings>
<translators>
<translator>
<file>Romanian.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>575</translated>
<fuzzy>44</fuzzy>
- <untranslated>379</untranslated>
+ <untranslated>380</untranslated>
</strings>
<translators>
<translator>
<file>Russian.po</file>
<update>2020-11-29</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>992</translated>
<fuzzy>0</fuzzy>
- <untranslated>6</untranslated>
+ <untranslated>7</untranslated>
</strings>
<translators>
<translator>
<file>Serbian.po</file>
<update></update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>645</translated>
<fuzzy>0</fuzzy>
- <untranslated>353</untranslated>
+ <untranslated>354</untranslated>
</strings>
<translators>
<translator>
<file>Sinhala.po</file>
<update>2010-12-12</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>574</translated>
<fuzzy>64</fuzzy>
- <untranslated>360</untranslated>
+ <untranslated>361</untranslated>
</strings>
<translators>
<translator>
<file>Slovak.po</file>
<update>2020-11-02</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>991</translated>
<fuzzy>0</fuzzy>
- <untranslated>7</untranslated>
+ <untranslated>8</untranslated>
</strings>
<translators>
<translator>
<translation>
<language>Slovenian</language>
<file>Slovenian.po</file>
- <update>2020-11-08</update>
+ <update>2020-12-29</update>
<strings>
- <count>998</count>
- <translated>996</translated>
+ <count>999</count>
+ <translated>998</translated>
<fuzzy>0</fuzzy>
- <untranslated>2</untranslated>
+ <untranslated>1</untranslated>
</strings>
<translators>
<translator>
<file>Spanish.po</file>
<update>2020-04-03</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>886</translated>
<fuzzy>0</fuzzy>
- <untranslated>112</untranslated>
+ <untranslated>113</untranslated>
</strings>
<translators>
<translator>
<file>Swedish.po</file>
<update>2019-10-07</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>921</translated>
<fuzzy>0</fuzzy>
- <untranslated>77</untranslated>
+ <untranslated>78</untranslated>
</strings>
<translators>
<translator>
<file>Turkish.po</file>
<update>2020-09-08</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>987</translated>
<fuzzy>0</fuzzy>
- <untranslated>11</untranslated>
+ <untranslated>12</untranslated>
</strings>
<translators>
<translator>
<file>Ukrainian.po</file>
<update>2009-06-13</update>
<strings>
- <count>998</count>
+ <count>999</count>
<translated>651</translated>
<fuzzy>0</fuzzy>
- <untranslated>347</untranslated>
+ <untranslated>348</untranslated>
</strings>
<translators>
<translator>
<translation>
<language>Slovenian</language>
<file>Slovenian.po</file>
- <update>2019-02-01</update>
+ <update>2020-12-29</update>
<strings>
<count>12</count>
<translated>12</translated>
<name>Filip Komar</name>
<mail>filip.komar at gmail.com</mail>
</translator>
+ <translator>
+ <name>Jadran Rudec</name>
+ <mail>jrudec at gmail.com</mail>
+ </translator>
</translators>
</translation>
<translation>
msgid "Batch"
msgstr "متتالي"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr ""
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "批处理文件"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr ""
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgstr ""
"Project-Id-Version: WinMerge\n"
"Report-Msgid-Bugs-To: https://bugs.winmerge.org/\n"
-"POT-Creation-Date: 2020-12-28 19:49+0000\n"
+"POT-Creation-Date: 2020-12-30 09:19+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: English <winmerge-translate@lists.sourceforge.net>\n"
msgid "Batch"
msgstr ""
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Erä"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr ""
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr ""
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "일괄 처리"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr " دسته "
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr ""
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Quantidade"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Пакет"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Библиотека Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""
msgid "Batch"
msgstr "Dávkový"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Paket"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Batch"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Sats"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Toplu İşlem"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr "Lua"
msgid "Batch"
msgstr "Бетч"
+msgid "JavaScript"
+msgstr ""
+
msgid "Lua"
msgstr ""