aboutsummaryrefslogtreecommitdiff
path: root/core/mdv.c
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-02-09 09:31:24 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2023-02-09 09:31:24 +0100
commit3ab649953a8782b3bb82019f021739b898239c6f (patch)
tree3e0776b70f232005dba19c904992112d9bda44a9 /core/mdv.c
parentf298e9e8d66582293fab2a2845ed2808924c1cd4 (diff)
make mdv center
Diffstat (limited to 'core/mdv.c')
-rw-r--r--core/mdv.c53
1 files changed, 40 insertions, 13 deletions
diff --git a/core/mdv.c b/core/mdv.c
index 25b7b28..c4e0f99 100644
--- a/core/mdv.c
+++ b/core/mdv.c
@@ -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;
}