#define _POSIX_C_SOURCE 200809L #include #include #include #define EXEC1(args) execvp(args[0], args) #define EXEC(...) EXEC1(((char *const []){ __VA_ARGS__, NULL })) static const char *extension(const char *filename); int main(int argc, char *argv[]) { int opt; while ((opt = getopt(argc, argv, "")) != -1) return 1; argc -= optind; argv += optind; if (argc != 1) return 1; const char *ext = extension(argv[0]); if (ext == NULL) return 1; if (strlen(ext) == 1 && isdigit(*ext)) { EXEC("mandoc", "-Thtml", "-Ofragment", "-Ios="); } else if (strcmp(ext, "md") == 0) { EXEC("lowdown", "-Thtml"); } return 1; } static const char * extension(const char *filename) { const char *end = strrchr(filename, '.'); // no dot if (end == NULL) return NULL; // no extension if (end == filename) return NULL; const char *ext = end + 1; // extension is empty/name ends with dot if (*ext == '\0') return NULL; return ext; }