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; }
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; }
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; }
static size_t op_shift_left(Vis *vis, Text *txt, OperatorContext *c) { size_t pos = text_line_begin(txt, c->range.end), prev_pos; size_t tabwidth = vis->tabwidth, tablen; size_t deleted = 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 { char c; size_t len = 0; prev_pos = pos = text_line_begin(txt, pos); Iterator it = text_iterator_get(txt, pos); if (text_iterator_byte_get(&it, &c) && c == '\t') { len = 1; } else { for (len = 0; text_iterator_byte_get(&it, &c) && c == ' '; len++) text_iterator_byte_next(&it, NULL); } tablen = MIN(len, tabwidth); text_delete(txt, pos, tablen); pos = text_line_prev(txt, pos); deleted += tablen; } while (pos >= c->range.start && pos != prev_pos); return c->pos - deleted; }
static bool cmd_delete(Vis *vis, Win *win, Command *cmd, const char *argv[], Cursor *cur, Filerange *range) { if (!win) return false; bool ret = text_delete(win->file->text, range->start, text_range_size(range)); if (ret) *range = text_range_new(range->start, range->start); return ret; }
void vis_replace(Vis *vis, size_t pos, const char *data, size_t len) { Text *txt = vis->win->file->text; Iterator it = text_iterator_get(txt, pos); int chars = text_char_count(data, len); for (char c; chars-- > 0 && text_iterator_byte_get(&it, &c) && c != '\r' && c != '\n'; ) text_iterator_char_next(&it, NULL); text_delete(txt, pos, it.pos - pos); vis_insert(vis, pos, data, len); }
int main() { int n; int index, format; int cntMax; char str[200]; printf("Vedit max kilkist rechen:"); scanf("%i", &cntMax); printf("\nVedit 1 rechennya.\n"); scanf("%s", str); text_t pStruct = text_new(cntMax,str); printf("1. Dodatu rechenya.\n2. Vudalutu rechenya.\n3.Vuberu format.\n"); printf("4.Otrunai perelic rechen specialnogo formatu.\n5.Otrumai perelik tvoih rechen.\n6.Vuhid\n\n "); for(;;) { text_getList(pStruct); printf("\n\nVvedu nomer komandu: "); fflush(stdin); scanf("%i", &n); switch(n) { case 1: printf("Napushu index i stroku.\n"); scanf("%i %s", &index, str); text_Insert(pStruct,index,str); break; case 2: printf("Napushu index: "); scanf("%i", &index); text_deleteStr(pStruct, index); break; case 3: printf("Napushu index (0...%i) i potim jogo format (0..3):\n", pStruct->cntReal - 1); scanf("%i %i", &index, &format); text_setFormat(index, format,pStruct); break; case 4: printf("Vedit nomer formaty (0..3):\n"); scanf("%i", &format); text_getListForm(pStruct,format); break; case 5: printf("%i", text_getRealCntStr(pStruct)); break; default: text_delete(pStruct); return 0; break; } } }
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; }
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); }
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); }
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); }
static const char *prompt_enter(Vis *vis, const char *keys, const Arg *arg) { Win *prompt = vis->win; View *view = prompt->view; Text *txt = prompt->file->text; Win *win = prompt->parent; char *cmd = NULL; Filerange range = view_selection_get(view); if (!text_range_valid(&range)) range = text_object_line(txt, view_cursor_get(view)); if (text_range_valid(&range)) cmd = text_bytes_alloc0(txt, range.start, text_range_size(&range)); if (!win || !cmd) { vis_info_show(vis, "Prompt window invalid\n"); prompt_restore(prompt); prompt_hide(prompt); free(cmd); return keys; } size_t len = strlen(cmd); if (len > 0 && cmd[len-1] == '\n') cmd[len-1] = '\0'; bool lastline = (range.end == text_size(txt)); prompt_restore(prompt); if (vis_prompt_cmd(vis, cmd)) { prompt_hide(prompt); if (!lastline) { text_delete(txt, range.start, text_range_size(&range)); text_appendf(txt, "%s\n", cmd); } } else { vis->win = prompt; vis->mode = &vis_modes[VIS_MODE_INSERT]; } free(cmd); vis_draw(vis); return keys; }
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; }
void vis_delete(Vis *vis, size_t pos, size_t len) { text_delete(vis->win->file->text, pos, len); windows_invalidate(vis, pos, pos + len); }
void teardown() { text_delete(cut); DISABLE_INTERCEPTION; }
void editor_delete(Editor *ed, size_t pos, size_t len) { text_delete(ed->win->file->text, pos, len); editor_windows_invalidate(ed, pos, pos + len); }