aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Converter/includes/compiler.h4
-rw-r--r--Converter/src/compiler.c80
2 files changed, 43 insertions, 41 deletions
diff --git a/Converter/includes/compiler.h b/Converter/includes/compiler.h
index 6e1eca8..1e8578f 100644
--- a/Converter/includes/compiler.h
+++ b/Converter/includes/compiler.h
@@ -6,6 +6,8 @@
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 */
@@ -14,5 +16,7 @@ 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 2fb5607..2b65da7 100644
--- a/Converter/src/compiler.c
+++ b/Converter/src/compiler.c
@@ -21,6 +21,32 @@ 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)
{
@@ -50,49 +76,20 @@ 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
- // NOTE: Here's where you add new text tags
- switch (src[i])
+ if (src[i] == '*' && src[i + 1] == '*')
{
- 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;
+ md_tag = "**";
+ tag = "<strong>";
+ close_tag = "</strong>";
+ tag_size = 8;
+ md_tag_size = 2;
}
// find the corresponding markdown tag, and report errors
@@ -122,6 +119,7 @@ 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
{