Esempio n. 1
0
wi_url_t * wi_url_init_with_string(wi_url_t *url, wi_string_t *string) {
	wi_string_t		*userpassword;
	wi_range_t		range;
	
	range = wi_string_range_of_string(string, WI_STR("://"), 0);
	
	if(range.location != WI_NOT_FOUND) {
		url->scheme = wi_retain(wi_string_substring_to_index(string, range.location));
		
		if(range.location + range.length >= wi_string_length(string))
			goto end;
		else
			string = wi_string_substring_from_index(string, range.location + 3);
	}
	
	range = wi_string_range_of_string(string, WI_STR("/"), 0);
	
	if(range.location != WI_NOT_FOUND) {
		url->path	= wi_retain(wi_string_substring_from_index(string, range.location));
		string		= wi_string_substring_to_index(string, range.location);
	}
	
	range = wi_string_range_of_string(string, WI_STR("@"), 0);
	
	if(range.location != WI_NOT_FOUND) {
		userpassword = wi_string_substring_to_index(string, range.location);
		string = wi_string_substring_from_index(string, range.location + 1);

		range = wi_string_range_of_string(userpassword, WI_STR(":"), 0);
		
		if(range.location != WI_NOT_FOUND && range.location != wi_string_length(userpassword) - 1) {
			url->user = wi_retain(wi_string_substring_to_index(userpassword, range.location));
			url->password = wi_retain(wi_string_substring_from_index(userpassword, range.location + 1));
		} else {
			url->user = wi_retain(userpassword);
		}
	}
	
	range = wi_string_range_of_string(string, WI_STR(":"), 0);
	
	if(range.location == WI_NOT_FOUND ||
	   range.location + range.length >= wi_string_length(string) ||
	   wi_string_contains_string(wi_string_substring_from_index(string, range.location + 1), WI_STR(":"), 0)) {
		url->host = wi_copy(string);
	} else {
		url->host = wi_retain(wi_string_substring_to_index(string, range.location));
		url->port = wi_string_uint32(wi_string_substring_from_index(string, range.location + 1));
	}
	
end:
	_wi_url_regenerate_string(url);
	
	return url;
}
Esempio n. 2
0
void wr_wprint_me(wr_window_t *window, wi_string_t *nick, wi_string_t *chat) {
	wi_string_t		*prefix;
	const char		*color;
	wi_uinteger_t	length;

	length = wi_string_length(wr_nick);

	if(length > 4)
		length = 4;

	prefix = wi_string_substring_to_index(wr_nick, length);
	
	if(wi_string_has_prefix(chat, prefix)) {
		color = WR_HIGHLIGHT_COLOR;
		
		if(window->status < WR_WINDOW_STATUS_HIGHLIGHT)
			window->status = WR_WINDOW_STATUS_HIGHLIGHT; 
	} else {
		color = NULL;
		
		if(window->status < WR_WINDOW_STATUS_CHAT)
			window->status = WR_WINDOW_STATUS_CHAT;
	}

	wr_wprintf(window, WI_STR("%s*%s %s%@%s %@"),
		WR_ME_COLOR,
		WR_TERMINATE_COLOR,
		color ? color : "",
		nick,
		color ? WR_TERMINATE_COLOR : "",
		chat);
}
Esempio n. 3
0
static wi_array_t * _wi_terminal_buffer_lines_for_string(wi_terminal_buffer_t *buffer, wi_string_t *string) {
	wi_array_t		*array, *linearray;
 	wi_string_t		*string_copy, *line, *subline;
	wi_size_t		size;
	uint32_t		i, count, index;
	
	array		= wi_array_init(wi_array_alloc());
	size		= wi_terminal_size(buffer->terminal);
	linearray	= wi_string_components_separated_by_string(string, WI_STR("\n"));
	count		= wi_array_count(linearray);
	
	for(i = 0; i < count; i++) {
		line = WI_ARRAY(linearray, i);
		
		if(wi_terminal_width_of_string(buffer->terminal, line) < size.width) {
			wi_array_add_data(array, line);
		} else {
			string_copy = wi_copy(line);
			
			do {
				index	= wi_terminal_index_of_string_for_width(buffer->terminal, string_copy, size.width);
				subline	= wi_string_substring_to_index(string_copy, index);

				wi_array_add_data(array, subline);
				wi_string_delete_characters_to_index(string_copy, wi_string_length(subline));
			} while(wi_terminal_width_of_string(buffer->terminal, string_copy) >= size.width);
			
			wi_array_add_data(array, string_copy);
			wi_release(string_copy);
		}
	}
	
	return array;
}
Esempio n. 4
0
wi_string_t * wi_file_read_to_string(wi_file_t *file, wi_string_t *separator) {
	wi_mutable_string_t		*totalstring = NULL;
	wi_string_t				*string;
	wi_uinteger_t			index, length;
	
	_WI_FILE_ASSERT_OPEN(file);
	
	while((string = wi_file_read(file, WI_FILE_BUFFER_SIZE))) {
		if(!totalstring)
			totalstring = wi_string_init(wi_mutable_string_alloc());
		
		index = wi_string_index_of_string(string, separator, 0);
		
		if(index == WI_NOT_FOUND) {
			wi_mutable_string_append_string(totalstring, string);
		} else {
			length = wi_string_length(string);
			
			wi_mutable_string_append_string(totalstring, wi_string_substring_to_index(string, index));

			wi_file_seek(file, wi_file_offset(file) - length + index + 1);
			
			break;
		}
	}
	
	wi_runtime_make_immutable(string);

	return wi_autorelease(totalstring);
}
Esempio n. 5
0
static wi_mutable_array_t * _wi_terminal_buffer_lines_for_string(wi_terminal_buffer_t *buffer, wi_string_t *string) {
	wi_enumerator_t			*enumerator;
	wi_mutable_array_t		*array;
	wi_mutable_string_t		*newstring;
 	wi_string_t				*line, *subline;
	wi_size_t				size;
	wi_uinteger_t			index;
	
	array		= wi_array_init(wi_mutable_array_alloc());
	size		= wi_terminal_size(buffer->terminal);
	enumerator	= wi_array_data_enumerator(wi_string_components_separated_by_string(string, WI_STR("\n")));
	
	while((line = wi_enumerator_next_data(enumerator))) {
		if(wi_terminal_width_of_string(buffer->terminal, line) < size.width) {
			wi_mutable_array_add_data(array, line);
		} else {
			newstring = wi_mutable_copy(line);
			
			do {
				index		= wi_terminal_index_of_string_for_width(buffer->terminal, newstring, size.width);
				subline		= wi_string_substring_to_index(newstring, index);

				wi_mutable_array_add_data(array, subline);
				wi_mutable_string_delete_characters_to_index(newstring, wi_string_length(subline));
			} while(wi_terminal_width_of_string(buffer->terminal, newstring) >= size.width);
			
			wi_mutable_array_add_data(array, newstring);
			wi_release(newstring);
		}
	}
	
	return wi_autorelease(array);
}
Esempio n. 6
0
void wr_wprint_say(wr_window_t *window, wi_string_t *nick, wi_string_t *chat) {
	wi_string_t		*prefix;
	const char		*color;
	unsigned int	length;

	length = wi_string_length(wr_nick);

	if(length > 4)
		length = 4;

	prefix = wi_string_substring_to_index(wr_nick, length);
	
	if(wi_string_has_prefix(chat, prefix)) {
		color = WR_HIGHLIGHT_COLOR;
		
		if(window->status < WR_WINDOW_STATUS_HIGHLIGHT)
			window->status = WR_WINDOW_STATUS_HIGHLIGHT;
	} else {
		color = WR_NICK_COLOR;
		
		if(window->status < WR_WINDOW_STATUS_CHAT)
			window->status = WR_WINDOW_STATUS_CHAT;
	}
		
	wr_wprintf(window, WI_STR("%s<%s%s%@%s%s>%s %@"),
		WR_SAY_COLOR,
		WR_END_COLOR,
		color,
		nick,
		WR_END_COLOR,
		WR_SAY_COLOR,
		WR_END_COLOR,
		chat);
}
Esempio n. 7
0
wi_string_t * wi_socket_read_to_string(wi_socket_t *socket, wi_time_interval_t timeout, wi_string_t *separator) {
	wi_string_t		*string, *substring;
	wi_uinteger_t	index;
	
	index = wi_string_index_of_string(socket->buffer, separator, 0);
	
	if(index != WI_NOT_FOUND) {
		substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator));
		
		wi_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));

		return substring;
	}
	
	while((string = wi_socket_read(socket, timeout, WI_SOCKET_BUFFER_SIZE))) {
		if(wi_string_length(string) == 0)
			return string;

		wi_string_append_string(socket->buffer, string);

		index = wi_string_index_of_string(socket->buffer, separator, 0);
		
		if(index == WI_NOT_FOUND) {
			if(wi_string_length(socket->buffer) > _WI_SOCKET_BUFFER_MAX_SIZE) {
				substring = wi_string_substring_to_index(socket->buffer, _WI_SOCKET_BUFFER_MAX_SIZE);

				wi_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));
				
				return substring;
			}
		} else {
			substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator));
			
			wi_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));
			
			return substring;
		}
	}
	
	return NULL;
}
Esempio n. 8
0
wi_string_t * wi_socket_read_to_string(wi_socket_t *socket, wi_time_interval_t timeout, wi_string_t *separator) {
	wi_string_t		*string, *substring;
	wi_uinteger_t	index;
	
	index = wi_string_index_of_string(socket->buffer, separator, 0);
	
	if(index != WI_NOT_FOUND) {
		substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator));
		
		wi_mutable_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));

		return substring;
	}
	
	while((string = wi_socket_read_string(socket, timeout))) {
		if(wi_string_length(string) == 0)
			return string;

		wi_mutable_string_append_string(socket->buffer, string);

		index = wi_string_index_of_string(socket->buffer, separator, 0);
		
		if(index == WI_NOT_FOUND) {
			if(wi_string_length(socket->buffer) > _WI_SOCKET_BUFFER_MAX_SIZE) {
				wi_error_set_libwired_error_with_format(WI_ERROR_SOCKET_OVERFLOW, WI_STR("Buffer is %u bytes"), wi_string_length(socket->buffer));
				
				wi_mutable_string_set_string(socket->buffer, WI_STR(""));
			
				return NULL;
			}
		} else {
			substring = wi_string_substring_to_index(socket->buffer, index + wi_string_length(separator));
			
			wi_mutable_string_delete_characters_in_range(socket->buffer, wi_make_range(0, wi_string_length(substring)));
			
			return substring;
		}
	}
	
	return NULL;
}
Esempio n. 9
0
void wi_parse_wire_command(wi_string_t *buffer, wi_string_t **out_command, wi_string_t **out_arguments) {
	wi_uinteger_t	index;
	
	index = wi_string_index_of_string(buffer, WI_STR(" "), 0);
	
	if(index != WI_NOT_FOUND) {
		*out_command	= wi_string_substring_to_index(buffer, index);
		*out_arguments	= wi_string_substring_from_index(buffer, index + 1);
	} else {
		*out_command	= wi_autorelease(wi_copy(buffer));
		*out_arguments	= wi_string();
	}
	
	if(wi_string_has_prefix(*out_command, WI_STR("/")))
		*out_command = wi_string_by_deleting_characters_to_index(*out_command, 1);
}
Esempio n. 10
0
void wi_parse_wired_command(wi_string_t *buffer, wi_string_t **out_command, wi_array_t **out_arguments) {
	wi_string_t		*string, *substring;
	wi_uinteger_t	index;
	
	index = wi_string_index_of_string(buffer, WI_STR(_WI_WIRED_MESSAGE_SEPARATOR), WI_STRING_BACKWARDS);
	
	if(index != WI_NOT_FOUND)
		string = wi_string_by_deleting_characters_from_index(buffer, index);
	else
		string = wi_autorelease(wi_copy(buffer));
	
	index = wi_string_index_of_string(string, WI_STR(" "), 0);
	
	if(index != WI_NOT_FOUND) {
		*out_command	= wi_string_substring_to_index(string, index);
		substring		= wi_string_substring_from_index(string, index + 1);
		*out_arguments	= wi_string_components_separated_by_string(substring, WI_STR(_WI_WIRED_FIELD_SEPARATOR));
	} else {
		*out_command	= string;
		*out_arguments	= wi_array();
	}
}