Rev 2799 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2799 | Rev 2803 | ||
---|---|---|---|
1 | int downloader_id; |
1 | int downloader_id; |
2 | 2 | ||
3 | dword j, |
3 | dword j, |
4 | buf, |
4 | buf, |
5 | filesize, |
5 | filesize, |
6 | blink = 400; |
6 | blink = 400; |
7 | int i; |
7 | int i; |
8 | 8 | ||
9 | char download_path[]="/rd/1/.download"; |
9 | char download_path[]="/rd/1/.download"; |
10 | char search_path[]="http://nigma.ru/index.php?s="; |
10 | char search_path[]="http://nigma.ru/index.php?s="; |
11 | char version[]=" Text-based Browser 0.93b"; |
11 | char version[]=" Text-based Browser 0.93e"; |
12 | 12 | ||
13 | char tinypad_path[]="/sys/tinypad"; |
- | |
14 | char t_edit_path[]="/sys/develop/t_edit"; |
- | |
15 | - | ||
16 | 13 | ||
17 | struct TWebBrowser { |
14 | struct TWebBrowser { |
18 | int left, top, width, height; |
15 | int left, top, width, height; |
19 | void DrawScroller(); |
16 | void DrawScroller(); |
20 | void ShowPage(); |
17 | void ShowPage(); |
21 | void ParseHTML(dword, dword); |
18 | void ParseHTML(dword, dword); |
22 | void Scan(int); |
19 | void Scan(int); |
23 | void WhatTextStyle(int left1, top1, width1); |
20 | void WhatTextStyle(int left1, top1, width1); |
24 | }; |
21 | }; |
25 | 22 | ||
26 | TWebBrowser WB1; |
23 | TWebBrowser WB1; |
27 | 24 | ||
28 | byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, link, ignor_text, li_tab, body_present; |
25 | byte rez, b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, link, ignor_text, li_tab, body_present; |
29 | 26 | ||
30 | 27 | ||
31 | dword text_colors[30], |
28 | dword text_colors[30], |
32 | text_color_index, |
29 | text_color_index, |
33 | link_color, |
30 | link_color, |
34 | bg_color; |
31 | bg_color; |
35 | 32 | ||
36 | int stroka, |
33 | int stroka, |
37 | stolbec, |
34 | stolbec, |
38 | tab_len; |
35 | tab_len; |
39 | 36 | ||
40 | char line[330], |
37 | char line[330], |
41 | tag[100], |
38 | tag[100], |
42 | tagparam[10000], |
39 | tagparam[10000], |
43 | parametr[1200], |
40 | parametr[1200], |
44 | options[1000]; |
41 | options[1000]; |
45 | 42 | ||
46 | char anchor[256]; |
43 | char anchor[256]; |
47 | int anchor_line_num; |
44 | int anchor_line_num; |
48 | 45 | ||
49 | 46 | ||
50 | #include "include\history.h" |
47 | #include "include\history.h" |
51 | #include "include\colors.h" |
48 | #include "include\colors.h" |
52 | #include "include\unicode_tags.h" |
49 | #include "include\unicode_tags.h" |
53 | #include "include\some_code.h" |
50 | #include "include\some_code.h" |
54 | 51 | ||
55 | 52 | ||
56 | void TWebBrowser::Scan(int id) { |
53 | void TWebBrowser::Scan(int id) |
- | 54 | { |
|
57 | if (id > 399) |
55 | if (id > 399) |
58 | { |
56 | { |
59 | GetURLfromPageLinks(id); |
57 | GetURLfromPageLinks(id); |
60 | 58 | ||
61 | //#1 |
59 | //#1 |
62 | if (URL[0] == '#') |
60 | if (URL[0] == '#') |
63 | { |
61 | { |
64 | copystr(#URL+find_symbol(#URL, '#'), #anchor); |
62 | copystr(#URL+find_symbol(#URL, '#'), #anchor); |
65 | 63 | ||
66 | copystr(BrowserHistory.CurrentUrl(), #URL); |
64 | copystr(BrowserHistory.CurrentUrl(), #URL); |
67 | //copystr(#editURL, #URL + strlen(#URL)); |
65 | //copystr(#editURL, #URL + strlen(#URL)); |
68 | //copystr(#URL, #editURL); |
66 | //copystr(#URL, #editURL); |
69 | 67 | ||
70 | za_kadrom=count-max_kolvo_strok; |
68 | za_kadrom=count-max_kolvo_strok; |
71 | ShowPage(#URL); |
69 | ShowPage(#URL); |
72 | return; |
70 | return; |
73 | } |
71 | } |
74 | //liner.ru#1 |
72 | //liner.ru#1 |
75 | if (find_symbol(#URL, '#')<>-1) |
73 | if (find_symbol(#URL, '#')<>-1) |
76 | { |
74 | { |
77 | copystr(#URL+find_symbol(#URL, '#'), #anchor); |
75 | copystr(#URL+find_symbol(#URL, '#'), #anchor); |
78 | URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà |
76 | URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà |
79 | } |
77 | } |
80 | 78 | ||
81 | GetNewUrl(); |
79 | GetNewUrl(); |
82 | 80 | ||
83 | if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) |
81 | if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) |
84 | { |
82 | { |
85 | RunProgram("/sys/media/kiv", #URL); |
83 | RunProgram("/sys/media/kiv", #URL); |
86 | copystr(BrowserHistory.CurrentUrl(), #URL); |
84 | copystr(BrowserHistory.CurrentUrl(), #URL); |
87 | return; |
85 | return; |
88 | } |
86 | } |
89 | 87 | ||
90 | OpenPage(); |
88 | OpenPage(); |
91 | return; |
89 | return; |
92 | } |
90 | } |
93 | 91 | ||
94 | //edit1.flags=64; |
- | |
95 | IF(count < max_kolvo_strok) SWITCH(id) //åñëè ìàëî ñòðîê èãíîðèðóåì íåêîòîðûå êíîïêè |
92 | IF(count < max_kolvo_strok) SWITCH(id) //åñëè ìàëî ñòðîê èãíîðèðóåì íåêîòîðûå êíîïêè |
96 | { CASE 183: CASE 184: CASE 180: CASE 181: return; } |
93 | { CASE 183: CASE 184: CASE 180: CASE 181: return; } |
97 | 94 | ||
98 | switch (id) |
95 | switch (id) |
99 | { |
96 | { |
100 | case 011: //Ctrk+K |
97 | case 011: //Ctrk+K |
101 | ReadHtml(); |
98 | ReadHtml(); |
102 | koitodos(buf); |
99 | koitodos(buf); |
103 | break; |
100 | break; |
104 | case 021: //Ctrl+U |
101 | case 021: //Ctrl+U |
105 | ReadHtml(); |
102 | ReadHtml(); |
106 | utf8rutodos(buf); |
103 | utf8rutodos(buf); |
107 | break; |
104 | break; |
108 | case BACK: |
105 | case BACK: |
109 | if (!BrowserHistory.GoBack()) return; |
106 | if (!BrowserHistory.GoBack()) return; |
110 | OpenPage(); |
107 | OpenPage(); |
111 | return; |
108 | return; |
112 | case FORWARD: |
109 | case FORWARD: |
113 | if (!BrowserHistory.GoForward()) return; |
110 | if (!BrowserHistory.GoForward()) return; |
114 | OpenPage(); |
111 | OpenPage(); |
115 | return; |
112 | return; |
116 | case 054: //F5 |
113 | case 052: //Íàæàòà F3 |
- | 114 | if (strcmp(get_URL_part(5),"http:")<>0) RunProgram("/rd/1/tinypad", #URL); else RunProgram("/rd/1/tinypad", #download_path); |
|
- | 115 | return; |
|
- | 116 | case 053: //Íàæàòà F4 |
|
- | 117 | if (strcmp(get_URL_part(5),"http:")<>0) RunProgram("/rd/1/develop/t_edit", #URL); else RunProgram("/rd/1/develop/t_edit", #download_path); |
|
- | 118 | return; |
|
- | 119 | case 054: //F5 |
|
117 | IF(edit1.flags == 66) break; |
120 | IF(edit1.flags == 66) break; |
118 | case REFRESH: |
121 | case REFRESH: |
119 | if (GetProcessSlot(downloader_id)<>0) |
122 | if (GetProcessSlot(downloader_id)<>0) |
120 | { |
123 | { |
121 | KillProcess(downloader_id); |
124 | KillProcess(downloader_id); |
122 | Pause(20); |
125 | Pause(20); |
123 | Draw_Window(); |
126 | Draw_Window(); |
124 | return; |
127 | return; |
125 | } |
128 | } |
126 | OpenPage(); //îò ñåðäöà îòðûâàþ, çäåñü íóæíî za_kadrom ñòàðîå |
129 | anchor_line_num=za_kadrom; //âåñ¸ëûé êîñòûëü :Ð |
127 | return; |
130 | anchor[0]='|'; |
- | 131 | OpenPage(); |
|
- | 132 | return; |
|
128 | case 014: //Ctrl+N íîâîå îêíî |
133 | case 014: //Ctrl+N íîâîå îêíî |
129 | case 020: //Ctrl+T íîâàÿ âêëàäêà |
134 | case 020: //Ctrl+T íîâàÿ âêëàäêà |
130 | case NEWTAB: |
135 | case NEWTAB: |
131 | MoveSize(190,80,OLD,OLD); |
136 | MoveSize(190,80,OLD,OLD); |
132 | RunProgram(#program_path, #URL); |
137 | RunProgram(#program_path, #URL); |
133 | return; |
138 | return; |
134 | case 052: //Íàæàòà F3 |
139 | |
135 | IF(edit1.flags <> 66) |
- | |
136 | IF (!strcmp(get_URL_part(5),"http:")) RunProgram(#tinypad_path, #download_path); ELSE RunProgram(#tinypad_path, #URL); |
- | |
137 | return; |
- | |
138 | case 053: //Íàæàòà F4 |
- | |
139 | IF(edit1.flags <> 66) |
- | |
140 | IF (!strcmp(get_URL_part(5),"http:")) RunProgram(#t_edit_path, #download_path); ELSE RunProgram(#t_edit_path, #URL); |
- | |
141 | return; |
- | |
142 | - | ||
143 | case HOME: |
140 | case HOME: |
144 | copystr("http://kolibri-os.narod.ru", #editURL); |
141 | copystr("http://kolibri-os.narod.ru", #editURL); |
145 | case GOTOURL: |
142 | case GOTOURL: |
146 | case 0x0D: //enter |
143 | case 0x0D: //enter |
147 | copystr(#editURL, #URL); |
144 | copystr(#editURL, #URL); |
148 | OpenPage(); |
145 | OpenPage(); |
149 | return; |
146 | return; |
150 | case 173: //ctrl+enter |
147 | case 173: //ctrl+enter |
151 | case SEARCHWEB: |
148 | case SEARCHWEB: |
152 | copystr(#search_path, #URL); |
149 | copystr(#search_path, #URL); |
153 | copystr(#editURL, #URL + strlen(#URL)); |
150 | copystr(#editURL, #URL + strlen(#URL)); |
154 | OpenPage(); |
151 | OpenPage(); |
155 | return; |
152 | return; |
156 | 153 | ||
157 | case ID1: //ìîòàåì ââåðõ |
154 | case ID1: //ìîòàåì ââåðõ |
158 | IF(za_kadrom <= 0) return; |
155 | IF(za_kadrom <= 0) return; |
159 | za_kadrom--; |
156 | za_kadrom--; |
160 | break; |
157 | break; |
161 | case ID2: //ìîòàåì âíèç |
158 | case ID2: //ìîòàåì âíèç |
162 | IF(max_kolvo_strok + za_kadrom >= count) return; |
159 | IF(max_kolvo_strok + za_kadrom >= count) return; |
163 | za_kadrom++; |
160 | za_kadrom++; |
164 | break; |
161 | break; |
165 | case 183: //PgDown |
162 | case 183: //PgDown |
166 | IF(za_kadrom == count - max_kolvo_strok) return; |
163 | IF(za_kadrom == count - max_kolvo_strok) return; |
167 | za_kadrom += max_kolvo_strok + 2; |
164 | za_kadrom += max_kolvo_strok + 2; |
168 | IF(max_kolvo_strok + za_kadrom > count) za_kadrom = count - max_kolvo_strok; |
165 | IF(max_kolvo_strok + za_kadrom > count) za_kadrom = count - max_kolvo_strok; |
169 | BREAK; |
166 | BREAK; |
170 | case 184: //PgUp |
167 | case 184: //PgUp |
171 | IF(za_kadrom == 0) RETURN; |
168 | IF(za_kadrom == 0) RETURN; |
172 | za_kadrom -= max_kolvo_strok - 2; |
169 | za_kadrom -= max_kolvo_strok - 2; |
173 | IF(za_kadrom < 0) za_kadrom = 0; |
170 | IF(za_kadrom < 0) za_kadrom = 0; |
174 | BREAK; |
171 | BREAK; |
175 | case 180: //home |
172 | case 180: //home |
176 | IF(za_kadrom == 0) RETURN; |
173 | IF(za_kadrom == 0) RETURN; |
177 | za_kadrom = 0; |
174 | za_kadrom = 0; |
178 | BREAK; |
175 | BREAK; |
179 | case 181: //end |
176 | case 181: //end |
180 | IF (za_kadrom == count - max_kolvo_strok) RETURN; |
177 | IF (za_kadrom == count - max_kolvo_strok) RETURN; |
181 | za_kadrom = count - max_kolvo_strok; |
178 | za_kadrom = count - max_kolvo_strok; |
182 | BREAK; |
179 | BREAK; |
183 | default: |
180 | default: |
184 | RETURN; |
181 | RETURN; |
185 | } |
182 | } |
186 | ParseHTML(buf, filesize); |
183 | ParseHTML(buf, filesize); |
187 | } |
184 | } |
188 | 185 | ||
189 | 186 | ||
190 | 187 | ||
191 | void GetNewUrl(){ |
188 | void GetNewUrl(){ |
192 | IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //èãíîðèì :) |
189 | IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //èãíîðèì :) |
193 | 190 | ||
194 | if (URL[0] <> '/') |
191 | if (URL[0] <> '/') |
195 | && (strcmp(get_URL_part(5),"http:")<>0) && (strcmp(get_URL_part(5),"mailt")<>0) && (strcmp(get_URL_part(5),"ftp:/")<>0) |
192 | && (strcmp(get_URL_part(5),"http:")<>0) && (strcmp(get_URL_part(5),"mailt")<>0) && (strcmp(get_URL_part(5),"ftp:/")<>0) |
196 | { |
193 | { |
197 | copystr(BrowserHistory.CurrentUrl(), #editURL); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû |
194 | copystr(BrowserHistory.CurrentUrl(), #editURL); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû |
198 | 195 | ||
199 | _CUT_ST_LEVEL_MARK: |
196 | _CUT_ST_LEVEL_MARK: |
200 | 197 | ||
201 | if (editURL[find_symbol(#editURL, '/')-2]<>'/') // åñëè íå http://pagename.ua <-- íàõðåíà ýòà ñòðîêà??? |
198 | if (editURL[find_symbol(#editURL, '/')-2]<>'/') // åñëè íå http://pagename.ua <-- íàõðåíà ýòà ñòðîêà??? |
202 | { |
199 | { |
203 | editURL[find_symbol(#editURL, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
200 | editURL[find_symbol(#editURL, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
204 | } |
201 | } |
205 | 202 | ||
206 | IF (!strcmp(get_URL_part(3),"../")) //íà óðîâåíü ââåðõ |
203 | IF (!strcmp(get_URL_part(3),"../")) //íà óðîâåíü ââåðõ |
207 | { |
204 | { |
208 | copystr(#URL+3,#URL); |
205 | copystr(#URL+3,#URL); |
209 | editURL[find_symbol(#editURL, '/')-1] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
206 | editURL[find_symbol(#editURL, '/')-1] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
210 | goto _CUT_ST_LEVEL_MARK; |
207 | goto _CUT_ST_LEVEL_MARK; |
211 | } |
208 | } |
212 | 209 | ||
213 | if (editURL[strlen(#editURL)-1]<>'/') copystr("/", #editURL + strlen(#editURL)); |
210 | if (editURL[strlen(#editURL)-1]<>'/') copystr("/", #editURL + strlen(#editURL)); |
214 | copystr(#URL, #editURL + strlen(#editURL)); //êëåèì íîâûé àäðåñ |
211 | copystr(#URL, #editURL + strlen(#editURL)); //êëåèì íîâûé àäðåñ |
215 | copystr(#editURL, #URL); |
212 | copystr(#editURL, #URL); |
216 | } |
213 | } |
217 | } |
214 | } |
218 | 215 | ||
219 | 216 | ||
220 | 217 | ||
221 | void ReadHtml() |
218 | void ReadHtml() |
222 | { |
219 | { |
223 | if (!strcmp(get_URL_part(5),"http:"))) |
220 | if (!strcmp(get_URL_part(5),"http:"))) |
224 | file_size stdcall (#download_path); |
221 | file_size stdcall (#download_path); |
225 | else |
222 | else |
226 | file_size stdcall (#URL); |
223 | file_size stdcall (#URL); |
227 | 224 | ||
228 | filesize = EBX; |
225 | filesize = EBX; |
229 | if (!filesize) return; |
226 | if (!filesize) return; |
230 | 227 | ||
231 | mem_Free(buf); |
228 | mem_Free(buf); |
232 | buf = mem_Alloc(filesize); |
229 | buf = mem_Alloc(filesize); |
233 | if (!strcmp(get_URL_part(5),"http:"))) |
230 | if (!strcmp(get_URL_part(5),"http:"))) |
234 | ReadFile(0, filesize, buf, #download_path); |
231 | ReadFile(0, filesize, buf, #download_path); |
235 | else |
232 | else |
236 | ReadFile(0, filesize, buf, #URL); |
233 | ReadFile(0, filesize, buf, #URL); |
237 | } |
234 | } |
238 | 235 | ||
239 | 236 | ||
240 | void OpenPage() |
237 | void OpenPage() |
241 | { |
238 | { |
242 | if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); |
239 | if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); |
243 | KillProcess(downloader_id); |
240 | KillProcess(downloader_id); |
244 | copystr(#URL, #editURL); |
241 | copystr(#URL, #editURL); |
245 | BrowserHistory.AddUrl(); |
242 | BrowserHistory.AddUrl(); |
246 | za_kadrom = count = 0; |
243 | za_kadrom = count = 0; |
247 | if (!strcmp(get_URL_part(5),"http:"))) |
244 | if (!strcmp(get_URL_part(5),"http:"))) |
248 | { |
245 | { |
249 | copystr(#version, #header); |
246 | copystr(#version, #header); |
250 | KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ |
247 | KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ |
251 | DeleteFile(#download_path); |
248 | DeleteFile(#download_path); |
252 | IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=''; |
249 | IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=''; |
253 | downloader_id = RunProgram("/sys/network/downloader", #URL); |
250 | downloader_id = RunProgram("/sys/network/downloader", #URL); |
254 | //ýòî ãåíèàëüíî è ýòî ïèçäåö!!! |
251 | //ýòî ãåíèàëüíî è ýòî ïèçäåö!!! |
255 | Pause(60); |
252 | Pause(60); |
256 | if (GetProcessSlot(downloader_id)<>0) |
253 | if (GetProcessSlot(downloader_id)<>0) |
257 | { |
254 | { |
258 | WriteDebug("Browser Hack v2.0: Killing downloader and trying to run it one more!"); |
255 | debug("Browser Hack v2.0: Killing downloader and trying to run it one more!"); |
259 | KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ |
256 | KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ |
260 | downloader_id = RunProgram("/sys/network/downloader", #URL); |
257 | downloader_id = RunProgram("/sys/network/downloader", #URL); |
261 | } |
258 | } |
262 | // |
259 | // |
263 | IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); |
260 | IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); |
264 | Draw_Window(); |
261 | Draw_Window(); |
265 | return; |
262 | return; |
266 | } |
263 | } |
267 | ReadHtml(); |
264 | ReadHtml(); |
268 | if (filesize) wintodos(buf); |
265 | if (filesize) wintodos(buf); |
269 | WB1.ShowPage(#URL); |
266 | WB1.ShowPage(#URL); |
270 | } |
267 | } |
271 | 268 | ||
272 | 269 | ||
273 | void TWebBrowser::ShowPage(dword adress) |
270 | void TWebBrowser::ShowPage(dword adress) |
274 | { |
271 | { |
275 | edit1.size = edit1.pos = strlen(#editURL); |
272 | edit1.size = edit1.pos = strlen(#editURL); |
276 | edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà |
273 | edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà |
277 | 274 | ||
278 | if (!filesize) |
275 | if (!filesize) |
279 | { |
276 | { |
280 | DrawBar(left, top, width+4, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó |
277 | DrawBar(left, top, width+4, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó |
281 | if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0); |
278 | if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0); |
282 | else |
279 | else |
283 | { |
280 | { |
284 | WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0); |
281 | WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0); |
285 | if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0); |
282 | if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0); |
286 | } |
283 | } |
287 | DrawTitle(#version); //? |
284 | DrawTitle(#version); //? |
288 | return; |
285 | return; |
289 | } |
286 | } |
290 | 287 | ||
291 | ParseHTML(buf, filesize); |
288 | ParseHTML(buf, filesize); |
292 | IF (!strcmp(#version, #header)) DrawTitle(#header); |
289 | IF (!strcmp(#version, #header)) DrawTitle(#header); |
293 | } |
290 | } |
294 | 291 | ||
295 | 292 | ||
296 | 293 | ||
297 | void TWebBrowser::ParseHTML(dword bword, fsize){ |
294 | void TWebBrowser::ParseHTML(dword bword, fsize){ |
298 | word bukva[1]; |
295 | word bukva[1]; |
299 | byte ignor_param = 0; |
296 | byte ignor_param = 0; |
300 | char temp[768]; |
297 | char temp[768]; |
301 | stroka = -za_kadrom; |
298 | stroka = -za_kadrom; |
302 | stolbec = 0; |
299 | stolbec = 0; |
303 | FOR(j = 400; j < blink + 1; j++;) DeleteButton(j); |
300 | FOR(j = 400; j < blink + 1; j++;) DeleteButton(j); |
304 | b_text = i_text = u_text = s_text = pre_text = blq_text = body_present = |
301 | b_text = i_text = u_text = s_text = pre_text = blq_text = body_present = |
305 | li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //îáíóëÿåì òåãè |
302 | li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //îáíóëÿåì òåãè |
306 | link_color = 0x0000FF; |
303 | link_color = 0x0000FF; |
307 | bg_color = 0xFFFFFF; |
304 | bg_color = 0xFFFFFF; |
308 | blink = 400; |
305 | blink = 400; |
309 | line = ''; |
306 | line = ''; |
310 | copystr("|", #page_links); |
307 | copystr("|", #page_links); |
311 | copystr(#version, #header); |
308 | copystr(#version, #header); |
312 | IF(!strcmp(#URL + strlen(#URL) - 4, ".txt")) |
309 | IF(!strcmp(#URL + strlen(#URL) - 4, ".txt")) |
313 | { |
310 | { |
314 | DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó |
311 | DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó |
315 | pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà |
312 | pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà |
316 | } |
313 | } |
317 | IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1; |
314 | IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1; |
318 | for (bword = buf; buf + fsize > bword; bword++;) { |
315 | for (bword = buf; buf + fsize > bword; bword++;) { |
319 | bukva = ESBYTE[bword]; |
316 | bukva = ESBYTE[bword]; |
320 | switch (bukva) { |
317 | switch (bukva) { |
321 | case 0x0a: |
318 | case 0x0a: |
322 | IF(pre_text == 1) { |
319 | IF(pre_text == 1) { |
323 | bukva = ''; |
320 | bukva = ''; |
324 | temp = ''; |
321 | temp = ''; |
325 | goto NEXT_MARK; |
322 | goto NEXT_MARK; |
326 | } |
323 | } |
327 | case '\9': |
324 | case '\9': |
328 | if (pre_text == 1) //èíà÷å èä¸ì íà 0x0d |
325 | if (pre_text == 1) //èíà÷å èä¸ì íà 0x0d |
329 | { |
326 | { |
330 | tab_len=strlen(#line)/8; |
327 | tab_len=strlen(#line)/8; |
331 | tab_len=tab_len*8; |
328 | tab_len=tab_len*8; |
332 | tab_len=8+tab_len-strlen(#line); |
329 | tab_len=8+tab_len-strlen(#line); |
333 | for (i=0; i |
330 | for (i=0; i |
334 | break; |
331 | break; |
335 | } |
332 | } |
336 | case 0x0d: |
333 | case 0x0d: |
337 | bukva = ' '; |
334 | bukva = ' '; |
338 | goto DEFAULT_MARK; |
335 | goto DEFAULT_MARK; |
339 | case '<': |
336 | case '<': |
340 | bword++; //ïðîìîòàåì ñèìâîë < |
337 | bword++; //ïðîìîòàåì ñèìâîë < |
341 | IF(ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè , äåðçêî |
338 | IF(ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè , äåðçêî |
342 | { |
339 | { |
343 | bword++; |
340 | bword++; |
344 | IF(ESBYTE[bword] == '-') { |
341 | IF(ESBYTE[bword] == '-') { |
345 | HH_: do { |
342 | HH_: do { |
346 | bword++; |
343 | bword++; |
347 | IF(bword >= buf + fsize) break 1; |
344 | IF(bword >= buf + fsize) break 1; |
348 | } while (ESBYTE[bword] <>'-'); |
345 | } while (ESBYTE[bword] <>'-'); |
349 | bword++; |
346 | bword++; |
350 | IF(ESBYTE[bword] <>'-') GOTO HH_; |
347 | IF(ESBYTE[bword] <>'-') GOTO HH_; |
351 | } |
348 | } |
352 | } |
349 | } |
353 | WHILE (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû |
350 | WHILE (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû |
354 | { |
351 | { |
355 | bukva = ESBYTE[bword]; |
352 | bukva = ESBYTE[bword]; |
356 | IF(bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; |
353 | IF(bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; |
357 | IF(!ignor_param) && (bukva <>' ') copystr(#bukva, #tag + strlen(#tag)); |
354 | IF(!ignor_param) && (bukva <>' ') copystr(#bukva, #tag + strlen(#tag)); |
358 | ELSE { |
355 | ELSE { |
359 | ignor_param = true; |
356 | ignor_param = true; |
360 | copystr(#bukva, #tagparam + strlen(#tagparam)); |
357 | copystr(#bukva, #tagparam + strlen(#tagparam)); |
361 | } |
358 | } |
362 | bword++; |
359 | bword++; |
363 | } |
360 | } |
364 | lowcase(#tag); |
361 | lowcase(#tag); |
365 | lowcase(#tagparam); |
362 | lowcase(#tagparam); |
366 | 363 | ||
367 | IF (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/ |
364 | IF (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/ |
368 | IF(strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); |
365 | IF(strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); |
369 | WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ |
366 | WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ |
370 | 367 | ||
371 | line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì |
368 | line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì |
372 | 369 | ||
373 | break; |
370 | break; |
374 | case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7 |
371 | case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7 |
375 | IF(strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK; |
372 | IF(strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK; |
376 | 373 | ||
377 | bword++; |
374 | bword++; |
378 | bukva=ESBYTE[bword]; |
375 | bukva=ESBYTE[bword]; |
379 | copystr(#bukva, #temp); |
376 | copystr(#bukva, #temp); |
380 | 377 | ||
381 | bword++; |
378 | bword++; |
382 | bukva=ESBYTE[bword]; |
379 | bukva=ESBYTE[bword]; |
383 | copystr(#bukva, #temp + strlen(#temp)); |
380 | copystr(#bukva, #temp + strlen(#temp)); |
384 | 381 | ||
385 | bukva=Hex2Symb(#temp); |
382 | bukva=Hex2Symb(#temp); |
386 | IF (bukva) goto DEFAULT_MARK; |
383 | IF (bukva) goto DEFAULT_MARK; |
387 | break; |
384 | break; |
388 | 385 | ||
389 | case '&': //îáðàáîòêà òåãîâ òèïà |
386 | case '&': //îáðàáîòêà òåãîâ òèïà |
390 | IF(ignor_text) break; |
387 | IF(ignor_text) break; |
391 | bword++; |
388 | bword++; |
392 | tag=''; |
389 | tag=''; |
393 | FOR (j=0; (ESBYTE[bword] <>';') && (j < 7); j++; bword++;) |
390 | FOR (j=0; (ESBYTE[bword] <>';') && (j < 7); j++; bword++;) |
394 | { |
391 | { |
395 | bukva = ESBYTE[bword]; |
392 | bukva = ESBYTE[bword]; |
396 | copystr(#bukva, #tag + strlen(#tag)); |
393 | copystr(#bukva, #tag + strlen(#tag)); |
397 | } |
394 | } |
398 | 395 | ||
399 | FOR (j=0; unicode_tags[j]!=0; j+=2;) |
396 | FOR (j=0; unicode_tags[j]!=0; j+=2;) |
400 | { |
397 | { |
401 | IF(!strcmp(#tag, unicode_tags[j])) |
398 | IF(!strcmp(#tag, unicode_tags[j])) |
402 | { |
399 | { |
403 | copystr(unicode_tags[j+1], #line + strlen(#line)); |
400 | copystr(unicode_tags[j+1], #line + strlen(#line)); |
404 | break 1; |
401 | break 1; |
405 | } |
402 | } |
406 | } |
403 | } |
407 | 404 | ||
408 | rez = StrToInt(#tag + 1) - 1040; |
405 | rez = StrToInt(#tag + 1) - 1040; |
409 | IF(tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5) |
406 | IF(tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5) |
410 | { |
407 | { |
411 | bukva = unicode_chars[rez]; |
408 | bukva = unicode_chars[rez]; |
412 | GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó |
409 | GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó |
413 | } |
410 | } |
414 | 411 | ||
415 | //WriteDebug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè |
412 | //WriteDebug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè |
416 | copystr(#tag, #line + strlen(#line)); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò |
413 | copystr(#tag, #line + strlen(#line)); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò |
417 | break; |
414 | break; |
418 | default: |
415 | default: |
419 | DEFAULT_MARK: |
416 | DEFAULT_MARK: |
420 | IF(ignor_text) break; |
417 | IF(ignor_text) break; |
421 | IF(pre_text == 0) && (bukva == ' ') && (strcmp(#line + strlen(#line) - 1, " ") == 0) continue; |
418 | IF(pre_text == 0) && (bukva == ' ') && (strcmp(#line + strlen(#line) - 1, " ") == 0) continue; |
422 | // |
419 | // |
423 | if (stolbec + strlen(#line) > max_kolvo_stolbcov) |
420 | if (stolbec + strlen(#line) > max_kolvo_stolbcov) |
424 | { |
421 | { |
425 | copystr(#line + find_symbol(#line, ' '), #temp); //ïåðåíîñ ïî ñëîâàì |
422 | copystr(#line + find_symbol(#line, ' '), #temp); //ïåðåíîñ ïî ñëîâàì |
426 | line[find_symbol(#line, ' ')] = 0x00; |
423 | line[find_symbol(#line, ' ')] = 0x00; |
427 | NEXT_MARK: IF(stroka - 1 > max_kolvo_strok) && (za_kadrom <>0) break 1; //óõîäèì... |
424 | NEXT_MARK: IF(stroka - 1 > max_kolvo_strok) && (za_kadrom <>0) break 1; //óõîäèì... |
428 | WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè |
425 | WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè |
429 | TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó |
426 | TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó |
430 | copystr(#temp, #line); |
427 | copystr(#temp, #line); |
431 | } |
428 | } |
432 | IF(pre_text == 0) && (bukva == ' ') && (stolbec == 0) && (strlen(#line) == 0) CONTINUE; |
429 | IF(pre_text == 0) && (bukva == ' ') && (stolbec == 0) && (strlen(#line) == 0) CONTINUE; |
433 | copystr(#bukva, #line + strlen(#line)); |
430 | copystr(#bukva, #line + strlen(#line)); |
434 | } |
431 | } |
435 | } |
432 | } |
436 | if (strcmp(#URL + strlen(#URL) - 4, ".txt")<>0) && (body_present==0) |
433 | if (strcmp(#URL + strlen(#URL) - 4, ".txt")<>0) && (body_present==0) |
437 | DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó åñëè êàêîé-òî ðàõèò íå ñîçäàë òåã áîäè |
434 | DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó åñëè êàêîé-òî ðàõèò íå ñîçäàë òåã áîäè |
438 | 435 | ||
439 | if (max_kolvo_strok * 10 + 25 <= height) |
436 | if (max_kolvo_strok * 10 + 25 <= height) |
440 | DrawBar(left, max_kolvo_strok * 10 + top + 25, width - 15, -max_kolvo_strok * 10 + height - 25, bg_color); |
437 | DrawBar(left, max_kolvo_strok * 10 + top + 25, width - 15, -max_kolvo_strok * 10 + height - 25, bg_color); |
441 | if (stroka * 10 + 15 <= height) |
438 | if (stroka * 10 + 15 <= height) |
442 | DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà |
439 | DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà |
443 | if (za_kadrom == 0) count = stroka; |
440 | if (za_kadrom == 0) count = stroka; |
444 | 441 | ||
445 | if (anchor) |
442 | if (anchor) |
446 | { |
443 | { |
447 | anchor[0]=''; |
444 | anchor[0]=''; |
448 | za_kadrom=anchor_line_num; |
445 | za_kadrom=anchor_line_num; |
449 | ParseHTML(buf, filesize); |
446 | ParseHTML(buf, filesize); |
450 | } |
447 | } |
451 | 448 | ||
452 | DrawScroller(); //ðèñóåì ñêðîëë |
449 | DrawScroller(); //ðèñóåì ñêðîëë |
453 | } |
450 | } |
454 | 451 | ||
455 | 452 | ||
456 | void GetNextParam() |
453 | void GetNextParam() |
457 | { |
454 | { |
458 | byte kavichki = false; |
455 | byte kavichki = false; |
459 | int i = strlen(#tagparam) - 1; |
456 | int i = strlen(#tagparam) - 1; |
460 | 457 | ||
461 | WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/'))) |
458 | WHILE((i > 0) && ((tagparam[i] == '"') || (tagparam[i] == ' ') || (tagparam[i] == '\'') || (tagparam[i] == '/'))) |
462 | { |
459 | { |
463 | IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i]; |
460 | IF (tagparam[i] == '"') || (tagparam[i] == '\'') kavichki=tagparam[i]; |
464 | tagparam[i] = 0x00; |
461 | tagparam[i] = 0x00; |
465 | i--; |
462 | i--; |
466 | } |
463 | } |
467 | 464 | ||
468 | IF (kavichki) |
465 | IF (kavichki) |
469 | { |
466 | { |
470 | i=find_symbol(#tagparam, kavichki); |
467 | i=find_symbol(#tagparam, kavichki); |
471 | copystr(#tagparam + i, #options); |
468 | copystr(#tagparam + i, #options); |
472 | } |
469 | } |
473 | ELSE |
470 | ELSE |
474 | { |
471 | { |
475 | WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1; |
472 | WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1; |
476 | i++; |
473 | i++; |
477 | 474 | ||
478 | copystr(#tagparam + i, #options); //êîïèðóåì îïöèþ |
475 | copystr(#tagparam + i, #options); //êîïèðóåì îïöèþ |
479 | WHILE (options[0] == ' ') copystr(#options + 1, #options); |
476 | WHILE (options[0] == ' ') copystr(#options + 1, #options); |
480 | } |
477 | } |
481 | tagparam[i] = 0x00; |
478 | tagparam[i] = 0x00; |
482 | 479 | ||
483 | FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--) |
480 | FOR ( ; ((tagparam[i] <>' ') && (i > 0); i--) |
484 | { |
481 | { |
485 | IF (tagparam[i] == '=') //äåðçêàÿ çàãëóøêà |
482 | IF (tagparam[i] == '=') //äåðçêàÿ çàãëóøêà |
486 | { |
483 | { |
487 | //copystr(#tagparam+i+2,#options); |
484 | //copystr(#tagparam+i+2,#options); |
488 | tagparam[i + 1] = 0x00; |
485 | tagparam[i + 1] = 0x00; |
489 | } |
486 | } |
490 | } |
487 | } |
491 | 488 | ||
492 | copystr(#tagparam + i + 1, #parametr); //êîïèðóåì ïàðàìåòð |
489 | copystr(#tagparam + i + 1, #parametr); //êîïèðóåì ïàðàìåòð |
493 | tagparam[i] = 0x00; |
490 | tagparam[i] = 0x00; |
494 | } |
491 | } |
495 | 492 | ||
496 | 493 | ||
497 | 494 | ||
498 | char oldtag[100]; |
495 | char oldtag[100]; |
499 | void TWebBrowser::WhatTextStyle(int left1, top1, width1) { |
496 | void TWebBrowser::WhatTextStyle(int left1, top1, width1) { |
500 | dword hr_color; |
497 | dword hr_color; |
501 | 498 | ||
502 | dword image=0; |
499 | dword image=0; |
503 | char temp[4096]; |
500 | char temp[4096]; |
504 | int w, h, img_za_kadrom=0; |
501 | int w, h, img_za_kadrom=0; |
505 | 502 | ||
506 | //ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ |
503 | //ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ |
507 | IF(tag[0] == '/') |
504 | IF(tag[0] == '/') |
508 | { |
505 | { |
509 | rez = 0; |
506 | rez = 0; |
510 | copystr(#tag + 1, #tag); |
507 | copystr(#tag + 1, #tag); |
511 | } |
508 | } |
512 | ELSE |
509 | ELSE |
513 | rez = 1; |
510 | rez = 1; |
514 | 511 | ||
515 | // |
512 | // |
516 | IF(!chTag("html")) { |
513 | IF(!chTag("html")) { |
517 | IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0; |
514 | IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0; |
518 | return; |
515 | return; |
519 | } |
516 | } |
520 | IF(!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez; |
517 | IF(!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez; |
521 | 518 | ||
522 | if(!chTag("title")) && (!rez) |
519 | if(!chTag("title")) && (!rez) |
523 | { |
520 | { |
524 | copystr(#line, #header); |
521 | copystr(#line, #header); |
525 | copystr(" -", #header + strlen(#header)); |
522 | copystr(" -", #header + strlen(#header)); |
526 | copystr(#version, #header + strlen(#header)); |
523 | copystr(#version, #header + strlen(#header)); |
527 | if (stroka==0) DrawTitle(#header); |
524 | if (stroka==0) DrawTitle(#header); |
528 | return; |
525 | return; |
529 | } |
526 | } |
530 | 527 | ||
531 | IF (ignor_text == 1) return; |
528 | IF (ignor_text == 1) return; |
532 | // |
529 | // |
533 | 530 | ||
534 | // |
531 | // |
535 | IF(!chTag("q")) copystr("\"", #line + strlen(#line)); |
532 | IF(!chTag("q")) copystr("\"", #line + strlen(#line)); |
536 | 533 | ||
537 | //âûâîä íà ýêðàí |
534 | //âûâîä íà ýêðàí |
538 | if (stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (line) |
535 | if (stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (line) && (!anchor) |
539 | { |
536 | { |
540 | WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó? |
537 | WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó? |
541 | IF (b_text) { $add ebx, 1<<16 $int 0x40 } |
538 | IF (b_text) { $add ebx, 1<<16 $int 0x40 } |
542 | IF (i_text) Skew(stolbec * 6 + left1, top1, strlen(#line)+1*6, 10); //íàêëîííûé òåêñò |
539 | IF (i_text) Skew(stolbec * 6 + left1, top1, strlen(#line)+1*6, 10); //íàêëîííûé òåêñò |
543 | IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, strlen(#line) * 6, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé |
540 | IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, strlen(#line) * 6, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé |
544 | IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé |
541 | IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé |
545 | IF (link) { |
542 | IF (link) { |
546 | DefineButton(stolbec * 6 + left1 - 2, top1, strlen(#line) * 6 + 3, 9, blink + BT_HIDE, 0xB5BFC9); // |
543 | DefineButton(stolbec * 6 + left1 - 2, top1, strlen(#line) * 6 + 3, 9, blink + BT_HIDE, 0xB5BFC9); // |
547 | DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); |
544 | DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); |
548 | } |
545 | } |
549 | } |
546 | } |
550 | // |
547 | // |
551 | IF(!tag) return; |
548 | IF(!tag) return; |
552 | stolbec += strlen(#line); |
549 | stolbec += strlen(#line); |
553 | 550 | ||
554 | if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò |
551 | if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò |
555 | { |
552 | { |
556 | if (!strcmp(#anchor, #options)) |
553 | if (!strcmp(#anchor, #options)) |
557 | { |
554 | { |
558 | anchor_line_num=za_kadrom+stroka; |
555 | anchor_line_num=za_kadrom+stroka; |
559 | } |
556 | } |
560 | } |
557 | } |
561 | 558 | ||
562 | if (!chTag("body")) |
559 | if (!chTag("body")) |
563 | { |
560 | { |
564 | BODY_MARK: |
561 | BODY_MARK: |
565 | 562 | ||
566 | if (strcmp(#parametr, "link=") == 0) |
563 | if (strcmp(#parametr, "link=") == 0) |
567 | link_color = GetColor(#options); |
564 | link_color = GetColor(#options); |
568 | 565 | ||
569 | if (strcmp(#parametr, "text=") == 0) |
566 | if (strcmp(#parametr, "text=") == 0) |
570 | { |
567 | { |
571 | text_colors[0]=GetColor(#options); |
568 | text_colors[0]=GetColor(#options); |
572 | } |
569 | } |
573 | 570 | ||
574 | if (strcmp(#parametr, "bgcolor=") == 0) |
571 | if (strcmp(#parametr, "bgcolor=") == 0) |
575 | { |
572 | { |
576 | bg_color=GetColor(#options); |
573 | bg_color=GetColor(#options); |
577 | } |
574 | } |
578 | 575 | ||
579 | IF(tagparam) { |
576 | IF(tagparam) { |
580 | GetNextParam(); |
577 | GetNextParam(); |
581 | GOTO BODY_MARK; |
578 | GOTO BODY_MARK; |
582 | } |
579 | } |
583 | 580 | ||
584 | body_present = 1; //åñëè êàëè÷ íå ñîçäàë òåã áîäè íóæíî èçâðàùàòüñÿ |
581 | body_present = 1; //åñëè êàëè÷ íå ñîçäàë òåã áîäè íóæíî èçâðàùàòüñÿ |
585 | 582 | ||
586 | if (rez) DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó |
583 | if (rez) DrawBar(WB1.left, WB1.top, WB1.width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó |
587 | return; |
584 | return; |
588 | } |
585 | } |
589 | ////////////////////////// |
586 | ////////////////////////// |
590 | if (!chTag("a")) |
587 | if (!chTag("a")) |
591 | { |
588 | { |
592 | if (rez) |
589 | if (rez) |
593 | { |
590 | { |
594 | _A_MARK: |
591 | _A_MARK: |
595 | if (!strcmp(#parametr, "href=")) |
592 | if (!strcmp(#parametr, "href=")) |
596 | { |
593 | { |
597 | if (stroka - 1 > max_kolvo_strok) || (stroka < -2) return; |
594 | if (stroka - 1 > max_kolvo_strok) || (stroka < -2) return; |
598 | if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã |
595 | if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã |
599 | link = 1; |
596 | link = 1; |
600 | blink++; |
597 | blink++; |
601 | text_color_index++; |
598 | text_color_index++; |
602 | text_colors[text_color_index] = link_color; |
599 | text_colors[text_color_index] = link_color; |
603 | copystr(#options, #page_links + strlen(#page_links)); |
600 | copystr(#options, #page_links + strlen(#page_links)); |
604 | copystr("|", #page_links + strlen(#page_links)); |
601 | copystr("|", #page_links + strlen(#page_links)); |
605 | } |
602 | } |
606 | if (anchor) && (!strcmp(#parametr, "name=")) |
603 | if (anchor) && (!strcmp(#parametr, "name=")) |
607 | { |
604 | { |
608 | if (!strcmp(#anchor, #options)) |
605 | if (!strcmp(#anchor, #options)) |
609 | { |
606 | { |
610 | anchor_line_num=za_kadrom+stroka; |
607 | anchor_line_num=za_kadrom+stroka; |
611 | } |
608 | } |
612 | } |
609 | } |
613 | if (tagparam) |
610 | if (tagparam) |
614 | { |
611 | { |
615 | GetNextParam(); |
612 | GetNextParam(); |
616 | GOTO _A_MARK; |
613 | GOTO _A_MARK; |
617 | } |
614 | } |
618 | } |
615 | } |
619 | ELSE { |
616 | ELSE { |
620 | link = 0; |
617 | link = 0; |
621 | IF(text_color_index > 0) text_color_index--; |
618 | IF(text_color_index > 0) text_color_index--; |
622 | } |
619 | } |
623 | return; |
620 | return; |
624 | } |
621 | } |
625 | ///////////////////////// |
622 | ///////////////////////// |
626 | if (!chTag("font")) |
623 | if (!chTag("font")) |
627 | { |
624 | { |
628 | IF (stroka - 1 > max_kolvo_strok) return; |
625 | IF (stroka - 1 > max_kolvo_strok) return; |
629 | COL_MARK: |
626 | COL_MARK: |
630 | if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#') |
627 | if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#') |
631 | { |
628 | { |
632 | text_color_index++; |
629 | text_color_index++; |
633 | text_colors[text_color_index] = GetColor(#options); |
630 | text_colors[text_color_index] = GetColor(#options); |
634 | } |
631 | } |
635 | IF(tagparam) { |
632 | IF(tagparam) { |
636 | GetNextParam(); |
633 | GetNextParam(); |
637 | GOTO COL_MARK; |
634 | GOTO COL_MARK; |
638 | } |
635 | } |
639 | IF(!rez) && (text_color_index > 0) text_color_index--; |
636 | IF(!rez) && (text_color_index > 0) text_color_index--; |
640 | return; |
637 | return; |
641 | } |
638 | } |
642 | ////////////////////////// |
639 | ////////////////////////// |
643 | IF(!chTag("tr")) || (!chTag("br")) { |
640 | IF(!chTag("tr")) || (!chTag("br")) { |
644 | TextGoDown(left1, top1, width1); |
641 | TextGoDown(left1, top1, width1); |
645 | return; |
642 | return; |
646 | } |
643 | } |
647 | IF(!chTag("div")) { |
644 | IF(!chTag("div")) { |
648 | IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1); |
645 | IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1); |
649 | return; |
646 | return; |
650 | } |
647 | } |
651 | IF(!chTag("p")) { |
648 | IF(!chTag("p")) { |
652 | IF(oldtag[0] == 'h') return; |
649 | IF(oldtag[0] == 'h') return; |
653 | TextGoDown(left1, top1, width1); |
650 | TextGoDown(left1, top1, width1); |
654 | IF(rez) TextGoDown(left1, top1 + 10, width1); |
651 | IF(rez) TextGoDown(left1, top1 + 10, width1); |
655 | return; |
652 | return; |
656 | } |
653 | } |
657 | //////////////////////////// |
654 | //////////////////////////// |
658 | IF(!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { |
655 | IF(!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { |
659 | TextGoDown(left1, top1, width1); |
656 | TextGoDown(left1, top1, width1); |
660 | IF(rez) TextGoDown(left1, top1 + 10, width1); |
657 | IF(rez) TextGoDown(left1, top1 + 10, width1); |
661 | b_text = rez; |
658 | b_text = rez; |
662 | copystr(#tag, #oldtag); |
659 | copystr(#tag, #oldtag); |
663 | return; |
660 | return; |
664 | } ELSE copystr("", #oldtag); |
661 | } ELSE copystr("", #oldtag); |
665 | IF(!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { |
662 | IF(!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { |
666 | b_text = rez; |
663 | b_text = rez; |
667 | return; |
664 | return; |
668 | } |
665 | } |
669 | //////////////////////////// |
666 | //////////////////////////// |
670 | IF(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { |
667 | IF(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { |
671 | i_text = rez; |
668 | i_text = rez; |
672 | return; |
669 | return; |
673 | } |
670 | } |
674 | //////////////////////////// |
671 | //////////////////////////// |
675 | if (!chTag("dt")) |
672 | if (!chTag("dt")) |
676 | { |
673 | { |
677 | li_text = rez; |
674 | li_text = rez; |
678 | IF(rez == 0) return; |
675 | IF(rez == 0) return; |
679 | TextGoDown(left1, top1, width1); |
676 | TextGoDown(left1, top1, width1); |
680 | return; |
677 | return; |
681 | } |
678 | } |
682 | ///////////////////////////// |
679 | ///////////////////////////// |
683 | if(!chTag("li")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè |
680 | if(!chTag("li")) //íàäî ñäåëàòü âëîæåííûå ñïèñêè |
684 | { |
681 | { |
685 | li_text = rez; |
682 | li_text = rez; |
686 | IF(rez == 0) return; |
683 | IF(rez == 0) return; |
687 | TextGoDown(left1, top1, width1); |
684 | TextGoDown(left1, top1, width1); |
688 | IF(stroka > -1) && (stroka - 2 < max_kolvo_strok) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0); |
685 | IF(stroka > -1) && (stroka - 2 < max_kolvo_strok) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0); |
689 | return; |
686 | return; |
690 | } |
687 | } |
691 | //////////////////////////// |
688 | //////////////////////////// |
692 | IF(!chTag("u")) || (!chTag("ins")) u_text = rez; |
689 | IF(!chTag("u")) || (!chTag("ins")) u_text = rez; |
693 | IF(!chTag("s")) || (!chTag("strike")) || (!chTag("del")) s_text = rez; |
690 | IF(!chTag("s")) || (!chTag("strike")) || (!chTag("del")) s_text = rez; |
694 | IF(!chTag("ul")) || (!chTag("ol")) IF(!rez) { |
691 | IF(!chTag("ul")) || (!chTag("ol")) IF(!rez) { |
695 | li_text = rez; |
692 | li_text = rez; |
696 | li_tab--; |
693 | li_tab--; |
697 | TextGoDown(left1, top1, width1); |
694 | TextGoDown(left1, top1, width1); |
698 | } ELSE li_tab++; |
695 | } ELSE li_tab++; |
699 | IF(!chTag("dd")) stolbec += 5; |
696 | IF(!chTag("dd")) stolbec += 5; |
700 | IF(!chTag("blockquote")) blq_text = rez; |
697 | IF(!chTag("blockquote")) blq_text = rez; |
701 | IF(!chTag("pre")) pre_text = rez; |
698 | IF(!chTag("pre")) pre_text = rez; |
702 | IF(!chTag("hr")) { |
699 | IF(!chTag("hr")) { |
703 | TextGoDown(left1, top1, width1); |
700 | TextGoDown(left1, top1, width1); |
704 | TextGoDown(left1, top1 + 10, width1); |
701 | TextGoDown(left1, top1 + 10, width1); |
705 | IF(strcmp(#parametr, "color=") == 0) hr_color = GetColor(#options); |
702 | IF(strcmp(#parametr, "color=") == 0) hr_color = GetColor(#options); |
706 | ELSE hr_color = 0x999999; |
703 | ELSE hr_color = 0x999999; |
707 | IF(stroka > 0) DrawBar(left1, top1 + 14, width1 - 8, 1, hr_color); |
704 | IF(stroka > 0) DrawBar(left1, top1 + 14, width1 - 8, 1, hr_color); |
708 | } |
705 | } |
709 | 706 | ||
710 | if (!chTag("img")) |
707 | if (!chTag("img")) |
711 | { |
708 | { |
712 | //IF (GetFileInfo(#libimg)<>0) return; //åñëè áèáëèîòåêè íåò |
709 | //IF (GetFileInfo(#libimg)<>0) return; //åñëè áèáëèîòåêè íåò |
713 | IMG_TAG: |
710 | IMG_TAG: |
714 | IF (strcmp(#parametr,"src=")==0) //íàäî îáúåäèíèòü ñ GetNewUrl() |
711 | IF (strcmp(#parametr,"src=")==0) //íàäî îáúåäèíèòü ñ GetNewUrl() |
715 | { |
712 | { |
716 | copystr(BrowserHistory.CurrentUrl(), #temp); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû |
713 | copystr(BrowserHistory.CurrentUrl(), #temp); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû |
717 | temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
714 | temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / |
718 | copystr(#options,#temp+strlen(#temp)); |
715 | copystr(#options,#temp+strlen(#temp)); |
719 | image=load_image(#temp); |
716 | image=load_image(#temp); |
720 | 717 | ||
721 | w=DSWORD[image+4]; |
718 | w=DSWORD[image+4]; |
722 | h=DSWORD[image+8]; |
719 | h=DSWORD[image+8]; |
723 | } |
720 | } |
724 | IF(tagparam) { |
721 | IF(tagparam) { |
725 | GetNextParam(); |
722 | GetNextParam(); |
726 | GOTO IMG_TAG; |
723 | GOTO IMG_TAG; |
727 | } |
724 | } |
728 | 725 | ||
729 | if (w>width1) w=width1; |
726 | if (w>width1) w=width1; |
730 | 727 | ||
731 | if (image) |
728 | if (image) |
732 | { |
729 | { |
733 | stroka+=h/10; |
730 | stroka+=h/10; |
734 | 731 | ||
735 | if (top1+h |
732 | if (top1+h |
736 | return; |
733 | return; |
737 | 734 | ||
738 | if (top1 |
735 | if (top1 |
739 | { |
736 | { |
740 | img_za_kadrom=WB1.top-top1; |
737 | img_za_kadrom=WB1.top-top1; |
741 | h=h-img_za_kadrom; |
738 | h=h-img_za_kadrom; |
742 | top1=WB1.top; |
739 | top1=WB1.top; |
743 | } |
740 | } |
744 | 741 | ||
745 | if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó IF (stroka - 2 < max_kolvo_strok) |
742 | if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó IF (stroka - 2 < max_kolvo_strok) |
746 | { |
743 | { |
747 | h=WB1.top+WB1.height-top1-15; |
744 | h=WB1.top+WB1.height-top1-15; |
748 | } |
745 | } |
749 | 746 | ||
750 | IF (h<=0) return; |
747 | IF (h<=0) return; |
751 | 748 | ||
752 | img_draw stdcall (image,left1-5,top1+10,w, h,0,img_za_kadrom); |
749 | img_draw stdcall (image,left1-5,top1+10,w, h,0,img_za_kadrom); |
753 | DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color); |
750 | DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color); |
754 | IF (link) |
751 | IF (link) |
755 | { |
752 | { |
756 | DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); |
753 | DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); |
757 | } |
754 | } |
758 | 755 | ||
759 | } |
756 | } |
760 | /*else |
757 | /*else |
761 | { |
758 | { |
762 | IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line)); |
759 | IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line)); |
763 | }*/ |
760 | }*/ |
764 | return; |
761 | return; |
765 | } |
762 | } |
766 | 763 | ||
767 | if (!chTag("meta")) || (!chTag("?xml")) |
764 | if (!chTag("meta")) || (!chTag("?xml")) |
768 | { |
765 | { |
769 | META: |
766 | META: |
770 | if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding=")) |
767 | if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding=")) |
771 | { |
768 | { |
772 | copystr(#options[find_symbol(#options, '=')],#options); //ïîèñê â content= |
769 | copystr(#options[find_symbol(#options, '=')],#options); //ïîèñê â content= |
773 | 770 | ||
774 | IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8")) |
771 | IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8")) |
775 | { |
772 | { |
776 | ReadHtml(); |
773 | ReadHtml(); |
777 | utf8rutodos(buf); |
774 | utf8rutodos(buf); |
778 | } |
775 | } |
779 | IF(!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u")) |
776 | IF(!strcmp(#options, "koi8-r")) || (!strcmp(#options, "koi8-u")) |
780 | { |
777 | { |
781 | ReadHtml(); |
778 | ReadHtml(); |
782 | koitodos(buf); |
779 | koitodos(buf); |
783 | } |
780 | } |
784 | IF(!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866")) |
781 | IF(!strcmp(#options, "dos")) || (!strcmp(#options, "cp-866")) |
785 | { |
782 | { |
786 | ReadHtml(); |
783 | ReadHtml(); |
787 | } |
784 | } |
788 | } |
785 | } |
789 | IF(tagparam) |
786 | IF(tagparam) |
790 | { |
787 | { |
791 | GetNextParam(); |
788 | GetNextParam(); |
792 | goto META; |
789 | goto META; |
793 | } |
790 | } |
794 | return; |
791 | return; |
795 | } |
792 | } |
796 | } |
793 | } |
797 | 794 | ||
798 | 795 | ||
799 | void TextGoDown(int left1, top1, width1) |
796 | void TextGoDown(int left1, top1, width1) |
800 | { |
797 | { |
801 | stroka++; |
798 | stroka++; |
802 | IF(blq_text == 1) stolbec = 8; |
799 | IF(blq_text == 1) stolbec = 8; |
803 | ELSE stolbec = 0; |
800 | ELSE stolbec = 0; |
804 | IF(li_text == 1) stolbec = li_tab * 5; |
801 | IF(li_text == 1) stolbec = li_tab * 5; |
805 | IF(stroka >= 0) && (stroka - 2 < max_kolvo_strok) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color); |
802 | IF(stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (!anchor) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color); |
806 | } |
803 | } |
807 | 804 | ||
808 | 805 | ||
809 | //ñêðîëë |
806 | //ñêðîëë |
810 | void TWebBrowser::DrawScroller() //íå îïòèìàëüíàÿ îòðèñîâêà, íî çàòî â îäíîì ìåñòå |
807 | void TWebBrowser::DrawScroller() //íå îïòèìàëüíàÿ îòðèñîâêà, íî çàòî â îäíîì ìåñòå |
811 | { |
808 | { |
812 | scroll1.max_area = count; |
809 | scroll1.max_area = count; |
813 | scroll1.cur_area = max_kolvo_strok; |
810 | scroll1.cur_area = max_kolvo_strok; |
814 | scroll1.position = za_kadrom; |
811 | scroll1.position = za_kadrom; |
815 | 812 | ||
816 | scroll1.all_redraw=1; |
813 | scroll1.all_redraw=1; |
817 | scroll1.start_x=Form.width-28; //left + width - 15 |
814 | scroll1.start_x=Form.width-28; //left + width - 15 |
818 | scroll1.size_y=WB1.height; |
815 | scroll1.size_y=WB1.height; |
819 | 816 | ||
820 | scrollbar_v_draw(#scroll1); |
817 | scrollbar_v_draw(#scroll1); |
821 | 818 | ||
822 | DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1); |
819 | DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1); |
823 | DefineButton(scroll1.start_x+1, scroll1.start_y+scroll1.size_y-18, 16, 16, ID2+BT_HIDE, 0xE4DFE1); |
820 | DefineButton(scroll1.start_x+1, scroll1.start_y+scroll1.size_y-18, 16, 16, ID2+BT_HIDE, 0xE4DFE1); |
824 | }>=0)>>>>>>16><16>>>>=>=>>>=72)>>>>>>>>>>!--> |
821 | }>=0)>>>>>>16><16>>>>=>=>>>=72)>>>>>>>>>>!--> |
825 | >': |
822 | >': |
826 | >>>0)>>>>-->>>>>>>=>>>>>> |
823 | >>>0)>>>>-->>>>>>>=>>>>>> |