5 #include "textfile.h"
\r
7 const unsigned uCharsPerLine = 60;
\r
8 const int MIN_NAME = 10;
\r
9 const int MAX_NAME = 32;
\r
11 extern void AssignColors(const MSA &a, int **Colors);
\r
13 static int **MakeColors(const MSA &a)
\r
15 const unsigned uSeqCount = a.GetSeqCount();
\r
16 const unsigned uColCount = a.GetColCount();
\r
18 int **Colors = new int *[uSeqCount];
\r
19 for (unsigned i = 0; i < uSeqCount; ++i)
\r
21 Colors[i] = new int[uColCount];
\r
22 memset(Colors[i], 0, uColCount*sizeof(int));
\r
24 AssignColors(a, Colors);
\r
28 static void ChangeColor(TextFile &File, int From, int To)
\r
33 #define COLOR_WHITE "FFFFFF"
\r
34 #define COLOR_GRAY "C0C0C0"
\r
35 #define COLOR_BLACK "000000"
\r
36 #define COLOR_RED "FF0000"
\r
37 #define COLOR_GREEN "00FF00"
\r
38 #define COLOR_BLUE "5590FF"
\r
39 #define COLOR_LIGHTBLUE "77FFFF"
\r
41 #define X(c) File.PutString("</SPAN><SPAN STYLE=\"background-color:#" c "\">");
\r
59 #define COLOR_WINDOW "FFEEE0"
\r
61 void MSA::ToHTMLFile(TextFile &File) const
\r
63 File.PutString("<HTML>\n");
\r
64 File.PutString("<BODY BGCOLOR=\"#" COLOR_WINDOW "\">\n");
\r
65 File.PutString("<PRE>");
\r
67 int **Colors = MakeColors(*this);
\r
69 int iLongestNameLength = 0;
\r
70 for (unsigned uSeqIndex = 0; uSeqIndex < GetSeqCount(); ++uSeqIndex)
\r
72 const char *ptrName = GetSeqName(uSeqIndex);
\r
73 const char *ptrBlank = strchr(ptrName, ' ');
\r
76 iLength = (int) (ptrBlank - ptrName);
\r
78 iLength = (int) strlen(ptrName);
\r
79 if (iLength > iLongestNameLength)
\r
80 iLongestNameLength = iLength;
\r
82 if (iLongestNameLength > MAX_NAME)
\r
83 iLongestNameLength = MAX_NAME;
\r
84 if (iLongestNameLength < MIN_NAME)
\r
85 iLongestNameLength = MIN_NAME;
\r
87 unsigned uLineCount = (GetColCount() - 1)/uCharsPerLine + 1;
\r
88 int CurrentColor = -1;
\r
89 for (unsigned uLineIndex = 0; uLineIndex < uLineCount; ++uLineIndex)
\r
91 File.PutString("\n");
\r
92 unsigned uStartColIndex = uLineIndex*uCharsPerLine;
\r
93 unsigned uEndColIndex = uStartColIndex + uCharsPerLine - 1;
\r
94 if (uEndColIndex >= GetColCount())
\r
95 uEndColIndex = GetColCount() - 1;
\r
96 char Name[MAX_NAME+1];
\r
97 for (unsigned uSeqIndex = 0; uSeqIndex < GetSeqCount(); ++uSeqIndex)
\r
99 const char *ptrName = GetSeqName(uSeqIndex);
\r
100 const char *ptrBlank = strchr(ptrName, ' ');
\r
103 iLength = (int) (ptrBlank - ptrName);
\r
105 iLength = (int) strlen(ptrName);
\r
106 if (iLength > MAX_NAME)
\r
107 iLength = MAX_NAME;
\r
108 memset(Name, ' ', MAX_NAME);
\r
109 memcpy(Name, ptrName, iLength);
\r
110 Name[iLongestNameLength] = 0;
\r
112 // File.PutString("<FONT COLOR=\"#000000\">");
\r
114 File.PutString("<SPAN STYLE=\"background-color:#" COLOR_WINDOW "\">");
\r
115 File.PutFormat("%s ", Name);
\r
116 File.PutString("<SPAN STYLE=\"background-color:#FFFFFF\">");
\r
117 for (unsigned uColIndex = uStartColIndex; uColIndex <= uEndColIndex;
\r
120 const int Color = Colors[uSeqIndex][uColIndex];
\r
121 ChangeColor(File, CurrentColor, Color);
\r
122 CurrentColor = Color;
\r
123 const char c = GetChar(uSeqIndex, uColIndex);
\r
125 File.PutFormat("%c", tolower(c));
\r
127 File.PutFormat("%c", toupper(c));
\r
129 File.PutString("\n");
\r
132 File.PutString("</SPAN>\n");
\r
133 File.PutString("</PRE>\n");
\r
134 File.PutString("</BODY>\n");
\r
135 File.PutString("</HTML>\n");
\r