1 /******************************************************************************
5 * Copyright (C) 1997-2014 by Dimitri van Heesch.
7 * Permission to use, copy, modify, and distribute this software and its
8 * documentation under the terms of the GNU General Public License is hereby
9 * granted. No representations are made about the suitability of this software
10 * for any purpose. It is provided "as is" without express or implied warranty.
11 * See the GNU General Public License for more details.
13 * Documents produced by Doxygen are derivative works derived from the
14 * input used in their production; they are not affected by this license.
33 #include "docparser.h"
34 #include "htmldocvisitor.h"
35 #include "searchindex.h"
39 #include "vhdldocgen.h"
46 //#define DBG_HTML(x) x;
49 static const char defaultHtmlHeader[] =
50 #include "header.html.h"
53 static const char defaultHtmlFooter[] =
54 #include "footer.html.h"
57 static const char defaultStyleSheet[] =
58 #include "doxygen.css.h"
61 static const char search_functions_script[]=
62 #include "search_functions.php.h"
65 static const char search_opensearch_script[]=
66 #include "search_opensearch.php.h"
69 static const char search_styleSheet[] =
70 #include "search.css.h"
73 static const char search_jquery_script1[]=
74 #include "jquery_p1.js.h"
77 static const char search_jquery_script2[]=
78 #include "jquery_p2.js.h"
81 static const char search_jquery_script3[]=
82 #include "jquery_p3.js.h"
85 static const char search_jquery_script4[]=
86 #include "jquery_ui.js.h"
89 static const char search_jquery_script5[]=
90 #include "jquery_fx.js.h"
93 static const char search_jquery_script6[]=
94 #include "jquery_pt.js.h"
97 static const char svgpan_script[]=
98 #include "svgpan.js.h"
101 static const char dynsections_script[]=
102 #include "dynsections.js.h"
105 static const char extsearch_script[]=
106 #include "extsearch.js.h"
109 static QCString g_header;
110 static QCString g_footer;
111 static QCString g_mathjax_code;
113 //------------------------- Pictures for the Tabs ------------------------
115 // active tab background luma
116 static unsigned char tab_a_png[36] =
118 31, 42, 59, 69, 73, 74, 75, 77, 77,
119 77, 79, 80, 80, 82, 81, 83, 84, 86,
120 87, 88, 89, 90, 91, 91, 93, 94, 94,
121 96, 96, 97, 98, 98, 99, 99, 99, 100
124 // normal tab background luma
125 static unsigned char tab_b_png[36] =
127 218, 228, 235, 233, 230, 227, 225, 222, 221,
128 218, 217, 215, 214, 213, 212, 211, 210, 209,
129 209, 197, 198, 199, 200, 201, 202, 203, 204,
130 205, 207, 209, 211, 213, 217, 219, 206, 188
133 // hovering tab background luma
134 static unsigned char tab_h_png[36] =
136 181, 191, 198, 196, 193, 190, 188, 185, 184,
137 181, 180, 178, 177, 176, 175, 174, 173, 172,
138 172, 154, 155, 156, 157, 158, 159, 160, 161,
139 162, 164, 166, 168, 170, 174, 176, 163, 145
143 static unsigned char header_png[12] =
145 255, 240, 241, 242, 243, 244,
146 245, 246, 247, 248, 249, 250
150 static unsigned char func_header_png[56] =
152 248, 247, 246, 245, 244, 243, 242, 241,
153 240, 239, 238, 237, 236, 235, 234, 233,
154 232, 231, 230, 229, 228, 223, 223, 223,
155 223, 223, 223, 223, 223, 223, 223, 223,
156 224, 224, 224, 224, 225, 225, 225, 225,
157 225, 226, 226, 226, 227, 227, 227, 227,
158 228, 228, 228, 229, 229, 229, 229, 229
162 static unsigned char tab_s_png[36] =
164 187, 186, 185, 183, 182, 181, 180, 178, 176,
165 174, 173, 171, 169, 167, 164, 163, 161, 158,
166 156, 154, 152, 150, 148, 145, 143, 141, 140,
167 138, 136, 134, 131, 131, 128, 126, 125, 124
171 static unsigned char bc_s_png[240] =
173 150,187,187,148,148,148,148,148,
174 147,175,186,147,147,147,147,147,
175 146,153,185,185,146,146,146,146,
176 144,144,177,183,144,144,144,144,
177 144,144,159,182,144,144,144,144,
178 143,143,144,179,181,143,143,143,
179 142,142,142,165,180,142,142,142,
180 141,141,141,144,178,178,141,141,
181 139,139,139,139,167,176,139,139,
182 137,137,137,137,146,174,137,137,
183 137,137,137,137,137,169,173,137,
184 135,135,135,135,135,150,171,135,
185 133,133,133,133,133,135,167,169,
186 132,132,132,132,132,132,154,167,
187 129,129,129,129,129,129,140,164,
188 129,129,129,129,129,129,154,163,
189 127,127,127,127,127,128,161,161,
190 125,125,125,125,125,141,158,125,
191 123,123,123,123,123,152,156,123,
192 121,121,121,121,129,154,121,121,
193 120,120,120,120,143,152,120,120,
194 118,118,118,120,150,150,118,118,
195 117,117,117,132,148,117,117,117,
196 114,114,114,142,145,114,114,114,
197 113,113,120,143,113,113,113,113,
198 111,111,133,141,111,111,111,111,
199 110,112,140,140,110,110,110,110,
200 109,124,138,109,109,109,109,109,
201 107,133,136,107,107,107,107,107,
202 111,134,106,106,106,106,106,106
205 // breadcrumbs alpha map
206 static unsigned char bc_s_a_png[240] =
208 241,241, 21, 0, 0, 0, 0, 0,
209 162,205,117, 0, 0, 0, 0, 0,
210 54,231,225, 3, 0, 0, 0, 0,
211 0,198,215, 78, 0, 0, 0, 0,
212 0, 93,211,186, 0, 0, 0, 0,
213 0, 6,232,235, 42, 0, 0, 0,
214 0, 0,132,203,147, 0, 0, 0,
215 0, 0, 27,242,241, 15, 0, 0,
216 0, 0, 0,168,205,108, 0, 0,
217 0, 0, 0, 63,228,219, 0, 0,
218 0, 0, 0, 0,207,221, 72, 0,
219 0, 0, 0, 0,102,208,177, 0,
220 0, 0, 0, 0, 9,238,240, 36,
221 0, 0, 0, 0, 0,138,201,138,
222 0, 0, 0, 0, 0, 77,187,158,
223 0, 0, 0, 0, 0,159,204,120,
224 0, 0, 0, 0, 15,241,241, 21,
225 0, 0, 0, 0,111,208,171, 0,
226 0, 0, 0, 0,210,222, 66, 0,
227 0, 0, 0, 60,227,219, 0, 0,
228 0, 0, 0,162,204,114, 0, 0,
229 0, 0, 18,238,238, 21, 0, 0,
230 0, 0,114,205,165, 0, 0, 0,
231 0, 0,216,225, 60, 0, 0, 0,
232 0, 66,226,216, 0, 0, 0, 0,
233 0,165,204,111, 0, 0, 0, 0,
234 21,241,241, 18, 0, 0, 0, 0,
235 117,203,159, 0, 0, 0, 0, 0,
236 219,227, 57, 0, 0, 0, 0, 0,
237 211,201, 0, 0, 0, 0, 0, 0
241 static unsigned char doxygen_png[3224] =
243 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
244 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
245 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255,255,255,255,255,
246 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 91, 91, 91, 91, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
247 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,255,255,255,255, 32, 32,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
248 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,253,253,253,253, 32, 32,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,255,255,255,255,255,255,255,255,
249 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,251,251,251,251, 32, 32,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,255,255,255,255,255,255,255,255,
250 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249, 32, 32, 32, 32, 32,249,249,249,249, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249,249, 32, 32, 32, 32, 32, 32, 32,249,249,249,249,249, 32, 32, 32, 32, 32,249, 32, 32, 32, 32, 32,255,255,255,
251 32, 32, 32, 32, 46,132,190,190,147, 61,247,247,247,247, 32, 32,247,247, 32, 32,118,161,190,190,161,118, 32, 32,247, 32, 46, 89, 89, 89, 89, 46, 32,247,247, 32, 89, 89, 89, 89, 61, 89, 89, 89, 89, 46, 32,247, 32, 46, 89, 89, 89, 89, 32,247, 32, 32,118,175,190,161, 89, 61, 89, 89, 89, 61, 32,247,247,247, 32, 32,104,147,190,190,190,132, 89, 32, 32,247,247, 32, 46, 89, 89, 89, 75, 32, 89,161,190,161, 75, 32,255,255,
252 32, 32, 32, 74,230,244,244,244,244,244,244,244,244,244, 32, 32,244, 32, 74,216,244,244,244,244,244,244,216, 74, 32,244, 32,187,244,244,244,159, 32,244, 32,117,244,244,244,230, 46,173,244,244,244,131, 32,244, 32,131,244,244,244,173, 32, 32, 46,173,244,244,244,244,244,230,244,244,244,131, 32,244,244, 32, 74,202,244,244,244,244,244,244,244,173, 46, 32,244, 32, 89,244,244,244,187,145,244,244,244,244,244, 89, 32,255,
253 32, 32, 46,213,241,241,241,241,241,241,241,241,241,241, 32, 32, 32, 60,227,241,241,241,241,241,241,241,241,227, 60, 32, 32, 46,227,241,241,241,102, 32, 60,227,241,241,241, 88, 32,116,241,241,241,199, 32,241, 32,185,241,241,241,116, 32, 32,143,241,241,241,241,241,241,241,241,241,241,130, 32,241, 32, 74,227,241,241,241,199,185,241,241,241,241,171, 32,241, 32, 88,241,241,241,241,241,241,241,241,241,241,199, 32,255,
254 32, 32,128,237,237,237,223,128, 87,128,237,237,237,237, 32, 32, 32,182,237,237,237,196,100,100,196,237,237,237,182, 32,237, 32,100,237,237,237,223, 59,196,237,237,237,141, 32, 32, 46,237,237,237,237, 59, 32, 46,237,237,237,237, 46, 32, 59,237,237,237,237,169, 87, 87,182,237,237,237,128, 32,237, 32,196,237,237,237, 87, 32, 32, 73,223,237,237,237, 73, 32, 32, 87,237,237,237,237,223,182,223,237,237,237,237, 46, 32,
255 32, 32,207,234,234,234,113, 32, 32, 32,234,234,234,234, 32, 32, 59,234,234,234,221, 45, 32, 32, 45,221,234,234,234, 59, 32,234, 32,140,234,234,234,221,234,234,234,194, 32, 32,234, 32,167,234,234,234,126, 32, 99,234,234,234,167, 32, 32,126,234,234,234,180, 32, 32, 32,126,234,234,234,126, 32, 32, 99,234,234,234,167, 32, 32, 32, 32,153,234,234,234,126, 32, 32, 86,234,234,234,207, 45, 32, 45,234,234,234,234, 86, 32,
256 32, 45,231,231,231,218, 32, 32, 32, 32,231,231,231,231, 32, 32, 98,231,231,231,165, 32,231,231, 32,165,231,231,231, 98, 32,231, 32, 45,191,231,231,231,231,231,218, 72, 32,231,231, 32, 98,231,231,231,165, 32,151,231,231,231,112, 32, 32,165,231,231,231,112, 32,231, 32,125,231,231,231,125, 32, 32,138,231,231,231,178,125,125,125,125,178,231,231,231,178, 32, 32, 85,231,231,231,178, 32,255, 32,191,231,231,231, 85, 32,
257 32, 84,227,227,227,175, 32, 32, 32, 32,227,227,227,227, 32, 32,123,227,227,227,123, 32,227,227, 32,123,227,227,227,123, 32,227,227, 32, 71,227,227,227,227,227,123, 32,227,227,227,227, 32,214,227,227,227, 45,201,227,227,227, 45, 32, 32,175,227,227,227, 84, 32,227, 32,123,227,227,227,123, 32, 32,175,227,227,227,227,227,227,227,227,227,227,227,227,175, 32, 32, 84,227,227,227,175, 32,255, 32,175,227,227,227, 84, 32,
258 32, 83,223,223,223,172, 32, 32, 32, 32,223,223,223,223, 32, 32,121,223,223,223,121, 32,223,223, 32,121,223,223,223,121, 32,223,223,223, 32,172,223,223,223,210, 45, 32,223,223,223,223, 32,147,223,223,223,134,223,223,223,147, 32,223, 32,172,223,223,223, 83, 32,223, 32,121,223,223,223,121, 32, 32,172,223,223,223,223,223,223,223,223,223,223,223,223,172, 32, 32, 83,223,223,223,172, 32,255, 32,172,223,223,223, 83, 32,
259 32, 82,220,220,220,170, 32, 32, 32, 32,220,220,220,220, 32, 32,120,220,220,220,120, 32,220,220, 32,120,220,220,220,120, 32,220,220, 32, 95,220,220,220,220,220,132, 32,220,220,220,220, 32, 95,220,220,220,207,220,220,220, 95, 32,220, 32,170,220,220,220,107, 32,220, 32,120,220,220,220,120, 32, 32,170,220,220,220,132, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 82,220,220,220,170, 32,255, 32,170,220,220,220, 82, 32,
260 32, 57,216,216,216,216, 32, 32, 32, 32,216,216,216,216, 32, 32, 81,216,216,216,167, 32,216,216, 32,155,216,216,216, 81, 32,216, 32, 57,204,216,216,216,216,216,216, 93, 32,216,216,216,216, 32,204,216,216,216,216,216,204, 32,216,216, 32,118,216,216,216,167, 32, 32, 32,130,216,216,216,118, 32, 32,118,216,216,216,191, 32, 32,216,216,216, 32, 32, 44, 57, 32, 32, 81,216,216,216,167, 32,255, 32,167,216,216,216, 81, 32,
261 32, 32,189,213,213,213,116, 32, 32, 80,213,213,213,213, 32, 32, 44,201,213,213,213, 68, 32, 32, 68,213,213,213,213, 44, 32, 32, 32,165,213,213,213,165,213,213,213,201, 44, 32,213,213,213, 32,129,213,213,213,213,213,141, 32,213,213, 32, 80,213,213,213,213,165,116,153,213,213,213,213,116, 32, 32, 56,213,213,213,213,153, 56, 32, 32, 32, 44,104,189,116, 32, 32, 80,213,213,213,165, 32,255, 32,165,213,213,213, 80, 32,
262 32, 32,139,210,210,210,210,174,174,210,210,210,210,210, 32, 32, 32,127,210,210,210,198,127,127,198,210,210,210,127, 32,210, 32,115,210,210,210,174, 44,139,210,210,210,163, 32, 32,210,210, 32, 68,210,210,210,210,210, 91, 32,210,210,210, 32,174,210,210,210,210,210,210,210,210,210,210,115, 32,210, 32,127,210,210,210,210,210,174,163,163,210,210,210,115, 32, 32, 79,210,210,210,163, 32,255, 32,163,210,210,210, 79, 32,
263 32, 32, 55,194,206,206,206,206,206,194,206,206,206,206, 32, 32, 32, 44,171,206,206,206,206,206,206,206,206,171, 44, 32, 32, 67,206,206,206,206, 67, 32, 44,183,206,206,206,113, 32,206,206,206, 32,183,206,206,206,194, 32,206,206,206,206, 32, 67,194,206,206,206,206,206,171,206,206,206,113, 32,206, 32, 32,136,206,206,206,206,206,206,206,206,206,206,113, 32, 32, 78,206,206,206,160, 32,255, 32,160,206,206,206, 78, 32,
264 32, 32, 32,100,192,203,203,203,157, 55,203,203,203,203, 32, 32,203, 32, 43,135,203,203,203,203,203,203,135, 43, 32, 32, 43,180,203,203,203,112, 32,203, 32, 66,203,203,203,203, 66, 32,203,203, 32,157,203,203,203,135, 32,203,203,203,203,203, 32, 43,112,157,157,123, 55,112,203,203,203,112, 32,203,203, 32, 32, 78,146,203,203,203,203,203,203,169,123, 55, 32, 32, 78,203,203,203,157, 32,255, 32,157,203,203,203, 78, 32,
265 32, 32, 32, 32, 54,110,110, 88, 32, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 54, 99,110,110, 99, 54, 32, 32,200,200, 32, 32, 32, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,200,200, 32, 54,200,200,200,200, 77, 32,200,200,200,200,200, 32, 32, 32, 32, 32, 32, 32,166,200,200,200, 88, 32,200,200,200,200, 32, 32, 32, 66, 77, 77, 77, 32, 32, 32, 32,200,200, 32, 32, 32, 32, 32, 32,255, 32, 32, 32, 32, 32, 32,255,
266 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,198,198,198,198, 32, 32, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198, 32,109,198,198,198,176, 32,198,198,198,198,198, 32, 98,121, 76, 32, 32, 54,109,198,198,198,198, 43, 32,198,198,198,198,198,198,198, 32, 32, 32, 32,198,198,198,198,198,198,198,198,198,198,198,198,255,255,255,255,255,255,255,255,
267 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 33,159,191,191,191,117, 36, 41, 41, 41, 41, 41, 34,108,191,191,191,191,191,191,191,191,191,117, 36, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
268 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 78, 38, 64,190,192,192,192, 66, 66, 41, 41, 85,128, 65, 34,107,190,192,192,192,192,192,192,192,139, 48, 39, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
269 32, 41, 97,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 96, 36, 95,147,148,148,139, 55, 41, 41, 85,121,128, 91, 38, 75,137,158,190,190,190,170,139, 97, 49, 37, 41, 41,105,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 97, 41,255,
270 32, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41, 36, 45, 45, 45, 48, 38, 41, 41, 76, 76, 76, 76, 76, 37, 34, 42, 33, 33, 33, 39, 48, 59, 41, 41, 41, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 41,255,
271 32, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,255,
272 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
273 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255
276 // doxygen logo alpha map
277 static unsigned char doxygen_a_png[3224] =
279 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
280 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 66, 66, 66, 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, 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, 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,
282 0, 0, 0, 0, 0, 0, 0, 0, 0,145,247,247,247,247,145, 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, 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, 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,
283 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 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, 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, 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,
284 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 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, 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, 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,
285 0, 0, 0, 0, 0, 0, 0, 0, 0,247,247,247,247,247,247, 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, 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, 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,
286 0, 0, 0, 0, 16,115,181,181,132,247,247,247,247,247,247, 0, 0, 0, 0, 0, 99,148,181,181,148, 99, 0, 0, 0, 0, 16, 66, 66, 66, 66, 16, 0, 0, 0, 0, 66, 66, 66, 66, 33, 66, 66, 66, 66, 16, 0, 0, 0, 16, 66, 66, 66, 66, 0, 0, 0, 0, 99,165,181,148, 66, 33, 66, 66, 66, 33, 0, 0, 0, 0, 0, 0, 82,132,181,181,181,115, 66, 0, 0, 0, 0, 0, 16, 66, 66, 66, 49, 0, 66,148,181,148, 49, 0, 0, 0,
287 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 0,112,214,247,247,247,247,247,247,214,112, 0, 16,247,247,247,247,247,247, 46, 0, 0,145,247,247,247,247,247,247,247,247,247,247, 16, 0, 16,247,247,247,247,247, 66, 0, 63,165,247,247,247,247,247,247,247,247,247,247, 33, 0, 0, 0, 96,198,247,247,247,247,247,247,247,165, 63, 0, 0, 16,247,247,247,247,247,145,247,247,247,247,247,145, 0, 0,
288 0, 0,112,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0,129,247,247,247,247,247,247,247,247,247,247,129, 0,181,247,247,247,247,247,148, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0,115,247,247,247,247,247,165, 30,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247, 63, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247, 96, 0,
289 0, 16,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 79,247,247,247,247,247,247,247,247,247,247,247,247, 79, 79,247,247,247,247,247,247,129,247,247,247,247,247,247,129,247,247,247,247,247,198, 0,181,247,247,247,247,247, 99,145,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,165, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,198, 0,
290 0,115,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,181,247,247,247,247,247,247,247,247,247,247,247,247,181, 0,129,247,247,247,247,247,247,247,247,247,247,247,145, 16,247,247,247,247,247,247, 33,247,247,247,247,247,247, 33,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,198,247,247,247,247,247,198,181,247,247,247,247,247,247, 49, 66,247,247,247,247,247,247,247,247,247,247,247,247,247, 16,
291 0,214,247,247,247,247,247,129, 66,247,247,247,247,247,247, 33,247,247,247,247,247,247, 96, 96,247,247,247,247,247,247, 33, 0,145,247,247,247,247,247,247,247,247,247,198, 30, 0,165,247,247,247,247,247,115,247,247,247,247,247,165,115,247,247,247,247,247,181, 66,115,247,247,247,247,247,115, 82,247,247,247,247,247,165,115,115,148,247,247,247,247,247,115, 66,247,247,247,247,247,247,181,247,247,247,247,247,247, 66,
292 16,247,247,247,247,247,231, 0, 0,247,247,247,247,247,247, 82,247,247,247,247,247,165, 0, 0,165,247,247,247,247,247, 82, 0, 30,247,247,247,247,247,247,247,247,247, 96, 0, 0, 82,247,247,247,247,247,165,247,247,247,247,247, 99,165,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,132,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,198,247,247,247,247,247, 66,
293 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 96,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,247,247,247, 16,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
294 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0, 0,181,247,247,247,247,247,247, 30, 0, 0, 0, 0,148,247,247,247,247,247,247,247,247,247,148, 0,181,247,247,247,247,247, 66, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
295 66,247,247,247,247,247,181, 0, 0,247,247,247,247,247,247,115,247,247,247,247,247,115, 0, 0,115,247,247,247,247,247,115, 0, 0,129,247,247,247,247,247,247,247,145, 0, 0, 0, 0, 82,247,247,247,247,247,247,247,247,247, 82, 0,181,247,247,247,247,247, 99, 0,115,247,247,247,247,247,115,181,247,247,247,247,247,247,247,247,247,247,247,247,247,181, 79, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
296 33,247,247,247,247,247,247, 14, 0,247,247,247,247,247,247, 66,247,247,247,247,247,181, 0, 0,165,247,247,247,247,247, 66, 0, 79,247,247,247,247,247,247,247,247,247,129, 0, 0, 0, 0,231,247,247,247,247,247,247,247,231, 0, 0,115,247,247,247,247,247,181,115,165,247,247,247,247,247,115,115,247,247,247,247,247,214, 63, 0, 0, 0, 16,112,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
297 0,214,247,247,247,247,247,198,198,247,247,247,247,247,247, 16,247,247,247,247,247,247,132,132,247,247,247,247,247,247, 16, 14,181,247,247,247,247,247,247,247,247,247,247, 79, 0, 0, 0,132,247,247,247,247,247,247,247,148, 0, 0, 66,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 33,247,247,247,247,247,247,247,198,181,181,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
298 0,148,247,247,247,247,247,247,247,247,247,247,247,247,247, 0,132,247,247,247,247,247,247,247,247,247,247,247,247,145, 0,145,247,247,247,247,247,247,247,247,247,247,247,181, 14, 0, 0, 49,247,247,247,247,247,247,247, 82, 0, 0, 0,198,247,247,247,247,247,247,247,247,247,247,247,247,115, 0,145,247,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
299 0, 46,247,247,247,247,247,247,247,247,247,247,247,247,247, 0, 30,247,247,247,247,247,247,247,247,247,247,247,247, 30,112,247,247,247,247,247,247, 96,247,247,247,247,247,247,145, 0, 0, 0,214,247,247,247,247,247,231, 0, 0, 0, 0, 96,247,247,247,247,247,247,247,247,247,247,247,247,115, 0, 30,148,247,247,247,247,247,247,247,247,247,247,247,247,115, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
300 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,247, 0, 0, 96,247,247,247,247,247,247,247,247,247,247, 96, 16,247,247,247,247,247,247,145, 0,112,247,247,247,247,247,247, 49, 0, 0,181,247,247,247,247,247,148, 0, 0, 0, 0, 0,129,247,247,247,247,247,247,247,247,247,247,247,115, 0, 0, 46,148,247,247,247,247,247,247,247,247,247,247,247, 33, 66,247,247,247,247,247,181, 0,181,247,247,247,247,247, 66,
301 0, 0, 0,129,247,247,247,247,181,145,247,247,247,247,145, 0, 0, 0, 46,148,247,247,247,247,247,247,148, 46, 0, 0,112,214,247,247,247,145, 14, 0, 0,145,247,247,247,247,145, 0, 0, 33,247,247,247,247,247,247, 66, 0, 0, 0, 0, 0, 99,132,115,181,181,132,198,247,247,247,247,247, 82, 0, 0, 0, 0, 66,165,247,247,247,247,247,247,198,132, 33, 0, 0,145,247,247,247,181, 79, 0, 79,181,247,247,247,145, 0,
302 0, 0, 0, 0, 33,115,115, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 99,115,115, 99, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,115,247,247,247,247,247,214, 0, 0, 0, 0, 0, 99,247,247,247,247,247,247,247,247,247,247,247,247, 16, 0, 0, 0, 0, 0, 0, 0, 49, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
303 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,108,224,255,255,255,255,255,255,101,164,255,255,255,143,250,255,255,255,255,255,255,255,255,255,255,255, 98,170,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
304 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,136,251,255,255,255,255,255,255,101,130,255,255,255,153,250,255,255,255,255,255,255,255,255,255,255,121, 98,189,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
305 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,252,255,255,255,255,255,164,164,255,255,255,255,176,249,251,255,255,255,255,255,255,255,255,150, 86,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
306 0,165,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,164,198,255,255,255,255,201,133,164,255,255,255,255,255,145,203,255,255,255,255,255,255,255,117, 79,194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,165, 0,
307 0, 66,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 73, 73,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 47, 70,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102, 66, 0,
308 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
309 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
312 // magnifying glass icon (raw png)
313 unsigned char mag_sel_png[] = {
314 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
315 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
316 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
317 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
318 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
319 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
320 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
321 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
322 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xb9, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
323 0xe4, 0x94, 0xbb, 0x8a, 0x22, 0x41, 0x14, 0x86, 0xbf, 0xda, 0x16, 0x3a,
324 0x10, 0xba, 0x03, 0x2f, 0x78, 0x03, 0x51, 0x11, 0x4c, 0xd4, 0x40, 0xd4,
325 0x37, 0x30, 0x31, 0x30, 0xe9, 0x07, 0xf0, 0x15, 0x14, 0x7c, 0x1e, 0x31,
326 0x37, 0x33, 0x11, 0x73, 0xe9, 0x56, 0x44, 0x84, 0x36, 0xe9, 0x40, 0x50,
327 0x54, 0x14, 0xc4, 0xc0, 0xa8, 0x6d, 0x50, 0x6a, 0x92, 0x1d, 0xd9, 0x9d,
328 0x99, 0x75, 0x0d, 0x26, 0x58, 0xd8, 0x3f, 0xaa, 0xe2, 0xfc, 0xf5, 0xd5,
329 0x39, 0x9c, 0x53, 0x25, 0xa4, 0x94, 0x7c, 0xa7, 0x7e, 0xf0, 0xcd, 0xfa,
330 0xf7, 0x81, 0xbe, 0xf7, 0xc5, 0xf9, 0x7c, 0x96, 0x93, 0xc9, 0x84, 0xe5,
331 0x72, 0xc9, 0x66, 0xb3, 0x21, 0x99, 0x4c, 0x92, 0xcf, 0xe7, 0xa9, 0x54,
332 0x2a, 0x04, 0x02, 0x01, 0xf1, 0x2a, 0x50, 0x48, 0x29, 0x39, 0x9d, 0x4e,
333 0x72, 0x30, 0x18, 0x60, 0x59, 0xd6, 0x27, 0x43, 0xb5, 0x5a, 0xa5, 0xd1,
334 0x68, 0x10, 0x0c, 0x06, 0xc5, 0xcb, 0x19, 0x4e, 0xa7, 0x53, 0x2c, 0xcb,
335 0x22, 0x95, 0x4a, 0x51, 0x2a, 0x95, 0xc8, 0x64, 0x32, 0xac, 0x56, 0x2b,
336 0x66, 0xb3, 0x19, 0x93, 0xc9, 0x84, 0x48, 0x24, 0x42, 0xbd, 0x5e, 0x7f,
337 0xbd, 0x64, 0xdb, 0xb6, 0x01, 0x28, 0x97, 0xcb, 0x54, 0x2a, 0x15, 0x34,
338 0x4d, 0x13, 0xa1, 0x50, 0x48, 0x2a, 0x8a, 0xc2, 0x7a, 0xbd, 0xc6, 0xb6,
339 0x6d, 0xea, 0xf5, 0x3a, 0xa3, 0xd1, 0x48, 0xf6, 0xfb, 0xfd, 0xc7, 0x61,
340 0xc3, 0x30, 0xa8, 0xd5, 0x6a, 0xe2, 0x53, 0x53, 0xb6, 0xdb, 0x2d, 0x00,
341 0xc5, 0x62, 0x11, 0x4d, 0xd3, 0x04, 0x80, 0xa6, 0x69, 0xa2, 0x50, 0x28,
342 0xf0, 0x6b, 0x1c, 0x10, 0x86, 0x61, 0x3c, 0x60, 0x80, 0xf8, 0xb2, 0xcb,
343 0x89, 0x44, 0x02, 0x00, 0xc7, 0x71, 0x00, 0xde, 0x27, 0x5d, 0xfe, 0xdc,
344 0x3f, 0xe2, 0x1f, 0xa0, 0xe2, 0x8f, 0x63, 0x93, 0xcb, 0xe5, 0x00, 0x18,
345 0x8f, 0xc7, 0x98, 0xa6, 0x89, 0xeb, 0xba, 0xd2, 0x34, 0x4d, 0xc6, 0xe3,
346 0x31, 0x00, 0xe9, 0x74, 0x1a, 0x80, 0x5a, 0xad, 0xf6, 0x80, 0x3e, 0xed,
347 0xf2, 0x7a, 0xbd, 0x96, 0xc3, 0xe1, 0x90, 0xf9, 0x7c, 0xfe, 0xa5, 0x29,
348 0x1c, 0x0e, 0xd3, 0xe9, 0x74, 0xd0, 0x75, 0x5d, 0x00, 0x8c, 0x46, 0xa3,
349 0x8f, 0x17, 0xfc, 0x0e, 0xf4, 0x3c, 0x4f, 0xee, 0x76, 0x3b, 0x16, 0x8b,
350 0x05, 0x8e, 0xe3, 0xb0, 0xdf, 0xef, 0x89, 0xc7, 0xe3, 0xa4, 0xd3, 0x69,
351 0x6c, 0xdb, 0xe6, 0x74, 0x3a, 0x11, 0x8d, 0x46, 0x69, 0xb7, 0xdb, 0x0f,
352 0xe8, 0xd3, 0x0c, 0x01, 0x3c, 0xcf, 0x93, 0xae, 0xeb, 0xe2, 0x79, 0x1e,
353 0xb7, 0xdb, 0x0d, 0x9f, 0xcf, 0x87, 0xa2, 0x28, 0x5c, 0x2e, 0x17, 0x7a,
354 0xbd, 0x1e, 0xc7, 0xe3, 0x91, 0x58, 0x2c, 0x46, 0xab, 0xd5, 0x7a, 0x0a,
355 0x7d, 0xbc, 0x14, 0x55, 0x55, 0x85, 0xaa, 0xaa, 0x9f, 0x0c, 0x7e, 0xbf,
356 0x5f, 0x36, 0x9b, 0x4d, 0xba, 0xdd, 0x2e, 0xd7, 0xeb, 0x95, 0xeb, 0xf5,
357 0x8a, 0xae, 0xeb, 0x7f, 0xcf, 0xf0, 0x99, 0x5c, 0xd7, 0x95, 0x87, 0xc3,
358 0x81, 0xfb, 0xfd, 0x4e, 0x36, 0x9b, 0x7d, 0xad, 0xe4, 0xff, 0xe7, 0xfb,
359 0x7a, 0x1b, 0x00, 0x59, 0xa8, 0xba, 0x68, 0xca, 0x4f, 0xc5, 0xa7, 0x00,
360 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
362 unsigned int mag_sel_png_len = 563;
364 unsigned char mag_png[] = {
365 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
366 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
367 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
368 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
369 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
370 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
371 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
372 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
373 0x2a, 0xbd, 0x00, 0x00, 0x01, 0x92, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
374 0xe4, 0x94, 0xbb, 0xaa, 0xea, 0x50, 0x10, 0x86, 0xbf, 0xec, 0x08, 0x29,
375 0x36, 0x24, 0x85, 0x17, 0xbc, 0x81, 0x18, 0x11, 0x6c, 0xd4, 0x42, 0x8c,
376 0x0f, 0x61, 0xe1, 0x2b, 0xf8, 0x0a, 0x0a, 0x3e, 0x8f, 0xf8, 0x0c, 0x36,
377 0x62, 0x1f, 0x92, 0x88, 0x88, 0x10, 0x9b, 0x14, 0x42, 0x44, 0x45, 0x41,
378 0x2c, 0xac, 0x92, 0x80, 0xb2, 0x4e, 0x73, 0x94, 0x03, 0xfb, 0xb0, 0x4d,
379 0xb1, 0x8b, 0x03, 0xe7, 0xaf, 0xd6, 0x62, 0xfe, 0xf5, 0x31, 0xc3, 0xcc,
380 0x1a, 0x49, 0x08, 0xc1, 0x4f, 0xea, 0x83, 0x1f, 0xd6, 0xbf, 0x0f, 0x4c,
381 0x3c, 0x0f, 0xd7, 0xeb, 0x55, 0x38, 0x8e, 0xc3, 0x66, 0xb3, 0x61, 0xb7,
382 0xdb, 0x51, 0x2a, 0x95, 0xa8, 0xd7, 0xeb, 0x18, 0x86, 0x41, 0x32, 0x99,
383 0x94, 0xe2, 0x02, 0x25, 0x21, 0x04, 0x97, 0xcb, 0x45, 0x4c, 0xa7, 0x53,
384 0x6c, 0xdb, 0xfe, 0x62, 0xe8, 0x74, 0x3a, 0xf4, 0x7a, 0x3d, 0x52, 0xa9,
385 0x94, 0x14, 0x3b, 0xc3, 0xc5, 0x62, 0x81, 0x6d, 0xdb, 0x94, 0xcb, 0x65,
386 0x5a, 0xad, 0x16, 0x95, 0x4a, 0x85, 0xed, 0x76, 0xcb, 0x72, 0xb9, 0xc4,
387 0x71, 0x1c, 0xb2, 0xd9, 0x2c, 0xdd, 0x6e, 0x37, 0x7e, 0xc9, 0xae, 0xeb,
388 0x02, 0xd0, 0x6e, 0xb7, 0x31, 0x0c, 0x03, 0x55, 0x55, 0xa5, 0x74, 0x3a,
389 0x2d, 0x64, 0x59, 0xc6, 0xf7, 0x7d, 0x5c, 0xd7, 0x8d, 0x0d, 0xfc, 0x00,
390 0xd8, 0xef, 0xf7, 0x00, 0x34, 0x9b, 0x4d, 0x54, 0x55, 0x95, 0x00, 0x54,
391 0x55, 0x95, 0x1a, 0x8d, 0x06, 0x7f, 0xc6, 0x63, 0x03, 0x8b, 0xc5, 0x22,
392 0x00, 0x9e, 0xe7, 0x01, 0x3c, 0x27, 0x5d, 0xfc, 0xbe, 0xbf, 0xe2, 0xb1,
393 0x81, 0xb5, 0x5a, 0x0d, 0x00, 0xd3, 0x34, 0xb1, 0x2c, 0x8b, 0x20, 0x08,
394 0x84, 0x65, 0x59, 0x98, 0xa6, 0x09, 0x80, 0xae, 0xeb, 0xaf, 0x07, 0xf3,
395 0xf9, 0xfc, 0x7d, 0x97, 0x7d, 0xdf, 0x17, 0xb3, 0xd9, 0x8c, 0xd5, 0x6a,
396 0xf5, 0x57, 0x53, 0x26, 0x93, 0x61, 0x34, 0x1a, 0xa1, 0x69, 0x9a, 0x14,
397 0x6b, 0x6c, 0xa2, 0x28, 0x12, 0x87, 0xc3, 0x81, 0xf5, 0x7a, 0x8d, 0xe7,
398 0x79, 0x1c, 0x8f, 0x47, 0x0a, 0x85, 0x02, 0xba, 0xae, 0xe3, 0xba, 0x2e,
399 0x97, 0xcb, 0x85, 0x5c, 0x2e, 0xc7, 0x70, 0x38, 0x7c, 0x0b, 0x95, 0x9e,
400 0xcb, 0x21, 0x8a, 0x22, 0x11, 0x04, 0x01, 0x51, 0x14, 0x71, 0xbf, 0xdf,
401 0x49, 0x24, 0x12, 0xc8, 0xb2, 0xcc, 0xed, 0x76, 0x63, 0x32, 0x99, 0x70,
402 0x3e, 0x9f, 0xc9, 0xe7, 0xf3, 0x0c, 0x06, 0x83, 0x6f, 0xa1, 0xaf, 0x9f,
403 0xa2, 0x28, 0x8a, 0xa4, 0x28, 0xca, 0x17, 0xc3, 0xe7, 0xe7, 0xa7, 0xe8,
404 0xf7, 0xfb, 0x8c, 0xc7, 0x63, 0xc2, 0x30, 0x24, 0x0c, 0x43, 0x34, 0x4d,
405 0x7b, 0x9f, 0xe1, 0x77, 0x0a, 0x82, 0x40, 0x9c, 0x4e, 0x27, 0x1e, 0x8f,
406 0x07, 0xd5, 0x6a, 0x35, 0x5e, 0xc9, 0xff, 0xcf, 0xfa, 0xfa, 0x35, 0x00,
407 0x70, 0xf3, 0xae, 0xcb, 0x89, 0xcd, 0xd2, 0x46, 0x00, 0x00, 0x00, 0x00,
408 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
410 unsigned int mag_png_len = 524;
412 unsigned char search_l_png[] = {
413 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
414 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x13,
415 0x08, 0x06, 0x00, 0x00, 0x00, 0x90, 0x8c, 0x2d, 0xb5, 0x00, 0x00, 0x00,
416 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
417 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
418 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
419 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
420 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
421 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xe2, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
422 0xac, 0x54, 0x3d, 0xab, 0xda, 0x50, 0x18, 0x7e, 0xce, 0xc9, 0x39, 0x31,
423 0x4d, 0xfc, 0x40, 0x30, 0x46, 0x14, 0xec, 0x50, 0x44, 0x17, 0x2f, 0x9d,
424 0xba, 0x15, 0xda, 0xd1, 0xa1, 0x2e, 0xdd, 0x3b, 0x14, 0x4a, 0xa1, 0x7f,
425 0xa6, 0x74, 0xbd, 0x43, 0xff, 0x84, 0xfd, 0x05, 0x82, 0xda, 0xa5, 0x83,
426 0x1d, 0xdc, 0x8a, 0x88, 0xa0, 0x44, 0x83, 0xc6, 0x28, 0xad, 0x1f, 0x49,
427 0xde, 0x2e, 0x8d, 0x78, 0x6f, 0xaf, 0x34, 0x68, 0x9f, 0xed, 0xbc, 0x70,
428 0x1e, 0x9e, 0x8f, 0xf7, 0x1c, 0x46, 0x44, 0x38, 0x45, 0xaf, 0xd7, 0x63,
429 0xb6, 0x6d, 0xe7, 0x6d, 0xdb, 0x6e, 0xba, 0xae, 0xfb, 0x6e, 0xb3, 0xd9,
430 0xdc, 0x6c, 0xb7, 0xdb, 0x04, 0xe7, 0x1c, 0x8c, 0x31, 0xfc, 0x0b, 0x2c,
431 0x22, 0xec, 0x76, 0xbb, 0xcc, 0xf3, 0xbc, 0xcc, 0x68, 0x34, 0x7a, 0xed,
432 0xba, 0xee, 0x87, 0x6c, 0x36, 0x7b, 0x93, 0xcb, 0xe5, 0x44, 0x3a, 0x9d,
433 0x86, 0xa6, 0x69, 0x50, 0x14, 0x25, 0x3e, 0x61, 0xa7, 0xd3, 0x61, 0xf3,
434 0xf9, 0xfc, 0xc9, 0x78, 0x3c, 0xbe, 0xd5, 0x75, 0xfd, 0x79, 0xa5, 0x52,
435 0x11, 0xa6, 0x69, 0x22, 0x95, 0x4a, 0x41, 0xd3, 0x34, 0x08, 0x21, 0xc0,
436 0x18, 0x8b, 0x45, 0x28, 0x00, 0x60, 0xb5, 0x5a, 0xa5, 0x27, 0x93, 0xc9,
437 0xa7, 0x62, 0xb1, 0xf8, 0xb2, 0x5a, 0xad, 0x22, 0x9f, 0xcf, 0xc3, 0x30,
438 0x0c, 0x48, 0x29, 0xc1, 0x39, 0x47, 0x5c, 0xbb, 0x00, 0x20, 0xda, 0xed,
439 0x36, 0x9f, 0x4e, 0xa7, 0xaf, 0x4c, 0xd3, 0x7c, 0x51, 0xaf, 0xd7, 0x61,
440 0x59, 0x16, 0x74, 0x5d, 0x87, 0x94, 0x12, 0x97, 0x40, 0x2c, 0x16, 0x0b,
441 0x93, 0x88, 0xde, 0xd6, 0x6a, 0x35, 0xdd, 0xb2, 0x2c, 0x18, 0x86, 0x01,
442 0x21, 0x04, 0x2e, 0x05, 0xf7, 0x3c, 0xaf, 0x59, 0x2e, 0x97, 0x9f, 0x45,
443 0xca, 0x38, 0xe7, 0xb8, 0x06, 0x3c, 0x08, 0x82, 0x46, 0xa1, 0x50, 0x78,
444 0x74, 0xad, 0xb2, 0x23, 0xa1, 0x94, 0xf2, 0x69, 0x26, 0x93, 0xe1, 0x51,
445 0x66, 0xf7, 0xf7, 0xd2, 0xf7, 0xfd, 0x07, 0x2f, 0x9e, 0x9b, 0x73, 0x55,
446 0x55, 0xb3, 0x91, 0x55, 0xc6, 0x18, 0xc2, 0x30, 0xbc, 0x1b, 0xf2, 0x19,
447 0xd5, 0xe7, 0xe6, 0x5c, 0x4a, 0x39, 0x06, 0x70, 0x5c, 0x8b, 0xb8, 0xeb,
448 0x71, 0xd6, 0x32, 0x11, 0x75, 0xf6, 0xfb, 0xfd, 0xd1, 0xea, 0xd5, 0xa5,
449 0x10, 0xd1, 0xb7, 0xf5, 0x7a, 0x1d, 0x84, 0x61, 0x08, 0x22, 0xba, 0x9e,
450 0x50, 0x51, 0x94, 0xaf, 0x8e, 0xe3, 0xfc, 0xdc, 0xed, 0x76, 0xf8, 0x1f,
451 0xe0, 0x89, 0x44, 0xe2, 0xc7, 0x72, 0xb9, 0xfc, 0xee, 0x38, 0x0e, 0x7c,
452 0xdf, 0x3f, 0x5a, 0xbf, 0xdf, 0x76, 0x6c, 0xc2, 0x46, 0xa3, 0xf1, 0x2b,
453 0x08, 0x82, 0xdb, 0xe1, 0x70, 0xe8, 0x2c, 0x16, 0x0b, 0x04, 0x41, 0x00,
454 0x22, 0xba, 0xb8, 0x1c, 0xfe, 0x67, 0x05, 0xbe, 0x78, 0x9e, 0xf7, 0x79,
455 0x30, 0x18, 0x8c, 0x67, 0xb3, 0x19, 0x45, 0x25, 0x9d, 0x53, 0x49, 0x44,
456 0x38, 0x1c, 0x0e, 0x38, 0x2d, 0xf3, 0xce, 0x6f, 0x03, 0x60, 0x29, 0x84,
457 0xf8, 0xe8, 0x79, 0x9e, 0xdb, 0xef, 0xf7, 0xdf, 0x97, 0x4a, 0xa5, 0xc7,
458 0xd1, 0x53, 0x54, 0x55, 0x15, 0x52, 0xca, 0xbf, 0x14, 0x0b, 0x21, 0x1e,
459 0x8c, 0x87, 0x9d, 0x1e, 0x5a, 0xad, 0x96, 0x00, 0x50, 0x27, 0xa2, 0x37,
460 0xaa, 0xaa, 0x36, 0x0d, 0xc3, 0x28, 0x26, 0x93, 0x49, 0xa1, 0x69, 0x9a,
461 0xc2, 0x39, 0x8f, 0x95, 0xc1, 0xef, 0x01, 0x00, 0x35, 0xe5, 0xd5, 0x5e,
462 0xd0, 0xed, 0x0c, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
463 0xae, 0x42, 0x60, 0x82
465 unsigned int search_l_png_len = 604;
467 unsigned char search_m_png[] = {
468 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
469 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13,
470 0x08, 0x02, 0x00, 0x00, 0x00, 0x35, 0x5e, 0x4b, 0x4d, 0x00, 0x00, 0x00,
471 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xd6, 0xd8, 0xd4, 0x4f, 0x58,
472 0x32, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f, 0x66,
473 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20,
474 0x49, 0x6d, 0x61, 0x67, 0x65, 0x52, 0x65, 0x61, 0x64, 0x79, 0x71, 0xc9,
475 0x65, 0x3c, 0x00, 0x00, 0x00, 0x30, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
476 0x62, 0x2c, 0x2f, 0x2f, 0x67, 0x60, 0x60, 0x60, 0x3c, 0x7e, 0xfc, 0x38,
477 0x88, 0xfa, 0xf8, 0xf1, 0x23, 0x88, 0xfa, 0xff, 0xff, 0x3f, 0x90, 0x62,
478 0x62, 0x00, 0x03, 0x5a, 0x50, 0x2c, 0x10, 0x1b, 0x58, 0x6e, 0xdd, 0xba,
479 0x05, 0xa4, 0x00, 0x02, 0x0c, 0x00, 0xa5, 0x07, 0x0f, 0x3c, 0x7e, 0xe1,
480 0x45, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42,
483 unsigned int search_m_png_len = 158;
485 unsigned char search_r_png[] = {
486 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
487 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13,
488 0x08, 0x06, 0x00, 0x00, 0x00, 0x9d, 0x92, 0x5d, 0xf2, 0x00, 0x00, 0x00,
489 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0b, 0x13, 0x00, 0x00, 0x0b,
490 0x13, 0x01, 0x00, 0x9a, 0x9c, 0x18, 0x00, 0x00, 0x00, 0x20, 0x63, 0x48,
491 0x52, 0x4d, 0x00, 0x00, 0x6d, 0x98, 0x00, 0x00, 0x73, 0x8e, 0x00, 0x00,
492 0xe0, 0x38, 0x00, 0x00, 0x82, 0xd5, 0x00, 0x00, 0x7a, 0x07, 0x00, 0x00,
493 0xca, 0xb4, 0x00, 0x00, 0x33, 0x44, 0x00, 0x00, 0x1c, 0x76, 0x84, 0x36,
494 0x2a, 0xbd, 0x00, 0x00, 0x01, 0xea, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda,
495 0xa4, 0xd4, 0xbf, 0xaa, 0x1a, 0x41, 0x14, 0x06, 0xf0, 0x6f, 0xf6, 0x9f,
496 0xb2, 0x0a, 0x6b, 0xa5, 0x56, 0x8b, 0xa4, 0x92, 0xd4, 0x69, 0x7c, 0x03,
497 0xb1, 0x59, 0x49, 0x11, 0x52, 0xdf, 0xbc, 0x43, 0xcc, 0x2b, 0xa4, 0x4c,
498 0x97, 0x67, 0x08, 0xa4, 0x11, 0x2c, 0x52, 0x5c, 0x42, 0x24, 0x60, 0x8a,
499 0x34, 0x29, 0x42, 0x50, 0x41, 0x21, 0xa0, 0x97, 0xd5, 0x55, 0xb3, 0xbb,
500 0xee, 0xb2, 0xce, 0xee, 0xcc, 0x49, 0x91, 0x28, 0xc2, 0x0d, 0xe6, 0xaa,
501 0xa7, 0x9d, 0xc3, 0x8f, 0x73, 0x98, 0xf9, 0x86, 0x75, 0x3a, 0x1d, 0xc2,
502 0x89, 0x12, 0x42, 0x24, 0xf9, 0x7c, 0x7e, 0x5a, 0x2c, 0x16, 0x3f, 0x96,
503 0x4a, 0xa5, 0x5e, 0xb5, 0x5a, 0xfd, 0x52, 0x2e, 0x97, 0xfd, 0x46, 0xa3,
504 0x21, 0x8e, 0xfb, 0xd8, 0x60, 0x30, 0x38, 0x09, 0x65, 0x59, 0x86, 0x24,
505 0x49, 0x10, 0x04, 0x81, 0xf0, 0x3c, 0x6f, 0xb3, 0xd9, 0x6c, 0x7e, 0x58,
506 0x96, 0x75, 0x5b, 0xab, 0xd5, 0xde, 0x34, 0x9b, 0xcd, 0x5f, 0x07, 0xc8,
507 0xf7, 0xfd, 0x93, 0x90, 0x94, 0xf2, 0x80, 0x85, 0x61, 0x88, 0xe5, 0x72,
508 0x49, 0xe3, 0xf1, 0x58, 0xc6, 0x71, 0xfc, 0xc1, 0xb6, 0xed, 0xe7, 0x8e,
509 0xe3, 0x84, 0x00, 0xc0, 0xa4, 0x94, 0x27, 0x21, 0x22, 0x82, 0x94, 0x12,
510 0x52, 0x4a, 0xa4, 0x69, 0x8a, 0x28, 0x8a, 0xb0, 0x58, 0x2c, 0x30, 0x1c,
511 0x0e, 0x85, 0xeb, 0xba, 0xef, 0x6b, 0xb5, 0xda, 0x4d, 0xab, 0xd5, 0x8a,
512 0x34, 0xc6, 0xd8, 0x29, 0x07, 0x8c, 0x31, 0x28, 0x8a, 0x02, 0x22, 0x82,
513 0xae, 0xeb, 0x30, 0x0c, 0x03, 0xb9, 0x5c, 0x0e, 0x86, 0x61, 0xa8, 0x52,
514 0xca, 0xa7, 0xf3, 0xf9, 0xfc, 0x67, 0xbf, 0xdf, 0x7f, 0xa5, 0xe0, 0x81,
515 0xc5, 0x18, 0x03, 0x63, 0x0c, 0x9a, 0xa6, 0xa1, 0x50, 0x28, 0xa0, 0x52,
516 0xa9, 0xa0, 0x5e, 0xaf, 0x6b, 0x00, 0x5e, 0xac, 0xd7, 0xeb, 0x47, 0x0f,
517 0x86, 0x8e, 0x41, 0x55, 0x55, 0x61, 0x9a, 0x26, 0x2a, 0x95, 0x0a, 0x6c,
518 0xdb, 0xb6, 0x82, 0x20, 0x78, 0x76, 0x36, 0xb4, 0xc7, 0xf6, 0x93, 0x55,
519 0xab, 0x55, 0x26, 0x84, 0x78, 0xac, 0x1c, 0x5f, 0xf3, 0xb9, 0xa5, 0xeb,
520 0x3a, 0x2c, 0xcb, 0x82, 0xae, 0xeb, 0xbb, 0x03, 0xa4, 0x69, 0xda, 0xd9,
521 0x53, 0x29, 0x8a, 0x02, 0xd3, 0x34, 0x99, 0x61, 0x18, 0xcb, 0x8b, 0x56,
522 0x3b, 0xc6, 0xfe, 0x4e, 0x76, 0x77, 0x15, 0x44, 0x44, 0xe0, 0x9c, 0x0b,
523 0x22, 0xfa, 0xaa, 0x5c, 0x83, 0x48, 0x29, 0x11, 0x86, 0xe1, 0x86, 0x88,
524 0xbe, 0x5f, 0x35, 0xd1, 0x6e, 0xb7, 0x83, 0xe7, 0x79, 0x3d, 0x55, 0x55,
525 0x7d, 0xd0, 0x05, 0x25, 0xa5, 0x24, 0xce, 0x39, 0x4d, 0x26, 0x93, 0x45,
526 0xb7, 0xdb, 0x7d, 0x42, 0x44, 0x50, 0x2e, 0x59, 0x49, 0x08, 0x81, 0xf5,
527 0x7a, 0x9d, 0x4c, 0xa7, 0xd3, 0x77, 0x42, 0x88, 0x6f, 0x00, 0xa0, 0xed,
528 0x0f, 0xb3, 0x2c, 0x3b, 0xe4, 0xe9, 0x5f, 0xf9, 0x23, 0xfa, 0x93, 0x6d,
529 0xce, 0x39, 0x56, 0xab, 0x95, 0x18, 0x0e, 0x87, 0x9f, 0x82, 0x20, 0x78,
530 0xdd, 0x6e, 0xb7, 0xd3, 0x7b, 0xe9, 0x27, 0xa2, 0x7b, 0x08, 0x11, 0x21,
531 0x4d, 0x53, 0x70, 0xce, 0x11, 0xc7, 0xb1, 0x74, 0x5d, 0xd7, 0x9f, 0xcd,
532 0x66, 0x3d, 0xce, 0xf9, 0x4b, 0xc7, 0x71, 0xee, 0x0e, 0xef, 0x70, 0x34,
533 0x1a, 0xe1, 0x7f, 0xff, 0x51, 0x92, 0x24, 0xd8, 0x6e, 0xb7, 0x61, 0x14,
534 0x45, 0x9f, 0x39, 0xe7, 0x6f, 0x19, 0x63, 0xb7, 0x8e, 0xe3, 0x44, 0xc7,
535 0x7d, 0xbf, 0x07, 0x00, 0x5f, 0x77, 0x46, 0x8c, 0x30, 0x2c, 0xd8, 0x9d,
536 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
538 unsigned int search_r_png_len = 612;
540 static unsigned char close_png[] = {
541 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
542 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b,
543 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00,
544 0xd8, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x75, 0x51, 0xbd, 0x12, 0x46,
545 0x40, 0x0c, 0xdc, 0x18, 0x15, 0x0a, 0x14, 0x14, 0x1a, 0x43, 0xeb, 0x35,
546 0xbc, 0x7f, 0xa7, 0x43, 0x67, 0x06, 0x33, 0x28, 0xd0, 0xde, 0x77, 0x7b,
547 0x23, 0x2a, 0xdf, 0x16, 0x97, 0x9f, 0xdb, 0xcb, 0x26, 0x39, 0xc1, 0x83,
548 0x7d, 0xdf, 0xcd, 0xb2, 0x2c, 0xd8, 0xb6, 0x0d, 0xe7, 0x79, 0x22, 0x8a,
549 0x22, 0xc4, 0x71, 0x8c, 0x3c, 0xcf, 0x91, 0xa6, 0xa9, 0x90, 0xe6, 0x8e,
550 0x69, 0x9a, 0xcc, 0x38, 0x8e, 0xb8, 0xae, 0x4b, 0xdf, 0xbe, 0x36, 0x0c,
551 0x43, 0x94, 0x65, 0x89, 0xa2, 0x28, 0xc4, 0x3b, 0x8e, 0xe3, 0x2f, 0x91,
552 0x2f, 0xa8, 0xc2, 0x42, 0x56, 0xd1, 0x78, 0xf3, 0x3c, 0xbb, 0x04, 0x2f,
553 0xda, 0xb6, 0x45, 0x55, 0x55, 0x74, 0x9d, 0x65, 0x2c, 0x22, 0xb8, 0xef,
554 0x1b, 0xeb, 0xba, 0xc2, 0x67, 0x8f, 0x4c, 0x10, 0x7d, 0xdf, 0xa3, 0xae,
555 0x6b, 0xe7, 0xd3, 0x32, 0x56, 0x90, 0xe7, 0x53, 0x46, 0x31, 0x0c, 0x83,
556 0x73, 0x95, 0xa8, 0x31, 0x93, 0x9c, 0xc7, 0xe3, 0xd4, 0x0a, 0xb6, 0xa0,
557 0x44, 0x5a, 0xc6, 0xc6, 0x18, 0x77, 0xcd, 0x41, 0xbd, 0x24, 0x49, 0x94,
558 0xfb, 0x12, 0x59, 0x51, 0x5b, 0xd2, 0x16, 0xed, 0xfa, 0x20, 0xdc, 0x6f,
559 0xd7, 0x75, 0x9f, 0x6b, 0xd3, 0x2a, 0x41, 0x10, 0xa0, 0x69, 0x1a, 0x57,
560 0x59, 0x28, 0x47, 0x99, 0x2f, 0x30, 0xcf, 0x7b, 0xfb, 0x41, 0xcf, 0x1a,
561 0x2c, 0xeb, 0xeb, 0x07, 0x29, 0x9d, 0x65, 0x19, 0x6c, 0xab, 0x6e, 0x5d,
562 0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00,
563 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
565 static unsigned int close_png_len = 273;
568 static unsigned char closed_png[81] =
570 0, 0, 0, 0,142, 0, 0, 0, 0,
571 0, 0, 0, 0,142,142, 0, 0, 0,
572 0, 0, 0, 0,142,142,142, 0, 0,
573 0, 0, 0, 0,142,142,142,142, 0,
574 0, 0, 0, 0,142,142,142,142,142,
575 0, 0, 0, 0,142,142,142,142, 0,
576 0, 0, 0, 0,142,142,142, 0, 0,
577 0, 0, 0, 0,142,142, 0, 0, 0,
578 0, 0, 0, 0,142, 0, 0, 0, 0
581 static unsigned char closed_a_png[81] =
583 0, 0, 0, 0,255, 0, 0, 0, 0,
584 0, 0, 0, 0,255,255, 0, 0, 0,
585 0, 0, 0, 0,255,255,255, 0, 0,
586 0, 0, 0, 0,255,255,255,255, 0,
587 0, 0, 0, 0,255,255,255,255,255,
588 0, 0, 0, 0,255,255,255,255, 0,
589 0, 0, 0, 0,255,255,255, 0, 0,
590 0, 0, 0, 0,255,255, 0, 0, 0,
591 0, 0, 0, 0,255, 0, 0, 0, 0
594 static unsigned char open_png[81] =
596 0, 0, 0, 0, 0, 0, 0, 0, 0,
597 0, 0, 0, 0, 0, 0, 0, 0, 0,
598 0, 0, 0, 0, 0, 0, 0, 0, 0,
599 0, 0, 0, 0, 0, 0, 0, 0, 0,
600 142,142,142,142,142,142,142,142,142,
601 0,142,142,142,142,142,142,142, 0,
602 0, 0,142,142,142,142,142, 0, 0,
603 0, 0, 0,142,142,142, 0, 0, 0,
604 0, 0, 0, 0,142, 0, 0, 0, 0
607 static unsigned char open_a_png[81] =
609 0, 0, 0, 0, 0, 0, 0, 0, 0,
610 0, 0, 0, 0, 0, 0, 0, 0, 0,
611 0, 0, 0, 0, 0, 0, 0, 0, 0,
612 0, 0, 0, 0, 0, 0, 0, 0, 0,
613 255,255,255,255,255,255,255,255,255,
614 0,255,255,255,255,255,255,255, 0,
615 0, 0,255,255,255,255,255, 0, 0,
616 0, 0, 0,255,255,255, 0, 0, 0,
617 0, 0, 0, 0,255, 0, 0, 0, 0
620 static unsigned char bdwn_png[7*8] =
622 0, 0, 0,142, 0, 0, 0,
623 0, 0, 0,142, 0, 0, 0,
624 0, 0, 0,142, 0, 0, 0,
625 142, 0, 0,142, 0, 0,142,
626 142,142, 0,142, 0,142,142,
627 142,142,142,142,142,142,142,
628 0,142,142,142,142,142, 0,
629 0, 0,142,142,142, 0, 0,
632 static unsigned char bdwn_a_png[7*8] =
634 0, 0, 0,255, 0, 0, 0,
635 0, 0, 0,255, 0, 0, 0,
636 0, 0, 0,255, 0, 0, 0,
637 128, 0, 0,255, 0, 0,128,
638 255,128, 0,255, 0,128,255,
639 128,255,128,255,128,255,128,
640 0,128,255,255,255,128, 0,
641 0, 0,128,255,128, 0, 0,
644 static unsigned char sync_on_png[576] =
646 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
647 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
648 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
649 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
650 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
651 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
652 128,128,128,128,128,128,128,128,128,138,128,128,128,128,133,128,128,128,128,128,128,128,128,128,
653 128,128,128,128,128,128,128,129,205,186,128,128,128,128,160,210,134,128,128,128,128,128,128,128,
654 128,128,128,128,128,128,139,217,255,181,128,128,128,128,152,255,229,147,128,128,128,128,128,128,
655 128,128,128,128,128,156,236,255,255,181,128,128,128,128,152,255,255,243,164,128,128,128,128,128,
656 128,128,128,128,175,249,255,255,255,223,196,198,198,197,211,255,255,255,253,186,128,128,128,128,
657 128,128,133,202,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,214,137,128,128,
658 128,128,135,217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,140,128,128,
659 128,128,128,128,189,255,255,255,255,238,224,225,225,224,232,255,255,255,255,201,131,128,128,128,
660 128,128,128,128,128,167,245,255,255,183,128,128,128,128,155,255,255,250,179,128,128,128,128,128,
661 128,128,128,128,128,128,150,231,255,188,128,128,128,128,161,255,238,158,128,128,128,128,128,128,
662 128,128,128,128,128,128,128,136,216,188,128,128,128,128,161,223,142,128,128,128,128,128,128,128,
663 128,128,128,128,128,128,128,128,130,141,128,128,128,128,135,132,128,128,128,128,128,128,128,128,
664 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
665 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
666 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
667 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
668 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
669 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
672 static unsigned char sync_off_png[576] =
674 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
675 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
676 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
677 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
678 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
679 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
680 128,128,128,128,128,128,128,128,138,128,128,128,128,128,128,133,128,128,128,128,128,128,128,128,
681 128,128,128,128,128,128,129,205,186,128,128,128,128,128,128,160,210,134,128,128,128,128,128,128,
682 128,128,128,128,128,139,217,255,181,128,128,128,128,128,128,152,255,229,147,128,128,128,128,128,
683 128,128,128,128,156,236,255,255,181,128,128,128,128,128,128,152,255,255,243,164,128,128,128,128,
684 128,128,128,175,249,255,255,255,223,196,198,198,128,128,197,211,255,255,255,253,186,128,128,128,
685 128,128,202,255,255,255,255,255,255,255,255,225,128,128,255,255,255,255,255,255,255,214,128,128,
686 128,128,217,255,255,255,255,255,255,255,255,128,128,198,255,255,255,255,255,255,255,225,128,128,
687 128,128,128,189,255,255,255,255,238,224,225,128,128,225,224,232,255,255,255,255,201,128,128,128,
688 128,128,128,128,167,245,255,255,183,128,128,128,128,128,128,155,255,255,250,179,128,128,128,128,
689 128,128,128,128,128,150,231,255,188,128,128,128,128,128,128,161,255,238,158,128,128,128,128,128,
690 128,128,128,128,128,128,136,216,188,128,128,128,128,128,128,161,223,142,128,128,128,128,128,128,
691 128,128,128,128,128,128,128,130,141,128,128,128,128,128,128,135,132,128,128,128,128,128,128,128,
692 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
693 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
694 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
695 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
696 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
697 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128
700 static unsigned char sync_a_png[576] =
702 0, 0, 0, 0, 0, 0, 0, 29, 98,157,207,231,234,211,164,104, 38, 0, 0, 0, 0, 0, 0, 0,
703 0, 0, 0, 0, 0, 21,143,234,255,255,255,255,255,255,255,255,244,155, 33, 0, 0, 0, 0, 0,
704 0, 0, 0, 0, 70,221,255,255,255,255,255,255,255,255,255,255,255,255,235, 93, 0, 0, 0, 0,
705 0, 0, 0, 92,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,116, 0, 0, 0,
706 0, 0, 68,251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 96, 0, 0,
707 0, 20,225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243, 41, 0,
708 0,143,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,172, 1,
709 28,238,255,255,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 42,
710 99,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,133,
711 160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,204,
712 212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,224,
713 234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,237,255,236,
714 235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,230,255,236,
715 216,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,226,
716 168,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,208,
717 107,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,147,
718 39,245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 53,
719 0,159,255,255,255,255,255,255,251,255,255,255,255,255,255,255,255,255,255,255,255,255,190, 3,
720 0, 31,239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,249, 54, 0,
721 0, 0, 91,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,119, 0, 0,
722 0, 0, 0,116,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,145, 0, 0, 0,
723 0, 0, 0, 0, 98,240,255,255,255,255,255,255,255,255,255,255,255,255,248,119, 0, 0, 0, 0,
724 0, 0, 0, 0, 0, 45,168,252,255,255,255,255,255,255,255,255,255,184, 58, 0, 0, 0, 0, 0,
725 0, 0, 0, 0, 0, 0, 0, 45,131,201,222,234,236,224,204,142, 54, 0, 0, 0, 0, 0, 0, 0
729 //------------------------------------------------------------------------
731 static const char tabs_css[] =
732 ".tabs, .tabs2, .tabs3 {\n"
733 " background-image: url('tab_b.png');\n"
736 " font-size: 13px;\n"
737 " font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n"
741 " font-size: 10px;\n"
755 " display: table-cell;\n"
756 " background-image: url('tab_b.png');\n"
757 " line-height: 36px;\n"
758 " list-style: none;\n"
763 " padding: 0 20px;\n"
764 " font-weight: bold;\n"
765 " background-image:url('tab_s.png');\n"
766 " background-repeat:no-repeat;\n"
767 " background-position:right;\n"
769 " text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n"
770 " text-decoration: none;\n"
774 ".tabs3 .tablist a {\n"
775 " padding: 0 10px;\n"
778 ".tablist a:hover {\n"
779 " background-image: url('tab_h.png');\n"
780 " background-repeat:repeat-x;\n"
782 " text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
783 " text-decoration: none;\n"
786 ".tablist li.current a {\n"
787 " background-image: url('tab_a.png');\n"
788 " background-repeat:repeat-x;\n"
790 " text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n"
797 unsigned char *content;
802 static void writeImgData(const char *dir,img_data_item *data)
807 fileName=(QCString)dir+"/"+data->name;
809 if (f.open(IO_WriteOnly))
811 f.writeBlock((char*)data->content,
812 data->len>0 ? data->len : qstrlen((char*)data->content));
816 fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name);
818 Doxygen::indexList->addImageFile(QCString("/search/")+data->name);
823 static ColoredImgDataItem colored_tab_data[] =
825 // file_name W H luma_data alpha_data
826 { "tab_a.png", 1, 36, tab_a_png, 0 },
827 { "tab_b.png", 1, 36, tab_b_png, 0 },
828 { "tab_h.png", 1, 36, tab_h_png, 0 },
829 { "tab_s.png", 1, 36, tab_s_png, 0 },
830 { "nav_h.png", 1, 12, header_png, 0 },
831 { "nav_f.png", 1, 56, func_header_png, 0 },
832 { "bc_s.png", 8, 30, bc_s_png, bc_s_a_png },
833 { "doxygen.png", 104,31, doxygen_png, doxygen_a_png },
834 { "closed.png", 9, 9, closed_png, closed_a_png },
835 { "open.png", 9, 9, open_png, open_a_png },
836 { "bdwn.png", 7, 8, bdwn_png, bdwn_a_png },
837 { "sync_on.png", 24, 24, sync_on_png, sync_a_png },
838 { "sync_off.png",24, 24, sync_off_png, sync_a_png },
842 static img_data_item search_client_data[] =
844 // file_name raw_data num bytes
845 { "mag_sel.png", mag_sel_png, mag_sel_png_len },
846 { "search_l.png", search_l_png, search_l_png_len },
847 { "search_m.png", search_m_png, search_m_png_len },
848 { "search_r.png", search_r_png, search_r_png_len },
849 { "close.png", close_png, close_png_len },
853 static img_data_item search_server_data[] =
855 // file_name raw_data num bytes
856 { "mag.png", mag_png, mag_png_len },
857 { "search_l.png", search_l_png, search_l_png_len },
858 { "search_m.png", search_m_png, search_m_png_len },
859 { "search_r.png", search_r_png, search_r_png_len },
863 //------------------------------------------------------------------------
865 static void writeClientSearchBox(FTextStream &t,const char *relPath)
867 t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
868 t << " <span class=\"left\">\n";
869 t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag_sel.png\"\n";
870 t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
871 t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
872 t << " alt=\"\"/>\n";
873 t << " <input type=\"text\" id=\"MSearchField\" value=\""
874 << theTranslator->trSearch() << "\" accesskey=\"S\"\n";
875 t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
876 t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n";
877 t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n";
878 t << " </span><span class=\"right\">\n";
879 t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">"
880 << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n";
885 static void writeServerSearchBox(FTextStream &t,const char *relPath,bool highlightSearch)
887 static bool externalSearch = Config_getBool("EXTERNAL_SEARCH");
888 t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n";
889 t << " <div class=\"left\">\n";
890 t << " <form id=\"FSearchBox\" action=\"" << relPath;
893 t << "search" << Doxygen::htmlFileExtension;
899 t << "\" method=\"get\">\n";
900 t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/mag.png\" alt=\"\"/>\n";
901 if (!highlightSearch)
903 t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\""
904 << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n";
905 t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n";
906 t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
908 t << " </div><div class=\"right\"></div>\n";
913 //------------------------------------------------------------------------
915 /// substitute all occurrences of \a src in \a s by \a dst
916 QCString substitute(const char *s,const char *src,const char *dst)
918 if (s==0 || src==0) return s;
920 int srcLen = qstrlen(src);
921 int dstLen = dst ? qstrlen(dst) : 0;
926 for (count=0, p=s; (q=strstr(p,src))!=0; p=q+srcLen) count++;
927 resLen = (int)(p-s)+qstrlen(p)+count*(dstLen-srcLen);
929 else // result has same size as s
933 QCString result(resLen+1);
935 for (r=result.data(), p=s; (q=strstr(p,src))!=0; p=q+srcLen)
940 if (dst) memcpy(r,dst,dstLen);
944 //printf("substitute(%s,%s,%s)->%s\n",s,src,dst,result.data());
947 //----------------------------------------------------------------------
949 /// Clear a text block \a s from \a begin to \a end markers
950 QCString clearBlock(const char *s,const char *begin,const char *end)
952 if (s==0 || begin==0 || end==0) return s;
954 int beginLen = qstrlen(begin);
955 int endLen = qstrlen(end);
957 for (p=s; (q=strstr(p,begin))!=0; p=q+endLen)
961 if ((q=strstr(p,end))==0)
968 // resLen is the length of the string without the marked block
970 QCString result(resLen+1);
972 for (r=result.data(), p=s; (q=strstr(p,begin))!=0; p=q+endLen)
978 if ((q=strstr(p,end))==0)
980 memcpy(r,begin,beginLen);
988 //----------------------------------------------------------------------
990 QCString selectBlock(const QCString& s,const QCString &name,bool enable)
992 const QCString begin = "<!--BEGIN " + name + "-->";
993 const QCString end = "<!--END " + name + "-->";
994 const QCString nobegin = "<!--BEGIN !" + name + "-->";
995 const QCString noend = "<!--END !" + name + "-->";
1000 result = substitute(result, begin, "");
1001 result = substitute(result, end, "");
1002 result = clearBlock(result, nobegin, noend);
1006 result = substitute(result, nobegin, "");
1007 result = substitute(result, noend, "");
1008 result = clearBlock(result, begin, end);
1014 static QCString getSearchBox(bool serverSide, QCString relPath, bool highlightSearch)
1017 FTextStream t(&result);
1019 writeServerSearchBox(t, relPath, highlightSearch);
1022 writeClientSearchBox(t, relPath);
1024 return QCString(result);
1027 static QCString removeEmptyLines(const QCString &s)
1029 BufStr out(s.length()+1);
1039 while (*e==' ' || *e=='\t') e++;
1044 else out.addChar(c);
1053 //printf("removeEmptyLines(%s)=%s\n",s.data(),out.data());
1057 static QCString substituteHtmlKeywords(const QCString &s,
1058 const QCString &title,
1059 const QCString &relPath,
1060 const QCString &navPath=QCString())
1062 // Build CSS/Javascript tags depending on treeview, search engine settings
1064 QStrList extraCssFile;
1065 QCString generatedBy;
1066 QCString treeViewCssJs;
1067 QCString searchCssJs;
1070 QCString extraCssText;
1072 static QCString projectName = Config_getString("PROJECT_NAME");
1073 static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
1074 static bool treeView = Config_getBool("GENERATE_TREEVIEW");
1075 static bool searchEngine = Config_getBool("SEARCHENGINE");
1076 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
1077 static bool mathJax = Config_getBool("USE_MATHJAX");
1078 static QCString mathJaxFormat = Config_getEnum("MATHJAX_FORMAT");
1079 static bool disableIndex = Config_getBool("DISABLE_INDEX");
1080 static bool hasProjectName = !projectName.isEmpty();
1081 static bool hasProjectNumber = !Config_getString("PROJECT_NUMBER").isEmpty();
1082 static bool hasProjectBrief = !Config_getString("PROJECT_BRIEF").isEmpty();
1083 static bool hasProjectLogo = !Config_getString("PROJECT_LOGO").isEmpty();
1084 static bool titleArea = (hasProjectName || hasProjectBrief || hasProjectLogo || (disableIndex && searchEngine));
1086 cssFile = Config_getString("HTML_STYLESHEET");
1087 if (cssFile.isEmpty())
1089 cssFile = "doxygen.css";
1093 QFileInfo cssfi(cssFile);
1096 cssFile = cssfi.fileName().utf8();
1100 cssFile = "doxygen.css";
1105 extraCssFile = Config_getList("HTML_EXTRA_STYLESHEET");
1106 for (uint i=0; i<extraCssFile.count(); ++i)
1108 QCString fileName(extraCssFile.at(i));
1109 if (!fileName.isEmpty())
1111 QFileInfo fi(fileName);
1114 extraCssText += "<link href=\"$relpath^"+stripPath(fileName)+"\" rel=\"stylesheet\" type=\"text/css\"/>\n";
1121 generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), convertToHtml(Config_getString("PROJECT_NAME")));
1125 generatedBy = theTranslator->trGeneratedBy();
1130 treeViewCssJs = "<link href=\"$relpath^navtree.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"
1131 "<script type=\"text/javascript\" src=\"$relpath^resize.js\"></script>\n"
1132 "<script type=\"text/javascript\" src=\"$relpath^navtree.js\"></script>\n"
1133 "<script type=\"text/javascript\">\n"
1134 " $(document).ready(initResizable);\n"
1135 " $(window).load(resizeHeight);\n"
1141 searchCssJs = "<link href=\"$relpath^search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n";
1142 searchCssJs += "<script type=\"text/javascript\" src=\"$relpath^search/search.js\"></script>\n";
1144 if (!serverBasedSearch)
1146 searchCssJs += "<script type=\"text/javascript\">\n"
1147 " $(document).ready(function() { searchBox.OnSelectItem(0); });\n"
1152 searchCssJs += "<script type=\"text/javascript\">\n"
1153 " $(document).ready(function() {\n"
1154 " if ($('.searchresults').length > 0) { searchBox.DOMSearchField().focus(); }\n"
1158 // OPENSEARCH_PROVIDER {
1159 searchCssJs += "<link rel=\"search\" href=\"" + relPath +
1160 "search-opensearch.php?v=opensearch.xml\" "
1161 "type=\"application/opensearchdescription+xml\" title=\"" +
1162 (hasProjectName ? projectName : QCString("Doxygen")) +
1164 // OPENSEARCH_PROVIDER }
1166 searchBox = getSearchBox(serverBasedSearch, relPath, FALSE);
1171 QCString path = Config_getString("MATHJAX_RELPATH");
1172 if (!path.isEmpty() && path.at(path.length()-1)!='/')
1176 if (path.isEmpty() || path.left(2)=="..") // relative path
1178 path.prepend(relPath);
1180 mathJaxJs = "<script type=\"text/x-mathjax-config\">\n"
1181 " MathJax.Hub.Config({\n"
1182 " extensions: [\"tex2jax.js\"";
1183 QStrList &mathJaxExtensions = Config_getList("MATHJAX_EXTENSIONS");
1184 const char *s = mathJaxExtensions.first();
1187 mathJaxJs+= ", \""+QCString(s)+".js\"";
1188 s = mathJaxExtensions.next();
1190 if (mathJaxFormat.isEmpty())
1192 mathJaxFormat = "HTML-CSS";
1195 " jax: [\"input/TeX\",\"output/"+mathJaxFormat+"\"],\n"
1197 if (!g_mathjax_code.isEmpty())
1199 mathJaxJs += g_mathjax_code;
1202 mathJaxJs += "</script>";
1203 mathJaxJs += "<script src=\"" + path + "MathJax.js\"></script>\n";
1206 // first substitute generic keywords
1207 QCString result = substituteKeywords(s,title,
1208 convertToHtml(Config_getString("PROJECT_NAME")),
1209 convertToHtml(Config_getString("PROJECT_NUMBER")),
1210 convertToHtml(Config_getString("PROJECT_BRIEF")));
1212 // additional HTML only keywords
1213 result = substitute(result,"$navpath",navPath);
1214 result = substitute(result,"$stylesheet",cssFile);
1215 result = substitute(result,"$treeview",treeViewCssJs);
1216 result = substitute(result,"$searchbox",searchBox);
1217 result = substitute(result,"$search",searchCssJs);
1218 result = substitute(result,"$mathjax",mathJaxJs);
1219 result = substitute(result,"$generatedby",generatedBy);
1220 result = substitute(result,"$extrastylesheet",extraCssText);
1221 result = substitute(result,"$relpath$",relPath); //<-- obsolete: for backwards compatibility only
1222 result = substitute(result,"$relpath^",relPath); //<-- must be last
1224 // additional HTML only conditional blocks
1225 result = selectBlock(result,"DISABLE_INDEX",disableIndex);
1226 result = selectBlock(result,"GENERATE_TREEVIEW",treeView);
1227 result = selectBlock(result,"SEARCHENGINE",searchEngine);
1228 result = selectBlock(result,"TITLEAREA",titleArea);
1229 result = selectBlock(result,"PROJECT_NAME",hasProjectName);
1230 result = selectBlock(result,"PROJECT_NUMBER",hasProjectNumber);
1231 result = selectBlock(result,"PROJECT_BRIEF",hasProjectBrief);
1232 result = selectBlock(result,"PROJECT_LOGO",hasProjectLogo);
1234 result = removeEmptyLines(result);
1239 //--------------------------------------------------------------------------
1241 HtmlCodeGenerator::HtmlCodeGenerator()
1242 : m_streamSet(FALSE), m_col(0)
1246 HtmlCodeGenerator::HtmlCodeGenerator(FTextStream &t,const QCString &relPath)
1247 : m_col(0), m_relPath(relPath)
1252 void HtmlCodeGenerator::setTextStream(FTextStream &t)
1254 m_streamSet = t.device()!=0;
1255 m_t.setDevice(t.device());
1258 void HtmlCodeGenerator::setRelativePath(const QCString &path)
1263 void HtmlCodeGenerator::codify(const char *str)
1265 static int tabSize = Config_getInt("TAB_SIZE");
1266 if (str && m_streamSet)
1270 int spacesToNextTabStop;
1276 case '\t': spacesToNextTabStop =
1277 tabSize - (m_col%tabSize);
1278 m_t << Doxygen::spaces.left(spacesToNextTabStop);
1279 m_col+=spacesToNextTabStop;
1281 case '\n': m_t << "\n"; m_col=0;
1284 case '<': m_t << "<"; m_col++;
1286 case '>': m_t << ">"; m_col++;
1288 case '&': m_t << "&"; m_col++;
1290 case '\'': m_t << "'"; m_col++; // ' is not valid XHTML
1292 case '"': m_t << """; m_col++;
1296 { m_t << "<"; p++; }
1298 { m_t << ">"; p++; }
1303 default: p=writeUtf8Char(m_t,p-1);
1311 void HtmlCodeGenerator::docify(const char *str)
1313 if (str && m_streamSet)
1322 case '<': m_t << "<"; break;
1323 case '>': m_t << ">"; break;
1324 case '&': m_t << "&"; break;
1325 case '"': m_t << """; break;
1328 { m_t << "<"; p++; }
1330 { m_t << ">"; p++; }
1340 void HtmlCodeGenerator::writeLineNumber(const char *ref,const char *filename,
1341 const char *anchor,int l)
1343 if (!m_streamSet) return;
1344 QCString lineNumber,lineAnchor;
1345 lineNumber.sprintf("%5d",l);
1346 lineAnchor.sprintf("l%05d",l);
1348 m_t << "<div class=\"line\">";
1349 m_t << "<a name=\"" << lineAnchor << "\"></a><span class=\"lineno\">";
1352 _writeCodeLink("line",ref,filename,anchor,lineNumber,0);
1362 void HtmlCodeGenerator::writeCodeLink(const char *ref,const char *f,
1363 const char *anchor, const char *name,
1364 const char *tooltip)
1366 if (!m_streamSet) return;
1367 //printf("writeCodeLink(ref=%s,f=%s,anchor=%s,name=%s,tooltip=%s)\n",ref,f,anchor,name,tooltip);
1368 _writeCodeLink("code",ref,f,anchor,name,tooltip);
1371 void HtmlCodeGenerator::_writeCodeLink(const char *className,
1372 const char *ref,const char *f,
1373 const char *anchor, const char *name,
1374 const char *tooltip)
1378 m_t << "<a class=\"" << className << "Ref\" ";
1379 m_t << externalLinkTarget() << externalRef(m_relPath,ref,FALSE);
1383 m_t << "<a class=\"" << className << "\" ";
1386 m_t << externalRef(m_relPath,ref,TRUE);
1387 if (f) m_t << f << Doxygen::htmlFileExtension;
1388 if (anchor) m_t << "#" << anchor;
1390 if (tooltip) m_t << " title=\"" << tooltip << "\"";
1394 m_col+=qstrlen(name);
1397 void HtmlCodeGenerator::writeTooltip(const char *id, const DocLinkInfo &docInfo,
1398 const char *decl, const char *desc,
1399 const SourceLinkInfo &defInfo,
1400 const SourceLinkInfo &declInfo)
1402 m_t << "<div class=\"ttc\" id=\"" << id << "\">";
1403 m_t << "<div class=\"ttname\">";
1404 if (!docInfo.url.isEmpty())
1406 m_t << "<a href=\"";
1407 m_t << externalRef(m_relPath,docInfo.ref,TRUE);
1408 m_t << docInfo.url << Doxygen::htmlFileExtension;
1409 if (!docInfo.anchor.isEmpty())
1411 m_t << "#" << docInfo.anchor;
1415 docify(docInfo.name);
1416 if (!docInfo.url.isEmpty())
1423 m_t << "<div class=\"ttdeci\">";
1429 m_t << "<div class=\"ttdoc\">";
1430 m_t << desc; // desc is already HTML escaped
1433 if (!defInfo.file.isEmpty())
1435 m_t << "<div class=\"ttdef\"><b>Definition:</b> ";
1436 if (!defInfo.url.isEmpty())
1438 m_t << "<a href=\"";
1439 m_t << externalRef(m_relPath,defInfo.ref,TRUE);
1440 m_t << defInfo.url << Doxygen::htmlFileExtension;
1441 if (!defInfo.anchor.isEmpty())
1443 m_t << "#" << defInfo.anchor;
1447 m_t << defInfo.file << ":" << defInfo.line;
1448 if (!defInfo.url.isEmpty())
1454 if (!declInfo.file.isEmpty())
1456 m_t << "<div class=\"ttdecl\"><b>Declaration:</b> ";
1457 if (!declInfo.url.isEmpty())
1459 m_t << "<a href=\"";
1460 m_t << externalRef(m_relPath,declInfo.ref,TRUE);
1461 m_t << declInfo.url << Doxygen::htmlFileExtension;
1462 if (!declInfo.anchor.isEmpty())
1464 m_t << "#" << declInfo.anchor;
1468 m_t << declInfo.file << ":" << declInfo.line;
1469 if (!declInfo.url.isEmpty())
1475 m_t << "</div>" << endl;
1479 void HtmlCodeGenerator::startCodeLine(bool hasLineNumbers)
1483 if (!hasLineNumbers) m_t << "<div class=\"line\">";
1488 void HtmlCodeGenerator::endCodeLine()
1490 if (m_streamSet) m_t << "</div>\n";
1493 void HtmlCodeGenerator::startFontClass(const char *s)
1495 if (m_streamSet) m_t << "<span class=\"" << s << "\">";
1498 void HtmlCodeGenerator::endFontClass()
1500 if (m_streamSet) m_t << "</span>";
1503 void HtmlCodeGenerator::writeCodeAnchor(const char *anchor)
1505 if (m_streamSet) m_t << "<a name=\"" << anchor << "\"></a>";
1508 //--------------------------------------------------------------------------
1510 HtmlGenerator::HtmlGenerator() : OutputGenerator()
1512 dir=Config_getString("HTML_OUTPUT");
1513 m_emptySection=FALSE;
1516 HtmlGenerator::~HtmlGenerator()
1518 //printf("HtmlGenerator::~HtmlGenerator()\n");
1521 void HtmlGenerator::init()
1523 QCString dname=Config_getString("HTML_OUTPUT");
1525 if (!d.exists() && !d.mkdir(dname))
1527 err("Could not create output directory %s\n",dname.data());
1531 if (!Config_getString("HTML_HEADER").isEmpty())
1533 g_header=fileToString(Config_getString("HTML_HEADER"));
1534 //printf("g_header='%s'\n",g_header.data());
1538 g_header = defaultHtmlHeader;
1541 if (!Config_getString("HTML_FOOTER").isEmpty())
1543 g_footer=fileToString(Config_getString("HTML_FOOTER"));
1544 //printf("g_footer='%s'\n",g_footer.data());
1548 g_footer = defaultHtmlFooter;
1551 if (Config_getBool("USE_MATHJAX"))
1553 if (!Config_getString("MATHJAX_CODEFILE").isEmpty())
1555 g_mathjax_code=fileToString(Config_getString("MATHJAX_CODEFILE"));
1556 //printf("g_mathjax_code='%s'\n",g_mathjax_code.data());
1561 QCString fileName=dname+"/tabs.css";
1563 if (f.open(IO_WriteOnly))
1566 t << replaceColorMarkers(tabs_css);
1570 fprintf(stderr,"Warning: Cannot open file %s for writing\n",fileName.data());
1574 QFile f(dname+"/jquery.js");
1575 if (f.open(IO_WriteOnly))
1578 t << search_jquery_script1 << search_jquery_script2 << search_jquery_script3;
1579 if (Config_getBool("GENERATE_TREEVIEW"))
1581 t << search_jquery_script4 << search_jquery_script5;
1583 if (Config_getBool("SOURCE_BROWSER"))
1585 t << search_jquery_script6;
1590 if (Config_getBool("INTERACTIVE_SVG"))
1592 QFile f(dname+"/svgpan.js");
1593 if (f.open(IO_WriteOnly))
1601 QFile f(dname+"/dynsections.js");
1602 if (f.open(IO_WriteOnly))
1605 t << dynsections_script;
1606 if (Config_getBool("SOURCE_BROWSER") && Config_getBool("SOURCE_TOOLTIPS"))
1609 "$(document).ready(function() {\n"
1610 " $('.code,.codeRef').each(function() {\n"
1611 " $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n"
1612 " $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n"
1620 /// Additional initialization after indices have been created
1621 void HtmlGenerator::writeTabData()
1623 Doxygen::indexList->addStyleSheetFile("tabs.css");
1624 QCString dname=Config_getString("HTML_OUTPUT");
1625 writeColoredImgData(dname,colored_tab_data);
1628 unsigned char shadow[6] = { 5, 5, 5, 5, 5, 5 };
1629 unsigned char shadow_alpha[6] = { 80, 60, 40, 20, 10, 0 };
1630 ColoredImage img(1,6,shadow,shadow_alpha,0,0,100);
1631 img.save(dname+"/nav_g.png");
1635 void HtmlGenerator::writeSearchData(const char *dir)
1637 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
1638 writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data);
1639 QCString searchDirName = Config_getString("HTML_OUTPUT")+"/search";
1640 QFile f(searchDirName+"/search.css");
1641 if (f.open(IO_WriteOnly))
1644 QCString searchCss = replaceColorMarkers(search_styleSheet);
1645 searchCss = substitute(searchCss,"$doxygenversion",versionString);
1646 if (Config_getBool("DISABLE_INDEX"))
1648 // move up the search box if there are no tabs
1649 searchCss = substitute(searchCss,"margin-top: 8px;","margin-top: 0px;");
1653 Doxygen::indexList->addStyleSheetFile("search/search.css");
1656 void HtmlGenerator::writeStyleSheetFile(QFile &file)
1658 FTextStream t(&file);
1659 t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
1662 void HtmlGenerator::writeHeaderFile(QFile &file, const char * /*cssname*/)
1664 FTextStream t(&file);
1665 t << "<!-- HTML header for doxygen " << versionString << "-->" << endl;
1666 QCString contents(defaultHtmlHeader);
1670 void HtmlGenerator::writeFooterFile(QFile &file)
1672 FTextStream t(&file);
1673 t << "<!-- HTML footer for doxygen " << versionString << "-->" << endl;
1674 QCString contents(defaultHtmlFooter);
1678 void HtmlGenerator::startFile(const char *name,const char *,
1681 //printf("HtmlGenerator::startFile(%s)\n",name);
1682 QCString fileName=name;
1684 relPath = relativePathToRoot(fileName);
1686 if (fileName.right(Doxygen::htmlFileExtension.length())!=Doxygen::htmlFileExtension)
1688 fileName+=Doxygen::htmlFileExtension;
1690 startPlainFile(fileName);
1691 m_codeGen.setTextStream(t);
1692 m_codeGen.setRelativePath(relPath);
1693 Doxygen::indexList->addIndexFile(fileName);
1695 lastFile = fileName;
1696 t << substituteHtmlKeywords(g_header,convertToHtml(filterTitle(title)),relPath);
1698 t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
1699 << versionString << " -->" << endl;
1700 //static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
1701 static bool searchEngine = Config_getBool("SEARCHENGINE");
1702 if (searchEngine /*&& !generateTreeView*/)
1704 t << "<script type=\"text/javascript\">\n";
1705 t << "var searchBox = new SearchBox(\"searchBox\", \""
1706 << relPath<< "search\",false,'" << theTranslator->trSearch() << "');\n";
1709 //generateDynamicSections(t,relPath);
1713 void HtmlGenerator::writeSearchInfo(FTextStream &t,const QCString &relPath)
1715 static bool searchEngine = Config_getBool("SEARCHENGINE");
1716 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
1717 if (searchEngine && !serverBasedSearch)
1720 t << "<!-- window showing the filter options -->\n";
1721 t << "<div id=\"MSearchSelectWindow\"\n";
1722 t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n";
1723 t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n";
1724 t << " onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n";
1725 writeSearchCategories(t);
1728 t << "<!-- iframe showing the search results (closed by default) -->\n";
1729 t << "<div id=\"MSearchResultsWindow\">\n";
1730 t << "<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n";
1731 t << " name=\"MSearchResults\" id=\"MSearchResults\">\n";
1738 void HtmlGenerator::writeSearchInfo()
1740 writeSearchInfo(t,relPath);
1744 QCString HtmlGenerator::writeLogoAsString(const char *path)
1746 static bool timeStamp = Config_getBool("HTML_TIMESTAMP");
1750 result += theTranslator->trGeneratedAt(
1752 Config_getString("PROJECT_NAME")
1757 result += theTranslator->trGeneratedBy();
1759 result += " \n<a href=\"http://www.doxygen.org/index.html\">\n"
1760 "<img class=\"footer\" src=\"";
1762 result += "doxygen.png\" alt=\"doxygen\"/></a> ";
1763 result += versionString;
1768 void HtmlGenerator::writeLogo()
1770 t << writeLogoAsString(relPath);
1773 void HtmlGenerator::writePageFooter(FTextStream &t,const QCString &lastTitle,
1774 const QCString &relPath,const QCString &navPath)
1776 t << substituteHtmlKeywords(g_footer,convertToHtml(lastTitle),relPath,navPath);
1779 void HtmlGenerator::writeFooter(const char *navPath)
1781 writePageFooter(t,lastTitle,relPath,navPath);
1784 void HtmlGenerator::endFile()
1789 void HtmlGenerator::startProjectNumber()
1791 t << "<h3 class=\"version\">";
1794 void HtmlGenerator::endProjectNumber()
1799 void HtmlGenerator::writeStyleInfo(int part)
1801 //printf("writeStyleInfo(%d)\n",part);
1804 if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet
1806 //printf("write doxygen.css\n");
1807 startPlainFile("doxygen.css");
1809 // alternative, cooler looking titles
1810 //t << "H1 { text-align: center; border-width: thin none thin none;" << endl;
1811 //t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl;
1813 t << replaceColorMarkers(substitute(defaultStyleSheet,"$doxygenversion",versionString));
1815 Doxygen::indexList->addStyleSheetFile("doxygen.css");
1817 else // write user defined style sheet
1819 QCString cssname=Config_getString("HTML_STYLESHEET");
1820 QFileInfo cssfi(cssname);
1821 if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable())
1823 err("style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data());
1827 // convert style sheet to string
1828 QCString fileStr = fileToString(cssname);
1829 // write the string into the output dir
1830 startPlainFile(cssfi.fileName().utf8());
1834 Doxygen::indexList->addStyleSheetFile(cssfi.fileName().utf8());
1836 static QStrList extraCssFile = Config_getList("HTML_EXTRA_STYLESHEET");
1837 for (uint i=0; i<extraCssFile.count(); ++i)
1839 QCString fileName(extraCssFile.at(i));
1840 if (!fileName.isEmpty())
1842 QFileInfo fi(fileName);
1845 Doxygen::indexList->addStyleSheetFile(fi.fileName().utf8());
1852 void HtmlGenerator::startDoxyAnchor(const char *,const char *,
1853 const char *anchor, const char *,
1856 t << "<a class=\"anchor\" id=\"" << anchor << "\"></a>";
1859 void HtmlGenerator::endDoxyAnchor(const char *,const char *)
1863 //void HtmlGenerator::newParagraph()
1865 // t << endl << "<p>" << endl;
1868 void HtmlGenerator::startParagraph()
1873 void HtmlGenerator::endParagraph()
1875 t << "</p>" << endl;
1878 void HtmlGenerator::writeString(const char *text)
1883 void HtmlGenerator::startIndexListItem()
1888 void HtmlGenerator::endIndexListItem()
1890 t << "</li>" << endl;
1893 void HtmlGenerator::startIndexItem(const char *ref,const char *f)
1895 //printf("HtmlGenerator::startIndexItem(%s,%s)\n",ref,f);
1900 t << "<a class=\"elRef\" ";
1901 t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
1905 t << "<a class=\"el\" ";
1908 t << externalRef(relPath,ref,TRUE);
1909 if (f) t << f << Doxygen::htmlFileExtension << "\">";
1917 void HtmlGenerator::endIndexItem(const char *ref,const char *f)
1919 //printf("HtmlGenerator::endIndexItem(%s,%s,%s)\n",ref,f,name);
1930 void HtmlGenerator::writeStartAnnoItem(const char *,const char *f,
1931 const char *path,const char *name)
1934 if (path) docify(path);
1935 t << "<a class=\"el\" href=\"" << f << Doxygen::htmlFileExtension << "\">";
1940 void HtmlGenerator::writeObjectLink(const char *ref,const char *f,
1941 const char *anchor, const char *name)
1945 t << "<a class=\"elRef\" ";
1946 t << externalLinkTarget() << externalRef(relPath,ref,FALSE);
1950 t << "<a class=\"el\" ";
1953 t << externalRef(relPath,ref,TRUE);
1954 if (f) t << f << Doxygen::htmlFileExtension;
1955 if (anchor) t << "#" << anchor;
1961 void HtmlGenerator::startTextLink(const char *f,const char *anchor)
1964 if (f) t << relPath << f << Doxygen::htmlFileExtension;
1965 if (anchor) t << "#" << anchor;
1969 void HtmlGenerator::endTextLink()
1974 void HtmlGenerator::startHtmlLink(const char *url)
1976 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
1978 if (generateTreeView) t << "target=\"top\" ";
1984 void HtmlGenerator::endHtmlLink()
1989 void HtmlGenerator::startGroupHeader(int extraIndentLevel)
1991 if (extraIndentLevel==2)
1993 t << "<h4 class=\"groupheader\">";
1995 else if (extraIndentLevel==1)
1997 t << "<h3 class=\"groupheader\">";
1999 else // extraIndentLevel==0
2001 t << "<h2 class=\"groupheader\">";
2005 void HtmlGenerator::endGroupHeader(int extraIndentLevel)
2007 if (extraIndentLevel==2)
2009 t << "</h4>" << endl;
2011 else if (extraIndentLevel==1)
2013 t << "</h3>" << endl;
2017 t << "</h2>" << endl;
2021 void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type)
2025 case SectionInfo::Page: t << "\n\n<h1>"; break;
2026 case SectionInfo::Section: t << "\n\n<h2>"; break;
2027 case SectionInfo::Subsection: t << "\n\n<h3>"; break;
2028 case SectionInfo::Subsubsection: t << "\n\n<h4>"; break;
2029 case SectionInfo::Paragraph: t << "\n\n<h5>"; break;
2030 default: ASSERT(0); break;
2032 t << "<a class=\"anchor\" id=\"" << lab << "\"></a>";
2035 void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type)
2039 case SectionInfo::Page: t << "</h1>"; break;
2040 case SectionInfo::Section: t << "</h2>"; break;
2041 case SectionInfo::Subsection: t << "</h3>"; break;
2042 case SectionInfo::Subsubsection: t << "</h4>"; break;
2043 case SectionInfo::Paragraph: t << "</h5>"; break;
2044 default: ASSERT(0); break;
2048 void HtmlGenerator::docify(const char *str)
2053 void HtmlGenerator::docify(const char *str,bool inHtmlComment)
2064 case '<': t << "<"; break;
2065 case '>': t << ">"; break;
2066 case '&': t << "&"; break;
2067 case '"': t << """; break;
2068 case '-': if (inHtmlComment) t << "-"; else t << "-"; break;
2071 { t << "<"; p++; }
2073 { t << ">"; p++; }
2083 void HtmlGenerator::writeChar(char c)
2091 //--- helper function for dynamic sections -------------------------
2093 static void startSectionHeader(FTextStream &t,
2094 const QCString &relPath,int sectionCount)
2096 //t << "<!-- startSectionHeader -->";
2097 static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
2098 if (dynamicSections)
2100 t << "<div id=\"dynsection-" << sectionCount << "\" "
2101 "onclick=\"return toggleVisibility(this)\" "
2102 "class=\"dynheader closed\" "
2103 "style=\"cursor:pointer;\">" << endl;
2104 t << " <img id=\"dynsection-" << sectionCount << "-trigger\" src=\""
2105 << relPath << "closed.png\" alt=\"+\"/> ";
2109 t << "<div class=\"dynheader\">" << endl;
2113 static void endSectionHeader(FTextStream &t)
2115 //t << "<!-- endSectionHeader -->";
2116 t << "</div>" << endl;
2119 static void startSectionSummary(FTextStream &t,int sectionCount)
2121 //t << "<!-- startSectionSummary -->";
2122 static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
2123 if (dynamicSections)
2125 t << "<div id=\"dynsection-" << sectionCount << "-summary\" "
2126 "class=\"dynsummary\" "
2127 "style=\"display:block;\">" << endl;
2131 static void endSectionSummary(FTextStream &t)
2133 //t << "<!-- endSectionSummary -->";
2134 static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
2135 if (dynamicSections)
2137 t << "</div>" << endl;
2141 static void startSectionContent(FTextStream &t,int sectionCount)
2143 //t << "<!-- startSectionContent -->";
2144 static bool dynamicSections = Config_getBool("HTML_DYNAMIC_SECTIONS");
2145 if (dynamicSections)
2147 t << "<div id=\"dynsection-" << sectionCount << "-content\" "
2148 "class=\"dyncontent\" "
2149 "style=\"display:none;\">" << endl;
2153 t << "<div class=\"dyncontent\">" << endl;
2157 static void endSectionContent(FTextStream &t)
2159 //t << "<!-- endSectionContent -->";
2160 t << "</div>" << endl;
2163 //----------------------------
2165 void HtmlGenerator::startClassDiagram()
2167 startSectionHeader(t,relPath,m_sectionCount);
2170 void HtmlGenerator::endClassDiagram(const ClassDiagram &d,
2171 const char *fileName,const char *name)
2173 endSectionHeader(t);
2174 startSectionSummary(t,m_sectionCount);
2175 endSectionSummary(t);
2176 startSectionContent(t,m_sectionCount);
2177 t << " <div class=\"center\">" << endl;
2178 t << " <img src=\"";
2179 t << relPath << fileName << ".png\" usemap=\"#";
2181 t << "_map\" alt=\"\"/>" << endl;
2184 t << "_map\" name=\"";
2186 t << "_map\">" << endl;
2188 d.writeImage(t,dir,relPath,fileName);
2190 endSectionContent(t);
2195 void HtmlGenerator::startMemberList()
2197 DBG_HTML(t << "<!-- startMemberList -->" << endl)
2200 void HtmlGenerator::endMemberList()
2202 DBG_HTML(t << "<!-- endMemberList -->" << endl)
2206 // 0 = single column right aligned
2207 // 1 = double column left aligned
2208 // 2 = single column left aligned
2209 void HtmlGenerator::startMemberItem(const char *anchor,int annoType,const char *inheritId)
2211 DBG_HTML(t << "<!-- startMemberItem() -->" << endl)
2214 t << "<table class=\"memberdecls\">" << endl;
2215 m_emptySection=FALSE;
2217 t << "<tr class=\"memitem:" << anchor;
2220 t << " inherit " << inheritId;
2225 case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break;
2226 case 1: t << "<td class=\"memItemLeft\" >"; break;
2227 case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break;
2228 default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break;
2232 void HtmlGenerator::endMemberItem()
2238 void HtmlGenerator::startMemberTemplateParams()
2242 void HtmlGenerator::endMemberTemplateParams(const char *anchor,const char *inheritId)
2244 t << "</td></tr>" << endl;
2245 t << "<tr class=\"memitem:" << anchor;
2248 t << " inherit " << inheritId;
2250 t << "\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">";
2254 void HtmlGenerator::insertMemberAlign(bool templ)
2256 DBG_HTML(t << "<!-- insertMemberAlign -->" << endl)
2257 QCString className = templ ? "memTemplItemRight" : "memItemRight";
2258 t << " </td><td class=\"" << className << "\" valign=\"bottom\">";
2261 void HtmlGenerator::startMemberDescription(const char *anchor,const char *inheritId)
2263 DBG_HTML(t << "<!-- startMemberDescription -->" << endl)
2266 t << "<table class=\"memberdecls\">" << endl;
2267 m_emptySection=FALSE;
2269 t << "<tr class=\"memdesc:" << anchor;
2272 t << " inherit " << inheritId;
2274 t << "\"><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">";
2277 void HtmlGenerator::endMemberDescription()
2279 DBG_HTML(t << "<!-- endMemberDescription -->" << endl)
2280 t << "<br /></td></tr>" << endl;
2283 void HtmlGenerator::startMemberSections()
2285 DBG_HTML(t << "<!-- startMemberSections -->" << endl)
2286 m_emptySection=TRUE; // we postpone writing <table> until we actually
2287 // write a row to prevent empty tables, which
2288 // are not valid XHTML!
2291 void HtmlGenerator::endMemberSections()
2293 DBG_HTML(t << "<!-- endMemberSections -->" << endl)
2294 if (!m_emptySection)
2296 t << "</table>" << endl;
2300 void HtmlGenerator::startMemberHeader(const char *anchor)
2302 DBG_HTML(t << "<!-- startMemberHeader -->" << endl)
2303 if (!m_emptySection)
2306 m_emptySection=TRUE;
2310 t << "<table class=\"memberdecls\">" << endl;
2311 m_emptySection=FALSE;
2313 t << "<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\">";
2316 t << "<a name=\"" << anchor << "\"></a>" << endl;
2320 void HtmlGenerator::endMemberHeader()
2322 DBG_HTML(t << "<!-- endMemberHeader -->" << endl)
2323 t << "</h2></td></tr>" << endl;
2326 void HtmlGenerator::startMemberSubtitle()
2328 DBG_HTML(t << "<!-- startMemberSubtitle -->" << endl)
2329 t << "<tr><td class=\"ititle\" colspan=\"2\">";
2332 void HtmlGenerator::endMemberSubtitle()
2334 DBG_HTML(t << "<!-- endMemberSubtitle -->" << endl)
2335 t << "</td></tr>" << endl;
2338 void HtmlGenerator::startIndexList()
2340 t << "<table>" << endl;
2343 void HtmlGenerator::endIndexList()
2345 t << "</table>" << endl;
2348 void HtmlGenerator::startIndexKey()
2350 // inserted 'class = ...', 02 jan 2002, jh
2351 t << " <tr><td class=\"indexkey\">";
2354 void HtmlGenerator::endIndexKey()
2359 void HtmlGenerator::startIndexValue(bool)
2361 // inserted 'class = ...', 02 jan 2002, jh
2362 t << "<td class=\"indexvalue\">";
2365 void HtmlGenerator::endIndexValue(const char *,bool)
2367 t << "</td></tr>" << endl;
2370 void HtmlGenerator::startMemberDocList()
2372 DBG_HTML(t << "<!-- startMemberDocList -->" << endl;)
2375 void HtmlGenerator::endMemberDocList()
2377 DBG_HTML(t << "<!-- endMemberDocList -->" << endl;)
2380 void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *,bool)
2382 DBG_HTML(t << "<!-- startMemberDoc -->" << endl;)
2384 t << "\n<div class=\"memitem\">" << endl;
2385 t << "<div class=\"memproto\">" << endl;
2388 void HtmlGenerator::startMemberDocPrefixItem()
2390 DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;)
2391 t << "<div class=\"memtemplate\">" << endl;
2394 void HtmlGenerator::endMemberDocPrefixItem()
2396 DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;)
2397 t << "</div>" << endl;
2400 void HtmlGenerator::startMemberDocName(bool /*align*/)
2402 DBG_HTML(t << "<!-- startMemberDocName -->" << endl;)
2404 t << " <table class=\"memname\">" << endl;
2406 t << " <tr>" << endl;
2407 t << " <td class=\"memname\">";
2410 void HtmlGenerator::endMemberDocName()
2412 DBG_HTML(t << "<!-- endMemberDocName -->" << endl;)
2413 t << "</td>" << endl;
2416 void HtmlGenerator::startParameterList(bool openBracket)
2418 DBG_HTML(t << "<!-- startParameterList -->" << endl;)
2420 if (openBracket) t << "(";
2421 t << "</td>" << endl;
2424 void HtmlGenerator::startParameterType(bool first,const char *key)
2428 DBG_HTML(t << "<!-- startFirstParameterType -->" << endl;)
2429 t << " <td class=\"paramtype\">";
2433 DBG_HTML(t << "<!-- startParameterType -->" << endl;)
2434 t << " <tr>" << endl;
2435 t << " <td class=\"paramkey\">";
2437 t << "</td>" << endl;
2438 t << " <td></td>" << endl;
2439 t << " <td class=\"paramtype\">";
2443 void HtmlGenerator::endParameterType()
2445 DBG_HTML(t << "<!-- endParameterType -->" << endl;)
2446 t << " </td>" << endl;
2449 void HtmlGenerator::startParameterName(bool /*oneArgOnly*/)
2451 DBG_HTML(t << "<!-- startParameterName -->" << endl;)
2452 t << " <td class=\"paramname\">";
2455 void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket)
2457 DBG_HTML(t << "<!-- endParameterName -->" << endl;)
2462 if (closeBracket) t << "</td><td>)";
2463 t << "</td>" << endl;
2468 t << " </td>" << endl;
2469 t << " </tr>" << endl;
2470 t << " <tr>" << endl;
2471 t << " <td></td>" << endl;
2473 if (closeBracket) t << ")";
2474 t << "</td>" << endl;
2475 t << " <td></td><td>";
2480 t << "</td>" << endl;
2481 t << " </tr>" << endl;
2485 void HtmlGenerator::endParameterList()
2487 DBG_HTML(t << "<!-- endParameterList -->" << endl;)
2488 t << "</td>" << endl;
2489 t << " </tr>" << endl;
2492 void HtmlGenerator::exceptionEntry(const char* prefix,bool closeBracket)
2494 DBG_HTML(t << "<!-- exceptionEntry -->" << endl;)
2495 t << "</td>" << endl;
2496 t << " </tr>" << endl;
2497 t << " <tr>" << endl;
2498 t << " <td align=\"right\">";
2499 // colspan 2 so it gets both parameter type and parameter name columns
2501 t << prefix << "</td><td>(</td><td colspan=\"2\">";
2502 else if (closeBracket)
2503 t << "</td><td>)</td><td></td><td>";
2505 t << "</td><td></td><td colspan=\"2\">";
2508 void HtmlGenerator::endMemberDoc(bool hasArgs)
2510 DBG_HTML(t << "<!-- endMemberDoc -->" << endl;)
2513 t << " </tr>" << endl;
2515 t << " </table>" << endl;
2516 // t << "</div>" << endl;
2519 void HtmlGenerator::startDotGraph()
2521 startSectionHeader(t,relPath,m_sectionCount);
2524 void HtmlGenerator::endDotGraph(const DotClassGraph &g)
2526 bool generateLegend = Config_getBool("GENERATE_LEGEND");
2527 bool umlLook = Config_getBool("UML_LOOK");
2528 endSectionHeader(t);
2529 startSectionSummary(t,m_sectionCount);
2530 endSectionSummary(t);
2531 startSectionContent(t,m_sectionCount);
2533 g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,TRUE,m_sectionCount);
2534 if (generateLegend && !umlLook)
2536 t << "<center><span class=\"legend\">[";
2537 startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension);
2538 t << theTranslator->trLegend();
2540 t << "]</span></center>";
2543 endSectionContent(t);
2547 void HtmlGenerator::startInclDepGraph()
2549 startSectionHeader(t,relPath,m_sectionCount);
2552 void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g)
2554 endSectionHeader(t);
2555 startSectionSummary(t,m_sectionCount);
2556 endSectionSummary(t);
2557 startSectionContent(t,m_sectionCount);
2559 g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
2561 endSectionContent(t);
2565 void HtmlGenerator::startGroupCollaboration()
2567 startSectionHeader(t,relPath,m_sectionCount);
2570 void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g)
2572 endSectionHeader(t);
2573 startSectionSummary(t,m_sectionCount);
2574 endSectionSummary(t);
2575 startSectionContent(t,m_sectionCount);
2577 g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
2579 endSectionContent(t);
2583 void HtmlGenerator::startCallGraph()
2585 startSectionHeader(t,relPath,m_sectionCount);
2588 void HtmlGenerator::endCallGraph(const DotCallGraph &g)
2590 endSectionHeader(t);
2591 startSectionSummary(t,m_sectionCount);
2592 endSectionSummary(t);
2593 startSectionContent(t,m_sectionCount);
2595 g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
2597 endSectionContent(t);
2601 void HtmlGenerator::startDirDepGraph()
2603 startSectionHeader(t,relPath,m_sectionCount);
2606 void HtmlGenerator::endDirDepGraph(const DotDirDeps &g)
2608 endSectionHeader(t);
2609 startSectionSummary(t,m_sectionCount);
2610 endSectionSummary(t);
2611 startSectionContent(t,m_sectionCount);
2613 g.writeGraph(t,GOF_BITMAP,EOF_Html,dir,fileName,relPath,TRUE,m_sectionCount);
2615 endSectionContent(t);
2619 void HtmlGenerator::writeGraphicalHierarchy(const DotGfxHierarchyTable &g)
2621 g.writeGraph(t,dir,fileName);
2624 void HtmlGenerator::startMemberGroupHeader(bool)
2626 t << "<tr><td colspan=\"2\"><div class=\"groupHeader\">";
2629 void HtmlGenerator::endMemberGroupHeader()
2631 t << "</div></td></tr>" << endl;
2634 void HtmlGenerator::startMemberGroupDocs()
2636 t << "<tr><td colspan=\"2\"><div class=\"groupText\">";
2639 void HtmlGenerator::endMemberGroupDocs()
2641 t << "</div></td></tr>" << endl;
2644 void HtmlGenerator::startMemberGroup()
2648 void HtmlGenerator::endMemberGroup(bool)
2652 void HtmlGenerator::startIndent()
2654 DBG_HTML(t << "<!-- startIndent -->" << endl;)
2656 t << "<div class=\"memdoc\">\n";
2659 void HtmlGenerator::endIndent()
2661 DBG_HTML(t << "<!-- endIndent -->" << endl;)
2662 t << endl << "</div>" << endl << "</div>" << endl;
2665 void HtmlGenerator::addIndexItem(const char *,const char *)
2669 void HtmlGenerator::writeNonBreakableSpace(int n)
2678 void HtmlGenerator::startSimpleSect(SectionTypes,
2679 const char *filename,const char *anchor,
2685 writeObjectLink(0,filename,anchor,title);
2694 void HtmlGenerator::endSimpleSect()
2699 void HtmlGenerator::startParamList(ParamListTypes,
2707 void HtmlGenerator::endParamList()
2712 void HtmlGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *)
2714 HtmlDocVisitor *visitor = new HtmlDocVisitor(t,m_codeGen,ctx);
2719 //---------------- helpers for index generation -----------------------------
2721 static void startQuickIndexList(FTextStream &t,bool compact,bool topLevel=TRUE)
2727 t << " <div id=\"navrow1\" class=\"tabs\">\n";
2731 t << " <div id=\"navrow2\" class=\"tabs2\">\n";
2733 t << " <ul class=\"tablist\">\n";
2741 static void endQuickIndexList(FTextStream &t,bool compact)
2754 static void startQuickIndexItem(FTextStream &t,const char *l,
2755 bool hl,bool /*compact*/,
2756 const QCString &relPath)
2761 t << " class=\"current\"";
2764 if (l) t << "<a href=\"" << correctURL(l,relPath) << "\">";
2768 static void endQuickIndexItem(FTextStream &t,const char *l)
2775 static QCString fixSpaces(const QCString &s)
2777 return substitute(s," "," ");
2780 static bool quickLinkVisible(LayoutNavEntry::Kind kind)
2782 static bool showFiles = Config_getBool("SHOW_FILES");
2783 static bool showNamespaces = Config_getBool("SHOW_NAMESPACES");
2786 case LayoutNavEntry::MainPage: return TRUE;
2787 case LayoutNavEntry::User: return TRUE;
2788 case LayoutNavEntry::UserGroup: return TRUE;
2789 case LayoutNavEntry::Pages: return indexedPages>0;
2790 case LayoutNavEntry::Modules: return documentedGroups>0;
2791 case LayoutNavEntry::Namespaces: return documentedNamespaces>0 && showNamespaces;
2792 case LayoutNavEntry::NamespaceList: return documentedNamespaces>0 && showNamespaces;
2793 case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0;
2794 case LayoutNavEntry::Classes: return annotatedClasses>0;
2795 case LayoutNavEntry::ClassList: return annotatedClasses>0;
2796 case LayoutNavEntry::ClassIndex: return annotatedClasses>0;
2797 case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0;
2798 case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0;
2799 case LayoutNavEntry::Files: return documentedHtmlFiles>0 && showFiles;
2800 case LayoutNavEntry::FileList: return documentedHtmlFiles>0 && showFiles;
2801 case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0;
2802 //case LayoutNavEntry::Dirs: return documentedDirs>0;
2803 case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0;
2808 static void renderQuickLinksAsTree(FTextStream &t,const QCString &relPath,LayoutNavEntry *root)
2811 QListIterator<LayoutNavEntry> li(root->children());
2812 LayoutNavEntry *entry;
2814 for (li.toFirst();(entry=li.current());++li)
2816 if (entry->visible() && quickLinkVisible(entry->kind())) count++;
2818 if (count>0) // at least one item is visible
2820 startQuickIndexList(t,FALSE);
2821 for (li.toFirst();(entry=li.current());++li)
2823 if (entry->visible() && quickLinkVisible(entry->kind()))
2825 QCString url = entry->url();
2826 t << "<li><a href=\"" << relPath << url << "\"><span>";
2827 t << fixSpaces(entry->title());
2828 t << "</span></a>\n";
2829 // recursive into child list
2830 renderQuickLinksAsTree(t,relPath,entry);
2834 endQuickIndexList(t,FALSE);
2839 static void renderQuickLinksAsTabs(FTextStream &t,const QCString &relPath,
2840 LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind,
2841 bool highlightParent,bool highlightSearch)
2843 if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry
2845 renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch);
2847 if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry
2849 bool topLevel = hlEntry->parent()->parent()==0;
2850 QListIterator<LayoutNavEntry> li(hlEntry->parent()->children());
2851 LayoutNavEntry *entry;
2854 for (li.toFirst();(entry=li.current());++li)
2856 if (entry->visible() && quickLinkVisible(entry->kind())) count++;
2858 if (count>0) // at least one item is visible
2860 startQuickIndexList(t,TRUE,topLevel);
2861 for (li.toFirst();(entry=li.current());++li)
2863 if (entry->visible() && quickLinkVisible(entry->kind()))
2865 QCString url = entry->url();
2866 startQuickIndexItem(t,url,
2868 (entry->children().count()>0 ||
2869 (entry->kind()==kind && !highlightParent)
2872 t << fixSpaces(entry->title());
2873 endQuickIndexItem(t,url);
2876 if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry()) // first row is special as it contains the search box
2878 static bool searchEngine = Config_getBool("SEARCHENGINE");
2879 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH");
2883 if (!serverBasedSearch) // pure client side search
2885 writeClientSearchBox(t,relPath);
2888 else // server based search
2890 writeServerSearchBox(t,relPath,highlightSearch);
2891 if (!highlightSearch)
2897 if (!highlightSearch) // on the search page the index will be ended by the
2900 endQuickIndexList(t,TRUE);
2903 else // normal case for other rows than first one
2905 endQuickIndexList(t,TRUE);
2911 static void writeDefaultQuickLinks(FTextStream &t,bool compact,
2912 HighlightedItem hli,
2914 const QCString &relPath)
2916 LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry();
2917 LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1;
2918 LayoutNavEntry::Kind altKind = (LayoutNavEntry::Kind)-1; // fall back for the old layout file
2919 bool highlightParent=FALSE;
2920 switch (hli) // map HLI enums to LayoutNavEntry::Kind enums
2922 case HLI_Main: kind = LayoutNavEntry::MainPage; break;
2923 case HLI_Modules: kind = LayoutNavEntry::Modules; break;
2924 //case HLI_Directories: kind = LayoutNavEntry::Dirs; break;
2925 case HLI_Namespaces: kind = LayoutNavEntry::NamespaceList; altKind = LayoutNavEntry::Namespaces; break;
2926 case HLI_Hierarchy: kind = LayoutNavEntry::ClassHierarchy; break;
2927 case HLI_Classes: kind = LayoutNavEntry::ClassIndex; altKind = LayoutNavEntry::Classes; break;
2928 case HLI_Annotated: kind = LayoutNavEntry::ClassList; altKind = LayoutNavEntry::Classes; break;
2929 case HLI_Files: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files; break;
2930 case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break;
2931 case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break;
2932 case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break;
2933 case HLI_Pages: kind = LayoutNavEntry::Pages; break;
2934 case HLI_Examples: kind = LayoutNavEntry::Examples; break;
2935 case HLI_UserGroup: kind = LayoutNavEntry::UserGroup; break;
2936 case HLI_ClassVisible: kind = LayoutNavEntry::ClassList; altKind = LayoutNavEntry::Classes;
2937 highlightParent = TRUE; break;
2938 case HLI_NamespaceVisible: kind = LayoutNavEntry::NamespaceList; altKind = LayoutNavEntry::Namespaces;
2939 highlightParent = TRUE; break;
2940 case HLI_FileVisible: kind = LayoutNavEntry::FileList; altKind = LayoutNavEntry::Files;
2941 highlightParent = TRUE; break;
2942 case HLI_None: break;
2943 case HLI_Search: break;
2948 // find highlighted index item
2949 LayoutNavEntry *hlEntry = root->find(kind,kind==LayoutNavEntry::UserGroup ? file : 0);
2950 if (!hlEntry && altKind!=(LayoutNavEntry::Kind)-1) { hlEntry=root->find(altKind); kind=altKind; }
2951 if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index...
2953 highlightParent=TRUE;
2954 hlEntry = root->children().getFirst();
2957 return; // argl, empty index!
2960 if (kind==LayoutNavEntry::UserGroup)
2962 LayoutNavEntry *e = hlEntry->children().getFirst();
2968 renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search);
2972 renderQuickLinksAsTree(t,relPath,root);
2976 void HtmlGenerator::endQuickIndices()
2978 t << "</div><!-- top -->" << endl;
2981 QCString HtmlGenerator::writeSplitBarAsString(const char *name,const char *relpath)
2983 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
2986 if (generateTreeView)
2989 "<div id=\"side-nav\" class=\"ui-resizable side-nav-resizable\">\n"
2990 " <div id=\"nav-tree\">\n"
2991 " <div id=\"nav-tree-contents\">\n"
2992 " <div id=\"nav-sync\" class=\"sync\"></div>\n"
2995 " <div id=\"splitbar\" style=\"-moz-user-select:none;\" \n"
2996 " class=\"ui-resizable-handle\">\n"
2999 "<script type=\"text/javascript\">\n"
3000 "$(document).ready(function(){initNavTree('") +
3001 QCString(name) + Doxygen::htmlFileExtension +
3002 QCString("','") + relpath +
3005 "<div id=\"doc-content\">\n");
3010 void HtmlGenerator::writeSplitBar(const char *name)
3012 t << writeSplitBarAsString(name,relPath);
3015 void HtmlGenerator::writeNavigationPath(const char *s)
3017 t << substitute(s,"$relpath^",relPath);
3020 void HtmlGenerator::startContents()
3022 t << "<div class=\"contents\">" << endl;
3025 void HtmlGenerator::endContents()
3027 t << "</div><!-- contents -->" << endl;
3030 void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli,const char *file)
3032 writeDefaultQuickLinks(t,compact,hli,file,relPath);
3035 // PHP based search script
3036 void HtmlGenerator::writeSearchPage()
3038 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
3039 static bool disableIndex = Config_getBool("DISABLE_INDEX");
3040 static QCString projectName = Config_getString("PROJECT_NAME");
3042 // OPENSEARCH_PROVIDER {
3043 QCString configFileName = Config_getString("HTML_OUTPUT")+"/search-config.php";
3044 QFile cf(configFileName);
3045 if (cf.open(IO_WriteOnly))
3048 t << "<script language=\"php\">\n\n";
3049 t << "$config = array(\n";
3050 t << " 'PROJECT_NAME' => \"" << convertToHtml(projectName) << "\",\n";
3051 t << " 'GENERATE_TREEVIEW' => " << (generateTreeView?"true":"false") << ",\n";
3052 t << " 'DISABLE_INDEX' => " << (disableIndex?"true":"false") << ",\n";
3054 t << "$translator = array(\n";
3055 t << " 'search_results_title' => \"" << theTranslator->trSearchResultsTitle() << "\",\n";
3056 t << " 'search_results' => array(\n";
3057 t << " 0 => \"" << theTranslator->trSearchResults(0) << "\",\n";
3058 t << " 1 => \"" << theTranslator->trSearchResults(1) << "\",\n";
3059 t << " 2 => \"" << substitute(theTranslator->trSearchResults(2), "$", "\\$") << "\",\n";
3061 t << " 'search_matches' => \"" << theTranslator->trSearchMatches() << "\",\n";
3062 t << " 'search' => \"" << theTranslator->trSearch() << "\",\n";
3063 t << " 'split_bar' => \"" << substitute(substitute(writeSplitBarAsString("search",""), "\"","\\\""), "\n","\\n") << "\",\n";
3064 t << " 'logo' => \"" << substitute(substitute(writeLogoAsString(""), "\"","\\\""), "\n","\\n") << "\",\n";
3069 QCString functionsFileName = Config_getString("HTML_OUTPUT")+"/search-functions.php";
3070 QFile ff(functionsFileName);
3071 if (ff.open(IO_WriteOnly))
3074 // Write stuff from search_functions.php source file...
3075 t << search_functions_script;
3078 QCString opensearchFileName = Config_getString("HTML_OUTPUT")+"/search-opensearch.php";
3079 QFile of(opensearchFileName);
3080 if (of.open(IO_WriteOnly))
3083 // Write stuff from search_opensearch.php source file...
3084 t << search_opensearch_script;
3086 // OPENSEARCH_PROVIDER }
3088 QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php";
3090 if (f.open(IO_WriteOnly))
3093 t << substituteHtmlKeywords(g_header,"Search","");
3095 t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
3096 << versionString << " -->" << endl;
3097 t << "<script type=\"text/javascript\">\n";
3098 t << "var searchBox = new SearchBox(\"searchBox\", \""
3099 << "search\",false,'" << theTranslator->trSearch() << "');\n";
3101 if (!Config_getBool("DISABLE_INDEX"))
3103 writeDefaultQuickLinks(t,TRUE,HLI_Search,0,"");
3107 t << "</div>" << endl;
3110 t << "<script language=\"php\">\n";
3111 t << "require_once \"search-functions.php\";\n";
3115 // Write empty navigation path, to make footer connect properly
3116 if (generateTreeView)
3118 t << "</div><!-- doc-contents -->\n";
3119 //t << "<div id=\"nav-path\" class=\"navpath\">\n";
3123 writePageFooter(t,"Search","","");
3125 QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js";
3126 QFile sf(scriptName);
3127 if (sf.open(IO_WriteOnly))
3130 t << extsearch_script;
3134 err("Failed to open file '%s' for writing...\n",scriptName.data());
3138 void HtmlGenerator::writeExternalSearchPage()
3140 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW");
3141 QCString fileName = Config_getString("HTML_OUTPUT")+"/search"+Doxygen::htmlFileExtension;
3143 if (f.open(IO_WriteOnly))
3146 t << substituteHtmlKeywords(g_header,"Search","");
3148 t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen "
3149 << versionString << " -->" << endl;
3150 t << "<script type=\"text/javascript\">\n";
3151 t << "var searchBox = new SearchBox(\"searchBox\", \""
3152 << "search\",false,'" << theTranslator->trSearch() << "');\n";
3154 if (!Config_getBool("DISABLE_INDEX"))
3156 writeDefaultQuickLinks(t,TRUE,HLI_Search,0,"");
3157 t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"\" size=\"20\" accesskey=\"S\" onfocus=\"searchBox.OnSearchFieldFocus(true)\" onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n";
3159 t << " </div><div class=\"right\"></div>\n";
3168 t << "</div>" << endl;
3170 t << writeSplitBarAsString("search","");
3171 t << "<div class=\"header\">" << endl;
3172 t << " <div class=\"headertitle\">" << endl;
3173 t << " <div class=\"title\">" << theTranslator->trSearchResultsTitle() << "</div>" << endl;
3174 t << " </div>" << endl;
3175 t << "</div>" << endl;
3176 t << "<div class=\"contents\">" << endl;
3178 t << "<div id=\"searchresults\"></div>" << endl;
3179 t << "</div>" << endl;
3181 if (generateTreeView)
3183 t << "</div><!-- doc-contents -->" << endl;
3186 writePageFooter(t,"Search","","");
3188 QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js";
3189 QFile sf(scriptName);
3190 if (sf.open(IO_WriteOnly))
3193 t << "var searchResultsText=["
3194 << "\"" << theTranslator->trSearchResults(0) << "\","
3195 << "\"" << theTranslator->trSearchResults(1) << "\","
3196 << "\"" << theTranslator->trSearchResults(2) << "\"];" << endl;
3197 t << "var serverUrl=\"" << Config_getString("SEARCHENGINE_URL") << "\";" << endl;
3198 t << "var tagMap = {" << endl;
3200 // add search mappings
3201 QStrList &extraSearchMappings = Config_getList("EXTRA_SEARCH_MAPPINGS");
3202 char *ml=extraSearchMappings.first();
3205 QCString mapLine = ml;
3206 int eqPos = mapLine.find('=');
3207 if (eqPos!=-1) // tag command contains a destination
3209 QCString tagName = mapLine.left(eqPos).stripWhiteSpace();
3210 QCString destName = mapLine.right(mapLine.length()-eqPos-1).stripWhiteSpace();
3211 if (!tagName.isEmpty())
3213 if (!first) t << "," << endl;
3214 t << " \"" << tagName << "\": \"" << destName << "\"";
3218 ml=extraSearchMappings.next();
3220 if (!first) t << endl;
3221 t << "};" << endl << endl;
3222 t << extsearch_script;
3224 t << "$(document).ready(function() {" << endl;
3225 t << " var query = trim(getURLParameter('query'));" << endl;
3226 t << " if (query) {" << endl;
3227 t << " searchFor(query,0,20);" << endl;
3228 t << " } else {" << endl;
3229 t << " var results = $('#results');" << endl;
3230 t << " results.html('<p>" << theTranslator->trSearchResults(0) << "</p>');" << endl;
3236 err("Failed to open file '%s' for writing...\n",scriptName.data());
3240 void HtmlGenerator::startConstraintList(const char *header)
3242 t << "<div class=\"typeconstraint\">" << endl;
3243 t << "<dl><dt><b>" << header << "</b></dt><dd>" << endl;
3244 t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl;
3247 void HtmlGenerator::startConstraintParam()
3249 t << "<tr><td valign=\"top\"><em>";
3252 void HtmlGenerator::endConstraintParam()
3257 void HtmlGenerator::startConstraintType()
3259 t << "<td> :</td><td valign=\"top\"><em>";
3262 void HtmlGenerator::endConstraintType()
3267 void HtmlGenerator::startConstraintDocs()
3272 void HtmlGenerator::endConstraintDocs()
3274 t << "</td></tr>" << endl;
3277 void HtmlGenerator::endConstraintList()
3279 t << "</table>" << endl;
3280 t << "</dl>" << endl;
3281 t << "</div>" << endl;
3284 void HtmlGenerator::lineBreak(const char *style)
3288 t << "<br class=\"" << style << "\" />" << endl;
3292 t << "<br />" << endl;
3296 void HtmlGenerator::startHeaderSection()
3298 t << "<div class=\"header\">" << endl;
3301 void HtmlGenerator::startTitleHead(const char *)
3303 t << " <div class=\"headertitle\">" << endl;
3307 void HtmlGenerator::endTitleHead(const char *,const char *)
3310 t << " </div>" << endl;
3313 void HtmlGenerator::endHeaderSection()
3315 t << "</div><!--header-->" << endl;
3318 void HtmlGenerator::startInlineHeader()
3322 t << "<table class=\"memberdecls\">" << endl;
3323 m_emptySection=FALSE;
3325 t << "<tr><td colspan=\"2\"><h3>";
3328 void HtmlGenerator::endInlineHeader()
3330 t << "</h3></td></tr>" << endl;
3333 void HtmlGenerator::startMemberDocSimple()
3335 DBG_HTML(t << "<!-- startMemberDocSimple -->" << endl;)
3336 t << "<table class=\"fieldtable\">" << endl;
3337 t << "<tr><th colspan=\"3\">" << theTranslator->trCompoundMembers() << "</th></tr>" << endl;
3340 void HtmlGenerator::endMemberDocSimple()
3342 DBG_HTML(t << "<!-- endMemberDocSimple -->" << endl;)
3343 t << "</table>" << endl;
3346 void HtmlGenerator::startInlineMemberType()
3348 DBG_HTML(t << "<!-- startInlineMemberType -->" << endl;)
3349 t << "<tr><td class=\"fieldtype\">" << endl;
3352 void HtmlGenerator::endInlineMemberType()
3354 DBG_HTML(t << "<!-- endInlineMemberType -->" << endl;)
3355 t << "</td>" << endl;
3358 void HtmlGenerator::startInlineMemberName()
3360 DBG_HTML(t << "<!-- startInlineMemberName -->" << endl;)
3361 t << "<td class=\"fieldname\">" << endl;
3364 void HtmlGenerator::endInlineMemberName()
3366 DBG_HTML(t << "<!-- endInlineMemberName -->" << endl;)
3367 t << "</td>" << endl;
3370 void HtmlGenerator::startInlineMemberDoc()
3372 DBG_HTML(t << "<!-- startInlineMemberDoc -->" << endl;)
3373 t << "<td class=\"fielddoc\">" << endl;
3376 void HtmlGenerator::endInlineMemberDoc()
3378 DBG_HTML(t << "<!-- endInlineMemberDoc -->" << endl;)
3379 t << "</td></tr>" << endl;
3382 void HtmlGenerator::startLabels()
3384 DBG_HTML(t << "<!-- startLabels -->" << endl;)
3385 t << "<span class=\"mlabels\">";
3388 void HtmlGenerator::writeLabel(const char *l,bool /*isLast*/)
3390 DBG_HTML(t << "<!-- writeLabel(" << l << ") -->" << endl;)
3391 //t << "<tt>[" << l << "]</tt>";
3392 //if (!isLast) t << ", ";
3393 t << "<span class=\"mlabel\">" << l << "</span>";
3396 void HtmlGenerator::endLabels()
3398 DBG_HTML(t << "<!-- endLabels -->" << endl;)
3402 void HtmlGenerator::writeInheritedSectionTitle(
3403 const char *id, const char *ref,
3404 const char *file, const char *anchor,
3405 const char *title, const char *name)
3407 DBG_HTML(t << "<!-- writeInheritedSectionTitle -->" << endl;)
3408 QCString a = anchor;
3409 if (!a.isEmpty()) a.prepend("#");
3410 QCString classLink = QCString("<a class=\"el\" href=\"");
3413 classLink+= externalLinkTarget() + externalRef(relPath,ref,TRUE);
3419 classLink+=file+Doxygen::htmlFileExtension+a;
3420 classLink+=QCString("\">")+convertToHtml(name,FALSE)+"</a>";
3421 t << "<tr class=\"inherit_header " << id << "\">"
3422 << "<td colspan=\"2\" onclick=\"javascript:toggleInherit('" << id << "')\">"
3423 << "<img src=\"" << relPath << "closed.png\" alt=\"-\"/> "
3424 << theTranslator->trInheritedFrom(convertToHtml(title,FALSE),classLink)
3425 << "</td></tr>" << endl;
3428 void HtmlGenerator::writeSummaryLink(const char *file,const char *anchor,const char *title,bool first)
3432 t << " <div class=\"summary\">\n";
3441 t << relPath << file;
3442 t << Doxygen::htmlFileExtension;
3454 void HtmlGenerator::endMemberDeclaration(const char *anchor,const char *inheritId)
3456 t << "<tr class=\"separator:" << anchor;
3459 t << " inherit " << inheritId;
3461 t << "\"><td class=\"memSeparator\" colspan=\"2\"> </td></tr>\n";
3464 void HtmlGenerator::setCurrentDoc(Definition *context,const char *anchor,bool isSourceFile)
3466 if (Doxygen::searchIndex)
3468 Doxygen::searchIndex->setCurrentDoc(context,anchor,isSourceFile);
3472 void HtmlGenerator::addWord(const char *word,bool hiPriority)
3474 if (Doxygen::searchIndex)
3476 Doxygen::searchIndex->addWord(word,hiPriority);