From 36219f5828f2b5afba132cfbb79e2bbb7485e1f7 Mon Sep 17 00:00:00 2001 From: boreddevnl Date: Tue, 3 Mar 2026 14:12:39 +0100 Subject: [PATCH] browser parsing --- boredos.iso | Bin 6793216 -> 6793216 bytes src/kernel/userland/browser.c | 60 ++++++++++++++++++++++------------ 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/boredos.iso b/boredos.iso index 1a24df90ed0ddf29655aedacc1a80ae9b09ca9ff..8fa38ac1573866d8015fa1b06674e52b02e4d65d 100644 GIT binary patch delta 20898 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 delta 20090 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 th4= '1' && tag_name[2] <= '6') { flush_line(is_centered); cur_line_y += 10; is_bold = false; } + else if (str_istarts_with(tag_name+1, "form")) { + flush_line(is_centered); + current_form_id = 0; current_form_action[0] = 0; + } else if (str_istarts_with(tag_name+1, "a")) current_link[0] = 0; - else if (str_istarts_with(tag_name+1, "p") || str_istarts_with(tag_name+1, "li") || str_istarts_with(tag_name+1, "ol") || str_istarts_with(tag_name+1, "form") || str_istarts_with(tag_name+1, "div")) flush_line(is_centered); + else if (str_istarts_with(tag_name+1, "p") || str_istarts_with(tag_name+1, "li") || str_istarts_with(tag_name+1, "ol") || str_istarts_with(tag_name+1, "div")) flush_line(is_centered); else if (str_istarts_with(tag_name+1, "font")) current_color = COLOR_TEXT; - else if (str_istarts_with(tag_name+1, "head") || (tag_name[1] == 's' && tag_name[2] == 'c') || (tag_name[1] == 's' && tag_name[2] == 't') || str_istarts_with(tag_name+1, "title") || str_istarts_with(tag_name+1, "noscript") || str_istarts_with(tag_name+1, "style")) skip_content = false; + else if (str_istarts_with(tag_name+1, "head") || (tag_name[1] == 's' && tag_name[2] == 'c') || (tag_name[1] == 's' && tag_name[2] == 'i') || (tag_name[1] == 's' && tag_name[2] == 't') || str_istarts_with(tag_name+1, "title") || str_istarts_with(tag_name+1, "noscript") || str_istarts_with(tag_name+1, "style")) skip_content = false; } else { if (str_istarts_with(tag_name, "center")) { flush_line(is_centered); is_centered = true; } else if (tag_name[0] == 'h' && tag_name[1] >= '1' && tag_name[1] <= '6') { flush_line(is_centered); cur_line_y += 10; is_bold = true; } @@ -358,6 +366,7 @@ static void parse_html(const char *html) { else if (str_istarts_with(tag_name, "h") || str_istarts_with(tag_name, "p") || str_istarts_with(tag_name, "hr") || str_istarts_with(tag_name, "li") || str_istarts_with(tag_name, "ol") || str_istarts_with(tag_name, "div")) flush_line(is_centered); else if (str_istarts_with(tag_name, "form")) { flush_line(is_centered); + current_form_id = next_form_id++; char *action = str_istrstr(attr_buf, "action=\""); if (action) { action += 8; int l = 0; @@ -398,11 +407,19 @@ static void parse_html(const char *html) { char *ph = str_istrstr(attr_buf, "placeholder=\""); char *type = str_istrstr(attr_buf, "type=\""); char *name = str_istrstr(attr_buf, "name=\""); + + el->form_id = current_form_id; + int l; + l = 0; while(current_form_action[l]) { el->form_action[l] = current_form_action[l]; l++; } el->form_action[l] = 0; + if (name) { - name += 6; int l = 0; - while(name[l] && name[l] != '\"' && l < 63) { current_input_name[l] = name[l]; l++; } - current_input_name[l] = 0; + name += 6; l = 0; + while(name[l] && name[l] != '\"' && l < 63) { el->input_name[l] = name[l]; l++; } + el->input_name[l] = 0; + } else { + l = 0; const char *dn = "q"; while(dn[l]) { el->input_name[l] = dn[l]; l++; } el->input_name[l] = 0; } + if (type && str_istarts_with(type+6, "submit")) el->tag = TAG_BUTTON; if (val) { @@ -555,13 +572,14 @@ int main(int argc, char **argv) { focused_element = i; found = true; browser_paint(); ui_mark_dirty(win_browser, 0, 0, WIN_W, WIN_H); break; } if (el->tag == TAG_BUTTON) { + int fid = el->form_id; int search_idx = -1; - for (int k=0; k= 0) { char search_url[1024]; char *u = search_url; const char *s; - if (current_form_action[0] == '/') { + if (el->form_action[0] == '/') { s = "http://"; while(*s) *u++ = *s++; s = current_host; while(*s) *u++ = *s++; if (current_port != 80) { @@ -569,9 +587,9 @@ int main(int argc, char **argv) { char pbuf[10]; itoa(current_port, pbuf); const char* ps = pbuf; while(*ps) *u++ = *ps++; } - s = current_form_action; while(*s) *u++ = *s++; - } else if (str_istarts_with(current_form_action, "http")) { - s = current_form_action; while(*s) *u++ = *s++; + s = el->form_action; while(*s) *u++ = *s++; + } else if (str_istarts_with(el->form_action, "http")) { + s = el->form_action; while(*s) *u++ = *s++; } else { s = "http://"; while(*s) *u++ = *s++; s = current_host; while(*s) *u++ = *s++; @@ -581,12 +599,12 @@ int main(int argc, char **argv) { const char* ps = pbuf; while(*ps) *u++ = *ps++; } if (current_host[0] && current_host[0] != '/') *u++ = '/'; - if (current_form_action[0]) { s = current_form_action; while(*s) *u++ = *s++; } + if (el->form_action[0]) { s = el->form_action; while(*s) *u++ = *s++; } } s = (strstr(search_url, "?") ? "&" : "?"); while(*s) *u++ = *s++; - s = current_input_name; while(*s) *u++ = *s++; + s = elements[search_idx].input_name; while(*s) *u++ = *s++; *u++ = '='; for (int m=0; elements[search_idx].attr_value[m] && (u - search_url) < 1020; m++) { @@ -646,7 +664,7 @@ int main(int argc, char **argv) { char search_url[1024]; char *u = search_url; const char *s; - if (current_form_action[0] == '/') { + if (el->form_action[0] == '/') { s = "http://"; while(*s) *u++ = *s++; s = current_host; while(*s) *u++ = *s++; if (current_port != 80) { @@ -654,9 +672,9 @@ int main(int argc, char **argv) { char pbuf[10]; itoa(current_port, pbuf); const char* ps = pbuf; while(*ps) *u++ = *ps++; } - s = current_form_action; while(*s) *u++ = *s++; - } else if (str_istarts_with(current_form_action, "http")) { - s = current_form_action; while(*s) *u++ = *s++; + s = el->form_action; while(*s) *u++ = *s++; + } else if (str_istarts_with(el->form_action, "http")) { + s = el->form_action; while(*s) *u++ = *s++; } else { s = "http://"; while(*s) *u++ = *s++; s = current_host; while(*s) *u++ = *s++; @@ -666,12 +684,12 @@ int main(int argc, char **argv) { const char* ps = pbuf; while(*ps) *u++ = *ps++; } if (current_host[0] && current_host[0] != '/') *u++ = '/'; - if (current_form_action[0]) { s = current_form_action; while(*s) *u++ = *s++; } + if (el->form_action[0]) { s = el->form_action; while(*s) *u++ = *s++; } } s = (strstr(search_url, "?") ? "&" : "?"); while(*s) *u++ = *s++; - s = current_input_name; while(*s) *u++ = *s++; + s = el->input_name; while(*s) *u++ = *s++; *u++ = '='; for (int m=0; el->attr_value[m] && (u - search_url) < 1020; m++) {