|
1 /****************************************************************************** |
|
2 * |
|
3 * |
|
4 * |
|
5 * Copyright (C) 1997-2008 by Dimitri van Heesch. |
|
6 * |
|
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. |
|
12 * |
|
13 * Documents produced by Doxygen are derivative works derived from the |
|
14 * input used in their production; they are not affected by this license. |
|
15 * |
|
16 */ |
|
17 |
|
18 #include <stdlib.h> |
|
19 |
|
20 #include "qtbc.h" |
|
21 #include <qdir.h> |
|
22 #include "message.h" |
|
23 #include "htmlgen.h" |
|
24 #include "config.h" |
|
25 #include "util.h" |
|
26 #include "doxygen.h" |
|
27 #include "logos.h" |
|
28 #include "diagram.h" |
|
29 #include "version.h" |
|
30 #include "dot.h" |
|
31 #include "language.h" |
|
32 #include "htmlhelp.h" |
|
33 #include "docparser.h" |
|
34 #include "htmldocvisitor.h" |
|
35 #include "index.h" |
|
36 #include "pagedef.h" |
|
37 #include "debug.h" |
|
38 #include "dirdef.h" |
|
39 #include "vhdldocgen.h" |
|
40 #include "layout.h" |
|
41 |
|
42 // #define GROUP_COLOR "#ff8080" |
|
43 |
|
44 //#define DBG_HTML(x) x; |
|
45 #define DBG_HTML(x) |
|
46 |
|
47 static const char defaultStyleSheet[] = |
|
48 #include "doxygen_css.h" |
|
49 ; |
|
50 |
|
51 static const char search_script[]= |
|
52 #include "search_php.h" |
|
53 ; |
|
54 |
|
55 static QCString g_header; |
|
56 static QCString g_footer; |
|
57 |
|
58 //------------------------- Pictures for the Tabs ------------------------ |
|
59 |
|
60 static unsigned char tab_b_gif[] = { |
|
61 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x80, 0x00, |
|
62 0x00, 0x84, 0xb0, 0xc7, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, |
|
63 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x02, 0x44, 0x01, 0x00, 0x3b |
|
64 }; |
|
65 static unsigned int tab_b_gif_len = 35; |
|
66 |
|
67 static unsigned char tab_l_gif[] = { |
|
68 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x2c, 0x01, 0xd5, 0x00, |
|
69 0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, |
|
70 0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef, |
|
71 0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2, |
|
72 0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee, |
|
73 0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2, |
|
74 0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4, |
|
75 0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4, |
|
76 0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1, |
|
77 0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0, |
|
78 0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb, |
|
79 0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc, |
|
80 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
81 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
82 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
83 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
84 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
85 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x2c, 0x01, 0x00, 0x06, |
|
86 0xff, 0x40, 0x96, 0x50, 0xb1, 0xc9, 0x60, 0x48, 0x24, 0x21, 0x25, 0x43, |
|
87 0x71, 0x00, 0x56, 0x03, 0x16, 0x65, 0x32, 0x1a, 0x58, 0xad, 0x8a, 0xcc, |
|
88 0x08, 0x4a, 0x28, 0x08, 0x04, 0x93, 0xc4, 0xa0, 0x2b, 0x80, 0x98, 0x33, |
|
89 0x0d, 0x32, 0x24, 0xc0, 0xc6, 0x20, 0xbc, 0x6b, 0x76, 0x8a, 0xe4, 0x2d, |
|
90 0xcb, 0xe7, 0xf5, 0x75, 0x2a, 0x85, 0x22, 0x7d, 0xe3, 0x7c, 0x7d, 0x7f, |
|
91 0x01, 0x7c, 0x07, 0x07, 0x7e, 0x71, 0x28, 0x0f, 0x22, 0x0c, 0x24, 0x66, |
|
92 0x84, 0x07, 0x0c, 0x0c, 0x27, 0x8e, 0x6c, 0x28, 0x8c, 0x26, 0x26, 0x24, |
|
93 0x72, 0x91, 0x99, 0x0b, 0x9b, 0x90, 0x0c, 0x26, 0x0b, 0x21, 0xa0, 0x29, |
|
94 0x0f, 0xa2, 0xa4, 0x9b, 0x7b, 0xa8, 0xa3, 0xa5, 0x72, 0xad, 0xaa, 0xb0, |
|
95 0xa9, 0xaf, 0x84, 0xb1, 0xaf, 0xac, 0xb4, 0xa6, 0xb7, 0xbb, 0xba, 0xb3, |
|
96 0xae, 0xab, 0xa7, 0xbe, 0xb6, 0xc3, 0xc2, 0xc0, 0xbf, 0xb2, 0xb9, 0xc7, |
|
97 0xc4, 0xcb, 0xc6, 0xb2, 0xcc, 0xc9, 0xce, 0xb5, 0xd2, 0xbd, 0xcd, 0xbc, |
|
98 0x84, 0xd4, 0xc8, 0xd3, 0xd7, 0xd0, 0xb8, 0xd9, 0xdd, 0xd5, 0xcf, 0xd9, |
|
99 0xca, 0xe2, 0xdc, 0xdf, 0xe3, 0xe7, 0xe6, 0xea, 0xbe, 0xe4, 0xdb, 0xc5, |
|
100 0xeb, 0xc7, 0xed, 0xe1, 0xee, 0xd6, 0xec, 0xe9, 0xef, 0xf8, 0xf1, 0xf7, |
|
101 0xf5, 0xfc, 0xd1, 0xf0, 0xe5, 0xf9, 0xfc, 0x05, 0xa4, 0x07, 0x50, 0xdf, |
|
102 0x3f, 0x82, 0x08, 0x83, 0x1d, 0x9c, 0xc7, 0x10, 0xdb, 0x42, 0x6d, 0x0d, |
|
103 0xe5, 0x41, 0x9c, 0x08, 0xce, 0xe1, 0xc0, 0x86, 0x15, 0x25, 0x56, 0xdc, |
|
104 0x88, 0xee, 0x21, 0xc7, 0x6b, 0x1a, 0xf7, 0x15, 0x14, 0xd8, 0x2f, 0xe1, |
|
105 0xc4, 0x90, 0x1e, 0x3b, 0x5e, 0xa4, 0xa8, 0xb2, 0x24, 0xc6, 0x96, 0x23, |
|
106 0x4d, 0x66, 0x14, 0x29, 0x13, 0x66, 0xcd, 0x87, 0x28, 0x57, 0xce, 0x4c, |
|
107 0x89, 0x93, 0xe6, 0x4b, 0xe7, 0x90, 0xd2, 0x84, 0xb0, 0x20, 0x92, 0x01, |
|
108 0x49, 0x12, 0x29, 0x4c, 0x1c, 0x18, 0x10, 0x3a, 0x65, 0x44, 0x0b, 0xa1, |
|
109 0x43, 0xb5, 0xb4, 0x78, 0x2a, 0x34, 0x0c, 0x55, 0xa8, 0x68, 0xa0, 0x0a, |
|
110 0x25, 0x11, 0x41, 0xab, 0x90, 0xa3, 0x5e, 0xc1, 0x4e, 0x1d, 0x4b, 0x62, |
|
111 0xac, 0xd9, 0x16, 0x65, 0xa7, 0x0e, 0x58, 0xb1, 0x82, 0x00, 0x81, 0xb4, |
|
112 0x6b, 0xbb, 0x78, 0x21, 0xc1, 0xd6, 0xed, 0x97, 0x32, 0x74, 0xdd, 0xd6, |
|
113 0x09, 0x00, 0x21, 0xaf, 0x9a, 0x35, 0x74, 0xdb, 0xe6, 0xe9, 0x1b, 0x97, |
|
114 0xc0, 0x5d, 0x01, 0x24, 0xac, 0xb4, 0x25, 0x83, 0x58, 0xed, 0xe2, 0x2e, |
|
115 0x69, 0x5b, 0xac, 0x5d, 0x1c, 0x59, 0xad, 0x95, 0xca, 0x66, 0x8f, 0x9e, |
|
116 0x45, 0xeb, 0xf5, 0x6b, 0x67, 0x16, 0x60, 0xb5, 0x86, 0x86, 0x3a, 0x7a, |
|
117 0xeb, 0xe7, 0xd2, 0x9e, 0x3b, 0xa3, 0x06, 0x7d, 0xba, 0xb5, 0x6a, 0xd7, |
|
118 0x61, 0x61, 0x8b, 0x96, 0x4d, 0x9a, 0xb6, 0xe9, 0xd7, 0xb8, 0x63, 0xe7, |
|
119 0x9e, 0xbd, 0xbb, 0x76, 0xef, 0xdb, 0xba, 0x83, 0xf3, 0x16, 0xee, 0x9b, |
|
120 0x38, 0xf0, 0xe1, 0xc8, 0x8b, 0x27, 0x3f, 0xae, 0xbc, 0x39, 0xf3, 0xe7, |
|
121 0xa9, 0x8d, 0x47, 0x5f, 0x3e, 0xdd, 0x79, 0x75, 0xe8, 0xac, 0x7f, 0x5f, |
|
122 0xdf, 0x9e, 0x5d, 0x7a, 0x77, 0xea, 0xdf, 0xad, 0x87, 0xc7, 0xbe, 0xba, |
|
123 0xbc, 0x6d, 0xee, 0xe6, 0xb5, 0x8f, 0x47, 0x7f, 0x7e, 0xbd, 0xfb, 0xf4, |
|
124 0xde, 0xe1, 0x83, 0x97, 0x2f, 0x9e, 0x3e, 0xf9, 0xf6, 0xf6, 0xd9, 0xab, |
|
125 0xcf, 0xff, 0x1e, 0xbf, 0xff, 0xfd, 0xff, 0xc5, 0x17, 0xe0, 0x7c, 0x03, |
|
126 0xd6, 0x57, 0xe0, 0x7d, 0x00, 0x76, 0x16, 0x04, 0x00, 0x3b |
|
127 }; |
|
128 static unsigned int tab_l_gif_len = 706; |
|
129 |
|
130 static unsigned char tab_r_gif[] = { |
|
131 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x90, 0x01, 0x2c, 0x01, 0xd5, 0x00, |
|
132 0x00, 0xf6, 0xf7, 0xf9, 0xf1, 0xf4, 0xf7, 0xf6, 0xf8, 0xfa, 0xfc, 0xfd, |
|
133 0xfe, 0xfa, 0xfb, 0xfc, 0xf9, 0xfa, 0xfb, 0xf8, 0xf9, 0xfa, 0xea, 0xef, |
|
134 0xf3, 0xef, 0xf3, 0xf6, 0xc6, 0xd5, 0xdf, 0xd2, 0xde, 0xe6, 0xd8, 0xe2, |
|
135 0xe9, 0xde, 0xe7, 0xed, 0xdd, 0xe6, 0xec, 0xe5, 0xec, 0xf1, 0xe8, 0xee, |
|
136 0xf2, 0xf4, 0xf7, 0xf9, 0xf3, 0xf6, 0xf8, 0xb3, 0xc8, 0xd5, 0xc1, 0xd2, |
|
137 0xdd, 0xcb, 0xd9, 0xe2, 0xcf, 0xdc, 0xe4, 0xd6, 0xe1, 0xe8, 0x96, 0xb4, |
|
138 0xc5, 0x9d, 0xb9, 0xc9, 0xaf, 0xc2, 0xcd, 0xbb, 0xce, 0xd9, 0xc3, 0xd4, |
|
139 0xde, 0xc2, 0xd3, 0xdd, 0xc8, 0xd7, 0xe0, 0xcc, 0xda, 0xe2, 0xd5, 0xe1, |
|
140 0xe8, 0xd9, 0xe4, 0xea, 0xd7, 0xe2, 0xe8, 0xe5, 0xec, 0xf0, 0xeb, 0xf0, |
|
141 0xf3, 0x84, 0xb0, 0xc7, 0xd1, 0xde, 0xe5, 0xdc, 0xe6, 0xeb, 0xe3, 0xeb, |
|
142 0xef, 0xeb, 0xf1, 0xf4, 0xee, 0xf3, 0xf5, 0xf7, 0xfa, 0xfb, 0xfb, 0xfc, |
|
143 0xfc, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
144 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
147 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, |
|
148 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x2c, 0x01, 0x00, 0x06, |
|
149 0xff, 0x40, 0x92, 0x70, 0x48, 0x2c, 0x1a, 0x8f, 0xc8, 0xa4, 0x72, 0xc9, |
|
150 0x6c, 0x3a, 0x9f, 0xd0, 0xa8, 0x74, 0x4a, 0xad, 0x5a, 0xaf, 0xd8, 0xac, |
|
151 0x76, 0x0b, 0x95, 0x68, 0x3c, 0xac, 0x70, 0x6b, 0x4c, 0x2e, 0x9b, 0xcf, |
|
152 0xe8, 0xb4, 0x7a, 0xcd, 0x6e, 0xbb, 0xdf, 0xf0, 0xb8, 0x7c, 0x4e, 0xaf, |
|
153 0xdb, 0xef, 0xf8, 0xbc, 0x7e, 0xcf, 0x77, 0x0f, 0x56, 0x10, 0x16, 0x1a, |
|
154 0x17, 0x1c, 0x61, 0x2b, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, |
|
155 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, |
|
156 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0x93, 0x2a, 0x10, 0x01, 0x29, 0x15, |
|
157 0x5e, 0x2c, 0x2a, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, |
|
158 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, |
|
159 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xb6, 0x10, 0x10, 0x29, 0x0f, 0x27, 0x1d, |
|
160 0x17, 0x15, 0xc6, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, |
|
161 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, |
|
162 0xe3, 0xe4, 0xe5, 0xe6, 0xda, 0xa5, 0x28, 0x22, 0x0c, 0x0c, 0x12, 0x12, |
|
163 0x01, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, |
|
164 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 0x00, 0x03, 0x0a, 0x1c, 0x48, 0xb0, 0xa0, |
|
165 0xc1, 0x83, 0x08, 0x13, 0xf2, 0x4b, 0x81, 0x22, 0x19, 0x03, 0x13, 0x83, |
|
166 0x52, 0x48, 0x9c, 0x48, 0xb1, 0xa2, 0xc5, 0x8b, 0x18, 0x33, 0x6a, 0xdc, |
|
167 0xc8, 0xb1, 0xa3, 0xc7, 0x8f, 0x20, 0x43, 0x8a, 0x1c, 0x49, 0xb2, 0xa4, |
|
168 0xc9, 0x93, 0x28, 0x53, 0xaa, 0x5c, 0xe9, 0x11, 0xc5, 0x81, 0x75, 0x26, |
|
169 0x40, 0x80, 0x20, 0xc1, 0xb2, 0xa6, 0xcd, 0x9b, 0x38, 0x73, 0xea, 0xdc, |
|
170 0xc9, 0xb3, 0xa7, 0x4f, 0xff, 0x96, 0x28, 0x1a, 0xc2, 0x04, 0xb1, 0x80, |
|
171 0x44, 0xd0, 0xa3, 0x48, 0x93, 0x2a, 0x5d, 0xca, 0xb4, 0xa9, 0xd3, 0xa7, |
|
172 0x50, 0xa3, 0x4a, 0x9d, 0x4a, 0xb5, 0xaa, 0xd5, 0xab, 0x58, 0xb3, 0x6a, |
|
173 0xdd, 0xca, 0xb5, 0xab, 0xd7, 0xaf, 0x53, 0x0f, 0x38, 0x34, 0xb1, 0x20, |
|
174 0x04, 0x89, 0x03, 0x68, 0xd3, 0xaa, 0x5d, 0xcb, 0xb6, 0xad, 0xdb, 0xb7, |
|
175 0x70, 0xe3, 0xca, 0x9d, 0x4b, 0xb7, 0xae, 0xdd, 0xbb, 0x78, 0xf3, 0xea, |
|
176 0xdd, 0xcb, 0xb7, 0xaf, 0xdf, 0xbf, 0x80, 0x03, 0xd3, 0x7d, 0x20, 0xe2, |
|
177 0x44, 0xcc, 0x10, 0x66, 0x1f, 0x28, 0x5e, 0xcc, 0xb8, 0xb1, 0xe3, 0xc7, |
|
178 0x90, 0x23, 0x4b, 0x9e, 0x4c, 0xb9, 0xb2, 0xe5, 0xcb, 0x98, 0x33, 0x6b, |
|
179 0xde, 0xcc, 0xb9, 0xb3, 0xe7, 0xcf, 0xa0, 0x43, 0x8b, 0x1e, 0x6d, 0xb9, |
|
180 0xf0, 0x43, 0xc4, 0x1f, 0x48, 0x9c, 0x58, 0xcd, 0xba, 0xb5, 0xeb, 0xd7, |
|
181 0xb0, 0x63, 0xcb, 0x9e, 0x4d, 0xbb, 0xb6, 0xed, 0xdb, 0xb8, 0x73, 0xeb, |
|
182 0xde, 0xcd, 0xbb, 0xb7, 0xef, 0xdf, 0xc0, 0x83, 0x0b, 0x1f, 0x4e, 0x1c, |
|
183 0xf7, 0xc3, 0x05, 0x1f, 0x4a, 0x94, 0x20, 0xc1, 0xae, 0xb9, 0xf3, 0xe7, |
|
184 0xd0, 0xa3, 0x4b, 0x9f, 0x4e, 0xbd, 0xba, 0xf5, 0xeb, 0xd8, 0xb3, 0x6b, |
|
185 0xdf, 0xce, 0xbd, 0xbb, 0xf7, 0xef, 0xe0, 0xc3, 0x8b, 0x1f, 0x4f, 0xbe, |
|
186 0x3c, 0x76, 0x13, 0x31, 0x91, 0x2b, 0x5f, 0x2e, 0xb3, 0xbd, 0xfb, 0xf7, |
|
187 0xf0, 0xe3, 0xcb, 0x9f, 0x4f, 0xbf, 0xbe, 0xfd, 0xfb, 0xf8, 0xf3, 0xeb, |
|
188 0xdf, 0xcf, 0xbf, 0xbf, 0xff, 0xff, 0x00, 0x06, 0x28, 0xe0, 0x80, 0x04, |
|
189 0x16, 0x98, 0x5f, 0x59, 0xc9, 0x95, 0x40, 0xc1, 0x72, 0x88, 0x35, 0xe8, |
|
190 0xe0, 0x83, 0x10, 0x46, 0x28, 0xe1, 0x84, 0x14, 0x56, 0x68, 0xe1, 0x85, |
|
191 0x18, 0x66, 0xa8, 0xe1, 0x86, 0x1c, 0x76, 0xe8, 0xff, 0xe1, 0x87, 0x20, |
|
192 0x86, 0x28, 0xe2, 0x88, 0x24, 0x96, 0xa8, 0x61, 0x82, 0x14, 0xa4, 0x48, |
|
193 0x82, 0x89, 0x2c, 0xb6, 0xe8, 0xe2, 0x8b, 0x30, 0xc6, 0x28, 0xe3, 0x8c, |
|
194 0x34, 0xd6, 0x68, 0xe2, 0x07, 0x09, 0x2a, 0xa8, 0x22, 0x8e, 0x3c, 0xf6, |
|
195 0xe8, 0xe3, 0x8f, 0x40, 0x06, 0x29, 0xe4, 0x90, 0x44, 0x16, 0x69, 0xe4, |
|
196 0x91, 0x48, 0x26, 0xa9, 0xe4, 0x92, 0x4c, 0x36, 0xe9, 0xe4, 0x93, 0x50, |
|
197 0x46, 0x29, 0xe5, 0x94, 0x54, 0x26, 0xa9, 0x5c, 0x8a, 0x3b, 0x56, 0xa9, |
|
198 0xe5, 0x96, 0x5c, 0x76, 0xe9, 0xe5, 0x97, 0x60, 0x86, 0x29, 0xe6, 0x98, |
|
199 0x5a, 0x5e, 0x89, 0x25, 0x09, 0x64, 0xa6, 0xa9, 0xe6, 0x9a, 0x6c, 0xb6, |
|
200 0xe9, 0xe6, 0x9b, 0x70, 0xfe, 0x68, 0x66, 0x96, 0x71, 0xd6, 0x69, 0xe7, |
|
201 0x9d, 0x78, 0xe6, 0xa9, 0xe7, 0x97, 0x73, 0x52, 0x80, 0xe6, 0x9e, 0x80, |
|
202 0x06, 0x2a, 0xe8, 0xa0, 0x84, 0xc2, 0xd9, 0xe7, 0x9f, 0x85, 0x26, 0xaa, |
|
203 0xe8, 0xa2, 0x8c, 0x36, 0x3a, 0xe4, 0xa1, 0x8e, 0x46, 0x2a, 0xe9, 0xa4, |
|
204 0x94, 0xc6, 0x09, 0x69, 0xa5, 0x98, 0x66, 0xaa, 0xe9, 0xa6, 0x4f, 0x5e, |
|
205 0xca, 0xe9, 0xa7, 0xa0, 0x86, 0xca, 0xa9, 0xa7, 0xa2, 0x96, 0x6a, 0xea, |
|
206 0xa9, 0x84, 0x92, 0x8a, 0xea, 0xaa, 0xac, 0xb6, 0xca, 0xa6, 0xaa, 0xae, |
|
207 0xc6, 0x2a, 0xeb, 0xac, 0x53, 0xc2, 0x4a, 0xeb, 0xad, 0xb8, 0xe6, 0x2a, |
|
208 0xa4, 0xad, 0xba, 0xf6, 0xea, 0xeb, 0xac, 0xbc, 0xfe, 0x2a, 0xec, 0xb0, |
|
209 0xa5, 0x06, 0x4b, 0xec, 0xb1, 0xc8, 0x56, 0x6a, 0x6c, 0xb2, 0xcc, 0x36, |
|
210 0x9b, 0xe8, 0xb2, 0xce, 0x46, 0x2b, 0x2d, 0x9e, 0xd0, 0x4e, 0x6b, 0xed, |
|
211 0xb5, 0x6b, 0x56, 0x8b, 0xed, 0xb6, 0xdc, 0x76, 0xa9, 0x6d, 0xb7, 0xe0, |
|
212 0x86, 0xdb, 0xa9, 0x8e, 0x74, 0x8a, 0x6b, 0xee, 0xb9, 0x51, 0x7e, 0x8b, |
|
213 0xff, 0xee, 0xba, 0xec, 0xf2, 0xa8, 0x6e, 0xbb, 0xf0, 0x9a, 0xfb, 0x6e, |
|
214 0xbc, 0xf4, 0x72, 0x3b, 0x6f, 0xbd, 0xf8, 0x4e, 0x7b, 0x6f, 0xbe, 0xfc, |
|
215 0x32, 0xbb, 0x6f, 0xbf, 0x00, 0x0f, 0xfb, 0x6f, 0xc0, 0x04, 0xeb, 0x3a, |
|
216 0x70, 0xc1, 0x08, 0x03, 0x4b, 0xae, 0x9f, 0x09, 0x37, 0x1c, 0xed, 0xc1, |
|
217 0x0e, 0x47, 0x6c, 0x2a, 0xc4, 0x12, 0x57, 0xfc, 0x29, 0xc5, 0x16, 0x67, |
|
218 0x8c, 0x29, 0xc6, 0x1a, 0x77, 0x1c, 0x29, 0xc7, 0x1e, 0x87, 0xac, 0x28, |
|
219 0xc8, 0x22, 0x97, 0x2c, 0x28, 0xc9, 0x26, 0xa7, 0x9c, 0x27, 0xca, 0x2a, |
|
220 0xb7, 0x6c, 0xe9, 0xc2, 0x88, 0xba, 0x2c, 0x33, 0xa5, 0x2c, 0xcf, 0x6c, |
|
221 0x33, 0x99, 0x35, 0xdf, 0xac, 0x33, 0x9f, 0x30, 0xef, 0xec, 0xf3, 0xb3, |
|
222 0x3d, 0xff, 0x2c, 0x74, 0xa0, 0x39, 0x0f, 0x6d, 0xb4, 0x93, 0x45, 0x1f, |
|
223 0xad, 0xb4, 0x95, 0x41, 0x2f, 0xed, 0x74, 0x9b, 0x49, 0x3f, 0x2d, 0x35, |
|
224 0x90, 0x51, 0x4f, 0x6d, 0x35, 0x8e, 0x55, 0x5f, 0x3d, 0x75, 0xd6, 0x5a, |
|
225 0x3f, 0xcd, 0x75, 0xd7, 0x4b, 0x7f, 0x0d, 0xf6, 0xd1, 0x62, 0x8f, 0x3d, |
|
226 0x74, 0xd9, 0x66, 0xff, 0x8c, 0x76, 0xda, 0x3b, 0xaf, 0xcd, 0xf6, 0xcd, |
|
227 0x6e, 0xbf, 0x3d, 0x73, 0xdc, 0x72, 0xbb, 0x4c, 0x77, 0xdd, 0x2a, 0xdf, |
|
228 0x8d, 0xb7, 0xc9, 0x7a, 0xef, 0x2d, 0x72, 0xdf, 0x7e, 0x7b, 0x0c, 0x78, |
|
229 0xe0, 0x1a, 0x0f, 0x4e, 0xb8, 0xc5, 0x86, 0x1f, 0x2e, 0x71, 0xe2, 0x8a, |
|
230 0x3b, 0xcc, 0x78, 0xe3, 0x09, 0x3f, 0x0e, 0x79, 0xc1, 0x92, 0x4f, 0x1e, |
|
231 0x70, 0xe5, 0x96, 0xf7, 0x8b, 0x79, 0xe6, 0xf9, 0x6e, 0xce, 0x79, 0xbd, |
|
232 0x9e, 0x7f, 0x1e, 0x6f, 0xe8, 0xa2, 0xb7, 0x4b, 0x7a, 0xe9, 0xeb, 0x9e, |
|
233 0x8e, 0xfa, 0xb9, 0xaa, 0xaf, 0x2e, 0x6e, 0xeb, 0xae, 0x83, 0x0b, 0x7b, |
|
234 0xec, 0xf6, 0x36, 0x4d, 0xff, 0xbb, 0xd6, 0xb3, 0xdf, 0x7e, 0x6d, 0xee, |
|
235 0xba, 0xeb, 0x6b, 0x7b, 0xef, 0x52, 0xf3, 0x0e, 0xbc, 0xb3, 0xc2, 0x0f, |
|
236 0xef, 0xef, 0xef, 0xc6, 0x2b, 0x5d, 0x7c, 0xf2, 0xc7, 0x2e, 0xcf, 0xbc, |
|
237 0xc0, 0xc8, 0x3f, 0x2f, 0xb4, 0xf3, 0xd2, 0xfb, 0x4a, 0x7d, 0xf5, 0x06, |
|
238 0x47, 0x8f, 0xbd, 0xce, 0xd7, 0x6f, 0x7f, 0x6b, 0xf7, 0xde, 0x2b, 0x8c, |
|
239 0x25, 0xc3, 0xe1, 0xab, 0xad, 0x7d, 0xf9, 0x76, 0x9f, 0x8f, 0x7e, 0xde, |
|
240 0xea, 0xaf, 0xcf, 0x77, 0xfb, 0xee, 0xff, 0x0d, 0x7f, 0xfc, 0x82, 0xcf, |
|
241 0x4f, 0x7f, 0xe1, 0xf6, 0xdf, 0x8f, 0x78, 0xfe, 0xfa, 0x2f, 0xce, 0x7f, |
|
242 0xff, 0x8e, 0xfb, 0x1f, 0x00, 0x23, 0x27, 0xc0, 0x01, 0x52, 0xae, 0x80, |
|
243 0x06, 0xbc, 0x1c, 0x02, 0x13, 0xa8, 0xb9, 0x05, 0x32, 0xb0, 0x73, 0x0e, |
|
244 0x7c, 0x20, 0xe8, 0x22, 0x28, 0xc1, 0xd1, 0x51, 0xb0, 0x82, 0xa6, 0xbb, |
|
245 0x20, 0x06, 0x53, 0xa7, 0xc1, 0x0d, 0xb2, 0xae, 0x83, 0x1e, 0x7c, 0x1d, |
|
246 0x08, 0x43, 0x28, 0xbb, 0x11, 0x92, 0xb0, 0x76, 0xe3, 0x8b, 0xd9, 0x09, |
|
247 0x09, 0x98, 0xc2, 0x15, 0x46, 0x0c, 0x7c, 0x2e, 0x64, 0x14, 0x0c, 0x63, |
|
248 0x38, 0x32, 0x13, 0xd2, 0x50, 0x5a, 0x33, 0xbc, 0x61, 0xaa, 0x6c, 0xa8, |
|
249 0xc3, 0x66, 0xe5, 0xb0, 0x87, 0x44, 0xe3, 0x21, 0x10, 0x91, 0xf5, 0xc3, |
|
250 0x21, 0xea, 0xa9, 0x88, 0x46, 0xa4, 0x96, 0x10, 0x93, 0x28, 0x2c, 0x24, |
|
251 0x32, 0xb1, 0x4e, 0x4e, 0x7c, 0xa2, 0xa1, 0x96, 0x28, 0xc5, 0xec, 0xb5, |
|
252 0xb0, 0x8a, 0x16, 0x4c, 0x21, 0x17, 0xb6, 0xc8, 0xc5, 0x2e, 0x7a, 0xf1, |
|
253 0x8b, 0x60, 0x0c, 0xa3, 0x18, 0xc7, 0x48, 0xc6, 0x2e, 0x7a, 0x01, 0x0c, |
|
254 0x61, 0x48, 0xa3, 0x1a, 0xd7, 0xc8, 0xc6, 0x36, 0xba, 0xf1, 0x8d, 0x70, |
|
255 0x8c, 0xa3, 0x1c, 0xe7, 0x48, 0xc7, 0x3a, 0xda, 0xff, 0xf1, 0x8e, 0x78, |
|
256 0xcc, 0xa3, 0x1e, 0xf7, 0xc8, 0xc7, 0x3e, 0xfa, 0xf1, 0x8f, 0x80, 0x0c, |
|
257 0x64, 0x1d, 0xc7, 0x40, 0x80, 0x00, 0x08, 0x82, 0x10, 0x82, 0x4c, 0xa4, |
|
258 0x22, 0x17, 0xc9, 0xc8, 0x46, 0x3a, 0xf2, 0x91, 0x90, 0x8c, 0xa4, 0x24, |
|
259 0x13, 0x39, 0x86, 0x02, 0x08, 0x20, 0x00, 0x28, 0x38, 0x85, 0x06, 0x26, |
|
260 0xc9, 0xc9, 0x4e, 0x7a, 0xf2, 0x93, 0xa0, 0x0c, 0xa5, 0x28, 0x47, 0xa9, |
|
261 0x46, 0x42, 0x5e, 0xb2, 0x21, 0xcb, 0xa8, 0x00, 0x29, 0x57, 0xc9, 0xca, |
|
262 0x56, 0xba, 0xf2, 0x95, 0xb0, 0x6c, 0xa4, 0x29, 0x31, 0x99, 0x0c, 0x77, |
|
263 0xc4, 0xf2, 0x96, 0xb8, 0xcc, 0xa5, 0x2e, 0x77, 0x19, 0xca, 0x59, 0xba, |
|
264 0xe4, 0x01, 0x83, 0xe0, 0xa5, 0x30, 0x87, 0x49, 0xcc, 0x62, 0x1a, 0xf3, |
|
265 0x8d, 0xbe, 0x7c, 0xc9, 0x03, 0x48, 0x70, 0xcc, 0x66, 0x3a, 0xf3, 0x99, |
|
266 0xd0, 0xec, 0x65, 0x0b, 0x08, 0x70, 0x4a, 0xb1, 0x88, 0x80, 0x04, 0x7d, |
|
267 0xc8, 0xa6, 0x36, 0xb7, 0xc9, 0xcd, 0x6e, 0x7a, 0xf3, 0x9b, 0xe0, 0x0c, |
|
268 0xa7, 0x38, 0xfb, 0x30, 0x00, 0x02, 0x90, 0xc2, 0x25, 0x22, 0xb8, 0xe6, |
|
269 0x38, 0xd7, 0xc9, 0xce, 0x76, 0xba, 0xf3, 0x9d, 0xf0, 0x8c, 0xa7, 0x3c, |
|
270 0xc9, 0x50, 0xce, 0x51, 0x60, 0xf2, 0x25, 0xd7, 0x24, 0x80, 0x3e, 0xf7, |
|
271 0xc9, 0xcf, 0x7e, 0xfa, 0xf3, 0x9f, 0x00, 0x0d, 0xa8, 0x40, 0x07, 0x4a, |
|
272 0xd0, 0x82, 0x1a, 0xf4, 0xa0, 0x08, 0x4d, 0xa8, 0x42, 0x17, 0xca, 0xd0, |
|
273 0x86, 0x3a, 0xf4, 0xa1, 0x10, 0x8d, 0xa8, 0x44, 0x27, 0x5a, 0x50, 0x4b, |
|
274 0x46, 0x20, 0x05, 0xd6, 0xbc, 0x26, 0x31, 0x36, 0xca, 0xd1, 0x8e, 0x7a, |
|
275 0xf4, 0xa3, 0x20, 0x0d, 0xa9, 0x48, 0x47, 0x4a, 0x52, 0x62, 0x08, 0x20, |
|
276 0x02, 0xf7, 0x4c, 0xe7, 0x35, 0xcf, 0xc1, 0xd2, 0x96, 0xba, 0xf4, 0xa5, |
|
277 0xff, 0x30, 0x8d, 0xa9, 0x4c, 0x67, 0x4a, 0xd3, 0x9a, 0x9a, 0x23, 0x02, |
|
278 0x28, 0x65, 0x08, 0x3e, 0xaf, 0x89, 0xd3, 0x9e, 0xfa, 0xf4, 0xa7, 0x40, |
|
279 0x0d, 0xaa, 0x50, 0x87, 0x4a, 0xd4, 0xa2, 0x1a, 0xf5, 0xa8, 0x48, 0x4d, |
|
280 0xaa, 0x52, 0x97, 0xca, 0xd4, 0xa6, 0x3a, 0xf5, 0xa9, 0x50, 0x8d, 0xaa, |
|
281 0x54, 0xa7, 0x4a, 0xd5, 0xaa, 0x26, 0x35, 0x1d, 0x3b, 0x25, 0x81, 0x55, |
|
282 0xb7, 0xca, 0xd5, 0xae, 0x7a, 0xf5, 0xab, 0x60, 0x0d, 0xab, 0x58, 0xc7, |
|
283 0x4a, 0x56, 0xab, 0xc2, 0x43, 0xa7, 0x8b, 0xd1, 0x6a, 0x59, 0xd7, 0xca, |
|
284 0xd6, 0xb6, 0xba, 0xf5, 0xad, 0x70, 0x8d, 0xab, 0x5c, 0x7f, 0x8a, 0x55, |
|
285 0xb4, 0x90, 0xc0, 0xa6, 0x78, 0xcd, 0xab, 0x5e, 0xf7, 0xca, 0xd7, 0xbe, |
|
286 0xfa, 0xf5, 0xaf, 0xd0, 0xc0, 0x69, 0x29, 0x24, 0x82, 0x02, 0x12, 0x94, |
|
287 0xf4, 0xb0, 0x88, 0x4d, 0xac, 0x62, 0x17, 0xcb, 0xd8, 0xc6, 0x3a, 0x76, |
|
288 0x15, 0x02, 0x88, 0x2c, 0x04, 0x04, 0x0b, 0x0f, 0x12, 0x14, 0xe0, 0xb2, |
|
289 0x98, 0xcd, 0xac, 0x66, 0x37, 0xcb, 0xd9, 0xce, 0x7a, 0xf6, 0xb3, 0xa0, |
|
290 0x0d, 0xad, 0x68, 0x47, 0x4b, 0xda, 0xd2, 0x9a, 0xf6, 0xb4, 0xa8, 0x4d, |
|
291 0xad, 0x6a, 0x57, 0xcb, 0xda, 0xd6, 0xba, 0xf6, 0xb5, 0xb0, 0x15, 0xad, |
|
292 0x2a, 0x24, 0xdb, 0x53, 0x12, 0x50, 0xf4, 0xb6, 0xb8, 0xcd, 0xad, 0x6e, |
|
293 0x77, 0xcb, 0xdb, 0xde, 0xfa, 0xf6, 0xb7, 0xc0, 0xc5, 0x6d, 0x01, 0x20, |
|
294 0x2b, 0x00, 0x12, 0x84, 0xe2, 0xb8, 0xc8, 0x4d, 0xae, 0x72, 0x97, 0xcb, |
|
295 0xdc, 0xe6, 0x3a, 0xf7, 0xb9, 0xd0, 0x45, 0xae, 0x3f, 0xb1, 0x39, 0xcf, |
|
296 0xea, 0x5a, 0xf7, 0xba, 0xd8, 0xcd, 0xae, 0x76, 0xbf, 0x39, 0x80, 0xee, |
|
297 0x22, 0x82, 0xba, 0xdb, 0x0d, 0xaf, 0x78, 0xc7, 0x4b, 0xde, 0xf2, 0x62, |
|
298 0x97, 0x99, 0xd1, 0x4c, 0xff, 0xaf, 0x7a, 0xd7, 0xcb, 0x5e, 0x41, 0xa2, |
|
299 0xb7, 0xbd, 0xf0, 0x8d, 0xaf, 0x7c, 0xe7, 0x1b, 0x86, 0xf7, 0xd2, 0xf7, |
|
300 0xbe, 0xf8, 0xcd, 0xaf, 0x30, 0xed, 0xab, 0xdf, 0xfe, 0xfa, 0xf7, 0xbf, |
|
301 0xa1, 0xe4, 0x2f, 0x80, 0x07, 0x4c, 0xe0, 0x02, 0xbb, 0xd7, 0xc0, 0x08, |
|
302 0x4e, 0xb0, 0x82, 0xef, 0x28, 0xe0, 0x05, 0x3b, 0xf8, 0xc1, 0x09, 0x6e, |
|
303 0x30, 0x84, 0x27, 0x4c, 0x61, 0xfd, 0x4a, 0xb8, 0xc2, 0x18, 0xce, 0x30, |
|
304 0x7b, 0x2f, 0xac, 0xe1, 0x0e, 0x7b, 0xd8, 0x98, 0x1c, 0xfe, 0xb0, 0x88, |
|
305 0x47, 0x7c, 0xcb, 0x10, 0x93, 0xf8, 0xc4, 0x28, 0x16, 0xa5, 0x89, 0x53, |
|
306 0xcc, 0xe2, 0x16, 0x43, 0x72, 0xc5, 0x2e, 0x8e, 0xb1, 0x8c, 0x01, 0x09, |
|
307 0xe3, 0x19, 0xdb, 0xf8, 0xc6, 0x76, 0xac, 0x31, 0x8e, 0x77, 0xcc, 0x63, |
|
308 0x36, 0xea, 0xb8, 0xc7, 0x40, 0xde, 0xf1, 0x8f, 0x83, 0x4c, 0x64, 0x19, |
|
309 0x0f, 0xb9, 0xc8, 0x48, 0x4e, 0xf1, 0x91, 0x93, 0xcc, 0x64, 0x11, 0x2f, |
|
310 0xb9, 0xc9, 0x50, 0xce, 0xf0, 0x93, 0xa3, 0x4c, 0x65, 0x08, 0x4f, 0xb9, |
|
311 0xca, 0x58, 0x8e, 0x70, 0x96, 0xb7, 0x7c, 0xe2, 0x2b, 0x73, 0xf9, 0xcb, |
|
312 0xfd, 0xf5, 0x32, 0x98, 0xc7, 0x4c, 0x5f, 0x31, 0x93, 0xf9, 0xcc, 0xed, |
|
313 0x35, 0x33, 0x9a, 0xd7, 0x1c, 0x4d, 0x35, 0xb3, 0xf9, 0xcd, 0xc7, 0x74, |
|
314 0x33, 0x9c, 0xe7, 0xbc, 0x5f, 0x3a, 0xdb, 0xd9, 0xc2, 0x77, 0xce, 0x73, |
|
315 0x99, 0xf5, 0xcc, 0x67, 0xf8, 0xca, 0xb9, 0xcf, 0x80, 0x0e, 0x70, 0xa0, |
|
316 0x07, 0xfd, 0xcc, 0x3f, 0x13, 0xfa, 0xd0, 0x2f, 0x46, 0xb4, 0xa2, 0xeb, |
|
317 0xbc, 0xe8, 0x46, 0xe3, 0xd2, 0xd0, 0x8e, 0x8e, 0x74, 0x1f, 0x21, 0x2d, |
|
318 0xe9, 0x4a, 0xe3, 0x91, 0xd2, 0x96, 0xce, 0xf4, 0x1c, 0x31, 0xad, 0xe9, |
|
319 0x4e, 0xbb, 0x91, 0xd3, 0x9e, 0x0e, 0x75, 0x1a, 0xff, 0x41, 0x2d, 0xea, |
|
320 0x50, 0x93, 0xba, 0xd4, 0x9d, 0x3e, 0x35, 0xaa, 0x33, 0xad, 0xea, 0x55, |
|
321 0x57, 0xba, 0xd5, 0xae, 0x8e, 0x34, 0xac, 0x63, 0xdd, 0xe8, 0x59, 0xd3, |
|
322 0x5a, 0xd1, 0xb6, 0xbe, 0xf5, 0xa1, 0x73, 0xad, 0xeb, 0x41, 0xf3, 0xba, |
|
323 0xd7, 0x80, 0xfe, 0x35, 0xb0, 0xf9, 0x2c, 0xec, 0x61, 0xe7, 0xb9, 0xd8, |
|
324 0xc6, 0xb6, 0x33, 0xb2, 0x93, 0x3d, 0xe7, 0x65, 0x33, 0xfb, 0xcd, 0xce, |
|
325 0x7e, 0xf6, 0x9a, 0xa3, 0x2d, 0xed, 0x33, 0x53, 0xbb, 0xda, 0x63, 0xbe, |
|
326 0x36, 0xb6, 0xbf, 0xac, 0xed, 0x6d, 0x6f, 0xb9, 0xdb, 0xde, 0xc6, 0x32, |
|
327 0xb8, 0xc3, 0x4d, 0xe5, 0x71, 0x93, 0x1b, 0xca, 0xe6, 0x3e, 0x37, 0x93, |
|
328 0xd3, 0xad, 0x6e, 0x24, 0xb3, 0xbb, 0xdd, 0x44, 0x7e, 0x37, 0xbc, 0x81, |
|
329 0x2c, 0xef, 0x79, 0xf3, 0xb8, 0xde, 0xf6, 0xc6, 0x31, 0xbe, 0xf3, 0x6d, |
|
330 0xe3, 0x7d, 0xf3, 0xdb, 0xc8, 0xff, 0x76, 0xb5, 0xbf, 0x03, 0xde, 0xe2, |
|
331 0x81, 0x13, 0x5c, 0xc9, 0x07, 0x2f, 0xb5, 0xc1, 0x13, 0x4e, 0xe2, 0x85, |
|
332 0x33, 0xdc, 0xc9, 0x0f, 0xf7, 0xb4, 0xc3, 0x23, 0xde, 0xe1, 0x89, 0x53, |
|
333 0x5c, 0xca, 0x17, 0x67, 0x75, 0xc6, 0x2d, 0x6d, 0xf1, 0x8d, 0x4f, 0xb8, |
|
334 0xe3, 0x1e, 0x7f, 0x30, 0xc8, 0x43, 0xbe, 0xe0, 0x91, 0x93, 0x5c, 0xcb, |
|
335 0x27, 0x5f, 0xb4, 0xc9, 0x53, 0x5e, 0xe0, 0x95, 0xb3, 0x7c, 0xc0, 0x2e, |
|
336 0x7f, 0xf9, 0x7f, 0x63, 0x2e, 0xf3, 0x30, 0xd7, 0x9c, 0xd0, 0x34, 0xbf, |
|
337 0x39, 0x7e, 0x73, 0xae, 0xf3, 0x3d, 0xf7, 0xbc, 0xcf, 0x3c, 0xff, 0x79, |
|
338 0x7c, 0x83, 0x2e, 0xf4, 0x34, 0x17, 0x5d, 0xcf, 0x44, 0x3f, 0xba, 0x7a, |
|
339 0x93, 0xae, 0xf4, 0x36, 0x37, 0x5d, 0xd9, 0x4f, 0xa7, 0x33, 0xd3, 0xa3, |
|
340 0xde, 0xcc, 0xa9, 0x53, 0x1d, 0xc4, 0x57, 0x87, 0x76, 0xd6, 0xd9, 0x6c, |
|
341 0x3e, 0xf5, 0xad, 0x33, 0xda, 0xeb, 0x64, 0xee, 0x3a, 0xd8, 0x75, 0x29, |
|
342 0xf6, 0xb1, 0x3f, 0xda, 0xec, 0xd9, 0x46, 0x3b, 0x98, 0xcb, 0xae, 0xf6, |
|
343 0x57, 0xb2, 0xbd, 0xed, 0xad, 0x7c, 0x3b, 0xdc, 0x57, 0x29, 0xf7, 0xb9, |
|
344 0x8f, 0xb2, 0xee, 0x76, 0x17, 0x74, 0xde, 0xcb, 0xbd, 0x77, 0xbe, 0xf7, |
|
345 0x1d, 0xdd, 0x7f, 0x07, 0x7c, 0xe0, 0xd7, 0x3d, 0x78, 0xc2, 0x17, 0xde, |
|
346 0xdd, 0x41, 0x00, 0x00, 0x3b |
|
347 }; |
|
348 static unsigned int tab_r_gif_len = 2585; |
|
349 |
|
350 static unsigned char search_sel_png[] = { |
|
351 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, |
|
352 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x10, |
|
353 0x08, 0x02, 0x00, 0x00, 0x00, 0x99, 0x7a, 0xc8, 0x4c, 0x00, 0x00, 0x01, |
|
354 0xd6, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0x8d, 0x92, 0xbb, 0xae, 0x41, |
|
355 0x51, 0x10, 0x86, 0xcf, 0x66, 0x0b, 0x22, 0x44, 0x23, 0x4a, 0xb7, 0xd0, |
|
356 0x11, 0x09, 0x71, 0x49, 0xbc, 0x82, 0xc2, 0x2b, 0xa0, 0xd6, 0x29, 0x74, |
|
357 0x1e, 0x42, 0xeb, 0x11, 0x44, 0x41, 0x43, 0x45, 0x27, 0x48, 0x08, 0x91, |
|
358 0x10, 0x51, 0xba, 0x14, 0x42, 0x21, 0x91, 0x10, 0x97, 0xf3, 0xb1, 0x9c, |
|
359 0x9d, 0x13, 0x97, 0x93, 0x33, 0xc5, 0xda, 0xb3, 0x66, 0xfe, 0xff, 0x9f, |
|
360 0x59, 0x33, 0x5b, 0xba, 0x5e, 0xaf, 0x5f, 0x77, 0xbb, 0x5c, 0x2e, 0xd2, |
|
361 0xdd, 0xc4, 0xf5, 0x3f, 0xa7, 0xac, 0x30, 0x3b, 0x9d, 0x4e, 0xbf, 0xdf, |
|
362 0x9f, 0x4e, 0xa7, 0x44, 0xdc, 0x6e, 0xb7, 0xdf, 0xef, 0x0f, 0x87, 0xc3, |
|
363 0x7f, 0x4b, 0x48, 0xa7, 0xd3, 0x89, 0x7a, 0xd5, 0x6a, 0xb5, 0x5c, 0x2e, |
|
364 0x9f, 0xcf, 0x67, 0xea, 0x43, 0x50, 0xa9, 0x54, 0x6a, 0xb5, 0x3a, 0x91, |
|
365 0x48, 0xc4, 0xe3, 0x71, 0xb2, 0x9f, 0x24, 0x64, 0x70, 0xad, 0x56, 0xab, |
|
366 0x54, 0x2a, 0x19, 0x0c, 0x86, 0x50, 0x28, 0xe4, 0xf5, 0x7a, 0x81, 0x0e, |
|
367 0x87, 0xc3, 0x76, 0xbb, 0x4d, 0xd0, 0x62, 0xb1, 0x44, 0xa3, 0xd1, 0x8f, |
|
368 0x64, 0x12, 0xdd, 0x6e, 0x97, 0xfa, 0x91, 0x48, 0x84, 0x3a, 0x5a, 0xad, |
|
369 0x96, 0x52, 0x4e, 0xa7, 0x13, 0xd1, 0x5a, 0xad, 0x46, 0x8a, 0xe6, 0xf1, |
|
370 0xdf, 0xf2, 0x55, 0x0c, 0x6c, 0x32, 0x99, 0x70, 0x52, 0xd6, 0x68, 0x34, |
|
371 0xea, 0xf5, 0x7a, 0x9d, 0x4e, 0x87, 0xc3, 0x55, 0xa4, 0xde, 0xd2, 0x44, |
|
372 0x50, 0x06, 0x21, 0xde, 0x49, 0x4d, 0x59, 0x7e, 0xcc, 0x8f, 0x07, 0x23, |
|
373 0x01, 0x82, 0x14, 0x36, 0x1a, 0x8d, 0x8a, 0xc5, 0xe2, 0x6f, 0x95, 0x54, |
|
374 0x2a, 0xc5, 0x03, 0x6f, 0xfd, 0xd0, 0x24, 0x67, 0xaf, 0xd7, 0x43, 0x48, |
|
375 0x41, 0x70, 0xc5, 0x77, 0xb9, 0x5c, 0x9c, 0xe0, 0x40, 0x2b, 0xd9, 0x64, |
|
376 0x32, 0x29, 0x46, 0x73, 0x23, 0xfb, 0x7c, 0x3e, 0xce, 0x66, 0xb3, 0x59, |
|
377 0xa9, 0x54, 0x56, 0xab, 0xd5, 0x72, 0xb9, 0xc4, 0x69, 0x34, 0x1a, 0x04, |
|
378 0xd9, 0x99, 0x98, 0x36, 0xe8, 0x74, 0x3a, 0x4d, 0x04, 0xa6, 0xc0, 0xe3, |
|
379 0x4b, 0x74, 0xb5, 0xdb, 0xed, 0xd8, 0x53, 0xbd, 0x5e, 0xa7, 0x6d, 0x1a, |
|
380 0x26, 0xca, 0xce, 0x18, 0x21, 0xa5, 0x6c, 0x36, 0x5b, 0x2e, 0x97, 0x33, |
|
381 0x99, 0x4c, 0x04, 0xb1, 0xc1, 0x60, 0xa0, 0x30, 0xb9, 0xaa, 0xf3, 0xf9, |
|
382 0x3c, 0x1c, 0xbb, 0xdd, 0x6e, 0x36, 0x9b, 0x41, 0x23, 0x04, 0xdf, 0xe3, |
|
383 0xf1, 0xb0, 0xa1, 0xed, 0x76, 0x4b, 0x17, 0xe3, 0xf1, 0x38, 0x18, 0x0c, |
|
384 0x32, 0x11, 0xd0, 0x56, 0xab, 0xf5, 0xa6, 0xf1, 0x63, 0x92, 0x78, 0x09, |
|
385 0x75, 0xf6, 0xfb, 0xfd, 0xe1, 0x70, 0x10, 0x05, 0x35, 0x1a, 0x0d, 0x8a, |
|
386 0x9b, 0xcd, 0xa6, 0x50, 0x28, 0xac, 0xd7, 0x6b, 0x87, 0xc3, 0x91, 0xcd, |
|
387 0x66, 0x59, 0xc1, 0x0f, 0xeb, 0xf1, 0xbd, 0xb5, 0x2d, 0x5e, 0x85, 0x0a, |
|
388 0xa6, 0x5c, 0x09, 0xa2, 0xb5, 0x58, 0x2c, 0xe0, 0xa3, 0x92, 0xc9, 0x64, |
|
389 0x02, 0x81, 0xc0, 0x33, 0x59, 0x70, 0x04, 0xff, 0x29, 0x47, 0x0a, 0xfe, |
|
390 0x7c, 0x3e, 0x9f, 0xcd, 0x66, 0xb1, 0x58, 0x8c, 0x5f, 0xe0, 0x09, 0xf6, |
|
391 0x68, 0x1b, 0xdc, 0x53, 0x42, 0x08, 0x11, 0x3f, 0x1e, 0x8f, 0xcc, 0x8f, |
|
392 0xb5, 0xbf, 0xfe, 0x67, 0x0f, 0x32, 0xd0, 0xdf, 0x0d, 0xbf, 0xb6, 0xf0, |
|
393 0x56, 0xfa, 0x1b, 0x21, 0x36, 0x05, 0xd3, 0x4d, 0xe6, 0x17, 0x7f, 0x00, |
|
394 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 |
|
395 }; |
|
396 static unsigned int search_sel_png_len = 527; |
|
397 |
|
398 unsigned char search_png[] = { |
|
399 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, |
|
400 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, |
|
401 0x08, 0x06, 0x00, 0x00, 0x00, 0xc9, 0x56, 0x25, 0x04, 0x00, 0x00, 0x01, |
|
402 0x9e, 0x49, 0x44, 0x41, 0x54, 0x28, 0x15, 0xa5, 0x52, 0xcd, 0xca, 0x41, |
|
403 0x51, 0x14, 0x5d, 0xdf, 0x75, 0xe5, 0x96, 0xa2, 0x64, 0x2e, 0x6e, 0x86, |
|
404 0x64, 0x24, 0x79, 0x07, 0xc9, 0x0b, 0x18, 0x1b, 0x9a, 0x18, 0x78, 0x08, |
|
405 0x33, 0x03, 0x6f, 0x21, 0x19, 0x31, 0x62, 0x22, 0x49, 0x28, 0x26, 0xa2, |
|
406 0x0c, 0x0c, 0x4c, 0xa4, 0x28, 0x7f, 0x85, 0xed, 0xee, 0x5d, 0xe7, 0x84, |
|
407 0x81, 0xfa, 0xbe, 0x6f, 0x0f, 0xee, 0x3d, 0xad, 0xbd, 0xd6, 0xda, 0xfb, |
|
408 0xec, 0x7d, 0x80, 0x7f, 0xc4, 0xcf, 0xab, 0xb6, 0xdf, 0xef, 0xd3, 0x64, |
|
409 0x32, 0xc1, 0x62, 0xb1, 0x10, 0x38, 0x1a, 0x8d, 0x22, 0x91, 0x48, 0x20, |
|
410 0x95, 0x4a, 0xbd, 0xf1, 0x94, 0x46, 0x83, 0x8d, 0x46, 0x83, 0xea, 0xf5, |
|
411 0x3a, 0xee, 0xf7, 0x3b, 0x1e, 0x8f, 0x87, 0xe4, 0x0d, 0xc3, 0x80, 0xcb, |
|
412 0xe5, 0x42, 0x2e, 0x97, 0x43, 0x36, 0x9b, 0xd5, 0xdc, 0x37, 0x71, 0xaf, |
|
413 0xd7, 0xa3, 0x5a, 0xad, 0x06, 0xaf, 0xd7, 0x8b, 0x64, 0x32, 0x89, 0x58, |
|
414 0x2c, 0x26, 0xf9, 0xe9, 0x74, 0x8a, 0xc1, 0x60, 0x80, 0xe3, 0xf1, 0x88, |
|
415 0x42, 0xa1, 0x80, 0x74, 0x3a, 0xfd, 0x66, 0x60, 0x32, 0x6b, 0x38, 0x1c, |
|
416 0xe2, 0x76, 0xbb, 0x71, 0x7b, 0xc8, 0x64, 0x32, 0x08, 0x04, 0x02, 0x42, |
|
417 0xda, 0xed, 0x76, 0xc4, 0xd5, 0x5b, 0xad, 0x96, 0x70, 0x54, 0x45, 0xf5, |
|
418 0x37, 0xf8, 0x30, 0x9f, 0xcf, 0x41, 0x44, 0x52, 0x55, 0x09, 0x19, 0xe7, |
|
419 0x33, 0x77, 0xc2, 0x39, 0xe6, 0x7c, 0x86, 0x88, 0xd5, 0x1d, 0x3d, 0x1e, |
|
420 0xcf, 0x67, 0x1e, 0x96, 0x65, 0x09, 0xa6, 0x38, 0xaf, 0x04, 0x11, 0x47, |
|
421 0x22, 0x11, 0xc1, 0xc6, 0xe3, 0x31, 0x0f, 0x8b, 0x14, 0x81, 0xcf, 0x8c, |
|
422 0x71, 0xd8, 0xb6, 0xad, 0x60, 0xfd, 0x97, 0x3b, 0xc7, 0xe3, 0x71, 0x8c, |
|
423 0x46, 0x23, 0x74, 0xbb, 0x5d, 0x98, 0xa6, 0x89, 0xcd, 0x66, 0xe3, 0x74, |
|
424 0x4a, 0x68, 0x36, 0x9b, 0xe8, 0x74, 0x3a, 0x42, 0xe6, 0xb5, 0x7d, 0x86, |
|
425 0x0c, 0x66, 0xbf, 0xdf, 0xcb, 0x9a, 0xda, 0xed, 0xb6, 0x88, 0x79, 0x3d, |
|
426 0x1c, 0xbc, 0x36, 0x1e, 0x24, 0x1b, 0x85, 0x42, 0x21, 0x94, 0xcb, 0x65, |
|
427 0xf8, 0xfd, 0x7e, 0x3d, 0x71, 0xa9, 0xcc, 0x00, 0x4f, 0x36, 0x18, 0x0c, |
|
428 0x62, 0x36, 0x9b, 0x61, 0xb5, 0x5a, 0x89, 0x38, 0x1c, 0x0e, 0x83, 0xaf, |
|
429 0xe4, 0xac, 0x12, 0xeb, 0xf5, 0x1a, 0x95, 0x4a, 0x05, 0x87, 0xc3, 0x81, |
|
430 0x7c, 0x3e, 0x9f, 0x18, 0x68, 0x17, 0x66, 0x73, 0x07, 0xd7, 0xeb, 0x55, |
|
431 0x57, 0x73, 0xbb, 0xdd, 0xd2, 0x89, 0x63, 0x8c, 0x6a, 0xb5, 0x8a, 0xed, |
|
432 0x76, 0x0b, 0x36, 0x2c, 0x95, 0x4a, 0x50, 0x06, 0x52, 0xe5, 0xdb, 0xe7, |
|
433 0x74, 0x3a, 0xd1, 0x72, 0xb9, 0xa4, 0x62, 0xb1, 0x48, 0xf9, 0x7c, 0x9e, |
|
434 0x9c, 0x77, 0xa1, 0x87, 0xfa, 0x4d, 0xa7, 0x73, 0xe7, 0xf3, 0x59, 0x0c, |
|
435 0x9c, 0x07, 0x43, 0xce, 0x8b, 0xfb, 0x9d, 0x98, 0x5d, 0x2e, 0x97, 0xcb, |
|
436 0xdf, 0x84, 0xba, 0x85, 0x97, 0xc3, 0x13, 0x25, 0xab, 0xcb, 0x08, 0x4d, |
|
437 0x39, 0xd0, 0x92, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, |
|
438 0x42, 0x60, 0x82 |
|
439 }; |
|
440 unsigned int search_png_len = 471; |
|
441 |
|
442 |
|
443 |
|
444 static unsigned char close_png[] = { |
|
445 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, |
|
446 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0b, |
|
447 0x08, 0x06, 0x00, 0x00, 0x00, 0xa9, 0xac, 0x77, 0x26, 0x00, 0x00, 0x00, |
|
448 0xd8, 0x49, 0x44, 0x41, 0x54, 0x18, 0x19, 0x75, 0x51, 0xbd, 0x12, 0x46, |
|
449 0x40, 0x0c, 0xdc, 0x18, 0x15, 0x0a, 0x14, 0x14, 0x1a, 0x43, 0xeb, 0x35, |
|
450 0xbc, 0x7f, 0xa7, 0x43, 0x67, 0x06, 0x33, 0x28, 0xd0, 0xde, 0x77, 0x7b, |
|
451 0x23, 0x2a, 0xdf, 0x16, 0x97, 0x9f, 0xdb, 0xcb, 0x26, 0x39, 0xc1, 0x83, |
|
452 0x7d, 0xdf, 0xcd, 0xb2, 0x2c, 0xd8, 0xb6, 0x0d, 0xe7, 0x79, 0x22, 0x8a, |
|
453 0x22, 0xc4, 0x71, 0x8c, 0x3c, 0xcf, 0x91, 0xa6, 0xa9, 0x90, 0xe6, 0x8e, |
|
454 0x69, 0x9a, 0xcc, 0x38, 0x8e, 0xb8, 0xae, 0x4b, 0xdf, 0xbe, 0x36, 0x0c, |
|
455 0x43, 0x94, 0x65, 0x89, 0xa2, 0x28, 0xc4, 0x3b, 0x8e, 0xe3, 0x2f, 0x91, |
|
456 0x2f, 0xa8, 0xc2, 0x42, 0x56, 0xd1, 0x78, 0xf3, 0x3c, 0xbb, 0x04, 0x2f, |
|
457 0xda, 0xb6, 0x45, 0x55, 0x55, 0x74, 0x9d, 0x65, 0x2c, 0x22, 0xb8, 0xef, |
|
458 0x1b, 0xeb, 0xba, 0xc2, 0x67, 0x8f, 0x4c, 0x10, 0x7d, 0xdf, 0xa3, 0xae, |
|
459 0x6b, 0xe7, 0xd3, 0x32, 0x56, 0x90, 0xe7, 0x53, 0x46, 0x31, 0x0c, 0x83, |
|
460 0x73, 0x95, 0xa8, 0x31, 0x93, 0x9c, 0xc7, 0xe3, 0xd4, 0x0a, 0xb6, 0xa0, |
|
461 0x44, 0x5a, 0xc6, 0xc6, 0x18, 0x77, 0xcd, 0x41, 0xbd, 0x24, 0x49, 0x94, |
|
462 0xfb, 0x12, 0x59, 0x51, 0x5b, 0xd2, 0x16, 0xed, 0xfa, 0x20, 0xdc, 0x6f, |
|
463 0xd7, 0x75, 0x9f, 0x6b, 0xd3, 0x2a, 0x41, 0x10, 0xa0, 0x69, 0x1a, 0x57, |
|
464 0x59, 0x28, 0x47, 0x99, 0x2f, 0x30, 0xcf, 0x7b, 0xfb, 0x41, 0xcf, 0x1a, |
|
465 0x2c, 0xeb, 0xeb, 0x07, 0x29, 0x9d, 0x65, 0x19, 0x6c, 0xab, 0x6e, 0x5d, |
|
466 0x3f, 0x07, 0x0a, 0x79, 0x90, 0x0e, 0x11, 0x45, 0xc2, 0x00, 0x00, 0x00, |
|
467 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82 |
|
468 }; |
|
469 static unsigned int close_png_len = 273; |
|
470 |
|
471 |
|
472 static const char tabs_css[] = |
|
473 "/* tabs styles, based on http://www.alistapart.com/articles/slidingdoors */\n" |
|
474 "\n" |
|
475 "DIV.tabs\n" |
|
476 "{\n" |
|
477 " float : left;\n" |
|
478 " width : 100%;\n" |
|
479 " background : url(\"tab_b.gif\") repeat-x bottom;\n" |
|
480 " margin-bottom : 4px;\n" |
|
481 "}\n" |
|
482 "\n" |
|
483 "DIV.tabs UL\n" |
|
484 "{\n" |
|
485 " margin : 0px;\n" |
|
486 " padding-left : 10px;\n" |
|
487 " list-style : none;\n" |
|
488 "}\n" |
|
489 "\n" |
|
490 "DIV.tabs LI, DIV.tabs FORM\n" |
|
491 "{\n" |
|
492 " display : inline;\n" |
|
493 " margin : 0px;\n" |
|
494 " padding : 0px;\n" |
|
495 "}\n" |
|
496 "\n" |
|
497 "DIV.tabs FORM\n" |
|
498 "{\n" |
|
499 " float : right;\n" |
|
500 "}\n" |
|
501 "\n" |
|
502 "DIV.tabs A\n" |
|
503 "{\n" |
|
504 " float : left;\n" |
|
505 " background : url(\"tab_r.gif\") no-repeat right top;\n" |
|
506 " border-bottom : 1px solid #84B0C7;\n" |
|
507 " font-size : 80%;\n" |
|
508 " font-weight : bold;\n" |
|
509 " text-decoration : none;\n" |
|
510 "}\n" |
|
511 "\n" |
|
512 "DIV.tabs A:hover\n" |
|
513 "{\n" |
|
514 " background-position: 100% -150px;\n" |
|
515 "}\n" |
|
516 "\n" |
|
517 "DIV.tabs A:link, DIV.tabs A:visited,\n" |
|
518 "DIV.tabs A:active, DIV.tabs A:hover\n" |
|
519 "{\n" |
|
520 " color: #1A419D;\n" |
|
521 "}\n" |
|
522 "\n" |
|
523 "DIV.tabs SPAN\n" |
|
524 "{\n" |
|
525 " float : left;\n" |
|
526 " display : block;\n" |
|
527 " background : url(\"tab_l.gif\") no-repeat left top;\n" |
|
528 " padding : 5px 9px;\n" |
|
529 " white-space : nowrap;\n" |
|
530 "}\n" |
|
531 "\n" |
|
532 "DIV.tabs #MSearchBox\n" |
|
533 "{\n" |
|
534 " float : right;\n" |
|
535 " display : inline;\n" |
|
536 " font-size : 1em;\n" |
|
537 "}\n" |
|
538 "\n" |
|
539 "DIV.tabs TD\n" |
|
540 "{\n" |
|
541 " font-size : 80%;\n" |
|
542 " font-weight : bold;\n" |
|
543 " text-decoration : none;\n" |
|
544 "}\n" |
|
545 "\n" |
|
546 "\n" |
|
547 "\n" |
|
548 "/* Commented Backslash Hack hides rule from IE5-Mac \\*/\n" |
|
549 "DIV.tabs SPAN {float : none;}\n" |
|
550 "/* End IE5-Mac hack */\n" |
|
551 "\n" |
|
552 "DIV.tabs A:hover SPAN\n" |
|
553 "{\n" |
|
554 " background-position: 0% -150px;\n" |
|
555 "}\n" |
|
556 "\n" |
|
557 "DIV.tabs LI.current A\n" |
|
558 "{\n" |
|
559 " background-position: 100% -150px;\n" |
|
560 " border-width : 0px;\n" |
|
561 "}\n" |
|
562 "\n" |
|
563 "DIV.tabs LI.current SPAN\n" |
|
564 "{\n" |
|
565 " background-position: 0% -150px;\n" |
|
566 " padding-bottom : 6px;\n" |
|
567 "}\n" |
|
568 "\n" |
|
569 "DIV.navpath\n" |
|
570 "{\n" |
|
571 " background : none;\n" |
|
572 " border : none;\n" |
|
573 " border-bottom : 1px solid #84B0C7;\n" |
|
574 " text-align : center;\n" |
|
575 " margin : 2px;\n" |
|
576 " padding : 2px;\n" |
|
577 "}\n" |
|
578 ; |
|
579 |
|
580 struct img_data_item |
|
581 { |
|
582 const char *name; |
|
583 unsigned char *content; |
|
584 unsigned int len; |
|
585 }; |
|
586 |
|
587 static void writeImgData(const char *dir,img_data_item *data) |
|
588 { |
|
589 while (data->name) |
|
590 { |
|
591 QCString fileName; |
|
592 fileName=(QCString)dir+"/"+data->name; |
|
593 QFile f(fileName); |
|
594 if (f.open(IO_WriteOnly)) |
|
595 { |
|
596 f.writeBlock((char*)data->content, |
|
597 data->len>0 ? data->len : strlen((char*)data->content)); |
|
598 } |
|
599 else |
|
600 { |
|
601 fprintf(stderr,"Warning: Cannot open file %s for writing\n",data->name); |
|
602 } |
|
603 data++; |
|
604 } |
|
605 } |
|
606 |
|
607 static img_data_item tab_data[] = |
|
608 { |
|
609 { "tab_b.gif", tab_b_gif, tab_b_gif_len }, |
|
610 { "tab_l.gif", tab_l_gif, tab_l_gif_len }, |
|
611 { "tab_r.gif", tab_r_gif, tab_r_gif_len }, |
|
612 { "tabs.css", (unsigned char *)tabs_css, 0 }, |
|
613 { 0, 0, 0 } |
|
614 }; |
|
615 |
|
616 static void writeTabData(const char *dir) |
|
617 { |
|
618 writeImgData(dir,tab_data); |
|
619 } |
|
620 |
|
621 static img_data_item search_client_data[] = |
|
622 { |
|
623 { "search.png", search_sel_png, search_sel_png_len }, |
|
624 { "close.png", close_png, close_png_len }, |
|
625 { 0, 0, 0 } |
|
626 }; |
|
627 |
|
628 static img_data_item search_server_data[] = |
|
629 { |
|
630 { "search.png", search_png, search_png_len }, |
|
631 { 0, 0, 0 } |
|
632 }; |
|
633 |
|
634 void HtmlGenerator::writeSearchData(const char *dir) |
|
635 { |
|
636 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); |
|
637 writeImgData(dir,serverBasedSearch ? search_server_data : search_client_data); |
|
638 Doxygen::indexList.addImageFile("search/close.png"); |
|
639 Doxygen::indexList.addImageFile("search/search.png"); |
|
640 } |
|
641 |
|
642 |
|
643 //------------------------------------------------------------------------ |
|
644 |
|
645 unsigned char open_gif[] = { |
|
646 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00, |
|
647 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, |
|
648 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, |
|
649 0x00, 0x02, 0x0d, 0x8c, 0x8f, 0xa9, 0xcb, 0xe0, 0xff, 0x02, 0x8c, 0x66, |
|
650 0x26, 0x7a, 0x51, 0x01, 0x00, 0x3b |
|
651 }; |
|
652 unsigned int open_gif_len = 54; |
|
653 |
|
654 unsigned char closed_gif[] = { |
|
655 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x09, 0x00, 0x09, 0x00, 0xf0, 0x00, |
|
656 0x00, 0x8e, 0xaf, 0xc4, 0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, |
|
657 0x00, 0x01, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, |
|
658 0x00, 0x02, 0x10, 0x8c, 0x03, 0xa7, 0x98, 0xcb, 0xad, 0x80, 0x84, 0x66, |
|
659 0xca, 0x38, 0x57, 0xd6, 0xf4, 0xd0, 0x02, 0x00, 0x3b |
|
660 }; |
|
661 unsigned int closed_gif_len = 57; |
|
662 |
|
663 |
|
664 |
|
665 //------------------------- Pictures for the Tabs ------------------------ |
|
666 |
|
667 HtmlGenerator::HtmlGenerator() : OutputGenerator() |
|
668 { |
|
669 dir=Config_getString("HTML_OUTPUT"); |
|
670 col=0; |
|
671 } |
|
672 |
|
673 HtmlGenerator::~HtmlGenerator() |
|
674 { |
|
675 //printf("HtmlGenerator::~HtmlGenerator()\n"); |
|
676 } |
|
677 |
|
678 void HtmlGenerator::init() |
|
679 { |
|
680 QCString dname=Config_getString("HTML_OUTPUT"); |
|
681 QDir d(dname); |
|
682 if (!d.exists() && !d.mkdir(dname)) |
|
683 { |
|
684 err("Could not create output directory %s\n",dname.data()); |
|
685 exit(1); |
|
686 } |
|
687 writeLogo(dname); |
|
688 if (!Config_getString("HTML_HEADER").isEmpty()) |
|
689 { |
|
690 g_header=fileToString(Config_getString("HTML_HEADER")); |
|
691 //printf("g_header='%s'\n",g_header.data()); |
|
692 } |
|
693 if (!Config_getString("HTML_FOOTER").isEmpty()) |
|
694 { |
|
695 g_footer=fileToString(Config_getString("HTML_FOOTER")); |
|
696 //printf("g_footer='%s'\n",g_footer.data()); |
|
697 } |
|
698 createSubDirs(d); |
|
699 |
|
700 writeTabData(dname); |
|
701 } |
|
702 |
|
703 void HtmlGenerator::writeStyleSheetFile(QFile &file) |
|
704 { |
|
705 QTextStream t(&file); |
|
706 t << defaultStyleSheet; |
|
707 } |
|
708 |
|
709 static void writeDefaultHeaderFile(QTextStream &t, const char *title, |
|
710 const char *relPath,bool usePathCmd, |
|
711 bool searchPage=FALSE) |
|
712 { |
|
713 QString relPathStr; |
|
714 if (usePathCmd) |
|
715 relPathStr="$relpath$"; |
|
716 else |
|
717 relPathStr=relPath; |
|
718 |
|
719 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); |
|
720 static bool searchEngine = Config_getBool("SEARCHENGINE"); |
|
721 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); |
|
722 if (searchEngine && !generateTreeView) |
|
723 { |
|
724 t << "<!-- This comment will put IE 6, 7 and 8 in quirks mode -->" << endl; |
|
725 } |
|
726 // t << "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"; |
|
727 // t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; |
|
728 t << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; |
|
729 t << "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n" |
|
730 "<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n" |
|
731 "<title>"; |
|
732 t << convertToHtml(title); |
|
733 t << "</title>\n"; |
|
734 t << "<link href=\"" << relPathStr << "tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"; |
|
735 if (searchEngine && !generateTreeView) |
|
736 { |
|
737 t << "<link href=\"" << relPathStr << "search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n"; |
|
738 t << "<script type=\"text/javaScript\" src=\"" << relPathStr << "search/search.js\"></script>\n"; |
|
739 } |
|
740 t << "<link "; |
|
741 t << "href=\""; |
|
742 if (Config_getString("HTML_STYLESHEET").isEmpty()) |
|
743 { |
|
744 t << relPathStr << "doxygen.css"; |
|
745 } |
|
746 else |
|
747 { |
|
748 QCString cssname=Config_getString("HTML_STYLESHEET"); |
|
749 QFileInfo cssfi(cssname); |
|
750 if (!cssfi.exists()) |
|
751 { |
|
752 err("Error: user specified HTML style sheet file does not exist!\n"); |
|
753 } |
|
754 t << relPathStr << cssfi.fileName(); |
|
755 } |
|
756 |
|
757 t << "\" rel=\"stylesheet\" type=\"text/css\"/>\n"; |
|
758 t << "</head>\n"; |
|
759 if (searchEngine && !generateTreeView && !serverBasedSearch) |
|
760 { |
|
761 // for the javascript based search select the default filter |
|
762 t << "<body onload='searchBox.OnSelectItem(0);'>\n"; |
|
763 } |
|
764 else |
|
765 { |
|
766 if (searchPage) // keep focus on search result's box when loading |
|
767 // search results page |
|
768 { |
|
769 t << "<body onload='searchBox.DOMSearchField().focus()'>\n"; |
|
770 } |
|
771 else |
|
772 { |
|
773 t << "<body>\n"; |
|
774 } |
|
775 } |
|
776 } |
|
777 |
|
778 |
|
779 void HtmlGenerator::writeHeaderFile(QFile &file) |
|
780 { |
|
781 QTextStream t(&file); |
|
782 t.setEncoding(QTextStream::UnicodeUTF8); |
|
783 writeDefaultHeaderFile(t,"$title",relativePathToRoot(0),TRUE); |
|
784 } |
|
785 |
|
786 void HtmlGenerator::writeFooterFile(QFile &file) |
|
787 { |
|
788 QTextStream t(&file); |
|
789 t << "<hr size=\"1\"/><address style=\"text-align: right;\"><small>\n"; |
|
790 t << theTranslator->trGeneratedAt( "$datetime", "$projectname" ); |
|
791 t << " <a href=\"http://www.doxygen.org/index.html\">" |
|
792 << "<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>" |
|
793 << "</a> $doxygenversion"; |
|
794 t << "</small></address>\n" |
|
795 << "</body>\n" |
|
796 << "</html>\n"; |
|
797 } |
|
798 |
|
799 static void generateDynamicSections(QTextStream &t,const QCString &relPath) |
|
800 { |
|
801 if (Config_getBool("HTML_DYNAMIC_SECTIONS")) |
|
802 { |
|
803 t << |
|
804 "<script type=\"text/javascript\">\n" |
|
805 "<!--\n" |
|
806 "function changeDisplayState (e){\n" |
|
807 " var num=this.id.replace(/[^[0-9]/g,'');\n" |
|
808 " var button=this.firstChild;\n" |
|
809 " var sectionDiv=document.getElementById('dynsection'+num);\n" |
|
810 " if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){\n" |
|
811 " sectionDiv.style.display='block';\n" |
|
812 " button.src='" << relPath << "open.gif';\n" |
|
813 " }else{\n" |
|
814 " sectionDiv.style.display='none';\n" |
|
815 " button.src='" << relPath << "closed.gif';\n" |
|
816 " }\n" |
|
817 "}\n" |
|
818 "function initDynSections(){\n" |
|
819 " var divs=document.getElementsByTagName('div');\n" |
|
820 " var sectionCounter=1;\n" |
|
821 " for(var i=0;i<divs.length-1;i++){\n" |
|
822 " if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){\n" |
|
823 " var header=divs[i];\n" |
|
824 " var section=divs[i+1];\n" |
|
825 " var button=header.firstChild;\n" |
|
826 " if (button!='IMG'){\n" |
|
827 " divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);\n" |
|
828 " button=document.createElement('img');\n" |
|
829 " divs[i].insertBefore(button,divs[i].firstChild);\n" |
|
830 " }\n" |
|
831 " header.style.cursor='pointer';\n" |
|
832 " header.onclick=changeDisplayState;\n" |
|
833 " header.id='dynheader'+sectionCounter;\n" |
|
834 " button.src='" << relPath << "closed.gif';\n" |
|
835 " section.id='dynsection'+sectionCounter;\n" |
|
836 " section.style.display='none';\n" |
|
837 " section.style.marginLeft='14px';\n" |
|
838 " sectionCounter++;\n" |
|
839 " }\n" |
|
840 " }\n" |
|
841 "}\n" |
|
842 "window.onload = initDynSections;\n" |
|
843 "-->\n" |
|
844 "</script>\n"; |
|
845 } |
|
846 } |
|
847 |
|
848 |
|
849 void HtmlGenerator::startFile(const char *name,const char *, |
|
850 const char *title) |
|
851 { |
|
852 //printf("HtmlGenerator::startFile(%s)\n",name); |
|
853 QCString fileName=name; |
|
854 lastTitle=title; |
|
855 relPath = relativePathToRoot(fileName); |
|
856 |
|
857 if (fileName.right(Doxygen::htmlFileExtension.length())!=Doxygen::htmlFileExtension) |
|
858 { |
|
859 fileName+=Doxygen::htmlFileExtension; |
|
860 } |
|
861 startPlainFile(fileName); |
|
862 Doxygen::indexList.addIndexFile(fileName); |
|
863 //if (Config_getBool("GENERATE_HTMLHELP")) |
|
864 //{ |
|
865 // HtmlHelp::getInstance()->addIndexFile(fileName); |
|
866 //} |
|
867 |
|
868 QCString dispTitle = title; |
|
869 QCString projName = Config_getString("PROJECT_NAME"); |
|
870 if (!projName.isEmpty()) |
|
871 { |
|
872 dispTitle.prepend(projName+": "); |
|
873 } |
|
874 |
|
875 lastFile = fileName; |
|
876 if (g_header.isEmpty()) |
|
877 { |
|
878 writeDefaultHeaderFile(t,dispTitle,relPath,FALSE); |
|
879 } |
|
880 else |
|
881 { |
|
882 t << substituteKeywords(g_header,convertToHtml(dispTitle),relPath); |
|
883 } |
|
884 t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " |
|
885 << versionString << " -->" << endl; |
|
886 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); |
|
887 static bool searchEngine = Config_getBool("SEARCHENGINE"); |
|
888 if (searchEngine && !generateTreeView) |
|
889 { |
|
890 t << "<script type=\"text/javascript\"><!--\n"; |
|
891 t << "var searchBox = new SearchBox(\"searchBox\", \"" |
|
892 << relPath<< "search\",false,'" << theTranslator->trSearch() << "');\n"; |
|
893 t << "--></script>\n"; |
|
894 } |
|
895 generateDynamicSections(t,relPath); |
|
896 } |
|
897 |
|
898 void HtmlGenerator::writeSearchFooter(QTextStream &t,const QCString &relPath) |
|
899 { |
|
900 (void)relPath; |
|
901 t << "<!--- window showing the filter options -->\n"; |
|
902 t << "<div id=\"MSearchSelectWindow\"\n"; |
|
903 t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n"; |
|
904 t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n"; |
|
905 t << " onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n"; |
|
906 writeSearchCategories(t); |
|
907 t << "</div>\n"; |
|
908 t << "\n"; |
|
909 t << "<!-- iframe showing the search results (closed by default) -->\n"; |
|
910 t << "<div id=\"MSearchResultsWindow\">\n"; |
|
911 t << "<iframe src=\"\" frameborder=\"0\" \n"; |
|
912 t << " name=\"MSearchResults\" id=\"MSearchResults\">\n"; |
|
913 t << "</iframe>\n"; |
|
914 t << "</div>\n"; |
|
915 t << "\n"; |
|
916 } |
|
917 |
|
918 static void writePageFooter(QTextStream &t,const QCString &lastTitle, |
|
919 const QCString relPath) |
|
920 { |
|
921 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); |
|
922 static bool searchEngine = Config_getBool("SEARCHENGINE"); |
|
923 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); |
|
924 static bool timeStamp = Config_getBool("HTML_TIMESTAMP"); |
|
925 if (searchEngine && !generateTreeView && !serverBasedSearch) |
|
926 { |
|
927 HtmlGenerator::writeSearchFooter(t,relPath); |
|
928 } |
|
929 if (g_footer.isEmpty()) |
|
930 { |
|
931 t << "<hr size=\"1\"/><address style=\"text-align: right;\"><small>"; |
|
932 if (timeStamp) |
|
933 { |
|
934 t << theTranslator->trGeneratedAt( |
|
935 dateToString(TRUE), |
|
936 Config_getString("PROJECT_NAME") |
|
937 ); |
|
938 } |
|
939 else |
|
940 { |
|
941 t << theTranslator->trGeneratedBy(); |
|
942 } |
|
943 t << " " << endl << "<a href=\"http://www.doxygen.org/index.html\">"; |
|
944 t << endl << "<img class=\"footer\" src=\"" << relPath << "doxygen.png\" alt=\"doxygen\"/>" |
|
945 << "</a> " << versionString << " "; |
|
946 t << "</small></address>"; |
|
947 if (Debug::isFlagSet(Debug::Validate)) |
|
948 { |
|
949 t << "<p><a href=\"http://validator.w3.org/check/referer\">" |
|
950 "<img class=\"footer\" src=\"http://www.w3.org/Icons/valid-html401\"" |
|
951 " height=\"31\" width=\"88\" alt=\"This page is Valid HTML 4.01 " |
|
952 "Transitional!\"></a><a href=\"http://jigsaw.w3.org/css-validator/\">" |
|
953 "<img class=\"footer\" style=\"border:0;width:88px;height:31px\" " |
|
954 "src=\"http://jigsaw.w3.org/css-validator/images/vcss\" " |
|
955 "alt=\"This page uses valid CSS!\"/></a></p>"; |
|
956 } |
|
957 t << "\n</body>\n</html>\n"; |
|
958 } |
|
959 else |
|
960 { |
|
961 t << substituteKeywords(g_footer,convertToHtml(lastTitle),relPath); |
|
962 } |
|
963 } |
|
964 |
|
965 void HtmlGenerator::writeFooter() |
|
966 { |
|
967 writePageFooter(t,lastTitle,relPath); |
|
968 } |
|
969 |
|
970 void HtmlGenerator::endFile() |
|
971 { |
|
972 endPlainFile(); |
|
973 } |
|
974 |
|
975 void HtmlGenerator::startProjectNumber() |
|
976 { |
|
977 t << "<h3 class=\"version\">"; |
|
978 } |
|
979 |
|
980 void HtmlGenerator::endProjectNumber() |
|
981 { |
|
982 t << "</h3>"; |
|
983 } |
|
984 |
|
985 void HtmlGenerator::writeStyleInfo(int part) |
|
986 { |
|
987 //printf("writeStyleInfo(%d)\n",part); |
|
988 if (part==0) |
|
989 { |
|
990 if (Config_getString("HTML_STYLESHEET").isEmpty()) // write default style sheet |
|
991 { |
|
992 //printf("write doxygen.css\n"); |
|
993 startPlainFile("doxygen.css"); |
|
994 |
|
995 // alternative, cooler looking titles |
|
996 //t << "H1 { text-align: center; border-width: thin none thin none;" << endl; |
|
997 //t << " border-style : double; border-color : blue; padding-left : 1em; padding-right : 1em }" << endl; |
|
998 |
|
999 t << defaultStyleSheet; |
|
1000 endPlainFile(); |
|
1001 Doxygen::indexList.addStyleSheetFile("doxygen.css"); |
|
1002 } |
|
1003 else // write user defined style sheet |
|
1004 { |
|
1005 QCString cssname=Config_getString("HTML_STYLESHEET"); |
|
1006 QFileInfo cssfi(cssname); |
|
1007 if (!cssfi.exists() || !cssfi.isFile() || !cssfi.isReadable()) |
|
1008 { |
|
1009 err("Error: style sheet %s does not exist or is not readable!", Config_getString("HTML_STYLESHEET").data()); |
|
1010 } |
|
1011 else |
|
1012 { |
|
1013 // convert style sheet to string |
|
1014 QCString fileStr = fileToString(cssname); |
|
1015 // write the string into the output dir |
|
1016 startPlainFile(cssfi.fileName()); |
|
1017 t << fileStr; |
|
1018 endPlainFile(); |
|
1019 } |
|
1020 Doxygen::indexList.addStyleSheetFile(cssfi.fileName()); |
|
1021 } |
|
1022 } |
|
1023 } |
|
1024 |
|
1025 void HtmlGenerator::startDoxyAnchor(const char *,const char *, |
|
1026 const char *anchor, const char *name, |
|
1027 const char *args) |
|
1028 { |
|
1029 t << "<a class=\"anchor\" id=\"" << anchor << "\"></a>"; |
|
1030 t << "<!-- doxytag: member=\""; |
|
1031 docify(name,TRUE); |
|
1032 t << "\" ref=\""; |
|
1033 docify(anchor,TRUE); |
|
1034 t << "\" args=\""; |
|
1035 docify(args,TRUE); |
|
1036 t << "\" -->"; |
|
1037 } |
|
1038 |
|
1039 void HtmlGenerator::endDoxyAnchor(const char *,const char *) |
|
1040 { |
|
1041 } |
|
1042 |
|
1043 //void HtmlGenerator::newParagraph() |
|
1044 //{ |
|
1045 // t << endl << "<p>" << endl; |
|
1046 //} |
|
1047 |
|
1048 void HtmlGenerator::startParagraph() |
|
1049 { |
|
1050 t << endl << "<p>"; |
|
1051 } |
|
1052 |
|
1053 void HtmlGenerator::endParagraph() |
|
1054 { |
|
1055 t << "</p>" << endl; |
|
1056 } |
|
1057 |
|
1058 void HtmlGenerator::writeString(const char *text) |
|
1059 { |
|
1060 t << text; |
|
1061 } |
|
1062 |
|
1063 void HtmlGenerator::startIndexListItem() |
|
1064 { |
|
1065 t << "<li>"; |
|
1066 } |
|
1067 |
|
1068 void HtmlGenerator::endIndexListItem() |
|
1069 { |
|
1070 t << "</li>" << endl; |
|
1071 } |
|
1072 |
|
1073 void HtmlGenerator::startIndexItem(const char *ref,const char *f) |
|
1074 { |
|
1075 //printf("HtmlGenerator::startIndexItem(%s,%s)\n",ref,f); |
|
1076 QCString *dest; |
|
1077 if (ref || f) |
|
1078 { |
|
1079 if (ref) |
|
1080 { |
|
1081 t << "<a class=\"elRef\" "; |
|
1082 t << "doxygen=\"" << ref << ":"; |
|
1083 if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; |
|
1084 t << "\" "; |
|
1085 } |
|
1086 else |
|
1087 { |
|
1088 t << "<a class=\"el\" "; |
|
1089 } |
|
1090 t << "href=\""; |
|
1091 if (ref) |
|
1092 { |
|
1093 if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; |
|
1094 } |
|
1095 else |
|
1096 { |
|
1097 t << relPath; |
|
1098 } |
|
1099 if (f) t << f << Doxygen::htmlFileExtension << "\">"; |
|
1100 } |
|
1101 else |
|
1102 { |
|
1103 t << "<b>"; |
|
1104 } |
|
1105 } |
|
1106 |
|
1107 void HtmlGenerator::endIndexItem(const char *ref,const char *f) |
|
1108 { |
|
1109 //printf("HtmlGenerator::endIndexItem(%s,%s,%s)\n",ref,f,name); |
|
1110 if (ref || f) |
|
1111 { |
|
1112 t << "</a>"; |
|
1113 } |
|
1114 else |
|
1115 { |
|
1116 t << "</b>"; |
|
1117 } |
|
1118 } |
|
1119 |
|
1120 void HtmlGenerator::writeStartAnnoItem(const char *,const char *f, |
|
1121 const char *path,const char *name) |
|
1122 { |
|
1123 t << "<li>"; |
|
1124 if (path) docify(path); |
|
1125 t << "<a class=\"el\" href=\"" << f << Doxygen::htmlFileExtension << "\">"; |
|
1126 docify(name); |
|
1127 t << "</a> "; |
|
1128 } |
|
1129 |
|
1130 void HtmlGenerator::writeObjectLink(const char *ref,const char *f, |
|
1131 const char *anchor, const char *name) |
|
1132 { |
|
1133 QCString *dest; |
|
1134 if (ref) |
|
1135 { |
|
1136 t << "<a class=\"elRef\" "; |
|
1137 t << "doxygen=\"" << ref << ":"; |
|
1138 if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; |
|
1139 t << "\" "; |
|
1140 } |
|
1141 else |
|
1142 { |
|
1143 t << "<a class=\"el\" "; |
|
1144 } |
|
1145 t << "href=\""; |
|
1146 if (ref) |
|
1147 { |
|
1148 if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; |
|
1149 } |
|
1150 else |
|
1151 { |
|
1152 t << relPath; |
|
1153 } |
|
1154 if (f) t << f << Doxygen::htmlFileExtension; |
|
1155 if (anchor) t << "#" << anchor; |
|
1156 t << "\">"; |
|
1157 docify(name); |
|
1158 t << "</a>"; |
|
1159 } |
|
1160 |
|
1161 void HtmlGenerator::writeCodeLink(const char *ref,const char *f, |
|
1162 const char *anchor, const char *name, |
|
1163 const char *tooltip) |
|
1164 { |
|
1165 QCString *dest; |
|
1166 //printf("writeCodeLink(ref=%s,f=%s,anchor=%s,name=%s,tooltip=%s)\n",ref,f,anchor,name,tooltip); |
|
1167 if (ref) |
|
1168 { |
|
1169 t << "<a class=\"codeRef\" "; |
|
1170 t << "doxygen=\"" << ref << ":"; |
|
1171 if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/"; |
|
1172 t << "\" "; |
|
1173 } |
|
1174 else |
|
1175 { |
|
1176 t << "<a class=\"code\" "; |
|
1177 } |
|
1178 t << "href=\""; |
|
1179 if (ref) |
|
1180 { |
|
1181 if ((dest=Doxygen::tagDestinationDict[ref])) t << relPath << *dest << "/"; |
|
1182 } |
|
1183 else |
|
1184 { |
|
1185 t << relPath; |
|
1186 } |
|
1187 if (f) t << f << Doxygen::htmlFileExtension; |
|
1188 if (anchor) t << "#" << anchor; |
|
1189 t << "\""; |
|
1190 if (tooltip) t << " title=\"" << convertToXML(tooltip) << "\""; |
|
1191 t << ">"; |
|
1192 docify(name); |
|
1193 t << "</a>"; |
|
1194 col+=strlen(name); |
|
1195 } |
|
1196 |
|
1197 void HtmlGenerator::startTextLink(const char *f,const char *anchor) |
|
1198 { |
|
1199 t << "<a href=\""; |
|
1200 if (f) t << relPath << f << Doxygen::htmlFileExtension; |
|
1201 if (anchor) t << "#" << anchor; |
|
1202 t << "\">"; |
|
1203 } |
|
1204 |
|
1205 void HtmlGenerator::endTextLink() |
|
1206 { |
|
1207 t << "</a>"; |
|
1208 } |
|
1209 |
|
1210 void HtmlGenerator::startHtmlLink(const char *url) |
|
1211 { |
|
1212 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); |
|
1213 t << "<a "; |
|
1214 if (generateTreeView) t << "target=\"top\" "; |
|
1215 t << "href=\""; |
|
1216 if (url) t << url; |
|
1217 t << "\">"; |
|
1218 } |
|
1219 |
|
1220 void HtmlGenerator::endHtmlLink() |
|
1221 { |
|
1222 t << "</a>"; |
|
1223 } |
|
1224 |
|
1225 void HtmlGenerator::startGroupHeader() |
|
1226 { |
|
1227 t << "<h2>"; |
|
1228 } |
|
1229 |
|
1230 void HtmlGenerator::endGroupHeader() |
|
1231 { |
|
1232 t << "</h2>" << endl; |
|
1233 } |
|
1234 |
|
1235 void HtmlGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type) |
|
1236 { |
|
1237 switch(type) |
|
1238 { |
|
1239 case SectionInfo::Page: t << "\n\n<h1>"; break; |
|
1240 case SectionInfo::Section: t << "\n\n<h2>"; break; |
|
1241 case SectionInfo::Subsection: t << "\n\n<h3>"; break; |
|
1242 case SectionInfo::Subsubsection: t << "\n\n<h4>"; break; |
|
1243 case SectionInfo::Paragraph: t << "\n\n<h5>"; break; |
|
1244 default: ASSERT(0); break; |
|
1245 } |
|
1246 t << "<a class=\"anchor\" id=\"" << lab << "\">"; |
|
1247 } |
|
1248 |
|
1249 void HtmlGenerator::endSection(const char *,SectionInfo::SectionType type) |
|
1250 { |
|
1251 t << "</a>"; |
|
1252 switch(type) |
|
1253 { |
|
1254 case SectionInfo::Page: t << "</h1>"; break; |
|
1255 case SectionInfo::Section: t << "</h2>"; break; |
|
1256 case SectionInfo::Subsection: t << "</h3>"; break; |
|
1257 case SectionInfo::Subsubsection: t << "</h4>"; break; |
|
1258 case SectionInfo::Paragraph: t << "</h5>"; break; |
|
1259 default: ASSERT(0); break; |
|
1260 } |
|
1261 } |
|
1262 |
|
1263 void HtmlGenerator::docify(const char *str) |
|
1264 { |
|
1265 docify(str,FALSE); |
|
1266 } |
|
1267 |
|
1268 void HtmlGenerator::docify(const char *str,bool inHtmlComment) |
|
1269 { |
|
1270 if (str) |
|
1271 { |
|
1272 const char *p=str; |
|
1273 char c; |
|
1274 while (*p) |
|
1275 { |
|
1276 c=*p++; |
|
1277 switch(c) |
|
1278 { |
|
1279 case '<': t << "<"; break; |
|
1280 case '>': t << ">"; break; |
|
1281 case '&': t << "&"; break; |
|
1282 case '"': t << """; break; |
|
1283 case '-': if (inHtmlComment) t << "-"; else t << "-"; break; |
|
1284 case '\\': |
|
1285 if (*p=='<') |
|
1286 { t << "<"; p++; } |
|
1287 else if (*p=='>') |
|
1288 { t << ">"; p++; } |
|
1289 else |
|
1290 t << "\\"; |
|
1291 break; |
|
1292 default: t << c; |
|
1293 } |
|
1294 } |
|
1295 } |
|
1296 } |
|
1297 |
|
1298 void HtmlGenerator::codify(const char *str) |
|
1299 { |
|
1300 //docify(str); |
|
1301 //static char spaces[]=" "; |
|
1302 if (str) |
|
1303 { |
|
1304 const char *p=str; |
|
1305 char c; |
|
1306 int spacesToNextTabStop; |
|
1307 while (*p) |
|
1308 { |
|
1309 c=*p++; |
|
1310 switch(c) |
|
1311 { |
|
1312 case '\t': spacesToNextTabStop = |
|
1313 Config_getInt("TAB_SIZE") - (col%Config_getInt("TAB_SIZE")); |
|
1314 t << Doxygen::spaces.left(spacesToNextTabStop); |
|
1315 col+=spacesToNextTabStop; |
|
1316 break; |
|
1317 case '\n': t << "\n"; col=0; |
|
1318 break; |
|
1319 //case '\n': t << "<br>"; col=0; |
|
1320 // break; |
|
1321 case '\r': break; |
|
1322 case '<': t << "<"; col++; |
|
1323 break; |
|
1324 case '>': t << ">"; col++; |
|
1325 break; |
|
1326 case '&': t << "&"; col++; |
|
1327 break; |
|
1328 case '\'': t << "'"; col++; // ' is not valid HTML |
|
1329 break; |
|
1330 case '"': t << """; col++; |
|
1331 break; |
|
1332 //case ' ': t << " "; col++; |
|
1333 // break; |
|
1334 case '\\': |
|
1335 if (*p=='<') |
|
1336 { t << "<"; p++; } |
|
1337 else if (*p=='>') |
|
1338 { t << ">"; p++; } |
|
1339 else |
|
1340 t << "\\"; |
|
1341 col++; |
|
1342 break; |
|
1343 default: t << c; |
|
1344 col++; |
|
1345 break; |
|
1346 } |
|
1347 } |
|
1348 } |
|
1349 } |
|
1350 |
|
1351 void HtmlGenerator::writeChar(char c) |
|
1352 { |
|
1353 char cs[2]; |
|
1354 cs[0]=c; |
|
1355 cs[1]=0; |
|
1356 docify(cs); |
|
1357 } |
|
1358 |
|
1359 void HtmlGenerator::startClassDiagram() |
|
1360 { |
|
1361 //t << "<p>"; |
|
1362 t << "<div class=\"dynheader\">" << endl; |
|
1363 } |
|
1364 |
|
1365 void HtmlGenerator::endClassDiagram(const ClassDiagram &d, |
|
1366 const char *fileName,const char *name) |
|
1367 { |
|
1368 t << "</div>" << endl; |
|
1369 t << "<div class=\"dynsection\">" << endl; |
|
1370 t << " <div class=\"center\">" << endl; |
|
1371 t << " <img src=\""; |
|
1372 t << relPath << fileName << ".png\" usemap=\"#"; |
|
1373 docify(name); |
|
1374 t << "_map\" alt=\"\"/>" << endl; |
|
1375 t << " <map id=\""; |
|
1376 docify(name); |
|
1377 t << "_map\" name=\""; |
|
1378 docify(name); |
|
1379 t << "_map\">" << endl; |
|
1380 |
|
1381 d.writeImage(t,dir,relPath,fileName); |
|
1382 t << " </div>" << endl; |
|
1383 t << "</div>" << endl; |
|
1384 } |
|
1385 |
|
1386 |
|
1387 void HtmlGenerator::startMemberList() |
|
1388 { |
|
1389 DBG_HTML(t << "<!-- startMemberList -->" << endl) |
|
1390 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1391 { |
|
1392 } |
|
1393 else |
|
1394 { |
|
1395 t << "<ul>" << endl; |
|
1396 } |
|
1397 } |
|
1398 |
|
1399 void HtmlGenerator::endMemberList() |
|
1400 { |
|
1401 DBG_HTML(t << "<!-- endMemberList -->" << endl) |
|
1402 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1403 { |
|
1404 } |
|
1405 else |
|
1406 { |
|
1407 t << "</ul>" << endl; |
|
1408 } |
|
1409 } |
|
1410 |
|
1411 // annonymous type: |
|
1412 // 0 = single column right aligned |
|
1413 // 1 = double column left aligned |
|
1414 // 2 = single column left aligned |
|
1415 void HtmlGenerator::startMemberItem(int annoType) |
|
1416 { |
|
1417 DBG_HTML(t << "<!-- startMemberItem() -->" << endl) |
|
1418 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1419 { |
|
1420 t << "<tr>"; |
|
1421 switch(annoType) |
|
1422 { |
|
1423 case 0: t << "<td class=\"memItemLeft\" align=\"right\" valign=\"top\">"; break; |
|
1424 case 1: t << "<td class=\"memItemLeft\" >"; break; |
|
1425 case 2: t << "<td class=\"memItemLeft\" valign=\"top\">"; break; |
|
1426 default: t << "<td class=\"memTemplParams\" colspan=\"2\">"; break; |
|
1427 } |
|
1428 } |
|
1429 else |
|
1430 { |
|
1431 t << "<li>"; |
|
1432 } |
|
1433 } |
|
1434 |
|
1435 void HtmlGenerator::endMemberItem() |
|
1436 { |
|
1437 //DBG_HTML(t << "<!-- endMemberItem(" << (int)inGroup << "," << fileName << "," << headerName << " -->" << endl) |
|
1438 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1439 { |
|
1440 t << "</td></tr>"; |
|
1441 } |
|
1442 t << endl; |
|
1443 } |
|
1444 |
|
1445 void HtmlGenerator::startMemberTemplateParams() |
|
1446 { |
|
1447 } |
|
1448 |
|
1449 void HtmlGenerator::endMemberTemplateParams() |
|
1450 { |
|
1451 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1452 { |
|
1453 t << "</td></tr>" << endl; |
|
1454 t << "<tr><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">"; |
|
1455 } |
|
1456 } |
|
1457 |
|
1458 |
|
1459 void HtmlGenerator::insertMemberAlign(bool templ) |
|
1460 { |
|
1461 DBG_HTML(t << "<!-- insertMemberAlign -->" << endl) |
|
1462 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1463 { |
|
1464 QCString className = templ ? "memTemplItemRight" : "memItemRight"; |
|
1465 t << " </td><td class=\"" << className << "\" valign=\"bottom\">"; |
|
1466 } |
|
1467 } |
|
1468 |
|
1469 void HtmlGenerator::startMemberDescription() |
|
1470 { |
|
1471 DBG_HTML(t << "<!-- startMemberDescription -->" << endl) |
|
1472 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1473 { |
|
1474 t << "<tr><td class=\"mdescLeft\"> </td><td class=\"mdescRight\">"; |
|
1475 } |
|
1476 else |
|
1477 { |
|
1478 t << "<dl class=\"el\"><dd class=\"mdescRight\">"; |
|
1479 } |
|
1480 } |
|
1481 |
|
1482 void HtmlGenerator::endMemberDescription() |
|
1483 { |
|
1484 DBG_HTML(t << "<!-- endMemberDescription -->" << endl) |
|
1485 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1486 { |
|
1487 t << "<br/></td></tr>" << endl; |
|
1488 } |
|
1489 else |
|
1490 { |
|
1491 t << "<br/></dl>"; |
|
1492 } |
|
1493 } |
|
1494 |
|
1495 void HtmlGenerator::startMemberSections() |
|
1496 { |
|
1497 DBG_HTML(t << "<!-- startMemberSections -->" << endl) |
|
1498 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1499 { |
|
1500 t << "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">" << endl; |
|
1501 // HTML is not recursively decomposable, sorry |
|
1502 //t << "<tr><td></td></tr>" << endl; |
|
1503 } |
|
1504 } |
|
1505 |
|
1506 void HtmlGenerator::endMemberSections() |
|
1507 { |
|
1508 DBG_HTML(t << "<!-- endMemberSections -->" << endl) |
|
1509 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1510 { |
|
1511 t << "</table>" << endl; |
|
1512 } |
|
1513 } |
|
1514 |
|
1515 void HtmlGenerator::startMemberHeader() |
|
1516 { |
|
1517 DBG_HTML(t << "<!-- startMemberHeader -->" << endl) |
|
1518 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1519 { |
|
1520 t << "<tr><td colspan=\"2\"><h2>"; |
|
1521 } |
|
1522 else |
|
1523 { |
|
1524 startGroupHeader(); |
|
1525 } |
|
1526 } |
|
1527 |
|
1528 void HtmlGenerator::endMemberHeader() |
|
1529 { |
|
1530 DBG_HTML(t << "<!-- endMemberHeader -->" << endl) |
|
1531 if (Config_getBool("HTML_ALIGN_MEMBERS")) |
|
1532 { |
|
1533 t << "</h2></td></tr>" << endl; |
|
1534 } |
|
1535 else |
|
1536 { |
|
1537 endGroupHeader(); |
|
1538 } |
|
1539 } |
|
1540 |
|
1541 void HtmlGenerator::startMemberSubtitle() |
|
1542 { |
|
1543 DBG_HTML(t << "<!-- startMemberSubtitle -->" << endl) |
|
1544 if (Config_getBool("HTML_ALIGN_MEMBERS")) t << "<tr><td colspan=\"2\">"; |
|
1545 } |
|
1546 |
|
1547 void HtmlGenerator::endMemberSubtitle() |
|
1548 { |
|
1549 DBG_HTML(t << "<!-- endMemberSubtitle -->" << endl) |
|
1550 if (Config_getBool("HTML_ALIGN_MEMBERS")) t << "<br/><br/></td></tr>" << endl; |
|
1551 } |
|
1552 |
|
1553 void HtmlGenerator::startIndexList() |
|
1554 { |
|
1555 t << "<table>" << endl; |
|
1556 } |
|
1557 |
|
1558 void HtmlGenerator::endIndexList() |
|
1559 { |
|
1560 t << "</table>" << endl; |
|
1561 } |
|
1562 |
|
1563 void HtmlGenerator::startIndexKey() |
|
1564 { |
|
1565 // inserted 'class = ...', 02 jan 2002, jh |
|
1566 t << " <tr><td class=\"indexkey\">"; |
|
1567 } |
|
1568 |
|
1569 void HtmlGenerator::endIndexKey() |
|
1570 { |
|
1571 t << "</td>"; |
|
1572 } |
|
1573 |
|
1574 void HtmlGenerator::startIndexValue(bool) |
|
1575 { |
|
1576 // inserted 'class = ...', 02 jan 2002, jh |
|
1577 t << "<td class=\"indexvalue\">"; |
|
1578 } |
|
1579 |
|
1580 void HtmlGenerator::endIndexValue(const char *,bool) |
|
1581 { |
|
1582 t << "</td></tr>" << endl; |
|
1583 } |
|
1584 |
|
1585 void HtmlGenerator::startMemberDocList() |
|
1586 { |
|
1587 DBG_HTML(t << "<!-- startMemberDocList -->" << endl;) |
|
1588 //t << "<table class=\"memlist\">" << endl; |
|
1589 //t << " <tr>" << endl; |
|
1590 //t << " <td>" << endl; |
|
1591 } |
|
1592 |
|
1593 void HtmlGenerator::endMemberDocList() |
|
1594 { |
|
1595 DBG_HTML(t << "<!-- endMemberDocList -->" << endl;) |
|
1596 //t << " </td>" << endl; |
|
1597 //t << " </tr>" << endl; |
|
1598 //t << "</table>" << endl; |
|
1599 } |
|
1600 |
|
1601 void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *) |
|
1602 { |
|
1603 DBG_HTML(t << "<!-- startMemberDoc -->" << endl;) |
|
1604 //t << "<p>" << endl; |
|
1605 |
|
1606 t << "\n<div class=\"memitem\">" << endl; |
|
1607 //t << "<table>" << endl; |
|
1608 //t << " <tr>" << endl; |
|
1609 //t << " <td>" << endl; |
|
1610 //t << " <table class=\"memproto\">" << endl; |
|
1611 t << "<div class=\"memproto\">" << endl; |
|
1612 |
|
1613 } |
|
1614 |
|
1615 void HtmlGenerator::startMemberDocPrefixItem() |
|
1616 { |
|
1617 DBG_HTML(t << "<!-- startMemberDocPrefixItem -->" << endl;) |
|
1618 //t << " <tr>" << endl; |
|
1619 //t << " <td class=\"memtemplate\" colspan=\"5\">"; |
|
1620 t << "<div class=\"memtemplate\">" << endl; |
|
1621 } |
|
1622 |
|
1623 void HtmlGenerator::endMemberDocPrefixItem() |
|
1624 { |
|
1625 DBG_HTML(t << "<!-- endMemberDocPrefixItem -->" << endl;) |
|
1626 //t << "</td>" << endl; |
|
1627 //t << " </tr>" << endl; |
|
1628 t << "</div>" << endl; |
|
1629 } |
|
1630 |
|
1631 void HtmlGenerator::startMemberDocName(bool /*align*/) |
|
1632 { |
|
1633 DBG_HTML(t << "<!-- startMemberDocName -->" << endl;) |
|
1634 |
|
1635 t << " <table class=\"memname\">" << endl; |
|
1636 |
|
1637 t << " <tr>" << endl; |
|
1638 t << " <td class=\"memname\">"; |
|
1639 } |
|
1640 |
|
1641 void HtmlGenerator::endMemberDocName() |
|
1642 { |
|
1643 DBG_HTML(t << "<!-- endMemberDocName -->" << endl;) |
|
1644 t << "</td>" << endl; |
|
1645 } |
|
1646 |
|
1647 void HtmlGenerator::startParameterList(bool openBracket) |
|
1648 { |
|
1649 DBG_HTML(t << "<!-- startParameterList -->" << endl;) |
|
1650 t << " <td>"; |
|
1651 if (openBracket) t << "("; |
|
1652 t << "</td>" << endl; |
|
1653 } |
|
1654 |
|
1655 void HtmlGenerator::startParameterType(bool first,const char *key) |
|
1656 { |
|
1657 if (first) |
|
1658 { |
|
1659 DBG_HTML(t << "<!-- startFirstParameterType -->" << endl;) |
|
1660 t << " <td class=\"paramtype\">"; |
|
1661 } |
|
1662 else |
|
1663 { |
|
1664 DBG_HTML(t << "<!-- startParameterType -->" << endl;) |
|
1665 t << " <tr>" << endl; |
|
1666 t << " <td class=\"paramkey\">"; |
|
1667 if (key) t << key; |
|
1668 t << "</td>" << endl; |
|
1669 t << " <td></td>" << endl; |
|
1670 t << " <td class=\"paramtype\">"; |
|
1671 } |
|
1672 } |
|
1673 |
|
1674 void HtmlGenerator::endParameterType() |
|
1675 { |
|
1676 DBG_HTML(t << "<!-- endParameterType -->" << endl;) |
|
1677 t << " </td>" << endl; |
|
1678 } |
|
1679 |
|
1680 void HtmlGenerator::startParameterName(bool /*oneArgOnly*/) |
|
1681 { |
|
1682 DBG_HTML(t << "<!-- startParameterName -->" << endl;) |
|
1683 t << " <td class=\"paramname\">"; |
|
1684 } |
|
1685 |
|
1686 void HtmlGenerator::endParameterName(bool last,bool emptyList,bool closeBracket) |
|
1687 { |
|
1688 DBG_HTML(t << "<!-- endParameterName -->" << endl;) |
|
1689 if (last) |
|
1690 { |
|
1691 if (emptyList) |
|
1692 { |
|
1693 t << "</td>" << endl; |
|
1694 t << " <td>"; |
|
1695 if (closeBracket) t << " )"; |
|
1696 t << " </td>" << endl; |
|
1697 t << " <td>"; |
|
1698 } |
|
1699 else |
|
1700 { |
|
1701 t << "</td><td> </td>" << endl; |
|
1702 t << " </tr>" << endl; |
|
1703 t << " <tr>" << endl; |
|
1704 t << " <td></td>" << endl; |
|
1705 t << " <td>"; |
|
1706 if (closeBracket) t << ")"; |
|
1707 t << "</td>" << endl; |
|
1708 t << " <td></td><td></td><td>"; |
|
1709 } |
|
1710 } |
|
1711 else |
|
1712 { |
|
1713 t << "</td>" << endl; |
|
1714 t << " </tr>" << endl; |
|
1715 } |
|
1716 } |
|
1717 |
|
1718 void HtmlGenerator::endParameterList() |
|
1719 { |
|
1720 DBG_HTML(t << "<!-- endParameterList -->" << endl;) |
|
1721 t << "</td>" << endl; |
|
1722 t << " </tr>" << endl; |
|
1723 } |
|
1724 |
|
1725 void HtmlGenerator::endMemberDoc(bool hasArgs) |
|
1726 { |
|
1727 DBG_HTML(t << "<!-- endMemberDoc -->" << endl;) |
|
1728 if (!hasArgs) |
|
1729 { |
|
1730 t << " </tr>" << endl; |
|
1731 } |
|
1732 t << " </table>" << endl; |
|
1733 //t << " </td>" << endl; |
|
1734 //t << " </tr>" << endl; |
|
1735 //t << "</table>" << endl; |
|
1736 t << "</div>" << endl; |
|
1737 } |
|
1738 |
|
1739 void HtmlGenerator::startDotGraph() |
|
1740 { |
|
1741 t << "<div class=\"dynheader\">" << endl; |
|
1742 } |
|
1743 |
|
1744 void HtmlGenerator::endDotGraph(const DotClassGraph &g) |
|
1745 { |
|
1746 t << "</div>" << endl; |
|
1747 t << "<div class=\"dynsection\">" << endl; |
|
1748 g.writeGraph(t,BITMAP,dir,relPath); |
|
1749 if (Config_getBool("GENERATE_LEGEND")) |
|
1750 { |
|
1751 t << "<center><span class=\"legend\">["; |
|
1752 startHtmlLink(relPath+"graph_legend"+Doxygen::htmlFileExtension); |
|
1753 t << theTranslator->trLegend(); |
|
1754 endHtmlLink(); |
|
1755 t << "]</span></center>"; |
|
1756 } |
|
1757 t << "</div>" << endl; |
|
1758 } |
|
1759 |
|
1760 void HtmlGenerator::startInclDepGraph() |
|
1761 { |
|
1762 t << "<div class=\"dynheader\">" << endl; |
|
1763 } |
|
1764 |
|
1765 void HtmlGenerator::endInclDepGraph(const DotInclDepGraph &g) |
|
1766 { |
|
1767 t << "</div>" << endl; |
|
1768 t << "<div class=\"dynsection\">" << endl; |
|
1769 g.writeGraph(t,BITMAP,dir,relPath); |
|
1770 t << "</div>" << endl; |
|
1771 } |
|
1772 |
|
1773 void HtmlGenerator::startGroupCollaboration() |
|
1774 { |
|
1775 t << "<div class=\"dynheader\">" << endl; |
|
1776 } |
|
1777 |
|
1778 void HtmlGenerator::endGroupCollaboration(const DotGroupCollaboration &g) |
|
1779 { |
|
1780 t << "</div>" << endl; |
|
1781 t << "<div class=\"dynsection\">" << endl; |
|
1782 g.writeGraph(t,BITMAP,dir,relPath); |
|
1783 t << "</div>" << endl; |
|
1784 } |
|
1785 |
|
1786 void HtmlGenerator::startCallGraph() |
|
1787 { |
|
1788 t << "<div class=\"dynheader\">" << endl; |
|
1789 } |
|
1790 |
|
1791 void HtmlGenerator::endCallGraph(const DotCallGraph &g) |
|
1792 { |
|
1793 t << "</div>" << endl; |
|
1794 t << "<div class=\"dynsection\">" << endl; |
|
1795 g.writeGraph(t,BITMAP,dir,relPath); |
|
1796 t << "</div>" << endl; |
|
1797 } |
|
1798 |
|
1799 void HtmlGenerator::startDirDepGraph() |
|
1800 { |
|
1801 t << "<div class=\"dynheader\">" << endl; |
|
1802 } |
|
1803 |
|
1804 void HtmlGenerator::endDirDepGraph(const DotDirDeps &g) |
|
1805 { |
|
1806 t << "</div>" << endl; |
|
1807 t << "<div class=\"dynsection\">" << endl; |
|
1808 g.writeGraph(t,BITMAP,dir,relPath); |
|
1809 t << "</div>" << endl; |
|
1810 } |
|
1811 |
|
1812 void HtmlGenerator::writeGraphicalHierarchy(const DotGfxHierarchyTable &g) |
|
1813 { |
|
1814 g.writeGraph(t,dir); |
|
1815 } |
|
1816 |
|
1817 void HtmlGenerator::startMemberGroupHeader(bool) |
|
1818 { |
|
1819 t << "<tr><td colspan=\"2\"><div class=\"groupHeader\">"; |
|
1820 } |
|
1821 |
|
1822 void HtmlGenerator::endMemberGroupHeader() |
|
1823 { |
|
1824 t << "</div></td></tr>" << endl; |
|
1825 } |
|
1826 |
|
1827 void HtmlGenerator::startMemberGroupDocs() |
|
1828 { |
|
1829 t << "<tr><td colspan=\"2\"><div class=\"groupText\">"; |
|
1830 } |
|
1831 |
|
1832 void HtmlGenerator::endMemberGroupDocs() |
|
1833 { |
|
1834 t << "</div></td></tr>" << endl; |
|
1835 } |
|
1836 |
|
1837 void HtmlGenerator::startMemberGroup() |
|
1838 { |
|
1839 } |
|
1840 |
|
1841 void HtmlGenerator::endMemberGroup(bool) |
|
1842 { |
|
1843 } |
|
1844 |
|
1845 void HtmlGenerator::startIndent() |
|
1846 { |
|
1847 DBG_HTML(t << "<!-- startIndent -->" << endl;) |
|
1848 |
|
1849 t << "<div class=\"memdoc\">\n"; |
|
1850 } |
|
1851 |
|
1852 void HtmlGenerator::endIndent() |
|
1853 { |
|
1854 DBG_HTML(t << "<!-- endIndent -->" << endl;) |
|
1855 t << endl << "</div>" << endl << "</div>" << endl; |
|
1856 } |
|
1857 |
|
1858 void HtmlGenerator::addIndexItem(const char *,const char *) |
|
1859 { |
|
1860 } |
|
1861 |
|
1862 void HtmlGenerator::writeNonBreakableSpace(int n) |
|
1863 { |
|
1864 int i; |
|
1865 for (i=0;i<n;i++) |
|
1866 { |
|
1867 t << " "; |
|
1868 } |
|
1869 } |
|
1870 |
|
1871 void HtmlGenerator::writeLineNumber(const char *ref,const char *filename, |
|
1872 const char *anchor,int l) |
|
1873 { |
|
1874 QCString lineNumber,lineAnchor; |
|
1875 lineNumber.sprintf("%05d",l); |
|
1876 lineAnchor.sprintf("l%05d",l); |
|
1877 |
|
1878 if (filename) |
|
1879 { |
|
1880 startCodeAnchor(lineAnchor); |
|
1881 writeCodeLink(ref,filename,anchor,lineNumber,0); |
|
1882 endCodeAnchor(); |
|
1883 } |
|
1884 else |
|
1885 { |
|
1886 startCodeAnchor(lineAnchor); |
|
1887 codify(lineNumber); |
|
1888 endCodeAnchor(); |
|
1889 } |
|
1890 codify(" "); |
|
1891 } |
|
1892 |
|
1893 void HtmlGenerator::startSimpleSect(SectionTypes, |
|
1894 const char *filename,const char *anchor, |
|
1895 const char *title) |
|
1896 { |
|
1897 t << "<dl><dt><b>"; |
|
1898 if (filename) |
|
1899 { |
|
1900 writeObjectLink(0,filename,anchor,title); |
|
1901 } |
|
1902 else |
|
1903 { |
|
1904 docify(title); |
|
1905 } |
|
1906 t << "</b></dt>"; |
|
1907 } |
|
1908 |
|
1909 void HtmlGenerator::endSimpleSect() |
|
1910 { |
|
1911 t << "</dl>"; |
|
1912 } |
|
1913 |
|
1914 void HtmlGenerator::startParamList(ParamListTypes, |
|
1915 const char *title) |
|
1916 { |
|
1917 t << "<dl><dt><b>"; |
|
1918 docify(title); |
|
1919 t << "</b></dt>"; |
|
1920 } |
|
1921 |
|
1922 void HtmlGenerator::endParamList() |
|
1923 { |
|
1924 t << "</dl>"; |
|
1925 } |
|
1926 |
|
1927 void HtmlGenerator::printDoc(DocNode *n,const char *langExt) |
|
1928 { |
|
1929 HtmlDocVisitor *visitor = new HtmlDocVisitor(t,*this,langExt); |
|
1930 n->accept(visitor); |
|
1931 delete visitor; |
|
1932 } |
|
1933 |
|
1934 //---------------- helpers for index generation ----------------------------- |
|
1935 |
|
1936 static void startQuickIndexList(QTextStream &t,bool compact) |
|
1937 { |
|
1938 if (compact) |
|
1939 { |
|
1940 t << " <div class=\"tabs\">\n"; |
|
1941 t << " <ul>\n"; |
|
1942 } |
|
1943 else |
|
1944 { |
|
1945 t << "<ul>"; |
|
1946 } |
|
1947 } |
|
1948 |
|
1949 static void endQuickIndexList(QTextStream &t,bool compact) |
|
1950 { |
|
1951 if (compact) |
|
1952 { |
|
1953 t << " </ul>\n"; |
|
1954 t << " </div>\n"; |
|
1955 } |
|
1956 else |
|
1957 { |
|
1958 t << "</ul>\n"; |
|
1959 } |
|
1960 } |
|
1961 |
|
1962 static void startQuickIndexItem(QTextStream &t,const char *l, |
|
1963 bool hl,bool /*compact*/, |
|
1964 const QCString &relPath) |
|
1965 { |
|
1966 t << " <li"; if (hl) t << " class=\"current\""; |
|
1967 t << "><a "; |
|
1968 t << "href=\"" << relPath << l << "\">"; |
|
1969 t << "<span>"; |
|
1970 } |
|
1971 |
|
1972 static void endQuickIndexItem(QTextStream &t) |
|
1973 { |
|
1974 t << "</span>"; |
|
1975 t << "</a>"; |
|
1976 t << "</li>\n"; |
|
1977 } |
|
1978 |
|
1979 static QCString fixSpaces(const QCString &s) |
|
1980 { |
|
1981 return substitute(s," "," "); |
|
1982 } |
|
1983 |
|
1984 static bool quickLinkVisible(LayoutNavEntry::Kind kind) |
|
1985 { |
|
1986 switch (kind) |
|
1987 { |
|
1988 case LayoutNavEntry::MainPage: return TRUE; |
|
1989 case LayoutNavEntry::Pages: return indexedPages>0; |
|
1990 case LayoutNavEntry::Modules: return documentedGroups>0; |
|
1991 case LayoutNavEntry::Namespaces: return documentedNamespaces>0; |
|
1992 case LayoutNavEntry::NamespaceMembers: return documentedNamespaceMembers[NMHL_All]>0; |
|
1993 case LayoutNavEntry::Classes: return annotatedClasses>0; |
|
1994 case LayoutNavEntry::ClassAnnotated: return annotatedClasses>0; |
|
1995 case LayoutNavEntry::ClassHierarchy: return hierarchyClasses>0; |
|
1996 case LayoutNavEntry::ClassMembers: return documentedClassMembers[CMHL_All]>0; |
|
1997 case LayoutNavEntry::Files: return documentedHtmlFiles>0; |
|
1998 case LayoutNavEntry::FileGlobals: return documentedFileMembers[FMHL_All]>0; |
|
1999 case LayoutNavEntry::Dirs: return documentedDirs>0; |
|
2000 case LayoutNavEntry::Examples: return Doxygen::exampleSDict->count()>0; |
|
2001 } |
|
2002 return FALSE; |
|
2003 } |
|
2004 |
|
2005 static void renderQuickLinksAsTree(QTextStream &t,const QCString &relPath,LayoutNavEntry *root) |
|
2006 |
|
2007 { |
|
2008 QListIterator<LayoutNavEntry> li(root->children()); |
|
2009 LayoutNavEntry *entry; |
|
2010 int count=0; |
|
2011 for (li.toFirst();(entry=li.current());++li) |
|
2012 { |
|
2013 if (entry->visible() && quickLinkVisible(entry->kind())) count++; |
|
2014 } |
|
2015 if (count>0) // at least one item is visible |
|
2016 { |
|
2017 startQuickIndexList(t,FALSE); |
|
2018 for (li.toFirst();(entry=li.current());++li) |
|
2019 { |
|
2020 if (entry->visible() && quickLinkVisible(entry->kind())) |
|
2021 { |
|
2022 startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension, |
|
2023 FALSE,FALSE,relPath); |
|
2024 t << fixSpaces(entry->title()); |
|
2025 endQuickIndexItem(t); |
|
2026 // recursive into child list |
|
2027 renderQuickLinksAsTree(t,relPath,entry); |
|
2028 } |
|
2029 } |
|
2030 endQuickIndexList(t,FALSE); |
|
2031 } |
|
2032 } |
|
2033 |
|
2034 |
|
2035 static void renderQuickLinksAsTabs(QTextStream &t,const QCString &relPath, |
|
2036 LayoutNavEntry *hlEntry,LayoutNavEntry::Kind kind, |
|
2037 bool highlightParent,bool highlightSearch) |
|
2038 { |
|
2039 if (hlEntry->parent()) // first draw the tabs for the parent of hlEntry |
|
2040 { |
|
2041 renderQuickLinksAsTabs(t,relPath,hlEntry->parent(),kind,highlightParent,highlightSearch); |
|
2042 } |
|
2043 if (hlEntry->parent() && hlEntry->parent()->children().count()>0) // draw tabs for row containing hlEntry |
|
2044 { |
|
2045 QListIterator<LayoutNavEntry> li(hlEntry->parent()->children()); |
|
2046 LayoutNavEntry *entry; |
|
2047 |
|
2048 int count=0; |
|
2049 for (li.toFirst();(entry=li.current());++li) |
|
2050 { |
|
2051 if (entry->visible() && quickLinkVisible(entry->kind())) count++; |
|
2052 } |
|
2053 if (count>0) // at least one item is visible |
|
2054 { |
|
2055 startQuickIndexList(t,TRUE); |
|
2056 for (li.toFirst();(entry=li.current());++li) |
|
2057 { |
|
2058 if (entry->visible() && quickLinkVisible(entry->kind())) |
|
2059 { |
|
2060 startQuickIndexItem(t,entry->baseFile()+Doxygen::htmlFileExtension, |
|
2061 entry==hlEntry && (entry->children().count()>0 || (entry->kind()==kind && !highlightParent)), |
|
2062 TRUE,relPath); |
|
2063 t << fixSpaces(entry->title()); |
|
2064 endQuickIndexItem(t); |
|
2065 } |
|
2066 } |
|
2067 if (hlEntry->parent()==LayoutDocManager::instance().rootNavEntry()) |
|
2068 { |
|
2069 #if 0 // old PHP based search engine |
|
2070 // last item of the top row -> special case for search engine |
|
2071 if (Config_getBool("SEARCHENGINE")) |
|
2072 { |
|
2073 QCString searchFor = fixSpaces(theTranslator->trSearchForIndex()); |
|
2074 if (searchFor.at(0)=='S') searchFor="<u>S</u>"+searchFor.mid(1); |
|
2075 t << " <li>\n"; |
|
2076 t << " <form action=\"" << relPath << "search.php\" method=\"get\">\n"; |
|
2077 t << " <table cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n"; |
|
2078 t << " <tr>\n"; |
|
2079 t << " <td><label> " << searchFor << " </label></td>\n"; |
|
2080 if (!highlightSearch) |
|
2081 { |
|
2082 t << " <td><input type=\"text\" name=\"query\" value=\"\" size=\"20\" accesskey=\"s\"/></td>\n"; |
|
2083 t << " </tr>\n"; |
|
2084 t << " </table>\n"; |
|
2085 t << " </form>\n"; |
|
2086 t << " </li>\n"; |
|
2087 } |
|
2088 } |
|
2089 if (!highlightSearch) // on the search page the page will be ended by the |
|
2090 // page itself |
|
2091 { |
|
2092 endQuickIndexList(t,TRUE); |
|
2093 } |
|
2094 #endif |
|
2095 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); |
|
2096 static bool searchEngine = Config_getBool("SEARCHENGINE"); |
|
2097 static bool serverBasedSearch = Config_getBool("SERVER_BASED_SEARCH"); |
|
2098 if (searchEngine && !generateTreeView) |
|
2099 { |
|
2100 if (!serverBasedSearch) // pure client side search |
|
2101 { |
|
2102 t << " <li>\n"; |
|
2103 t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; |
|
2104 t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/search.png\"\n"; |
|
2105 t << " onmouseover=\"return searchBox.OnSearchSelectShow()\"\n"; |
|
2106 t << " onmouseout=\"return searchBox.OnSearchSelectHide()\"\n"; |
|
2107 t << " alt=\"\"/>\n"; |
|
2108 t << " <input type=\"text\" id=\"MSearchField\" value=\"" |
|
2109 << theTranslator->trSearch() << "\" accesskey=\"S\"\n"; |
|
2110 t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; |
|
2111 t << " onblur=\"searchBox.OnSearchFieldFocus(false)\" \n"; |
|
2112 t << " onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n"; |
|
2113 t << " <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\">" |
|
2114 << "<img id=\"MSearchCloseImg\" border=\"0\" src=\"" << relPath << "search/close.png\" alt=\"\"/></a>\n"; |
|
2115 t << " </div>\n"; |
|
2116 t << " </li>\n"; |
|
2117 } |
|
2118 else if (!generateTreeView) // server based search |
|
2119 { |
|
2120 t << " <li>\n"; |
|
2121 t << " <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n"; |
|
2122 t << " <form id=\"FSearchBox\" action=\"" << relPath << "search.php\" method=\"get\">\n"; |
|
2123 t << " <img id=\"MSearchSelect\" src=\"" << relPath << "search/search.png\" alt=\"\"/>\n"; |
|
2124 if (!highlightSearch) |
|
2125 { |
|
2126 t << " <input type=\"text\" id=\"MSearchField\" name=\"query\" value=\"" |
|
2127 << theTranslator->trSearch() << "\" size=\"20\" accesskey=\"S\" \n"; |
|
2128 t << " onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n"; |
|
2129 t << " onblur=\"searchBox.OnSearchFieldFocus(false)\"/>\n"; |
|
2130 t << " </form>\n"; |
|
2131 t << " </div>\n"; |
|
2132 t << " </li>\n"; |
|
2133 } |
|
2134 } |
|
2135 } |
|
2136 if (!highlightSearch) // on the search page the page will be ended by the |
|
2137 // page itself |
|
2138 { |
|
2139 endQuickIndexList(t,TRUE); |
|
2140 } |
|
2141 } |
|
2142 else // normal case |
|
2143 { |
|
2144 endQuickIndexList(t,TRUE); |
|
2145 } |
|
2146 } |
|
2147 } |
|
2148 } |
|
2149 |
|
2150 static void writeDefaultQuickLinks(QTextStream &t,bool compact, |
|
2151 HighlightedItem hli,const QCString &relPath) |
|
2152 { |
|
2153 LayoutNavEntry *root = LayoutDocManager::instance().rootNavEntry(); |
|
2154 LayoutNavEntry::Kind kind = (LayoutNavEntry::Kind)-1; |
|
2155 bool highlightParent=FALSE; |
|
2156 switch (hli) // map HLI enums to LayoutNavEntry::Kind enums |
|
2157 { |
|
2158 case HLI_Main: kind = LayoutNavEntry::MainPage; break; |
|
2159 case HLI_Modules: kind = LayoutNavEntry::Modules; break; |
|
2160 case HLI_Directories: kind = LayoutNavEntry::Dirs; break; |
|
2161 case HLI_Namespaces: kind = LayoutNavEntry::Namespaces; break; |
|
2162 case HLI_Hierarchy: kind = LayoutNavEntry::ClassHierarchy; break; |
|
2163 case HLI_Classes: kind = LayoutNavEntry::Classes; break; |
|
2164 case HLI_Annotated: kind = LayoutNavEntry::ClassAnnotated; break; |
|
2165 case HLI_Files: kind = LayoutNavEntry::Files; break; |
|
2166 case HLI_NamespaceMembers: kind = LayoutNavEntry::NamespaceMembers; break; |
|
2167 case HLI_Functions: kind = LayoutNavEntry::ClassMembers; break; |
|
2168 case HLI_Globals: kind = LayoutNavEntry::FileGlobals; break; |
|
2169 case HLI_Pages: kind = LayoutNavEntry::Pages; break; |
|
2170 case HLI_Examples: kind = LayoutNavEntry::Examples; break; |
|
2171 case HLI_ClassVisible: kind = LayoutNavEntry::Classes; highlightParent = TRUE; break; |
|
2172 case HLI_NamespaceVisible: kind = LayoutNavEntry::Namespaces; highlightParent = TRUE; break; |
|
2173 case HLI_FileVisible: kind = LayoutNavEntry::Files; highlightParent = TRUE; break; |
|
2174 case HLI_None: break; |
|
2175 case HLI_Search: break; |
|
2176 } |
|
2177 |
|
2178 if (compact) |
|
2179 { |
|
2180 // find highlighted index item |
|
2181 LayoutNavEntry *hlEntry = root->find(kind); |
|
2182 if (!hlEntry) // highlighted item not found in the index! -> just show the level 1 index... |
|
2183 { |
|
2184 highlightParent=TRUE; |
|
2185 hlEntry = root->children().getFirst(); |
|
2186 if (hlEntry==0) |
|
2187 { |
|
2188 return; // argl, empty index! |
|
2189 } |
|
2190 } |
|
2191 renderQuickLinksAsTabs(t,relPath,hlEntry,kind,highlightParent,hli==HLI_Search); |
|
2192 } |
|
2193 else |
|
2194 { |
|
2195 renderQuickLinksAsTree(t,relPath,root); |
|
2196 } |
|
2197 } |
|
2198 |
|
2199 void HtmlGenerator::startQuickIndices() |
|
2200 { |
|
2201 if (!Config_getBool("DISABLE_INDEX")) |
|
2202 { |
|
2203 t << "<div class=\"navigation\" id=\"top\">" << endl; |
|
2204 } |
|
2205 } |
|
2206 |
|
2207 void HtmlGenerator::endQuickIndices() |
|
2208 { |
|
2209 if (!Config_getBool("DISABLE_INDEX")) |
|
2210 { |
|
2211 t << "</div>" << endl; |
|
2212 } |
|
2213 } |
|
2214 |
|
2215 void HtmlGenerator::startContents() |
|
2216 { |
|
2217 t << "<div class=\"contents\">" << endl; |
|
2218 } |
|
2219 |
|
2220 void HtmlGenerator::endContents() |
|
2221 { |
|
2222 t << "</div>" << endl; |
|
2223 } |
|
2224 |
|
2225 void HtmlGenerator::writeQuickLinks(bool compact,HighlightedItem hli) |
|
2226 { |
|
2227 writeDefaultQuickLinks(t,compact,hli,relPath); |
|
2228 } |
|
2229 |
|
2230 // PHP based search script |
|
2231 void HtmlGenerator::writeSearchPage() |
|
2232 { |
|
2233 QCString fileName = Config_getString("HTML_OUTPUT")+"/search.php"; |
|
2234 QFile f(fileName); |
|
2235 if (f.open(IO_WriteOnly)) |
|
2236 { |
|
2237 QTextStream t(&f); |
|
2238 t.setEncoding(QTextStream::UnicodeUTF8); |
|
2239 if (g_header.isEmpty()) |
|
2240 { |
|
2241 writeDefaultHeaderFile(t,theTranslator->trSearch().data(),0,FALSE,TRUE); |
|
2242 } |
|
2243 else |
|
2244 { |
|
2245 t << substituteKeywords(g_header,"Search",""); |
|
2246 } |
|
2247 |
|
2248 t << "<!-- " << theTranslator->trGeneratedBy() << " Doxygen " |
|
2249 << versionString << " -->" << endl; |
|
2250 static bool generateTreeView = Config_getBool("GENERATE_TREEVIEW"); |
|
2251 static bool searchEngine = Config_getBool("SEARCHENGINE"); |
|
2252 if (searchEngine && !generateTreeView) |
|
2253 { |
|
2254 t << "<script type=\"text/javascript\"><!--\n"; |
|
2255 t << "var searchBox = new SearchBox(\"searchBox\", \"" |
|
2256 << "search\",false,'" << theTranslator->trSearch() << "');\n"; |
|
2257 t << "--></script>\n"; |
|
2258 } |
|
2259 if (!Config_getBool("DISABLE_INDEX")) |
|
2260 { |
|
2261 writeDefaultQuickLinks(t,TRUE,HLI_Search,""); |
|
2262 } |
|
2263 else |
|
2264 { |
|
2265 t << " \n<div class=\"qindex\">\n"; |
|
2266 t << " <form class=\"search\" action=\"search.php\" " |
|
2267 << "method=\"get\">\n"; |
|
2268 } |
|
2269 |
|
2270 t << "\n<script language=\"php\">\n\n"; |
|
2271 t << "function search_results()\n"; |
|
2272 t << "{\n"; |
|
2273 t << " return \"" << theTranslator->trSearchResultsTitle() << "\";\n"; |
|
2274 t << "}\n"; |
|
2275 t << "\n"; |
|
2276 t << "function matches_text($num)\n"; |
|
2277 t << "{\n"; |
|
2278 t << " if ($num==0)\n"; |
|
2279 t << " {\n"; |
|
2280 t << " return \"" << theTranslator->trSearchResults(0) << "\";\n"; |
|
2281 t << " }\n"; |
|
2282 t << " else if ($num==1)\n"; |
|
2283 t << " {\n"; |
|
2284 t << " return \"" << theTranslator->trSearchResults(1) << "\";\n"; |
|
2285 t << " }\n"; |
|
2286 t << " else // $num>1\n"; |
|
2287 t << " {\n"; |
|
2288 t << " return \"" << theTranslator->trSearchResults(2) << "\";\n"; |
|
2289 t << " }\n"; |
|
2290 t << "}\n"; |
|
2291 t << "\n"; |
|
2292 t << "function report_matches()\n"; |
|
2293 t << "{\n"; |
|
2294 t << " return \"" << theTranslator->trSearchMatches() << " \";\n"; |
|
2295 t << "}\n"; |
|
2296 t << "function end_form($value)\n"; |
|
2297 t << "{\n"; |
|
2298 if (!generateTreeView) |
|
2299 { |
|
2300 t << " echo \"" |
|
2301 << " <input type=\\\"text\\\" id=\\\"MSearchField\\\" name=\\\"query\\\" value=\\\"$value\\\" size=\\\"20\\\" accesskey=\\\"S\\\" " |
|
2302 << "onfocus=\\\"searchBox.OnSearchFieldFocus(true)\\\" " |
|
2303 << "onblur=\\\"searchBox.OnSearchFieldFocus(false)\\\"/>\\n" |
|
2304 << " </form>\\n" |
|
2305 << " </div>\\n" |
|
2306 << " </li>\\n" |
|
2307 << " </ul>\\n" |
|
2308 << " </div>\\n" |
|
2309 << "\";\n"; |
|
2310 } |
|
2311 else |
|
2312 { |
|
2313 t << " echo \"" |
|
2314 << " </ul>\\n" |
|
2315 << " </div>\\n" |
|
2316 << "\";\n"; |
|
2317 } |
|
2318 t << "}\n"; |
|
2319 t << "\n"; |
|
2320 t << search_script; |
|
2321 t << "\n"; |
|
2322 t << "</script>\n"; |
|
2323 writePageFooter(t,"Search",""); |
|
2324 } |
|
2325 QCString scriptName = Config_getString("HTML_OUTPUT")+"/search/search.js"; |
|
2326 QFile sf(scriptName); |
|
2327 if (sf.open(IO_WriteOnly)) |
|
2328 { |
|
2329 QTextStream t(&sf); |
|
2330 t << "function SearchBox(name, resultsPath, inFrame, label)\n"; |
|
2331 t << "{\n"; |
|
2332 t << " this.searchLabel = label;\n"; |
|
2333 t << " this.DOMSearchField = function()\n"; |
|
2334 t << " { return document.getElementById(\"MSearchField\"); }\n"; |
|
2335 t << " this.DOMSearchBox = function()\n"; |
|
2336 t << " { return document.getElementById(\"MSearchBox\"); }\n"; |
|
2337 t << " this.OnSearchFieldFocus = function(isActive)\n"; |
|
2338 t << " {\n"; |
|
2339 t << " if (isActive)\n"; |
|
2340 t << " {\n"; |
|
2341 t << " this.DOMSearchBox().className = 'MSearchBoxActive';\n"; |
|
2342 t << " var searchField = this.DOMSearchField();\n"; |
|
2343 t << " if (searchField.value == this.searchLabel) \n"; |
|
2344 t << " {\n"; |
|
2345 t << " searchField.value = '';\n"; |
|
2346 t << " }\n"; |
|
2347 t << " }\n"; |
|
2348 t << " else\n"; |
|
2349 t << " {\n"; |
|
2350 t << " this.DOMSearchBox().className = 'MSearchBoxInactive';\n"; |
|
2351 t << " this.DOMSearchField().value = this.searchLabel;\n"; |
|
2352 t << " }\n"; |
|
2353 t << " }\n"; |
|
2354 t << "}\n"; |
|
2355 } |
|
2356 else |
|
2357 { |
|
2358 err("Failed to open file '%s' for writing...\n",scriptName.data()); |
|
2359 } |
|
2360 } |
|
2361 |
|
2362 void HtmlGenerator::generateSectionImages() |
|
2363 { |
|
2364 { |
|
2365 QCString fileName = Config_getString("HTML_OUTPUT")+"/open.gif"; |
|
2366 QFile f(fileName); |
|
2367 if (f.open(IO_WriteOnly)) |
|
2368 { |
|
2369 f.writeBlock((char*)open_gif,open_gif_len); |
|
2370 } |
|
2371 Doxygen::indexList.addImageFile("open.gif"); |
|
2372 } |
|
2373 { |
|
2374 QCString fileName = Config_getString("HTML_OUTPUT")+"/closed.gif"; |
|
2375 QFile f(fileName); |
|
2376 if (f.open(IO_WriteOnly)) |
|
2377 { |
|
2378 f.writeBlock((char*)closed_gif,closed_gif_len); |
|
2379 } |
|
2380 Doxygen::indexList.addImageFile("closed.gif"); |
|
2381 } |
|
2382 } |
|
2383 |
|
2384 void HtmlGenerator::startConstraintList(const char *header) |
|
2385 { |
|
2386 t << "<div class=\"typeconstraint\">" << endl; |
|
2387 t << "<dl><dt><b>" << header << "</b><dt><dd>" << endl; |
|
2388 t << "<table border=\"0\" cellspacing=\"2\" cellpadding=\"0\">" << endl; |
|
2389 } |
|
2390 |
|
2391 void HtmlGenerator::startConstraintParam() |
|
2392 { |
|
2393 t << "<tr><td valign=\"top\"><em>"; |
|
2394 } |
|
2395 |
|
2396 void HtmlGenerator::endConstraintParam() |
|
2397 { |
|
2398 t << "</em></td>"; |
|
2399 } |
|
2400 |
|
2401 void HtmlGenerator::startConstraintType() |
|
2402 { |
|
2403 t << "<td> :</td><td valign=\"top\"><em>"; |
|
2404 } |
|
2405 |
|
2406 void HtmlGenerator::endConstraintType() |
|
2407 { |
|
2408 t << "</em></td>"; |
|
2409 } |
|
2410 |
|
2411 void HtmlGenerator::startConstraintDocs() |
|
2412 { |
|
2413 t << "<td> "; |
|
2414 } |
|
2415 |
|
2416 void HtmlGenerator::endConstraintDocs() |
|
2417 { |
|
2418 t << "</td></tr>" << endl; |
|
2419 } |
|
2420 |
|
2421 void HtmlGenerator::endConstraintList() |
|
2422 { |
|
2423 t << "</table>" << endl; |
|
2424 t << "</dl>" << endl; |
|
2425 t << "</div>" << endl; |
|
2426 } |
|
2427 |
|
2428 void HtmlGenerator::lineBreak(const char *style) |
|
2429 { |
|
2430 if (style) |
|
2431 { |
|
2432 t << "<br class=\"" << style << "\"/>" << endl; |
|
2433 } |
|
2434 else |
|
2435 { |
|
2436 t << "<br/>" << endl; |
|
2437 } |
|
2438 } |
|
2439 |