ultimatepp/uppsrc/CodeEditor/DiffSyntax.cpp
cxl 62e62583f0 upp.src: Fixed various warnings (GCC 8.2)
git-svn-id: svn://ultimatepp.org/upp/trunk@12866 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2019-03-22 07:48:06 +00:00

94 lines
2.1 KiB
C++

#include "CodeEditor.h"
namespace Upp {
DiffSyntax::DiffSyntax()
{
hout = NULL;
}
void DiffSyntax::Highlight(const wchar *start, const wchar *end, HighlightOutput& hls, CodeEditor *editor, int line, int64 pos)
{
hout = &hls;
Do(start, end, editor, line, editor ? editor->GetTabSize() : 4, pos);
hout = NULL;
}
void DiffSyntax::Put(int ink, int n, int paper)
{
if(hout)
hout->Put(n, hl_style[ink], hl_style[paper]);
}
void DiffSyntax::Do(const wchar *ln, const wchar *end, CodeEditor *editor, int line, int tabsize, int64 pos)
{
const int lineLength = FindTheNumberOfCharsToLineEnd(ln, end);
if(IsPattern(ln, end, "---") || IsPattern(ln, end, "***")) {
const wchar *lnPrefix = end - 4;
if(lnPrefix >= ln) {
if (IsPattern(lnPrefix, end, "----") || IsPattern(lnPrefix, end, "****")) {
Put(INK_DIFF_HEADER, lineLength);
return;
}
}
Put(INK_DIFF_FILE_INFO, lineLength);
}
else
if(IsPattern(ln, end, "====") || IsPattern(ln, end, "index"))
Put(INK_DIFF_FILE_INFO, lineLength);
else
if(IsPattern(ln, end, "+++"))
Put(INK_DIFF_HEADER, lineLength);
else
if(IsPattern(ln, end, "@@"))
Put(INK_DIFF_HEADER, lineLength);
else
if(IsDigit(*ln))
Put(INK_DIFF_HEADER, lineLength);
else
if(*ln == '+' || *ln == '>')
Put(INK_DIFF_ADDED, lineLength);
else
if(*ln == '-' || *ln == '<' || *ln == '!')
Put(INK_DIFF_REMOVED, lineLength);
else
if(*ln == ' ')
Put(INK_NORMAL, lineLength);
else
Put(INK_DIFF_COMMENT, lineLength);
}
int DiffSyntax::FindTheNumberOfCharsToLineEnd(const wchar *current, const wchar *end) const
{
int counter = 0;
while(current < end) {
current++;
counter++;
}
return counter;
}
bool DiffSyntax::IsPattern(const wchar *current, const wchar *end, String pattern) const
{
bool containing = true;
int i = 0;
while((current < end) && (i < pattern.GetCount())) {
if((int)ToLower(*current) != ToLower(pattern[i])) {
containing = false;
break;
}
current++;
i++;
}
return (containing && (i == pattern.GetCount()));
}
}