aboutsummaryrefslogtreecommitdiff
path: root/Converter/src/compiler.c
diff options
context:
space:
mode:
authordx <aryadevchavali1@gmail.com>2020-05-20 14:56:59 +0100
committerdx <aryadevchavali1@gmail.com>2020-05-20 14:58:18 +0100
commit9042af391b891b0b0b9d9a04d35ac98ea95ca11d (patch)
tree00d7cf33f273aefa13250cec6a98a622e7eb1cdc /Converter/src/compiler.c
parent243ab962355323484fd29502851409bff2ab51b6 (diff)
downloadmdhtml-9042af391b891b0b0b9d9a04d35ac98ea95ca11d.tar.gz
mdhtml-9042af391b891b0b0b9d9a04d35ac98ea95ca11d.tar.bz2
mdhtml-9042af391b891b0b0b9d9a04d35ac98ea95ca11d.zip
~!refactor of the compile_inner_text function
Set compiled token recipes in the compiler.h file (easier to manage) and let code handle the rest.
Diffstat (limited to 'Converter/src/compiler.c')
-rw-r--r--Converter/src/compiler.c80
1 files changed, 39 insertions, 41 deletions
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
{