ide: Diff files highlighting (thanks Klugier) #835

git-svn-id: svn://ultimatepp.org/upp/trunk@7650 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2014-09-08 09:45:10 +00:00
parent f09a844d69
commit d72375c5c3
9 changed files with 218 additions and 51 deletions

View file

@ -18,7 +18,13 @@ void CreateTagSyntax(One<EditorSyntax>& e, bool html)
e.Create<TagSyntax>().Html(html);
}
INITBLOCK {
void CreateDiffSyntax(One<EditorSyntax>& e)
{
e.Create<DiffSyntax>();
}
INITBLOCK
{
RegisterCSyntax("cpp", CSyntax::HIGHLIGHT_CPP,
"*.c *.cpp *.cc *.cxx *.h *.hpp *.hh *.hxx *.m *.mm *.icpp *.conf",
"C/C++");
@ -36,6 +42,8 @@ INITBLOCK {
EditorSyntax::Register("xml", callback1(CreateTagSyntax, false), "*.xml *.xsd", "XML (.xml)");
EditorSyntax::Register("html", callback1(CreateTagSyntax, true), "*.html *.htm", "HTML (.html)");
EditorSyntax::Register("diff", callback(CreateDiffSyntax), "*.diff *.patch", "Diff");
}
END_UPP_NAMESPACE

View file

@ -169,6 +169,7 @@ struct FindReplaceDlg : FrameBottom< WithIDEFindReplaceLayout<TopWindow> > {
#include "Syntax.h"
#include "CSyntax.h"
#include "DiffSyntax.h"
#include "TagSyntax.h"
class CodeEditor : public LineEdit,

View file

@ -22,6 +22,9 @@ file
CHighlight.cpp,
CLogic.cpp,
CRegister.icpp,
DiffSyntax readonly separator,
DiffSyntax.h,
DiffSyntax.cpp,
TagSyntax readonly separator,
TagSyntax.h,
TagSyntax.cpp,

View file

@ -0,0 +1,94 @@
#include "CodeEditor.h"
NAMESPACE_UPP
DiffSyntax::DiffSyntax()
{
hout = NULL;
}
void DiffSyntax::Highlight(const wchar *start, const wchar *end, HighlightOutput& hls, CodeEditor *editor, int line, int 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, int 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_DIFF_COMMENT, lineLength);
else
Put(INK_NORMAL, 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(ToLower(*current) != ToLower(pattern[i])) {
containing = false;
break;
}
current++;
i++;
}
return (containing && (i == pattern.GetCount()));
}
END_UPP_NAMESPACE

View file

@ -0,0 +1,18 @@
class DiffSyntax : public EditorSyntax {
public:
DiffSyntax();
virtual void Highlight(const wchar *start, const wchar *end, HighlightOutput& hls,
CodeEditor *editor, int line, int pos);
protected:
void Put(int ink, int n = 1, int paper = PAPER_NORMAL);
void Do(const wchar *s, const wchar *end, CodeEditor *editor, int line, int tabsize, int pos);
int FindTheNumberOfCharsToLineEnd(const wchar *current, const wchar *end) const;
bool IsPattern(const wchar *current, const wchar *end, String pattern) const;
private:
HighlightOutput *hout;
};

View file

@ -133,6 +133,12 @@ void HighlightSetup::DefaultHlStyles()
SetHlStyle(INK_UPPMACROS, Cyan);
SetHlStyle(INK_UPPLOGS, Green);
SetHlStyle(INK_DIFF_FILE_INFO, Black, true);
SetHlStyle(INK_DIFF_HEADER, Color(28, 127, 200));
SetHlStyle(INK_DIFF_ADDED, Color(28, 42, 255));
SetHlStyle(INK_DIFF_REMOVED, Color(255, 0, 0));
SetHlStyle(INK_DIFF_COMMENT, Green);
SetHlStyle(PAPER_BLOCK1, Blend(LtBlue, White, 240));
SetHlStyle(PAPER_BLOCK2, Blend(LtGreen, White, 240));
SetHlStyle(PAPER_BLOCK3, Blend(LtYellow, White, 240));

View file

@ -45,6 +45,12 @@ HL_COLOR(INK_SQLBOOL, t_("Sql boolean expressions"), 1)
HL_COLOR(INK_UPPMACROS, t_("U++ macros"), 0)
HL_COLOR(INK_UPPLOGS, t_("U++ log macros"), 0)
HL_COLOR(INK_DIFF_FILE_INFO, t_("Diff file information"), 1)
HL_COLOR(INK_DIFF_HEADER, t_("Diff header line"), 0)
HL_COLOR(INK_DIFF_ADDED, t_("Diff added line"), 0)
HL_COLOR(INK_DIFF_REMOVED, t_("Diff removed line"), 0)
HL_COLOR(INK_DIFF_COMMENT, t_("Diff comment"), 0)
HL_COLOR(PAPER_SELWORD, t_("Selected word through file"), 0)
HL_COLOR(PAPER_ERROR, t_("Error in compiler messages"), 0)

View file

@ -8,8 +8,6 @@ void IdeFileIcon0(bool dir, const String& filename, Image& img)
{
if(dir) return;
String ext = ToLower(GetFileExt(filename));
if(ext == ".h" || ext == ".hpp" || ext == ".hh" || ext == ".hxx")
img = IdeCommonImg::Header();
for(int i = 0; i < GetIdeModuleCount(); i++) {
Image m = GetIdeModule(i).FileIcon(filename);
if(!IsNull(m)) {
@ -17,35 +15,56 @@ void IdeFileIcon0(bool dir, const String& filename, Image& img)
break;
}
}
if(ext == ".html")
img = IdeCommonImg::html();
else
if(ext == ".css")
img = IdeCommonImg::css();
else
if(ext == ".witz")
img = IdeCommonImg::witz();
else
if(ext == ".js")
img = IdeCommonImg::js();
else
if(ext == ".json")
img = IdeCommonImg::json();
else
if(ext == ".xml" || ext == ".xsd")
img = IdeCommonImg::xml();
else
if(ext == ".diff" || ext == ".patch")
img = IdeCommonImg::diff();
else
if(ext == ".usc")
img = IdeCommonImg::Script();
else
if(ext == ".lng" || ext == ".lngj" || ext == ".t" || ext == ".jt")
img = IdeCommonImg::Language();
else
if(ext == ".icpp")
img = IdeCommonImg::ISource();
else
if(ext == ".c" || ext == ".cpp" || ext == ".cc" || ext == ".cxx"
|| ext == ".m" || ext == ".mm") //should later have diff img?
img = IdeCommonImg::Source();
else
if(ext == ".h" || ext == ".hpp" || ext == ".hh" || ext == ".hxx")
img = IdeCommonImg::Header();
else
if(ext == ".sch")
img = IdeCommonImg::Sch();
else
if(ext == ".ddl")
img = IdeCommonImg::Ddl();
else
if(ext == ".sql")
img = IdeCommonImg::Sql();
else
if(filename == "Copying")
img = IdeCommonImg::License();
else
if(filename == "main.conf")
img = IdeCommonImg::MainConf();
}
@ -96,7 +115,8 @@ void IdeFileIcon(bool dir, const String& filename, Image& img)
IdeFileIcon0(dir, filename, img);
}
void IdeFs(FileSel& fs) {
void IdeFs(FileSel& fs)
{
fs.WhenIcon = callback(IdeFileIcon);
fs.AllFilesType();
fs.Multi();
@ -104,19 +124,24 @@ void IdeFs(FileSel& fs) {
fs.ReadOnlyOption();
}
void SourceFs(FileSel& fs) {
void SourceFs(FileSel& fs)
{
fs.Type("C++ files (*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp)", "*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp");
fs.Type("Layout files (*.lay)", "*.lay");
fs.Type("Diff/Patch files (*.diff *.patch)", "*.diff *.patch");
fs.Type("Image files (*.iml)", "*.iml");
fs.Type("Json files (*.json)", "*.json");
fs.Type("Language files (*.lng)", "*.lng");
fs.Type("Layout files (*.lay)", "*.lay");
fs.Type("Web development files (*.html *.js *.css *.witz)", "*.html *.js *.css *.witz");
fs.Type("Xml files (*.xml *.xsd)", "*.xml *.xsd");
fs.Type("Other special files (*.sch *.usc *.rc *.brc *.upt)", "*.sch *.usc *.rc *.brc *.upt");
String mask = "*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.lay *.iml *.lng *.sch *.usc *.rc *.brc *.upt *.html *.js *.css *.witz *.json *.xml *.xsd *.qtf";
String mask = "*.cpp *.h *.hpp *.c *.C *.cc *.cxx *.icpp *.diff *.patch *.lay *.iml *.lng *.sch *.usc *.rc *.brc *.upt *.html *.js *.css *.witz *.json *.xml *.xsd *.qtf";
fs.Type("All source files (" + mask + ")", mask);
IdeFs(fs);
}
FileSel& AnySourceFs() {
FileSel& AnySourceFs()
{
static FileSel *fsp;
if(!fsp) {
static FileSel fs;
@ -127,7 +152,8 @@ FileSel& AnySourceFs() {
return *fsp;
}
FileSel& AnyPackageFs() {
FileSel& AnyPackageFs()
{
static FileSel fs;
static bool b;
if(!b) {
@ -138,7 +164,8 @@ FileSel& AnyPackageFs() {
return fs;
}
FileSel& BasedSourceFs() {
FileSel& BasedSourceFs()
{
static FileSel *fsp;
if(!fsp) {
static FileSel fs;
@ -149,7 +176,8 @@ FileSel& BasedSourceFs() {
return *fsp;
}
FileSel& OutputFs() {
FileSel& OutputFs()
{
static FileSel *fsp;
if(!fsp) {
static FileSel fs;

View file

@ -21,6 +21,7 @@ IMAGE_ID(js)
IMAGE_ID(html)
IMAGE_ID(css)
IMAGE_ID(witz)
IMAGE_ID(diff)
IMAGE_ID(Script)
IMAGE_ID(Images)
IMAGE_ID(Language)
@ -82,42 +83,44 @@ IMAGE_DATA(230,103,21,204,12,254,7,139,53,205,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
IMAGE_END_DATA(1632, 16)
IMAGE_BEGIN_DATA
IMAGE_DATA(120,156,237,154,191,107,84,75,20,199,167,180,176,176,18,125,96,149,20,146,202,218,102,219,5,97,81,116,240,31,176,73)
IMAGE_DATA(147,74,208,46,219,217,9,11,54,1,65,44,68,188,136,248,138,180,33,32,1,109,245,90,36,77,94,241,16,34,60,30)
IMAGE_DATA(79,59,197,140,247,123,39,103,246,204,220,249,121,119,151,236,19,39,28,230,231,231,156,51,103,230,206,29,246,70,156,19)
IMAGE_DATA(231,196,47,154,100,35,42,33,50,196,73,41,85,93,215,42,148,208,135,49,142,158,150,13,113,155,77,31,36,160,167,101)
IMAGE_DATA(119,118,118,130,54,125,60,233,160,57,197,82,136,71,90,20,207,153,28,222,141,221,163,181,53,139,71,221,77,108,254,157)
IMAGE_DATA(248,215,85,213,50,227,19,22,245,8,107,237,155,212,250,231,236,163,30,251,239,244,210,47,124,24,12,68,122,49,6,33)
IMAGE_DATA(110,48,24,168,195,195,195,224,102,64,31,198,56,122,6,41,46,162,167,181,75,172,16,99,43,31,12,158,168,221,221,191)
IMAGE_DATA(218,156,183,147,14,154,19,37,223,120,18,151,215,117,155,39,22,185,207,159,20,31,242,55,197,135,230,239,203,33,218,206)
IMAGE_DATA(174,89,135,210,248,131,101,241,159,117,253,231,177,255,78,47,21,28,6,116,210,245,57,205,164,188,37,84,245,162,121,227)
IMAGE_DATA(222,42,214,97,88,117,92,172,99,202,254,208,60,242,76,29,150,93,98,73,18,58,108,187,63,78,30,20,198,69,226,225)
IMAGE_DATA(245,185,229,155,242,104,100,247,121,116,216,62,31,119,237,251,116,8,189,182,193,121,19,15,169,63,104,155,145,56,24,29)
IMAGE_DATA(100,139,198,115,62,39,134,127,190,182,253,133,31,212,94,188,134,121,107,23,213,49,235,30,238,193,26,29,98,209,183,137)
IMAGE_DATA(5,221,12,82,39,98,106,82,209,211,60,67,71,146,175,154,235,98,68,71,174,125,254,16,101,243,30,93,94,94,202,170)
IMAGE_DATA(241,179,110,115,170,11,177,105,234,41,30,99,245,27,116,179,173,215,245,81,91,71,222,199,190,30,239,125,163,47,100,254)
IMAGE_DATA(176,245,242,229,81,240,54,145,195,223,190,253,79,111,158,199,221,142,231,56,139,159,101,254,133,50,159,244,251,48,88,222)
IMAGE_DATA(195,160,170,43,37,43,25,45,199,120,140,169,143,234,104,57,198,139,241,116,30,179,242,24,79,62,243,114,174,255,125,120)
IMAGE_DATA(30,39,228,168,187,229,69,173,95,161,44,71,58,165,195,32,117,213,73,5,191,247,97,34,210,7,65,174,253,216,66,206)
IMAGE_DATA(178,145,12,239,123,147,241,246,20,143,55,26,191,5,32,161,62,125,211,197,121,123,236,184,163,51,103,254,177,223,10,114)
IMAGE_DATA(120,126,59,233,222,82,210,60,152,209,232,185,149,151,240,177,20,227,11,100,121,18,14,3,252,76,187,196,41,231,87,217)
IMAGE_DATA(48,43,155,254,186,145,208,95,156,183,217,114,251,182,45,153,117,16,134,249,170,88,71,119,238,101,58,116,252,42,71,71)
IMAGE_DATA(93,180,145,253,58,202,30,4,173,163,100,221,124,146,239,127,120,191,212,89,241,155,245,101,120,58,137,31,6,234,252,89)
IMAGE_DATA(5,225,253,159,135,74,65,80,150,55,206,72,245,245,162,82,95,255,112,3,217,62,176,41,94,179,23,21,244,184,172,232)
IMAGE_DATA(6,171,45,63,190,82,169,209,5,253,233,13,118,59,236,245,171,74,60,189,219,225,240,233,135,62,255,176,155,0,95,136)
IMAGE_DATA(41,251,223,171,206,130,209,103,37,97,222,210,206,141,2,236,187,137,102,25,79,99,215,78,62,129,241,54,243,54,33,22)
IMAGE_DATA(130,242,151,174,253,128,93,45,100,247,242,37,93,103,252,254,254,190,218,222,222,86,171,171,171,166,109,56,28,182,109,232)
IMAGE_DATA(203,225,15,14,14,188,98,248,136,255,24,243,247,167,137,250,247,203,80,125,107,30,30,8,202,104,51,124,36,126,176,131)
IMAGE_DATA(241,55,155,7,238,187,210,130,50,218,208,103,197,129,108,59,252,183,19,142,236,83,217,240,96,72,34,246,169,45,104,223)
IMAGE_DATA(35,136,51,205,159,252,167,249,163,207,217,131,110,146,180,94,147,201,196,196,29,101,180,37,216,142,30,71,210,156,115,51)
IMAGE_DATA(72,78,86,36,78,212,55,239,165,186,118,95,153,92,97,83,51,73,241,96,174,221,83,58,191,95,116,53,155,139,125,103)
IMAGE_DATA(92,105,44,44,63,97,255,193,179,202,242,9,117,154,155,151,103,246,49,246,237,199,145,102,238,41,187,30,224,185,192,222)
IMAGE_DATA(250,195,218,216,115,253,73,197,194,241,179,56,22,52,95,210,245,230,125,209,149,219,248,58,141,101,88,71,42,22,52,151)
IMAGE_DATA(245,135,197,87,126,43,22,235,119,234,206,158,202,221,215,15,174,55,243,185,44,123,243,33,54,135,207,146,37,253,63,131)
IMAGE_DATA(217,62,99,74,188,77,241,143,67,197,58,12,219,68,184,143,14,195,146,160,46,226,11,53,79,251,150,142,30,172,209,33)
IMAGE_DATA(250,199,255,119,250,191,166,57,31,6,37,111,17,175,244,77,243,230,183,182,182,76,219,202,202,202,113,136,67,159,235,63)
IMAGE_DATA(88,206,108,108,108,28,55,215,188,182,190,183,183,215,214,169,76,237,156,247,217,67,27,198,211,56,112,84,230,190,198,120)
IMAGE_DATA(228,224,160,135,252,162,50,231,201,39,30,11,106,227,125,220,142,107,159,244,82,31,213,115,120,94,231,44,181,211,28,184)
IMAGE_DATA(46,223,250,195,111,138,181,155,208,7,137,241,228,35,31,71,137,199,46,198,231,166,121,60,59,51,62,187,226,39,151,197)
IMAGE_DATA(124,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1216, 11)
IMAGE_DATA(120,156,237,154,61,104,28,71,20,199,167,76,145,194,149,136,131,93,73,133,81,149,210,164,217,246,192,112,56,196,131,81)
IMAGE_DATA(159,70,141,42,131,221,233,58,87,54,28,184,17,24,66,10,99,178,152,144,20,106,133,192,40,36,173,179,22,72,141,82)
IMAGE_DATA(132,128,2,33,216,238,108,172,241,254,119,245,230,222,204,206,231,238,29,186,24,63,243,152,207,223,123,51,111,102,103,71)
IMAGE_DATA(222,19,151,196,37,241,145,138,172,85,69,84,250,56,41,165,170,170,74,249,4,109,232,99,217,105,88,31,183,93,183,65)
IMAGE_DATA(61,118,26,118,111,111,207,235,211,197,147,13,154,83,72,124,60,100,81,60,103,82,120,59,118,143,214,215,13,30,101,91)
IMAGE_DATA(216,252,59,241,175,202,178,97,38,231,44,202,1,214,216,55,177,245,79,217,71,61,246,223,197,201,71,124,24,20,34,190)
IMAGE_DATA(24,133,143,43,138,66,157,156,156,120,55,3,218,208,199,178,83,196,184,128,157,198,47,177,66,76,140,180,40,190,87,251)
IMAGE_DATA(251,127,54,41,175,39,27,52,39,18,87,127,82,155,111,203,38,79,44,82,215,120,98,188,111,188,49,222,55,127,87,10)
IMAGE_DATA(109,253,236,235,117,200,141,63,88,22,255,161,235,63,143,253,119,113,146,113,24,208,73,215,231,52,147,242,150,80,229,143)
IMAGE_DATA(245,27,247,86,182,13,205,170,179,108,27,51,246,125,203,35,77,180,97,248,37,150,52,98,195,244,251,254,252,65,97,92)
IMAGE_DATA(32,30,206,49,55,124,157,31,143,205,54,135,13,115,204,103,93,255,46,27,162,93,91,239,188,137,135,86,127,180,62,3)
IMAGE_DATA(113,208,54,200,23,245,231,124,74,12,127,249,217,28,47,198,65,245,217,107,152,182,118,65,27,67,247,112,15,86,219,16)
IMAGE_DATA(139,190,77,44,232,102,16,59,17,99,147,10,158,230,9,54,162,124,89,95,23,3,54,82,253,243,135,40,153,119,216,114)
IMAGE_DATA(242,82,150,245,56,171,38,165,178,16,219,186,28,227,209,183,125,131,110,55,229,170,58,109,202,72,251,248,111,251,59,223)
IMAGE_DATA(232,11,153,63,124,61,123,118,234,189,77,164,240,183,111,255,219,155,231,113,55,227,57,73,226,135,204,63,83,231,35,159)
IMAGE_DATA(14,131,229,61,12,202,170,84,178,148,193,124,136,71,159,234,180,10,230,67,188,152,204,230,49,148,71,127,26,51,207,167)
IMAGE_DATA(142,191,15,207,227,132,20,101,59,191,168,245,203,212,229,144,11,58,12,98,87,157,88,240,123,31,38,34,126,16,164,250)
IMAGE_DATA(15,45,228,144,141,164,121,215,155,140,215,199,120,188,209,248,45,0,130,242,236,77,23,230,205,190,147,142,205,148,249,135)
IMAGE_DATA(254,175,32,133,231,183,147,238,45,37,206,131,25,143,159,26,105,14,31,146,16,159,161,203,35,139,56,12,54,54,54,84)
IMAGE_DATA(76,87,86,86,138,16,31,146,152,141,20,254,240,240,208,107,35,213,63,105,46,111,219,242,241,15,214,69,80,83,248,95)
IMAGE_DATA(61,154,202,15,241,63,116,254,87,182,69,80,83,248,235,165,91,83,249,33,254,135,204,63,71,109,190,183,224,48,192,55)
IMAGE_DATA(155,37,150,148,79,52,126,86,214,237,85,173,190,127,97,222,100,243,253,155,190,100,210,173,200,207,151,217,54,186,115,207)
IMAGE_DATA(179,209,198,175,180,108,84,89,111,53,183,141,188,183,98,107,35,103,221,92,154,62,126,255,126,169,146,226,55,244,102,124)
IMAGE_DATA(49,194,15,3,181,242,185,130,242,246,127,70,74,65,145,151,223,124,38,213,155,203,74,189,249,210,14,100,243,192,198,248)
IMAGE_DATA(150,189,172,96,199,102,69,55,88,77,254,241,87,165,26,127,209,126,135,135,223,14,123,243,107,37,126,184,211,225,240,29)
IMAGE_DATA(152,190,5,179,63,11,248,66,204,216,87,63,117,22,140,190,49,11,125,101,183,254,188,0,251,251,180,101,25,79,125,215)
IMAGE_DATA(207,191,135,243,58,74,53,11,69,254,117,215,191,199,111,171,228,247,218,213,182,204,248,163,163,35,181,187,187,171,214,214)
IMAGE_DATA(214,116,221,104,52,106,234,208,150,194,31,31,31,59,85,243,129,241,163,207,95,127,79,213,127,175,71,234,109,253,240,64)
IMAGE_DATA(145,71,157,230,3,241,131,31,244,255,182,126,224,222,169,86,145,71,29,218,140,56,144,111,139,127,123,206,145,127,202,107)
IMAGE_DATA(30,12,105,192,63,213,121,253,59,20,113,166,249,211,248,105,254,104,179,246,160,45,146,214,107,58,157,234,184,35,143,186)
IMAGE_DATA(8,219,177,99,105,156,179,110,6,209,201,138,200,137,250,252,133,84,55,238,41,157,42,108,106,166,49,30,204,141,187,170)
IMAGE_DATA(77,239,117,175,85,139,246,111,245,203,141,133,49,78,248,191,255,164,52,198,132,50,205,205,201,51,255,232,251,219,203,113)
IMAGE_DATA(203,220,85,102,217,195,115,133,191,205,135,149,246,103,143,39,22,11,107,156,217,177,160,249,146,173,231,47,252,215,101,23)
IMAGE_DATA(79,99,157,197,210,111,35,22,11,154,203,230,195,100,222,25,139,205,239,170,206,158,74,221,215,247,111,214,243,185,38,123)
IMAGE_DATA(243,62,54,133,79,210,37,253,209,209,176,223,52,72,188,77,241,43,194,108,27,154,173,35,220,199,134,102,73,81,22,225)
IMAGE_DATA(133,154,167,127,195,70,15,86,219,16,253,227,255,73,254,175,50,231,195,32,231,45,226,212,190,50,111,126,103,103,71,215)
IMAGE_DATA(173,174,174,158,249,56,180,217,227,7,203,153,173,173,173,179,250,154,215,148,15,14,14,154,50,229,169,158,243,46,127,168)
IMAGE_DATA(67,127,234,7,142,242,124,172,33,30,41,56,216,161,113,81,158,243,52,38,30,11,170,227,109,220,143,237,159,236,82,27)
IMAGE_DATA(149,83,120,94,230,44,213,211,28,184,45,215,250,99,220,20,107,91,208,6,13,241,52,70,222,143,132,199,46,196,167,202)
IMAGE_DATA(60,158,157,129,207,174,248,0,240,40,52,215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
IMAGE_END_DATA(1280, 12)