代码拉取完成,页面将自动刷新
#include "parser.h"
#include "vector.h"
#include "keyword.h"
#include "handler.h"
#define BOB "{"
#define EOB "}"
//获取一行数据, 处理注释等
static bool read_line(FILE* stream, char* buf, size_t size) {
if(!fgets(buf, size, stream)) {
return false;
}
//TO DO HANDLE COMMIT
return true;
}
void process_stream(FILE* stream, vector_t* keywords, void* output) {
static keyword_t* cur_kw = NULL;
static int skip = 0;
char buf[1024];
while(read_line(stream, buf, sizeof(buf))) {
bool has_bob = false;
vector_t* line = alloc_strvec(buf);
if(!line)
continue;
if(!strcmp((char*)vector_slot_last(line), BOB)) {
has_bob = true;
if(vector_size(line) == 1) {
skip++;
free_strvec(line);
continue;
}
}
if(!strcmp((char*)vector_slot_first(line), EOB)) {
free_strvec(line);
if(skip) {
skip--;
continue;
} else {
break;
}
}
if(skip) {
#ifdef KP_PARSER_DEBUG
puts(cur_kw->string);
default_keyword_handler(line);
#endif
if(cur_kw && cur_kw->handler) {
cur_kw->handler(line, output);
}
}
int i = 0;
for(i=0;i<vector_size(keywords);++i) {
keyword_t* keyword = (keyword_t*)vector_slot(keywords, i);
if(!strcmp(keyword->string, (const char*)vector_slot_first(line))) {
#ifdef KP_PARSER_DEBUG
default_keyword_handler(line);
#endif
if(keyword->handler) {
keyword->handler(line, output);
}
if(has_bob) {
if(keyword->sub) {
process_stream(stream, keyword->sub, output);
} else {
cur_kw = keyword;
skip++;
}
}
break;
}
}
//不匹配
if(i == vector_size(keywords) && has_bob) {
skip++;
}
free_strvec(line);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。