void location_goto(struct document_view *doc_view, unsigned char *url) { unsigned char *new_abs_url; struct uri *new_uri; struct delayed_goto *deg; /* Workaround for bug 611. Does not crash, but may lead to infinite loop.*/ if (!doc_view) return; new_abs_url = join_urls(doc_view->document->uri, trim_chars(url, ' ', 0)); if (!new_abs_url) return; new_uri = get_uri(new_abs_url, 0); mem_free(new_abs_url); if (!new_uri) return; deg = mem_calloc(1, sizeof(*deg)); if (!deg) { done_uri(new_uri); return; } assert(doc_view->vs); deg->vs = doc_view->vs; deg->uri = new_uri; /* It does not seem to be very safe inside of frames to * call goto_uri() right away. */ register_bottom_half(delayed_goto, deg); }
void html_a(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *href; href = get_url_val(a, (unsigned char *)"href", html_context->doc_cp); if (href) { unsigned char *target; mem_free_set(&format.link, join_urls(html_context->base_href, trim_chars(href, ' ', 0))); mem_free(href); target = get_target(html_context->options, a); if (target) { mem_free_set(&format.target, target); } else { mem_free_set(&format.target, stracpy(html_context->base_target)); } if (0) { ; /* Shut up compiler */ #ifdef CONFIG_GLOBHIST } else if (get_global_history_item(format.link)) { format.style.color.foreground = format.color.vlink; html_top->pseudo_class &= ~ELEMENT_LINK; html_top->pseudo_class |= ELEMENT_VISITED; #endif #ifdef CONFIG_BOOKMARKS } else if (get_bookmark(format.link)) { format.style.color.foreground = format.color.bookmark_link; html_top->pseudo_class &= ~ELEMENT_VISITED; /* XXX: Really set ELEMENT_LINK? --pasky */ html_top->pseudo_class |= ELEMENT_LINK; #endif } else { format.style.color.foreground = format.color.clink; html_top->pseudo_class &= ~ELEMENT_VISITED; html_top->pseudo_class |= ELEMENT_LINK; } mem_free_set(&format.title, get_attr_val(a, (unsigned char *)"title", html_context->doc_cp)); html_focusable(html_context, a); } else { pop_html_element(html_context); } set_fragment_identifier(html_context, a, (unsigned char *)"name"); }
/** Replace invalid chars in @a title with ' ' and trim all starting/ending * spaces. * * update_bookmark() assumes this function does not switch translation * tables. */ void sanitize_title(unsigned char *title) { int len = strlen((const char *)title); if (!len) return; while (len--) { if (title[len] < ' ' || title[len] == NBSP_CHAR) title[len] = ' '; } trim_chars(title, ' ', NULL); }
/** Returns 0 if @a url contains invalid chars, 1 if ok. * It trims starting/ending spaces. */ int sanitize_url(unsigned char *url) { int len = strlen((const char *)url); if (!len) return 1; while (len--) { if (url[len] < ' ') return 0; } trim_chars(url, ' ', NULL); return 1; }
Taxonomy read_ncbi_taxonomy( std::string const& node_file, std::string const& name_file ) { // Prepare a reader for the stupid NCBI table specifications. // Why can't they use normal csv files like everyone else? auto reader = utils::CsvReader(); reader.separator_chars( "|" ); reader.trim_chars( "\t" ); reader.quotation_chars( "" ); // Read data into lookup tables. auto const nodes = convert_ncbi_node_table( reader.read( utils::from_file( node_file ))); auto const names = convert_ncbi_name_table( reader.read( utils::from_file( name_file ))); // Do the table untangling. return convert_ncbi_tables( nodes, names ); }
void html_form(struct html_context *html_context, unsigned char *a, unsigned char *xxx3, unsigned char *xxx4, unsigned char **xxx5) { unsigned char *al; struct form *form; html_context->was_br = 1; form = init_form(); if (!form) return; form->method = FORM_METHOD_GET; form->form_num = a - html_context->startf; al = get_attr_val(a, (unsigned char *)"method", html_context->doc_cp); if (al) { if (!c_strcasecmp((const char *)al, "post")) { unsigned char *enctype; enctype = get_attr_val(a, (unsigned char *)"enctype", html_context->doc_cp); form->method = FORM_METHOD_POST; if (enctype) { if (!c_strcasecmp((const char *)enctype, "multipart/form-data")) form->method = FORM_METHOD_POST_MP; else if (!c_strcasecmp((const char *)enctype, "text/plain")) form->method = FORM_METHOD_POST_TEXT_PLAIN; mem_free(enctype); } } mem_free(al); } form->onsubmit = get_attr_val(a, (unsigned char *)"onsubmit", html_context->doc_cp); al = get_attr_val(a, (unsigned char *)"name", html_context->doc_cp); if (al) form->name = al; al = get_attr_val(a, (unsigned char *)"action", html_context->doc_cp); /* The HTML specification at * http://www.w3.org/TR/REC-html40/interact/forms.html#h-17.3 states * that the behavior of an empty action attribute should be undefined. * Mozilla handles action="" as action="<current-URI>" which seems * reasonable. (bug 615) */ if (al && *al) { form->action = join_urls(html_context->base_href, trim_chars(al, ' ', NULL)); mem_free(al); } else { enum uri_component components = URI_ORIGINAL; mem_free_if(al); /* We have to do following for GET method, because we would end * up with two '?' otherwise. */ if (form->method == FORM_METHOD_GET) components = URI_FORM_GET; form->action = get_uri_string(html_context->base_href, components); /* No action URI should contain post data */ assert(!form->action || !strchr((char *)form->action, POST_CHAR)); /* GET method URIs should not have '?'. */ assert(!form->action || form->method != FORM_METHOD_GET || !strchr((char *)form->action, '?')); } al = get_target(html_context->options, a); form->target = al ? al : stracpy(html_context->base_target); html_context->special_f(html_context, SP_FORM, form); }