int Uri::get_port( void ) const { smatch match; string port = ""; static const regex pattern( "^[a-zA-Z][a-zA-Z0-9+\\-.]*://(([a-zA-Z0-9\\-._~%!$&'()*+,;=]+)(:([a-zA-Z0-9\\-._~%!$&'()*+,;=]+))?@)?([a-zA-Z0-9\\-._~%]+|\\[[a-zA-Z0-9\\-._~%!$&'()*+,;=:]+\\]):([0-9]+)" ); if ( regex_search( m_pimpl->uri, match, pattern ) ) { port = match[ 6 ]; } else { const auto scheme = get_scheme( ); if ( not scheme.empty( ) ) { const struct servent* entry = getservbyname( scheme.data( ), nullptr ); port = ::to_string( ntohs( entry->s_port ) ); } } if ( port.empty( ) ) { return 0; } return stoi( port ); }
void parse_file(TextCursor cursor, int min_length, std::set<std::string>& schemas) { int uri_length, i = 0, pos; while(!cursor.eof()) { try { TextCursor stop_cursor(parse_uri(cursor)); if (schemas.size() > 0) { std::string scheme = get_scheme(cursor); if(schemas.count(scheme) == 0) throw ParseError(); } uri_length = stop_cursor.get_offset() - cursor.get_offset(); char uri[uri_length + 1]; pos = cursor.get_offset(); cursor.gets(uri_length, uri); if(uri_length >= min_length) { save_uri(i++, uri, pos); printf("%4d %s\n", pos, uri); cursor = stop_cursor; } } catch(ParseError) { cursor.get(); } } }
RD_File *file_open(const RD_ByteArray *name, R_Byte mode) { const scheme *s; const R_Byte *fname; char *c_fname; int len; RD_File *f; s = get_scheme(name); /* make a zero-terminated string copy without scheme prefix */ fname = bytearray_data_c(name); len = bytearray_length(name) + 1; fname += s->name.len; len -= s->name.len;; c_fname = malloc(len); memcpy(c_fname, fname, len); c_fname[len] = '\0'; f = s->open(c_fname, mode); free(c_fname); return f; }
// Construct a URL object from the string representation URL::URL(const std::string& url_str) { if (url_str.empty()) throw std::invalid_argument("empty url string"); const std::string sr = boost::trim_copy(url_str); try { token_rest scheme_rest = get_scheme(sr); scheme = scheme_rest.first; std::cout << scheme_rest.first << " : " << scheme_rest.second << std::endl; token_rest host_port_rest = get_host_port(scheme_rest.second); std::cout << host_port_rest.first << " : " << host_port_rest.second << std::endl; std::pair<std::string,uint16_t> host_port = split_host_port(host_port_rest.first); std::cout << host_port.first << " : " << host_port.second << std::endl; host = host_port.first; port = host_port.second; token_rest path_rest = get_path(host_port_rest.second); std::cout << path_rest.first << std::endl; path = path_rest.first; if (path_rest.second.empty()) return; token_rest query_rest = get_query(path_rest.second); std::cout << query_rest.first << " : " << query_rest.second << std::endl; if (!query_rest.first.empty()) { query_key_vals = make_query_map(query_rest.first); } std::string fragment = get_fragment(query_rest.second); std::cout << fragment << std::endl; } catch(const std::exception &e) { std::cerr << e.what() << std::endl; throw e; } // parsed successfully, we can copy over the original arg string_rep = url_str; }
//============================================================================= bool Uri::operator!=(const Uri& v) const { return get_scheme() != v.get_scheme() || get_host() != v.get_host() || get_port() != v.get_port() || get_path() != v.get_path() || get_query() != v.get_query(); }
//============================================================================= bool Uri::operator==(const Uri& v) const { return get_scheme() == v.get_scheme() && get_host() == v.get_host() && get_port() == v.get_port() && get_path() == v.get_path() && get_query() == v.get_query(); }
//============================================================================= ScriptRef* Uri::script_op(const ScriptAuth& auth, const ScriptRef& ref, const ScriptOp& op, const ScriptRef* right) { if (right) { // binary ops const Uri* rv = dynamic_cast<const Uri*>(right->object()); if (rv) { // Uri x Uri ops switch (op.type()) { case ScriptOp::Equality: return ScriptInt::new_ref(*this == *rv); case ScriptOp::Inequality: return ScriptInt::new_ref(*this != *rv); case ScriptOp::Assign: if (!ref.is_const()) { if (rv) { *this = *rv; } } return ref.ref_copy(); default: break; } } if (ScriptOp::Lookup == op.type()) { std::string name = right->object()->get_string(); if (name == "scheme") return ScriptString::new_ref(get_scheme()); if (name == "host") return ScriptString::new_ref(get_host()); if (name == "port") return ScriptInt::new_ref(get_port()); if (name == "path") return ScriptString::new_ref(get_path()); if (name == "query") return ScriptString::new_ref(get_query()); if (name == "base") return ScriptString::new_ref(get_base()); } } return ScriptObject::script_op(auth,ref,op,right); }
void DocumentView::build_widgets() { scrolled_window_.add(view_); view_.set_buffer(buffer_); view_.signal_populate_popup().connect(sigc::mem_fun(this, &DocumentView::populate_popup)); auto manager = Gsv::StyleSchemeManager::get_default(); view_.get_source_buffer()->set_style_scheme(manager->get_scheme("delimit")); auto provider = Gsv::CompletionWords::create("", Glib::RefPtr<Gdk::Pixbuf>()); provider->register_provider(buffer_); provider->property_priority().set_value(1); view_.get_completion()->add_provider(provider); view_.get_completion()->signal_show().connect([&]() { completion_visible_ = true; }); view_.get_completion()->signal_hide().connect([&]() { completion_visible_ = false; }); auto coverage_attrs = Gsv::MarkAttributes::create(); Gdk::RGBA coverage_colour; coverage_colour.set_rgba(1.0, 0.5, 0, 0.12); coverage_attrs->set_background(coverage_colour); view_.set_mark_attributes("coverage", coverage_attrs, 0); auto linter_attrs = Gsv::MarkAttributes::create(); linter_attrs->set_icon_name("dialog-error"); g_signal_connect(linter_attrs->gobj(), "query-tooltip-markup", G_CALLBACK(get_tooltip), view_.gobj()); view_.set_mark_attributes("linter", linter_attrs, 10); auto breakpoint = Gsv::MarkAttributes::create(); breakpoint->set_icon_name("stop"); view_.set_mark_attributes("breakpoint", breakpoint, 11); view_.add_events(Gdk::BUTTON_PRESS_MASK); view_.signal_button_press_event().connect([&](GdkEventButton* evt) -> bool { if(!buffer_->get_language() || buffer_->get_language()->get_name() != "Python") { return false; } if(evt->type == GDK_2BUTTON_PRESS && evt->window == view_.get_window(Gtk::TEXT_WINDOW_LEFT)->gobj()) { //The user clicked within the left gutter if(evt->button == 1) { //Left click int x_buf, y_buf; view_.window_to_buffer_coords( Gtk::TEXT_WINDOW_LEFT, int(evt->x), int(evt->y), x_buf, y_buf ); //Line bounds Gtk::TextBuffer::iterator iter; int line_top; view_.get_line_at_y(iter, y_buf, line_top); auto mark_list = buffer_->get_source_marks_at_iter(iter, "breakpoint"); if(!mark_list.empty()) { for(auto& mark: mark_list) { buffer_->delete_mark(mark); } auto end_iter = iter; end_iter.forward_line(); unicode line = buffer_->get_slice(iter, end_iter).c_str(); if(line.contains("import ipdb; ipdb.set_trace()")) { buffer_->erase(iter, end_iter); } } else { buffer_->create_source_mark("breakpoint", iter); auto end_iter = iter; end_iter.forward_line(); unicode line_text = buffer_->get_slice(iter, end_iter).c_str(); uint32_t i = 0; for(; i < line_text.length(); ++i) { if(line_text[i] != ' ' && line_text[i] != '\t') { break; } } auto indentation = line_text.slice(nullptr, i); auto replacement_text = _u("{0}import ipdb; ipdb.set_trace();\n").format(indentation); buffer_->insert(iter, replacement_text.encode()); } } } return false; }); apply_settings("text/plain"); scrolled_window_.show_all(); }
// main function for parsing a string url into a url struct url_t *parse_url(char const *const url_string,unsigned int *url_err_out) { *url_err_out = UPARSE_ERROR; url_t *url = (url_t *) malloc(sizeof(url_t)); if (NULL == url) { fprintf(stderr,"cannot allocate url\n"); return NULL; } init_url_t(url); url->original = strdup(url_string); if (NULL == url->original) { fprintf(stderr,"cannot allocate original\n"); free_url_t(url); return NULL; } char *mut_url_string = strdup(url_string); char *free_mut_url_string = mut_url_string; if (NULL == mut_url_string) { fprintf(stderr,"cannot allocate url\n"); free_url_t(url); return NULL; } unsigned int scheme_out_err = 0; url->scheme = get_scheme(&mut_url_string,&scheme_out_err); if (NO_UPARSE_ERROR != scheme_out_err) { fprintf(stderr,"fail from get_scheme\n"); free_url_t(url); free(free_mut_url_string); return NULL; } unsigned int host_port_out_err = 0; host_port_t *host_port = get_host_port(&mut_url_string,&host_port_out_err); if (NO_UPARSE_ERROR != host_port_out_err) { fprintf(stderr,"fail from get_host_port\n"); free_url_t(url); free(free_mut_url_string); return NULL; } url->host = strdup(host_port->host); if (NULL == url->host) { fprintf(stderr,"cannot allocate host\n"); free_url_t(url); free(free_mut_url_string); return NULL; } url->port = host_port->port; free_host_port_t(host_port); unsigned int path_err_out = 0; url->path_elt_list = get_path(&mut_url_string,&path_err_out); if (NO_UPARSE_ERROR != path_err_out) { fprintf(stderr,"fail from get_path\n"); free_url_t(url); free(free_mut_url_string); return NULL; } unsigned int query_err_out = 0; url->query_arg_list = get_query_arg_list(&mut_url_string,&query_err_out); if (UPARSE_ERROR == query_err_out) { fprintf(stderr,"fail from get_query_arg_list\n"); free_url_t(url); free(free_mut_url_string); return NULL; } unsigned int fragment_err_out = 0; url->fragment = get_fragment(&mut_url_string,&fragment_err_out); if (UPARSE_ERROR == fragment_err_out) { fprintf(stderr,"fail from get_fragment\n"); free_url_t(url); free(free_mut_url_string); return NULL; } free(free_mut_url_string); *url_err_out = NO_UPARSE_ERROR; return url; }
/* NOTE: Sticking to natural behavior of returning a list with the unchanged input_string, incase nothing can be substituted, however, this is expensive. A better way would be to return NULL incase of no changes, and let the caller handle the NULL case, which implies that there is no change in the input_string */ GPtrArray* substitute_parameters(gchar *input_string, FmFileInfoList *file_info_list) { //printf("Input string is %s\n", input_string); GPtrArray *out_string_array = g_ptr_array_new(); if(strchr(input_string, '%') == NULL){ //printf("Found nothing to expand. Returning input_string.\n"); g_ptr_array_add(out_string_array, g_string_new(input_string)); return out_string_array; } gsize i, j; gsize len_file_list = fm_list_get_length(file_info_list); GString *out_string = g_string_new(NULL); gsize first_pos = strcspn(input_string, "%"); gchar *pos = input_string + first_pos; g_string_append_len(out_string, input_string, first_pos); GString *g_string_i = NULL; gchar *base_name = NULL, *base_dir = NULL, *file_name = NULL, *host_name = NULL, *user_name = NULL, *port = NULL, *scheme = NULL, *uri = NULL, *file_name_wo_ext = NULL, *ext_pos = NULL; gboolean array_is_init = FALSE; FmFileInfo *file_info_i = NULL, *file_info_j = NULL; char temp[256]; gboolean curr_dir_flag; while((pos = strchr(pos, '%')) != NULL){ switch(pos[1]){ case 'b': /* Works */ if(array_is_init == FALSE){ for(i=0; i<len_file_list; ++i){ g_string_i = g_string_new(out_string->str); file_info_i = fm_list_peek_nth(file_info_list, i); base_name = (gchar *)fm_file_info_get_disp_name(file_info_i); g_string_append(g_string_i, base_name); g_string_append_c(g_string_i, ' '); g_ptr_array_add(out_string_array, g_string_new(g_string_i->str)); g_string_free(g_string_i, TRUE); } break; } file_info_i = fm_list_peek_head(file_info_list); base_name = (gchar *)fm_file_info_get_disp_name(file_info_i); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, base_name); g_string_append_c(g_string_i, ' '); } break; case 'B': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); for(j=0; j<len_file_list; ++j){ file_info_j= fm_list_peek_nth(file_info_list, j); base_name = (gchar *)fm_file_info_get_disp_name(file_info_j); g_string_append(g_string_i, base_name); g_string_append_c(g_string_i, ' '); } } break; case 'c': /* Works */ memset(temp, 256, 0); if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); sprintf(temp, "%u", len_file_list); g_string_append(g_string_i, temp); g_string_append_c(g_string_i, ' '); } break; case 'd': /* Works */ curr_dir_flag = FALSE; if(array_is_init == FALSE){ for(i=0; i<len_file_list; ++i){ g_string_i = g_string_new(out_string->str); file_info_i = fm_list_peek_nth(file_info_list, i); if(fm_file_info_is_dir(file_info_i) == TRUE){ base_dir = fm_path_to_str(fm_file_info_get_path(file_info_i)); } else { if(curr_dir_flag == FALSE){ base_dir = g_get_current_dir(); curr_dir_flag = TRUE; } else { continue; } } g_string_append(g_string_i, base_dir); g_string_append_c(g_string_i, ' '); g_ptr_array_add(out_string_array, g_string_new(g_string_i->str)); g_free(base_dir); g_string_free(g_string_i, TRUE); } break; } file_info_i = fm_list_peek_head(file_info_list); if(fm_file_info_is_dir(file_info_i) == TRUE){ base_dir = fm_path_to_str(fm_file_info_get_path(file_info_i)); } else { if(curr_dir_flag == FALSE){ base_dir = g_get_current_dir(); curr_dir_flag = TRUE; } else { continue; } } for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, base_dir); g_string_append_c(g_string_i, ' '); } g_free(base_dir); break; case 'D': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ curr_dir_flag = FALSE; g_string_i = (GString *)g_ptr_array_index(out_string_array, i); for(j=0; j<len_file_list; ++j){ file_info_j= fm_list_peek_nth(file_info_list, j); if(fm_file_info_is_dir(file_info_j) == TRUE){ base_dir = fm_path_to_str(fm_file_info_get_path(file_info_j)); } else { if(curr_dir_flag == FALSE){ base_dir = g_get_current_dir(); curr_dir_flag = TRUE; } else { continue; } } g_string_append(g_string_i, base_dir); g_string_append_c(g_string_i, ' '); g_free(base_dir); } } break; case 'f': /* Works */ if(array_is_init == FALSE){ for(i=0; i<len_file_list; ++i){ g_string_i = g_string_new(out_string->str); file_info_i = fm_list_peek_nth(file_info_list, i); file_name = (gchar *)fm_path_to_str(fm_file_info_get_path(file_info_i)); g_string_append(g_string_i, file_name); g_string_append_c(g_string_i, ' '); g_ptr_array_add(out_string_array, g_string_new(g_string_i->str)); g_free(file_name); g_string_free(g_string_i, TRUE); } break; } file_info_i = fm_list_peek_head(file_info_list); file_name = (gchar *)fm_path_to_str(fm_file_info_get_path(file_info_i)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, file_name); g_string_append_c(g_string_i, ' '); } g_free(file_name); break; case 'F': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); for(j=0; j<len_file_list; ++j){ file_info_j= fm_list_peek_nth(file_info_list, j); file_name = (gchar *)fm_path_to_str(fm_file_info_get_path(file_info_j)); g_string_append(g_string_i, file_name); g_string_append_c(g_string_i, ' '); g_free(file_name); } } break; case 'h': if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); file_info_i = fm_list_peek_nth(file_info_list, i); host_name = get_host_name(file_info_i); g_string_append(g_string_i, host_name); g_string_append_c(g_string_i, ' '); } break; case 'n': if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); file_info_i = fm_list_peek_nth(file_info_list, i); user_name = get_user_name(file_info_i); g_string_append(g_string_i, user_name); g_string_append_c(g_string_i, ' '); } break; case 'p': if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); file_info_i = fm_list_peek_nth(file_info_list, i); port = get_port(file_info_i); g_string_append(g_string_i, port); g_string_append_c(g_string_i, ' '); } break; case 's': if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); file_info_i = fm_list_peek_nth(file_info_list, i); scheme = get_scheme(file_info_i); g_string_append(g_string_i, scheme); g_string_append_c(g_string_i, ' '); } break; case 'u': /* Works */ if(array_is_init == FALSE){ for(i=0; i<len_file_list; ++i){ g_string_i = g_string_new(out_string->str); file_info_i = fm_list_peek_nth(file_info_list, i); uri = fm_path_to_uri(fm_file_info_get_path(file_info_i)); g_string_append(g_string_i, uri); g_string_append_c(g_string_i, ' '); g_ptr_array_add(out_string_array, g_string_new(g_string_i->str)); g_string_free(g_string_i, TRUE); } break; } file_info_i = fm_list_peek_head(file_info_list); uri = fm_path_to_uri(fm_file_info_get_path(file_info_i)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, uri); g_string_append_c(g_string_i, ' '); } break; case 'U': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); for(j=0; j<len_file_list; ++j){ file_info_j= fm_list_peek_nth(file_info_list, j); uri = fm_path_to_uri(fm_file_info_get_path(file_info_j)); g_string_append(g_string_i, uri); g_string_append_c(g_string_i, ' '); } } break; case 'w': /* Works */ if(array_is_init == FALSE){ for(i=0; i<len_file_list; ++i){ g_string_i = g_string_new(out_string->str); file_info_i = fm_list_peek_nth(file_info_list, i); file_name = (gchar *)fm_file_info_get_disp_name(file_info_i); //printf("%s\n", file_name); ext_pos = g_strrstr(fm_file_info_get_disp_name(fm_list_peek_nth(file_info_list, i)), "."); if(ext_pos != NULL) file_name_wo_ext = g_strndup(file_name, strlen(file_name) - strlen(ext_pos)); else file_name_wo_ext = g_strdup(file_name); g_string_append(g_string_i, file_name_wo_ext); g_string_append_c(g_string_i, ' '); g_ptr_array_add(out_string_array, g_string_new(g_string_i->str)); g_free(file_name_wo_ext); g_string_free(g_string_i, TRUE); } break; } file_info_i = fm_list_peek_head(file_info_list); file_name = (gchar *)fm_file_info_get_disp_name(file_info_i); ext_pos = g_strrstr(file_name, "."); if(ext_pos != NULL) file_name_wo_ext = g_strndup(file_name, strlen(file_name) - strlen(ext_pos)); else file_name_wo_ext = g_strdup(file_name); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, file_name_wo_ext); g_string_append_c(g_string_i, ' '); } g_free(file_name_wo_ext); break; case 'W': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); for(j=0; j<len_file_list; ++j){ file_info_j= fm_list_peek_nth(file_info_list, j); file_name = (gchar *)fm_file_info_get_disp_name(file_info_j); ext_pos = g_strrstr(file_name, "."); if(ext_pos != NULL) file_name_wo_ext = g_strndup(file_name, strlen(file_name) - strlen(ext_pos)); else file_name_wo_ext = g_strdup(file_name); g_string_append(g_string_i, file_name_wo_ext); g_string_append_c(g_string_i, ' '); g_free(file_name_wo_ext); } } break; case 'x': /* Works */ if(array_is_init == FALSE){ for(i=0; i<len_file_list; ++i){ file_info_i = fm_list_peek_nth(file_info_list, i); file_name = (gchar *)fm_file_info_get_disp_name(file_info_i); ext_pos = g_strrstr(file_name, "."); if(ext_pos != NULL){ g_string_i = g_string_new(out_string->str); g_string_append(g_string_i, ext_pos); g_string_append_c(g_string_i, ' '); g_ptr_array_add(out_string_array, g_string_new(g_string_i->str)); g_free(file_name_wo_ext); g_string_free(g_string_i, TRUE); } } break; } file_info_i = fm_list_peek_head(file_info_list); file_name = (gchar *)fm_file_info_get_disp_name(file_info_i); ext_pos = g_strrstr(file_name, "."); if(ext_pos == NULL) break; for(i=0; i<out_string_array->len;++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, ext_pos); g_string_append_c(g_string_i, ' '); } break; case 'X': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); for(j=0; j<len_file_list; ++j){ file_info_j= fm_list_peek_nth(file_info_list, j); file_name = (gchar *)fm_file_info_get_disp_name(file_info_j); ext_pos = g_strrstr(file_name, "."); if(ext_pos != NULL){ g_string_append(g_string_i, ext_pos); g_string_append_c(g_string_i, ' '); } } } break; case '%': /* Works */ if(array_is_init == FALSE) g_ptr_array_add(out_string_array, g_string_new(out_string->str)); for(i=0; i<out_string_array->len; ++i){ g_string_i = (GString *)g_ptr_array_index(out_string_array, i); g_string_append(g_string_i, "% "); } break; default: return NULL; } pos += 2; (array_is_init == FALSE)?array_is_init = TRUE:0; } return out_string_array; }