diff options
Diffstat (limited to 'core/mdv.c')
| -rw-r--r-- | core/mdv.c | 53 |
1 files changed, 40 insertions, 13 deletions
@@ -3,8 +3,6 @@ #include "../lib/tctl/tctl.h" #include "../lib/aec/aec.h" -#define MAX_WIDTH 80 - #define TOGGLE(mask, type, sgron, sgroff) \ if (mask & type) { \ mask ^= type; \ @@ -16,6 +14,8 @@ u16 heading_numbers[6] = { 0 }; window_size_t ws; +u8 left_padding; +u8 MAX_WIDTH = 80; enum Style { ITALIC = 1, @@ -25,6 +25,24 @@ enum Style { }; +void put_leftpadding() +{ + for (int i = 0; i < left_padding; ++i) { + putchar(' '); + } +} + + +void wstdp(const char *buf) +{ + for (; *buf; ++buf) { + putchar(*buf); + if (*buf == '\n') + put_leftpadding(); + } +} + + void next_heading(int type) { heading_numbers[type]++; @@ -46,7 +64,7 @@ void show_box() wstd("┌"); for (int i = 0; i < MAX_WIDTH - 3; ++i) wstd("─"); - wstd("┐\n│ "); + wstdp("┐\n│ "); while (use_backup || read(STDIN_FD, &c, 1)) { if (use_backup) { @@ -65,12 +83,12 @@ void show_box() use_backup = 3; - wstd(" │\n│ "); + wstdp(" │\n│ "); } else { ++width; if (width == MAX_WIDTH - 4) { - wstd(" │\n│ "); + wstdp(" │\n│ "); width = 1; } @@ -78,9 +96,9 @@ void show_box() } } - wstd(" │\n└"); + wstdp(" │\n└"); for (int i = 0; i < MAX_WIDTH - 3; ++i) wstd("─"); - wstd("┘\n\n"); + wstdp("┘\n\n"); } @@ -96,7 +114,7 @@ void show_and_replace_leading_char(char leading, char *replace) break; last_was_newline = 1; - wstd("\n "); + wstdp("\n "); } else { last_was_newline = 0; @@ -107,7 +125,7 @@ void show_and_replace_leading_char(char leading, char *replace) } } - wstd("\n"); + wstdp("\n"); } @@ -125,14 +143,14 @@ void show_numbered_list() break; last_was_newline = 1; - wstd("\n "); + wstdp("\n "); } else { last_was_newline = 0; putchar(c); } } - wstd("\n"); + wstdp("\n"); } @@ -152,7 +170,7 @@ void show_paragraph() } else { last_was_newline = 0; if (width == MAX_WIDTH) { - wstd("\n"); + wstdp("\n"); width = 0; } @@ -181,6 +199,7 @@ void show_paragraph() } wstdf("\n\n%S", SGR_RESET); + put_leftpadding(); } @@ -209,6 +228,7 @@ void show_heading() while (read(STDIN_FD, &c, 1) && c != '\n') putchar(c); wstdf("\n\n%S", SGR_RESET); + put_leftpadding(); } int main(int argc, char **argv) @@ -218,10 +238,15 @@ int main(int argc, char **argv) return -1; } - ws = tctl_get_window_size(); + ws = tctl_get_fd_window_size(STDERR_FD); + if (ws.width < MAX_WIDTH) + MAX_WIDTH = ws.width; + left_padding = (ws.width - MAX_WIDTH) / 2; char c; + put_leftpadding(); + while (read(STDIN_FD, &c, 1)) { switch(c) { case '\n': break; @@ -234,5 +259,7 @@ int main(int argc, char **argv) } } + putchar('\n'); + return 0; } |