qeo_retcode_t qeo_json_event_writer_write(const qeo_json_event_writer_t *writer, const char *json_data) { qeo_retcode_t result = QEO_EINVAL; qeojson_writer_t *jsonwriter = (qeojson_writer_t *) writer; json_t *jsonData = json_loads(json_data, 0, NULL); if ((NULL != jsonData) && (NULL != writer)) { json_writer_dispatcher_cookie_t *dc = (json_writer_dispatcher_cookie_t *)qeocore_writer_get_userdata(jsonwriter->writer); qeocore_data_t *data = qeocore_writer_data_new(jsonwriter->writer); if (QEO_OK == data_from_json(dc->typedesc, jsonData, data)) { result = qeocore_writer_write(jsonwriter->writer, data); } qeocore_data_free(data); json_decref(jsonData); } return result; }
int main(int argc, char *argv[]) { FILE *in_fp = stdin; /* Input file name */ char *in_file_name = NULL; /* Input file name */ FILE *out_fp = stdout; /* Output file pointer */ char *out_file_name = NULL; /* Output file name */ bool print_tokens = false; bool help_flag_set = false; char *yaml_file_name = NULL; char *json_file_name = NULL; ctache_data_t *data = NULL; bool print_parsed_rules = false; enum escaping_type escaping_type = ESCAPE_HTML; char *delim_begin = DELIM_BEGIN; char *delim_end = DELIM_END; extern char *optarg; extern int optind, opterr, optopt; int opt; while ((opt = getopt(argc, argv, "d:D:e:o:i:j:thy:pV")) != -1) { switch (opt) { case 'd': if (strcmp(optarg, DELIM_BEGIN) != 0) { delim_begin = strdup(optarg); } break; case 'D': if (strcmp(optarg, DELIM_END) != 0) { delim_end = strdup(optarg); } break; case 'e': if (strcmp(optarg, "html") == 0) { escaping_type = ESCAPE_HTML; } else if (strcmp(optarg, "tex") == 0) { escaping_type = ESCAPE_TEX; } else { fprintf(stderr, "Unrecognized escaping type: %s\n", optarg); exit(EXIT_FAILURE); } break; case 'h': help_flag_set = true; break; case 'i': in_file_name = strdup(optarg); in_fp = fopen(in_file_name, "r"); if (in_fp == NULL) { fprintf(stderr, "Error opening file: %s\n", in_file_name); exit(EXIT_FAILURE); } break; case 'j': json_file_name = strdup(optarg); break; case 'o': out_file_name = strdup(optarg); out_fp = fopen(out_file_name, "w"); if (out_fp == NULL) { fprintf(stderr, "Error opening file: %s\n", out_file_name); exit(EXIT_FAILURE); } break; case 'p': print_parsed_rules = true; break; case 't': print_tokens = true; break; case 'V': printf("ctache %s\n", PACKAGE_VERSION); exit(EXIT_SUCCESS); break; case 'y': yaml_file_name = strdup(optarg); break; default: exit(EXIT_FAILURE); break; } } if (help_flag_set) { print_help(argv[0]); goto cleanup; /* Do nothing else */ } if (yaml_file_name == NULL && json_file_name == NULL) { print_help(argv[0]); goto cleanup; } /* Read the data from a file */ if (yaml_file_name != NULL) { data = data_from_yaml(yaml_file_name); } else { data = data_from_json(json_file_name); } /* Render the template */ if (data != NULL) { int render_flags = 0x0; if (print_tokens) { render_flags |= CTACHE_RENDER_FLAG_PRINT_TOKENS; } if (print_parsed_rules) { render_flags |= CTACHE_RENDER_FLAG_PRINT_RULES; } _ctache_render_file(in_fp, out_fp, data, render_flags, escaping_type, delim_begin, delim_end); } else { fprintf(stderr, "Error parsing data file\n"); } cleanup: /* Cleanup */ if (data != NULL) { ctache_data_destroy(data); } if (out_fp != stdout) { fclose(out_fp); } if (in_fp != stdin) { fclose(in_fp); } free(in_file_name); free(out_file_name); free(yaml_file_name); free(json_file_name); if (strcmp(delim_begin, DELIM_BEGIN) != 0) { free(delim_begin); } if (strcmp(delim_end, DELIM_END) != 0) { free(delim_end); } return 0; }