commit 9c68585ed395bc9db7339433746ec0dd8298cabc
parent 5573f301eb9eb97b251ff499ddca138417dcf43c
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 13 May 2021 14:39:48 +0200
add reading from file feature back, improve man page
Diffstat:
M | smu.1 | | | 16 | ++++++++++------ |
M | smu.c | | | 31 | ++++++++++++++++++++++--------- |
2 files changed, 32 insertions(+), 15 deletions(-)
diff --git a/smu.1 b/smu.1
@@ -1,4 +1,4 @@
-.Dd May 11, 2021
+.Dd May 13, 2021
.Dt SMU 1
.Os
.Sh NAME
@@ -10,19 +10,23 @@
.Op Fl l
.Op Fl n
.Op Fl v
+.Op Ar file
.Sh DESCRIPTION
.Nm
-is a simple interpreter for a simplified markdown dialect.
+is a simple interpreter for a simplified Markdown dialect.
+When a
+.Ar file
+is specified it will read from the file, otherwise it reads from stdin.
The options are as follows:
.Bl -tag -width Ds
.It Fl h
-prints usage information to stderr, then exits.
+Prints usage information to stderr, then exits.
.It Fl l
-set loading="lazy" hint attribute for images if it has a width and a height.
+Set loading="lazy" hint attribute for images if it has a width and a height.
.It Fl n
-escapes all HTML tags.
+Escapes all HTML tags.
.It Fl v
-prints version information to stderr, then exits.
+Prints version information to stderr, then exits.
.El
.Sh EXIT STATUS
.Ex -std
diff --git a/smu.c b/smu.c
@@ -1,4 +1,5 @@
#include <ctype.h>
+#include <errno.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -702,33 +703,43 @@ process(const char *begin, const char *end, int newblock)
void
usage(char **argv)
{
- eprint("usage: %s [-l] [-n]\n", argv[0]);
+ eprint("usage: %s [-l] [-n] [file]\n", argv[0]);
}
int
main(int argc, char *argv[])
{
+ FILE *source = stdin;
char *buffer = NULL;
int s, i;
unsigned long len, bsize;
- if (pledge("stdio", NULL) == -1)
- eprint("pledge");
-
for (i = 1; i < argc; i++) {
- if (!strcmp("-v", argv[i]))
+ if (!strcmp("-v", argv[i])) {
eprint("smu v%s\n", VERSION);
- else if (!strcmp("-n", argv[i]))
+ } else if (!strcmp("-n", argv[i])) {
nohtml = 1;
- else if (!strcmp("-l", argv[i]))
+ } else if (!strcmp("-l", argv[i])) {
lazyimg = 1;
- else
+ } else if (argv[i][0] != '-') {
+ break; /* file specified */
+ } else if (!strcmp("--", argv[i])) {
+ i++;
+ break;
+ } else {
usage(argv);
+ }
}
+ if (i < argc && !(source = fopen(argv[i], "r")))
+ eprint("fopen: %s: %s\n", argv[i], strerror(errno));
+
+ if (pledge("stdio", NULL) == -1)
+ eprint("pledge");
+
bsize = 2 * BUFSIZ;
buffer = ereallocz(buffer, bsize);
len = 0;
- while ((s = fread(buffer + len, 1, BUFSIZ, stdin))) {
+ while ((s = fread(buffer + len, 1, BUFSIZ, source))) {
len += s;
if (BUFSIZ + len + 1 > bsize) {
bsize += BUFSIZ;
@@ -739,6 +750,8 @@ main(int argc, char *argv[])
buffer[len] = '\0';
process(buffer, buffer + len, 1);
free(buffer);
+ if (source != stdin)
+ fclose(source);
return 0;
}