#include #include "vmp.h" int main(int argc, char** argv) { /* Get input and output file name */ if (argc != 2) { error("Usage: vmp \n", NO_ARG); } const char* in_file_name = argv[1]; if (sizeof(in_file_name) <= 3) { error("File name is too short\n",IN_NAME_TOO_SHORT); } run(in_file_name); return 0; } void error(const char* msg, int code) { printf("%s", msg); exit(code); } void run(const char* in_file_name) { FILE* fd = fopen(in_file_name, "r"); if (!fd) { error("Cannot open input file.\n", CANNOT_OPEN_FILE); } char line[1024]; while(fgets(line, sizeof(line), fd) != NULL) { int len = strlen(line); while (len > 0 && isspace(line[len - 1])) { line[--len] = '\0'; } parse_and_output(line); } fclose(fd); } void parse_head(const char* line) { int level = 0; size_t i = 0; while(line[i] == '#' && i < strlen(line)) { level++; i++; } if (i < strlen(line) && line[i] == ' ' && level <=6 ) { printf("", level); int start = i; int length = strlen(line); char head_text[512]; strncpy(head_text, line + start + 1, length); printf("%s", head_text); printf("", level); } else { int start = i; int length = strlen(line); char head_text[512]; strncpy(head_text, line + start + 1, length); printf("%s", head_text); } } void parse_and_output(const char* line) { int in_empty_line = 0; /* Empty */ if (strcmp(line, "") == 0) { printf("
\n"); in_empty_line = 1; } else { in_empty_line = 0; char line_head = line[0]; if (line_head == '#') { parse_head(line); } else if (strcmp(line, "---") == 0) { printf("
\n"); } } }