Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}