From c57d3886e05fbea9a45b18b069f112ecbae42151 Mon Sep 17 00:00:00 2001 From: dx Date: Wed, 6 May 2020 03:21:09 +0100 Subject: +introduced compiler.h and compiler.c compiler.h holds definitions necessary for compiling markdown, compiler.c the implementations. Moved implementation of compile_line to compiler.h and compiler.c respectively. --- Converter/src/compiler.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Converter/src/compiler.c (limited to 'Converter/src/compiler.c') diff --git a/Converter/src/compiler.c b/Converter/src/compiler.c new file mode 100644 index 0000000..1c5b728 --- /dev/null +++ b/Converter/src/compiler.c @@ -0,0 +1,46 @@ +#include "../includes/compiler.h" +#include +#include + +string compile_line(string line, size_t size_of_line) +{ + string compiled_line; + size_t size_of_content; + + if (line[0] == '#') + { + // Compile a header + + // Get the level of header (h1, h2, etc) + int depth; + for (depth = 1; line[depth] == '#'; ++depth) continue; + size_of_content = size_of_line - depth; // remove hashes + + // Generate the header tags based on depth + const int tag_size = 4; + const int close_tag_size = 5; + string tag = malloc(sizeof(*tag) * 5); + sprintf(tag, "", depth); + string close_tag = malloc(sizeof(*close_tag) * 6); + sprintf(close_tag, "", depth); + + // allocate buffer with extra 9 characters for the tags + compiled_line = malloc(sizeof(*compiled_line) * + (size_of_line + tag_size + close_tag_size)); + // write h1 to start of compiled_line + strncpy(compiled_line, tag, tag_size); + // write the rest of the line to the compiled_line + strncpy(compiled_line + tag_size, line + depth, size_of_line); + // write the end tags + strncpy(compiled_line + size_of_content + tag_size, close_tag, + close_tag_size); + } + + else + { + compiled_line = malloc(sizeof(*compiled_line) * size_of_line); + strncpy(compiled_line, line, size_of_line); + } + + return compiled_line; +} -- cgit v1.2.3-13-gbd6f