Esempio n. 1
0
static size_t op_join(Vis *vis, Text *txt, OperatorContext *c) {
	size_t pos = text_line_begin(txt, c->range.end), prev_pos;
	Mark mark = NULL;

	/* if operator and range are both linewise, skip last line break */
	if (c->linewise && text_range_is_linewise(txt, &c->range)) {
		size_t line_prev = text_line_prev(txt, pos);
		size_t line_prev_prev = text_line_prev(txt, line_prev);
		if (line_prev_prev >= c->range.start)
			pos = line_prev;
	}

	size_t len = c->arg->s ? strlen(c->arg->s) : 0;

	do {
		prev_pos = pos;
		size_t end = text_line_start(txt, pos);
		pos = text_line_prev(txt, end);
		if (pos < c->range.start || end <= pos)
			break;
		text_delete(txt, pos, end - pos);
		char prev, next;
		if (text_byte_get(txt, pos-1, &prev) && !isspace((unsigned char)prev) &&
		    text_byte_get(txt, pos, &next) && next != '\r' && next != '\n')
			text_insert(txt, pos, c->arg->s, len);
		if (!mark)
			mark = text_mark_set(txt, pos);
	} while (pos != prev_pos);

	size_t newpos = text_mark_get(txt, mark);
	return newpos != EPOS ? newpos : c->range.start;
}
Esempio n. 2
0
static size_t op_join(Vis *vis, Text *txt, OperatorContext *c) {
	size_t pos = text_line_begin(txt, c->range.end), prev_pos;
	Mark mark = NULL;

	/* if operator and range are both linewise, skip last line break */
	if (c->linewise && text_range_is_linewise(txt, &c->range)) {
		size_t line_prev = text_line_prev(txt, pos);
		size_t line_prev_prev = text_line_prev(txt, line_prev);
		if (line_prev_prev >= c->range.start)
			pos = line_prev;
	}

	do {
		prev_pos = pos;
		size_t end = text_line_start(txt, pos);
		pos = text_char_next(txt, text_line_finish(txt, text_line_prev(txt, end)));
		if (pos >= c->range.start && end > pos) {
			text_delete(txt, pos, end - pos);
			text_insert(txt, pos, " ", 1);
			if (!mark)
				mark = text_mark_set(txt, pos);
		} else {
			break;
		}
	} while (pos != prev_pos);

	size_t newpos = text_mark_get(txt, mark);
	return newpos != EPOS ? newpos : c->range.start;
}
Esempio n. 3
0
int main () {
    FILE *input;
    input = fopen ("input.txt","r");

    text_t *text;
    text = text_new();

    int stringCount, i, format;
    char string[L];
    fscanf (input, "%i", &stringCount);

    for (i = 0; i < stringCount; i++) {
        fscanf (input, "%i", &format);
        fscanf (input, "%s", string);
        text_insert(text, i, string, format);
    }

    text_delete (text, 3);

    printf ("%i\n", text_getCount(text));
    text_writeFormat (text, 0);

    text_free (text);

    fclose (input);
    return 0;
}
Esempio n. 4
0
static void writeFormat_insertTwoSentenceWithFirstAndSecondFormat_CountOnePlaceZeroFormatSecond (void **state) {
    text_t *text = text_new();

    char sentence1[L], sentence2[L];
    strcpy (sentence1, "Zhenya1");
    strcpy (sentence2, "Zhenya2");

    text_insert (text, 0, sentence1, 1);
    text_insert (text, 1, sentence2, 2);

    text_t *text1 = text_new();
    text1 = text_writeFormat(text, 2);

    assert_int_equal (text_getCount(text1), 1);
    assert_string_equal (text_getString(text1, 0), sentence2);
    assert_int_equal (text_getFormat(text1, 0), 2);
}
Esempio n. 5
0
File: sam.c Progetto: ewqasd200g/vis
static bool cmd_append(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) {
	if (!win)
		return false;
	size_t len = strlen(argv[1]);
	bool ret = text_insert(win->file->text, range->end, argv[1], len);
	if (ret)
		*range = text_range_new(range->end, range->end + len);
	return ret;
}
Esempio n. 6
0
static size_t op_put(Vis *vis, Text *txt, OperatorContext *c) {
	size_t pos = c->pos;
	bool sel = text_range_size(&c->range) > 0;
	bool sel_linewise = sel && text_range_is_linewise(txt, &c->range);
	if (sel) {
		text_delete_range(txt, &c->range);
		pos = c->pos = c->range.start;
	}
	switch (c->arg->i) {
	case VIS_OP_PUT_AFTER:
	case VIS_OP_PUT_AFTER_END:
		if (c->reg->linewise && !sel_linewise)
			pos = text_line_next(txt, pos);
		else if (!sel)
			pos = text_char_next(txt, pos);
		break;
	case VIS_OP_PUT_BEFORE:
	case VIS_OP_PUT_BEFORE_END:
		if (c->reg->linewise)
			pos = text_line_begin(txt, pos);
		break;
	}

	size_t len;
	const char *data = register_get(vis, c->reg, &len);

	for (int i = 0; i < c->count; i++) {
		text_insert(txt, pos, data, len);
		pos += len;
	}

	if (c->reg->linewise) {
		switch (c->arg->i) {
		case VIS_OP_PUT_BEFORE_END:
		case VIS_OP_PUT_AFTER_END:
			pos = text_line_start(txt, pos);
			break;
		case VIS_OP_PUT_AFTER:
			pos = text_line_start(txt, text_line_next(txt, c->pos));
			break;
		case VIS_OP_PUT_BEFORE:
			pos = text_line_start(txt, c->pos);
			break;
		}
	} else {
		switch (c->arg->i) {
		case VIS_OP_PUT_AFTER:
		case VIS_OP_PUT_BEFORE:
			pos = text_char_prev(txt, pos);
			break;
		}
	}

	return pos;
}
Esempio n. 7
0
File: sam.c Progetto: ewqasd200g/vis
static bool cmd_change(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) {
	if (!win)
		return false;
	Text *txt = win->file->text;
	size_t len = strlen(argv[1]);
	bool ret = text_delete(txt, range->start, text_range_size(range)) &&
	      text_insert(txt, range->start, argv[1], len);
	if (ret)
		*range = text_range_new(range->start, range->start + len);
	return ret;
}
Esempio n. 8
0
File: vis.c Progetto: ewqasd200g/vis
static void vis_args(Vis *vis, int argc, char *argv[]) {
	char *cmd = NULL;
	bool end_of_options = false;
	for (int i = 1; i < argc; i++) {
		if (argv[i][0] == '-' && !end_of_options) {
			switch (argv[i][1]) {
			case '-':
				end_of_options = true;
				break;
			case 'v':
				vis_die(vis, "vis %s\n", VERSION);
				break;
			case '\0':
				break;
			default:
				vis_die(vis, "Unknown command option: %s\n", argv[i]);
				break;
			}
		} else if (argv[i][0] == '+') {
			cmd = argv[i] + (argv[i][1] == '/' || argv[i][1] == '?');
		} else if (!vis_window_new(vis, argv[i])) {
			vis_die(vis, "Can not load `%s': %s\n", argv[i], strerror(errno));
		} else if (cmd) {
			vis_prompt_cmd(vis, cmd);
			cmd = NULL;
		}
	}

	if (!vis->windows && vis->running) {
		if (!strcmp(argv[argc-1], "-")) {
			if (!vis_window_new(vis, NULL))
				vis_die(vis, "Can not create empty buffer\n");
			ssize_t len = 0;
			char buf[PIPE_BUF];
			File *file = vis->win->file;
			Text *txt = file->text;
			file->is_stdin = true;
			while ((len = read(STDIN_FILENO, buf, sizeof buf)) > 0)
				text_insert(txt, text_size(txt), buf, len);
			if (len == -1)
				vis_die(vis, "Can not read from stdin\n");
			text_snapshot(txt);
			int fd = open("/dev/tty", O_RDONLY);
			if (fd == -1)
				vis_die(vis, "Can not reopen stdin\n");
			dup2(fd, STDIN_FILENO);
			close(fd);
		} else if (!vis_window_new(vis, NULL)) {
			vis_die(vis, "Can not create empty buffer\n");
		}
		if (cmd)
			vis_prompt_cmd(vis, cmd);
	}
}
Esempio n. 9
0
static size_t op_replace(Vis *vis, Text *txt, OperatorContext *c) {
	size_t count = 0;
	Iterator it = text_iterator_get(txt, c->range.start);
	while (it. pos < c->range.end && text_iterator_char_next(&it, NULL))
		count++;
	op_delete(vis, txt, c);
	size_t pos = c->range.start;
	for (size_t len = strlen(c->arg->s); count > 0; pos += len, count--)
		text_insert(txt, pos, c->arg->s, len);
	return pos;
}
Esempio n. 10
0
static void writeFormat_insertOneSentenceWithFirstFormat_CountZero (void **state) {
    text_t *text = text_new();
    int place = 0, format = 1;
    char sentence[L];
    strcpy (sentence, "Zhenya");

    text_insert (text, place, sentence, format);

    text_t *text1 = text_new();
    text1 = text_writeFormat(text,0);

    assert_int_equal (text_getCount(text1), 0);
}
Esempio n. 11
0
static void
do_kill(int len){
	if(!kill_roll) text_clear(yank);
	kill_roll=2;
	if(len < 0){
		text_shift(line, len);
		len = -len;
		text_shift(yank, -yank->off);
	} else {
		text_shift(yank, yank->buf->c - yank->off);
	}
	text_insert(yank, line->buf->r + line->off, len);
	text_delete(line, len);
}
Esempio n. 12
0
static void insert_oneSentence_countOnePlaceZeroFormatTwo(void **state)
{
    text_t * text = text_new();

    int place = 0, format = 2;
    char sentence[L];
    strcpy (sentence, "Zhenya");

    text_insert (text, place, sentence, format);
    assert_int_equal (text_getCount(text), 1);
    assert_int_equal (text_getFormat(text, place), format);
    assert_string_equal (text_getString(text, place), sentence);
    text_free(text);
}
Esempio n. 13
0
static void prompt_hide(Win *win) {
	Text *txt = win->file->text;
	size_t size = text_size(txt);
	/* make sure that file is new line terminated */
	char lastchar;
	if (size > 1 && text_byte_get(txt, size-1, &lastchar) && lastchar != '\n')
		text_insert(txt, size, "\n", 1);
	/* remove empty entries */
	Filerange line = text_object_line(txt, size);
	size_t line_size = text_range_size(&line);
	if (line_size <= 2)
		text_delete(txt, line.start, line_size);
	vis_window_close(win);
}
Esempio n. 14
0
static void delete_hasOneInertedSentence_CountZero(void **state)
{
    text_t * text = text_new();

    int place = 0, format = 2;
    char sentence[L];
    strcpy (sentence, "Zhenya");

    text_insert (text, place, sentence, format);

    text_delete (text, place);

    assert_int_equal(text_getCount(text), 0);
    text_free(text);
}
Esempio n. 15
0
static void writeFormat_insertOneSentenceWithThirdFormat_CountOnePlaceZeroFormatThird (void **state) {
    text_t *text = text_new();
    int place = 0, format = 3;
    char sentence[L];
    strcpy (sentence, "Zhenya");

    text_insert (text, place, sentence, format);

    text_t *text1 = text_new();
    text1 = text_writeFormat(text,format);

    assert_int_equal (text_getCount(text1), 1);
    assert_string_equal (text_getString(text1, place), sentence);
    assert_int_equal (text_getFormat(text1, place), format);
}
Esempio n. 16
0
static size_t op_shift_right(Vis *vis, Text *txt, OperatorContext *c) {
	char spaces[9] = "         ";
	spaces[MIN(vis->tabwidth, LENGTH(spaces) - 1)] = '\0';
	const char *tab = vis->expandtab ? spaces : "\t";
	size_t tablen = strlen(tab);
	size_t pos = text_line_begin(txt, c->range.end), prev_pos;
	size_t inserted = 0;

	/* if range ends at the begin of a line, skip line break */
	if (pos == c->range.end)
		pos = text_line_prev(txt, pos);

	do {
		prev_pos = pos = text_line_begin(txt, pos);
		text_insert(txt, pos, tab, tablen);
		pos = text_line_prev(txt, pos);
		inserted += tablen;
	}  while (pos >= c->range.start && pos != prev_pos);

	return c->pos + inserted;
}
Esempio n. 17
0
void vis_prompt_show(Vis *vis, const char *title) {
	Win *active = vis->win;
	Win *prompt = window_new_file(vis, title[0] == ':' ? vis->command_file : vis->search_file,
		UI_OPTION_ONELINE);
	if (!prompt)
		return;
	if (vis->mode->visual)
		window_selection_save(active);
	Text *txt = prompt->file->text;
	text_insert(txt, text_size(txt), title, strlen(title));
	Cursor *cursor = view_cursors_primary_get(prompt->view);
	view_cursors_scroll_to(cursor, text_size(txt));
	prompt->parent = active;
	prompt->parent_mode = vis->mode;
	vis_window_mode_map(prompt, VIS_MODE_NORMAL, true, "<Enter>", &prompt_enter_binding);
	vis_window_mode_map(prompt, VIS_MODE_INSERT, true, "<Enter>", &prompt_enter_binding);
	vis_window_mode_map(prompt, VIS_MODE_VISUAL, true, "<Enter>", &prompt_enter_binding);
	vis_window_mode_map(prompt, VIS_MODE_NORMAL, true, "<Escape>", &prompt_esc_binding);
	vis_window_mode_map(prompt, VIS_MODE_INSERT, true, "<Up>", &prompt_up_binding);
	vis_window_mode_map(prompt, VIS_MODE_INSERT, true, "<Backspace>", &prompt_backspace_binding);
	vis_mode_switch(vis, VIS_MODE_INSERT);
}
Esempio n. 18
0
static gboolean main_loop (gpointer data)
{
    gboolean result;
    int i;

    /*
     * Make sure we turn off the idle handler if the game isn't running. This
     * shouldn't happen.
     */
    if (!ms_is_running ())
    {
	g_warning ("main_loop was called while the game wasn't running");
	mainIdleHandler = 0;
	return FALSE;
    }

    for (i = 0; i < MAX_INSTRUCTIONS; i++)
    {
	result = ms_rungame ();

	if (!result)
	{
	    text_insert ("\n[End of session]\n");
	    mainIdleHandler = 0;
	    ms_flush ();
	    ms_stop ();
	    ms_freemem ();

	    gtk_text_view_scroll_mark_onscreen (
		GTK_TEXT_VIEW (Gui.text_view),
		gtk_text_buffer_get_insert (Gui.text_buffer));
	    break;
	}
    }

    return result;
}
Esempio n. 19
0
static size_t op_case_change(Vis *vis, Text *txt, OperatorContext *c) {
	size_t len = text_range_size(&c->range);
	char *buf = malloc(len);
	if (!buf)
		return c->pos;
	len = text_bytes_get(txt, c->range.start, len, buf);
	size_t rem = len;
	for (char *cur = buf; rem > 0; cur++, rem--) {
		int ch = (unsigned char)*cur;
		if (isascii(ch)) {
			if (c->arg->i == VIS_OP_CASE_SWAP)
				*cur = islower(ch) ? toupper(ch) : tolower(ch);
			else if (c->arg->i == VIS_OP_CASE_UPPER)
				*cur = toupper(ch);
			else
				*cur = tolower(ch);
		}
	}

	text_delete(txt, c->range.start, len);
	text_insert(txt, c->range.start, buf, len);
	free(buf);
	return c->pos;
}
Esempio n. 20
0
File: vis.c Progetto: ewqasd200g/vis
void vis_insert(Vis *vis, size_t pos, const char *data, size_t len) {
	text_insert(vis->win->file->text, pos, data, len);
	windows_invalidate(vis, pos, pos + len);
}
Esempio n. 21
0
void editor_insert(Editor *ed, size_t pos, const char *c, size_t len) {
	text_insert(ed->win->file->text, pos, c, len);
	editor_windows_invalidate(ed, pos, pos + len);
}
Esempio n. 22
0
static void
history_load(){
	text_clear(line);
	if(hist[hist_cur] != NULL)
		text_insert(line, hist[hist_cur]->r, hist[hist_cur]->c);
}
Esempio n. 23
0
static void
insert_character(Rune c, void* f, int v){
	if(0xd800 <= c && c < 0xdc00) return;
	text_insert(line, &c, 1);
}