diff options
| author | Alexander Pickering <alexandermpickering@gmail.com> | 2019-08-28 17:28:55 -0400 |
|---|---|---|
| committer | Alexander Pickering <alexandermpickering@gmail.com> | 2019-08-28 17:28:55 -0400 |
| commit | 06087b10ec7a897ad48db83f7f33a8fc11fa9341 (patch) | |
| tree | 4e6c539bf89d08deec84ffec35797fc7306022b1 /src/ctemplates.h | |
| parent | 192115300aa8349a4c85535466386cbf99259fdd (diff) | |
| download | libctemplates-06087b10ec7a897ad48db83f7f33a8fc11fa9341.tar.gz libctemplates-06087b10ec7a897ad48db83f7f33a8fc11fa9341.tar.bz2 libctemplates-06087b10ec7a897ad48db83f7f33a8fc11fa9341.zip | |
Added break statement to templates
Added a break statement that can break out of loops, also added
some tests to test the functionality of the same.
Diffstat (limited to 'src/ctemplates.h')
| -rw-r--r-- | src/ctemplates.h | 57 |
1 files changed, 4 insertions, 53 deletions
diff --git a/src/ctemplates.h b/src/ctemplates.h index f84876c..b422b77 100644 --- a/src/ctemplates.h +++ b/src/ctemplates.h @@ -12,6 +12,7 @@ #include "fbuf.h" #include "kmp.h" #include "hashmap.h" +#include "lexer.h" #define MAX_TEMPLATE_LENGTH 2147384647 @@ -21,36 +22,8 @@ typedef struct TMPL_loop TMPL_loop; typedef struct TMPL_fmtlist TMPL_fmtlist; typedef struct TMPL_fmtlists TMPL_fmtlists; */ -#define TAG_NULL_TEXT "" -#define TAG_TEXT_TEXT "" -#define TAG_VAR_TEXT "TMPL_VAR" -#define TAG_IF_TEXT "TMPL_IF" -#define TAG_ELSEIF_TEXT "TMPL_ELSEIF" -#define TAG_ELSE_TEXT "TMPL_ELSE" -#define TAG_LOOP_TEXT "TMPL_LOOP" -#define TAG_BREAK_TEXT "TMPL_BREAK" -#define TAG_CONTINUE_TEXT "TMPL_CONTINUE" -#define TAG_END_TEXT "TMPL_END" - -#define ATTRIBUTE_VARNAME "name" -#define ATTRIBUTE_DEFAULT "default" -#define ATTRIBUTE_VALUE "value" -#define ATTRIBUTE_LEVEL "level" - #define ERRBUF_HINTLEN 50 -#define SIZEOF(x) (sizeof(x) / sizeof(x[0])) - -#define TAG_NULL_LENGTH 0 -#define TAG_TEXT_LENGTH 0 -#define TAG_VAR_LENGTH SIZEOF(TAG_VAR_TEXT) -#define TAG_IF_LENGTH SIZEOF(TAG_IF_TEXT) -#define TAG_ELSEIF_LENGTH SIZEOF(TAG_ELSEIF_TEXT) -#define TAG_ELSE_LENGTH SIZEOF(TAG_ELSE_TEXT) -#define TAG_LOOP_LENGTH SIZEOF(TAG_LOOP_TEXT) -#define TAG_BREAK_LENGTH SIZEOF(TAG_BREAK_TEXT) -#define TAG_CONTINUE_LENGTH SIZEOF(TAG_CONTINUE_TEXT) -#define TAG_END_LENGTH SIZEOF(TAG_END_TEXT) //I guess it counts the backslash? #define ATTRIBUTE_VARNAME_LENGTH SIZEOF(ATTRIBUTE_VARNAME) - 1 @@ -63,20 +36,6 @@ typedef struct TMPL_fmtlists TMPL_fmtlists; //Length of error messages #define ERR_MSG_LEN 500 -/*The different kind of nodes we can have*/ -enum TMPL_tagtype{ - tag_null = 0,/*Should never show up*/ - tag_text = 1,/*A text sequence*/ - tag_var = 2,/*A variable to replace*/ - tag_if = 3,/*If*/ - tag_elseif = 4,/*Else if*/ - tag_else = 5,/*Else*/ - tag_end = 6,/*end if, end loop*/ - tag_loop = 7,/*Loop*/ - tag_break = 9,/*Break*/ - tag_continue = 10,/*Skip the rest of the loop and go again*/ -}; - struct TMPL_light_string{ const char* start; size_t len; @@ -172,6 +131,9 @@ struct TMPL_templates{ struct TMPL_buf* out; struct TMPL_buf* errout; struct TMPL_tagnode* roottag; + struct TMPL_tagnode* cursor; + int jumping; //tells other functions that they should not change + //the cursor, set after a break or continue. int breaks; int continues; int linenum; @@ -179,17 +141,6 @@ struct TMPL_templates{ } TMPL_templates; -struct TMPL_token{ - const char* start;//Start of token - const char* end;//End of token - enum TMPL_tagtype type;//The type of token - size_t length;//Length of token, should always be end-start - struct TMPL_token* next;//The next token - struct TMPL_token* last;//The last token - unsigned int line;// Not used currently - unsigned int character;// Not used currently - struct TMPL_tagnode* into;//The tag node this item became -}TMPL_token; int TMPL_add_var_to_varlist(struct TMPL_varlist* vl, const char* name, const char* value); int TMPL_add_loop_to_varlist(struct TMPL_varlist* vl, const char* name, struct TMPL_loop* loop); |
