aboutsummaryrefslogtreecommitdiff
path: root/Converter/src/compiler.c
diff options
context:
space:
mode:
Diffstat (limited to 'Converter/src/compiler.c')
-rw-r--r--Converter/src/compiler.c46
1 files changed, 46 insertions, 0 deletions
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 <stdio.h>
+#include <string.h>
+
+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, "<h%d>", depth);
+ string close_tag = malloc(sizeof(*close_tag) * 6);
+ sprintf(close_tag, "</h%d>", 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;
+}