int main(int argc, char** argv) { create_parsers(); init(); if (argc > 1) { parser_execute_file(argv[1]); } else { while(1) { char* input = readline(":> "); add_history(input); if (strcmp(input, "") == 0) { continue; } else if (strcmp(input, "exit") == 0) { break; } else { parser_execute(input); } free(input); } } cleanup_parsers(); return 0; }
VALUE parse_tags(VALUE self, VALUE start_tag, VALUE end_tag, VALUE string) { VALUE str = StringValue(string); VALUE start = StringValue(start_tag); VALUE end = StringValue(end_tag); parse_input input = (parse_input) { RSTRING(str)->ptr, RSTRING(str)->len, RSTRING(start)->ptr, RSTRING(start)->len, RSTRING(end)->ptr, RSTRING(end)->len }; parse_data *p = parser_execute(&input); GList *list = p->elements; VALUE array = rb_ary_new2(g_list_length(list)); for (GList *i = list; i; i = i->next) { int *data = (int *)i->data; VALUE pos = rb_ary_new2(ARRAY_SIZE); rb_ary_push(pos, INT2NUM(data[0])); rb_ary_push(pos, INT2NUM(data[1])); rb_ary_push(array, pos); } parser_free(p); return array; }