diff options
-rw-r--r-- | Converter/includes/compiler.h | 4 | ||||
-rw-r--r-- | Converter/src/compiler.c | 80 |
2 files changed, 41 insertions, 43 deletions
diff --git a/Converter/includes/compiler.h b/Converter/includes/compiler.h index 1e8578f..6e1eca8 100644 --- a/Converter/includes/compiler.h +++ b/Converter/includes/compiler.h @@ -6,8 +6,6 @@ typedef char *string; const static char TOKENS[] = {'*', '_', '~'}; -const static char *TOKENS_COMPILED[] = { "<i>", "<u>", "<s>" }; -const static char *TOKENS_CLOSE_COMPILED[] = { "</i>", "</u>", "</s>" }; const static size_t N_TOKENS = 3; /* Compile markdown line to HTML line */ @@ -16,7 +14,5 @@ string compile_line(string line, size_t sz_line, string line_or_source); int find_string(string src, string query, size_t sz_src, size_t sz_query); /* Check if a given character is a text token*/ bool is_token(char c); -/* Generate the compiled token pair for a given single sized markdown token */ -char **get_token_pair(char c); #endif // __COMPILER_H_ diff --git a/Converter/src/compiler.c b/Converter/src/compiler.c index 2b65da7..2fb5607 100644 --- a/Converter/src/compiler.c +++ b/Converter/src/compiler.c @@ -21,32 +21,6 @@ bool is_token(char c) return token_check; } -char **get_token_pair(char c) -{ - if (is_token(c)) - { - char **pair = malloc(sizeof(*pair) * 2); - int i; - switch(c) - { - case '*': - i = 0; - break; - case '_': - i = 1; - break; - case '~': - i = 2; - break; - } - pair[0] = TOKENS_COMPILED[i]; - pair[1] = TOKENS_CLOSE_COMPILED[i]; - return pair; - } - - return NULL; -} - void compile_inner_text(string dest, string src, size_t sz_src, string line_or_source) { @@ -76,20 +50,49 @@ void compile_inner_text(string dest, string src, size_t sz_src, { if (is_token(src[i])) { - char **pair = get_token_pair(src[i]); - tag = pair[0]; - close_tag = pair[1]; - md_tag = &src[i]; - md_tag_size = 1; - tag_size = 3; // Information for each tag - if (src[i] == '*' && src[i + 1] == '*') + // NOTE: Here's where you add new text tags + switch (src[i]) { - md_tag = "**"; - tag = "<strong>"; - close_tag = "</strong>"; - tag_size = 8; - md_tag_size = 2; + case '*': { + // Twin asterisks + if (src[i + 1] == '*') + { + md_tag = "**"; + tag = "<strong>"; + close_tag = "</strong>"; + tag_size = 8; + md_tag_size = 2; + } + // one asterisk + else + { + md_tag = "*"; + tag = "<i>"; + close_tag = "</i>"; + tag_size = 3; + md_tag_size = 1; + } + break; + } + case '_': { + tag = "<u>"; + close_tag = "</u>"; + md_tag = "_"; + tag_size = 3; + md_tag_size = 1; + break; + } + case '~': { + tag = "<s>"; + close_tag = "</s>"; + md_tag = "~"; + tag_size = 3; + md_tag_size = 1; + break; + } + default: + break; } // find the corresponding markdown tag, and report errors @@ -119,7 +122,6 @@ void compile_inner_text(string dest, string src, size_t sz_src, cursor += tag_size + size_of_content + tag_size + 1; // shift after operation i += size_of_content + (2 * md_tag_size) - 1; - free(pair); } else { |