diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-02-21 10:05:34 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-02-21 10:05:34 +0100 |
| commit | b8938fe1d099d1b5b6ceecda6668b879e6a49298 (patch) | |
| tree | bb539171afa6d9bb90cad92fc4822db0f0cc9ce4 | |
| parent | b56c629d8200b891bcf6822cfa4425ccc9849567 (diff) | |
| download | vis-b8938fe1d099d1b5b6ceecda6668b879e6a49298.tar.gz vis-b8938fe1d099d1b5b6ceecda6668b879e6a49298.tar.xz | |
Cleanup new line insertion code
| -rw-r--r-- | text.c | 21 | ||||
| -rw-r--r-- | text.h | 3 | ||||
| -rw-r--r-- | vis.c | 11 |
3 files changed, 15 insertions, 20 deletions
@@ -665,15 +665,10 @@ bool text_vprintf(Text *txt, size_t pos, const char *format, va_list ap) { return ret; } -bool text_insert_newline(Text *txt, size_t pos) { - switch (text_newline_type(txt)) { - case TEXT_NEWLINE_NL: - return text_insert(txt, pos, "\n", 1); - case TEXT_NEWLINE_CRNL: - return text_insert(txt, pos, "\r\n", 2); - default: - return false; - } +size_t text_insert_newline(Text *txt, size_t pos) { + const char *data = text_newline_char(txt); + size_t len = strlen(data); + return text_insert(txt, pos, data, len) ? len : 0; } static size_t action_undo(Text *txt, Action *a) { @@ -1265,6 +1260,14 @@ enum TextNewLine text_newline_type(Text *txt){ return txt->newlines; } +const char *text_newline_char(Text *txt) { + static const char *types[] = { + [TEXT_NEWLINE_NL] = "\n", + [TEXT_NEWLINE_CRNL] = "\r\n", + }; + return types[text_newline_type(txt)]; +} + static bool text_iterator_init(Iterator *it, size_t pos, Piece *p, size_t off) { *it = (Iterator){ .pos = pos, @@ -41,7 +41,7 @@ bool text_appendf(Text*, const char *format, ...); bool text_printf(Text*, size_t pos, const char *format, ...); bool text_vprintf(Text*, size_t pos, const char *format, va_list ap); /* inserts a line ending character (depending on file type) */ -bool text_insert_newline(Text*, size_t pos); +size_t text_insert_newline(Text*, size_t pos); /* insert `len' bytes starting from `data' at `pos' which has to be * in the interval [0, text_size(txt)] */ bool text_insert(Text*, size_t pos, const char *data, size_t len); @@ -125,6 +125,7 @@ enum TextNewLine { }; enum TextNewLine text_newline_type(Text*); +const char *text_newline_char(Text*); /* save the whole text to the given `filename'. Return true if succesful. * In which case an implicit snapshot is taken. The save might associate a @@ -1103,16 +1103,7 @@ static void copy_indent_from_previous_line(Win *win) { } void vis_insert_nl(Vis *vis) { - const char *nl; - switch (text_newline_type(vis->win->file->text)) { - case TEXT_NEWLINE_CRNL: - nl = "\r\n"; - break; - default: - nl = "\n"; - break; - } - + const char *nl = text_newline_char(vis->win->file->text); vis_insert_key(vis, nl, strlen(nl)); if (vis->autoindent) |
