Rev 5690 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4540 | leency | 1 | dword bufpointer; |
4636 | leency | 2 | dword o_bufpointer; |
4540 | leency | 3 | dword bufsize; |
4411 | leency | 4 | |
5493 | leency | 5 | char URL[10000]; |
4416 | leency | 6 | |
4677 | leency | 7 | scroll_bar scroll_wv = { 15,200,398,44,0,2,115,15,0,0xeeeeee,0xBBBbbb,0xeeeeee,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; |
4416 | leency | 8 | |
4417 | leency | 9 | char header[2048]; |
4416 | leency | 10 | |
4411 | leency | 11 | struct TWebBrowser { |
4540 | leency | 12 | llist list; |
5678 | leency | 13 | dword draw_line_width; |
4475 | leency | 14 | DrawBufer DrawBuf; |
4636 | leency | 15 | void Prepare(); |
4550 | leency | 16 | void Parse(); |
4650 | leency | 17 | void SetTextStyle(); |
4411 | leency | 18 | void DrawPage(); |
19 | void DrawScroller(); |
||
4650 | leency | 20 | void NewLine(); |
4718 | leency | 21 | void Perenos(); |
22 | byte end_parsing; |
||
4686 | leency | 23 | } WB1; |
4486 | leency | 24 | |
4491 | leency | 25 | byte b_text, i_text, u_text, s_text, pre_text, blq_text, li_text, li_tab, |
4637 | leency | 26 | link, ignor_text, cur_encoding, text_align, t_html, t_body; |
4417 | leency | 27 | byte condition_text_active, condition_text_val, condition_href, condition_max; |
4411 | leency | 28 | |
29 | enum { ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT}; |
||
30 | |||
4417 | leency | 31 | dword text_colors[300]; |
32 | dword text_color_index; |
||
4491 | leency | 33 | dword link_color_inactive; |
34 | dword link_color_active; |
||
4417 | leency | 35 | dword bg_color; |
4411 | leency | 36 | |
4417 | leency | 37 | int stroka; |
38 | int stolbec; |
||
39 | int tab_len; |
||
40 | int anchor_line_num; |
||
4636 | leency | 41 | |
4417 | leency | 42 | char line[500]; |
43 | char tag[100]; |
||
44 | char tagparam[10000]; |
||
45 | char parametr[1200]; |
||
46 | char options[4096]; |
||
47 | char anchor[256]; |
||
4411 | leency | 48 | |
4416 | leency | 49 | #include "..\TWB\history.h" |
4686 | leency | 50 | #include "..\TWB\links.h" |
4411 | leency | 51 | #include "..\TWB\colors.h" |
52 | #include "..\TWB\unicode_tags.h" |
||
53 | #include "..\TWB\img_cache.h" |
||
54 | #include "..\TWB\parce_tag.h" |
||
4636 | leency | 55 | #include "..\TWB\table.h" |
4411 | leency | 56 | |
4475 | leency | 57 | |
4411 | leency | 58 | //======================================================================= |
59 | |||
60 | |||
61 | void TWebBrowser::DrawPage() |
||
62 | { |
||
5678 | leency | 63 | int start_x, start_y, line_length, stolbec_len, magrin_left=5; |
64 | dword font_type; |
||
4411 | leency | 65 | |
66 | if (!header) |
||
67 | { |
||
68 | strcpy(#header, #line); |
||
69 | strcat(#header, " -"); |
||
70 | strcat(#header, #version); |
||
71 | line = 0; |
||
72 | return; |
||
73 | } |
||
4637 | leency | 74 | if (t_html) && (!t_body) return; |
4411 | leency | 75 | |
4415 | leency | 76 | if (stroka >= 0) && (stroka - 2 < list.visible) && (line) && (!anchor) |
4411 | leency | 77 | { |
5678 | leency | 78 | start_x = stolbec * 6 + magrin_left * DrawBuf.zoom + list.x; |
79 | start_y = stroka * list.line_h + magrin_left + list.y; |
||
4718 | leency | 80 | stolbec_len = strlen(#line); |
5678 | leency | 81 | line_length = stolbec_len * 6 * DrawBuf.zoom; |
4411 | leency | 82 | |
5678 | leency | 83 | if (DrawBuf.zoom==1) font_type = 0x88; else font_type = 0x89; |
84 | |||
85 | WriteBufText(start_x, 0, font_type, text_colors[text_color_index], #line, buf_data); |
||
86 | if (b_text) WriteBufText(start_x+1, 0, font_type, text_colors[text_color_index], #line, buf_data); |
||
87 | if (i_text) { stolbec++; DrawBuf.Skew(start_x, 0, line_length, list.line_h); } // bug with zoom>1 |
||
88 | if (s_text) DrawBuf.DrawBar(start_x, list.line_h / 2 - DrawBuf.zoom, line_length, DrawBuf.zoom, text_colors[text_color_index]); |
||
89 | if (u_text) DrawBuf.DrawBar(start_x, list.line_h - DrawBuf.zoom - DrawBuf.zoom, line_length, DrawBuf.zoom, text_colors[text_color_index]); |
||
5519 | leency | 90 | if (link) { |
5678 | leency | 91 | DrawBuf.DrawBar(start_x, list.line_h - DrawBuf.zoom - DrawBuf.zoom, line_length, DrawBuf.zoom, text_colors[text_color_index]); |
92 | UnsafeDefineButton(start_x-2, start_y-1, line_length + 3, DrawBuf.zoom * 10, PageLinks.count + 400 + BT_HIDE, 0xB5BFC9); |
||
93 | PageLinks.AddText(#line, line_length, list.line_h, UNDERLINE); |
||
4411 | leency | 94 | } |
4718 | leency | 95 | stolbec += stolbec_len; |
4411 | leency | 96 | } |
97 | } |
||
98 | //======================================================================= |
||
99 | |||
100 | |||
4636 | leency | 101 | void TWebBrowser::Prepare(dword bufpos, in_filesize){ |
102 | bufsize = in_filesize; |
||
103 | bufpointer = bufpos; |
||
104 | Parse(); |
||
4554 | leency | 105 | } |
106 | |||
107 | |||
4636 | leency | 108 | void TWebBrowser::Parse(){ |
4411 | leency | 109 | word bukva[2]; |
4718 | leency | 110 | int j; |
4411 | leency | 111 | byte ignor_param; |
112 | char temp[768]; |
||
4636 | leency | 113 | dword bufpos = bufpointer; |
4726 | leency | 114 | int line_len; |
4411 | leency | 115 | |
4637 | leency | 116 | b_text = i_text = u_text = s_text = blq_text = t_html = t_body = |
4417 | leency | 117 | li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = |
118 | condition_text_val = condition_text_active = 0; //обнуляем теги |
||
4718 | leency | 119 | end_parsing = false; |
4475 | leency | 120 | condition_max = 255; |
4411 | leency | 121 | text_align = ALIGN_LEFT; |
4491 | leency | 122 | link_color_inactive = 0x0000FF; |
123 | link_color_active = 0xFF0000; |
||
4411 | leency | 124 | bg_color = 0xFFFFFF; |
4475 | leency | 125 | DrawBuf.Fill(bg_color); |
4504 | leency | 126 | PageLinks.Clear(); |
4411 | leency | 127 | strcpy(#header, #version); |
4415 | leency | 128 | stroka = -list.first; |
4411 | leency | 129 | stolbec = 0; |
130 | line = 0; |
||
131 | |||
5678 | leency | 132 | draw_line_width = list.w * DrawBuf.zoom; |
5519 | leency | 133 | |
4411 | leency | 134 | if (pre_text<>2) |
135 | { |
||
136 | pre_text=0; |
||
137 | if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1; |
||
138 | } |
||
139 | |||
4718 | leency | 140 | for ( ; (bufpointer+bufsize > bufpos) && (ESBYTE[bufpos]!=0); bufpos++;) |
4411 | leency | 141 | { |
4718 | leency | 142 | if (end_parsing) break; |
4508 | leency | 143 | bukva = ESBYTE[bufpos]; |
4417 | leency | 144 | if (ignor_text) && (bukva!='<') continue; |
145 | if (condition_text_active) && (condition_text_val != condition_href) && (bukva!='<') continue; |
||
4411 | leency | 146 | switch (bukva) |
147 | { |
||
148 | case 0x0a: |
||
149 | if (pre_text) |
||
150 | { |
||
4686 | leency | 151 | chrcat(#line, ' '); |
4411 | leency | 152 | bukva = temp = NULL; |
4718 | leency | 153 | Perenos(); |
4726 | leency | 154 | break; |
4411 | leency | 155 | } |
156 | case '\9': |
||
157 | if (pre_text) //иначе идём на 0x0d |
||
158 | { |
||
4725 | leency | 159 | tab_len = strlen(#line) % 4; |
160 | if (!tab_len) tab_len = 4; |
||
4411 | leency | 161 | for (j=0; j |
162 | break; |
||
163 | } |
||
164 | goto DEFAULT_MARK; |
||
165 | |||
166 | case '&': // and so on |
||
4508 | leency | 167 | bufpos++; |
4411 | leency | 168 | tag=0; |
4508 | leency | 169 | for (j=0; (ESBYTE[bufpos]<>';') && (j<7); j++, bufpos++;) |
4411 | leency | 170 | { |
4508 | leency | 171 | bukva = ESBYTE[bufpos]; |
4411 | leency | 172 | chrcat(#tag, bukva); |
173 | } |
||
4417 | leency | 174 | if (bukva = GetUnicodeSymbol()) goto DEFAULT_MARK; |
4411 | leency | 175 | break; |
176 | case '<': |
||
4508 | leency | 177 | bufpos++; //промотаем символ < |
4411 | leency | 178 | tag = parametr = tagparam = ignor_param = NULL; |
4508 | leency | 179 | if (ESBYTE[bufpos] == '!') //фильтрация внутри , дерзко |
4411 | leency | 180 | { |
4508 | leency | 181 | bufpos++; |
182 | if (ESBYTE[bufpos] == '-') |
||
4411 | leency | 183 | { |
184 | HH_: |
||
185 | do |
||
186 | { |
||
4508 | leency | 187 | bufpos++; |
4550 | leency | 188 | if (bufpointer + bufsize <= bufpos) break 2; |