aboutsummaryrefslogtreecommitdiff
path: root/src/ctemplates.h
diff options
context:
space:
mode:
authorAlexander Pickering <alexandermpickering@gmail.com>2019-08-28 17:28:55 -0400
committerAlexander Pickering <alexandermpickering@gmail.com>2019-08-28 17:28:55 -0400
commit06087b10ec7a897ad48db83f7f33a8fc11fa9341 (patch)
tree4e6c539bf89d08deec84ffec35797fc7306022b1 /src/ctemplates.h
parent192115300aa8349a4c85535466386cbf99259fdd (diff)
downloadlibctemplates-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.h57
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);