#ifndef __TOKENS_H #define __TOKENS_H #include typedef struct token_struct token; typedef struct token_struct *token_p; typedef struct token_group_struct token_group; typedef struct token_group_struct *token_group_p; #define TOKEN_TYPE_NONE 0 #define TOKEN_TYPE_TEXT 1 #define TOKEN_TYPE_TAG 2 #define TOKEN_TYPE_TAG_PARSED 3 #define TOKEN_GROWFACTOR 20 struct token_group_struct { /* array of tokens */ token_p tokens; /* number of tokens allocated for */ int max_token; /* index of the first token */ unsigned int first; /* index of the last token */ unsigned int last; /* index of the current token */ unsigned int current; }; struct token_struct { /* the token itself */ char *t; /* if the token is a tag, this is its argument vector */ char **tag_argv; /* if the token is a tag, this is the size of its argument vector */ int tag_argc; /* the length of the token */ unsigned long length; /* the type of token (TOKEN_TYPE_*) */ unsigned char type; }; #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void append_output(char **output, char *append, int append_length, int *current_size, int *current_length); int tokenize(context_p ctx, char *input, token_group_p tgroup); token_group_p token_group_init(void); token_group_p token_subgroup_init(token_group_p tgroup, unsigned int first, unsigned int last); void token_group_destroy(token_group_p tgroup); void token_subgroup_destroy(token_group_p tgroup); void token_rewind(token_group_p tgroup); token_p token_next(context_p ctx, token_group_p tgroup, unsigned int *position); void token_parsetag(context_p ctx, token_p token); int token_push(token_group_p tgroup, char *t, unsigned long length, unsigned char type); void token_parsearg(context_p ctx, char *inarg, int size, char **outarg); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __TOKENS_H */