int print_document(yaml_document_t *document, yaml_node_t *node) { int rv = 0; switch (node->type) { case YAML_NO_NODE: { printf("node type: no node\n"); break; } case YAML_SCALAR_NODE: { size_t size = node->data.scalar.length; unsigned char *value = node->data.scalar.value; printf("node type: scalar [length: %zu, value: %s] \n", size, value); break; } case YAML_SEQUENCE_NODE: { printf("node type: sequence\n"); int n = node->data.sequence.items.top - node->data.sequence.items.start; for (int i = 0; i < n; i++) { int child_node_idx = node->data.sequence.items.start[i]; yaml_node_t *child_node = yaml_document_get_node(document, child_node_idx); rv = print_document(document, child_node); } break; } case YAML_MAPPING_NODE: { printf("node type: mapping\n"); int n = node->data.mapping.pairs.top - node->data.mapping.pairs.start; for (int i = 0; i < n; i++) { int child_node_k_idx = node->data.mapping.pairs.start[i].key; int child_node_v_idx = node->data.mapping.pairs.start[i].value; yaml_node_t *child_node_k = yaml_document_get_node(document, child_node_k_idx); yaml_node_t *child_node_v = yaml_document_get_node(document, child_node_v_idx); rv = print_document(document, child_node_k); if (rv) { break; } rv = print_document(document, child_node_v); if (rv) { break; } } break; } default: { printf("ERROR: unexpected node type: %d\n", node->type); rv = ERR_UNEXPECTED_NODE_TYPE; } } return rv; }
int load_documents(char *config_file_path) { int rv = 0; FILE *config_file = NULL; yaml_parser_t parser; yaml_document_t document; config_file = fopen(config_file_path, "r"); if (config_file == NULL) { printf("ERROR: failed to open file %s\n", config_file_path); return ERR_FILE_OPEN_FAIL; } if (!yaml_parser_initialize(&parser)) { printf("ERROR: failed to initialize YAML parser\n"); return ERR_YAML_INIT_FAIL; } yaml_parser_set_input_file(&parser, config_file); int done = 0; while (!done) { if (!yaml_parser_load(&parser, &document)) { printf("ERROR: failed to load document\n"); return ERR_DOC_LOAD_FAIL; } yaml_node_t *root_node = yaml_document_get_root_node(&document); if (root_node == NULL) { done = 1; } else { print_document(&document, root_node); } yaml_document_delete(&document); } yaml_parser_delete(&parser); fclose(config_file); return rv; }
int main(int argc, char *argv[]) { int i, numfps = 0; bool ast = false; int *files; char buffer[4096]; cmark_parser *parser; size_t bytes; cmark_node *document; parser = cmark_parser_new(); files = (int *)malloc(argc * sizeof(*files)); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { printf("cmark %s", CMARK_VERSION); printf(" - CommonMark converter (c) 2014 John MacFarlane\n"); exit(0); } else if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { print_usage(); exit(0); } else if (strcmp(argv[i], "--ast") == 0) { ast = true; } else if (*argv[i] == '-') { print_usage(); exit(1); } else { // treat as file argument files[numfps++] = i; } } for (i = 0; i < numfps; i++) { FILE *fp = fopen(argv[files[i]], "r"); if (fp == NULL) { fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]], strerror(errno)); exit(1); } start_timer(); while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { cmark_parser_feed(parser, buffer, bytes); } end_timer("processing lines"); fclose(fp); } if (numfps == 0) { /* document = cmark_parse_file(stdin); print_document(document, ast); exit(0); */ while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { cmark_parser_feed(parser, buffer, bytes); } } start_timer(); document = cmark_parser_finish(parser); end_timer("finishing document"); cmark_parser_free(parser); start_timer(); print_document(document, ast); end_timer("print_document"); start_timer(); cmark_node_free(document); end_timer("free_blocks"); free(files); return 0; }
int main(int argc, char *argv[]) { int i, numfps = 0; int *files; char buffer[4096]; cmark_parser *parser; size_t bytes; cmark_node *document; int width = 0; char *unparsed; writer_format writer = FORMAT_HTML; int options = CMARK_OPT_DEFAULT; #if defined(_WIN32) && !defined(__CYGWIN__) _setmode(_fileno(stdout), _O_BINARY); #endif files = (int *)malloc(argc * sizeof(*files)); for (i = 1; i < argc; i++) { if (strcmp(argv[i], "--version") == 0) { printf("cmark %s", CMARK_VERSION_STRING); printf(" - CommonMark converter\n(C) 2014, 2015 John MacFarlane\n"); exit(0); } else if (strcmp(argv[i], "--sourcepos") == 0) { options |= CMARK_OPT_SOURCEPOS; } else if (strcmp(argv[i], "--hardbreaks") == 0) { options |= CMARK_OPT_HARDBREAKS; } else if (strcmp(argv[i], "--smart") == 0) { options |= CMARK_OPT_SMART; } else if (strcmp(argv[i], "--safe") == 0) { options |= CMARK_OPT_SAFE; } else if (strcmp(argv[i], "--normalize") == 0) { options |= CMARK_OPT_NORMALIZE; } else if (strcmp(argv[i], "--validate-utf8") == 0) { options |= CMARK_OPT_VALIDATE_UTF8; } else if ((strcmp(argv[i], "--help") == 0) || (strcmp(argv[i], "-h") == 0)) { print_usage(); exit(0); } else if (strcmp(argv[i], "--width") == 0) { i += 1; if (i < argc) { width = (int)strtol(argv[i], &unparsed, 10); if (unparsed && strlen(unparsed) > 0) { fprintf(stderr, "failed parsing width '%s' at '%s'\n", argv[i], unparsed); exit(1); } } else { fprintf(stderr, "--width requires an argument\n"); exit(1); } } else if ((strcmp(argv[i], "-t") == 0) || (strcmp(argv[i], "--to") == 0)) { i += 1; if (i < argc) { if (strcmp(argv[i], "man") == 0) { writer = FORMAT_MAN; } else if (strcmp(argv[i], "html") == 0) { writer = FORMAT_HTML; } else if (strcmp(argv[i], "xml") == 0) { writer = FORMAT_XML; } else if (strcmp(argv[i], "commonmark") == 0) { writer = FORMAT_COMMONMARK; } else if (strcmp(argv[i], "latex") == 0) { writer = FORMAT_LATEX; } else { fprintf(stderr, "Unknown format %s\n", argv[i]); exit(1); } } else { fprintf(stderr, "No argument provided for %s\n", argv[i - 1]); exit(1); } } else if (*argv[i] == '-') { print_usage(); exit(1); } else { // treat as file argument files[numfps++] = i; } } parser = cmark_parser_new(options); for (i = 0; i < numfps; i++) { FILE *fp = fopen(argv[files[i]], "rb"); if (fp == NULL) { fprintf(stderr, "Error opening file %s: %s\n", argv[files[i]], strerror(errno)); exit(1); } while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { cmark_parser_feed(parser, buffer, bytes); if (bytes < sizeof(buffer)) { break; } } fclose(fp); } if (numfps == 0) { while ((bytes = fread(buffer, 1, sizeof(buffer), stdin)) > 0) { cmark_parser_feed(parser, buffer, bytes); if (bytes < sizeof(buffer)) { break; } } } document = cmark_parser_finish(parser); cmark_parser_free(parser); print_document(document, writer, options, width); cmark_node_free(document); free(files); return 0; }
int help(int action) { static FCODE unknowntopic_msg[] = "Unknown Help Topic"; HIST curr; int oldlookatmouse; int oldhelpmode; int flags; HIST next; if (helpmode == -1) /* is help disabled? */ { return (0); } if (help_file == -1) { buzzer(2); return (0); } buffer = (char far *)farmemalloc((long)MAX_PAGE_SIZE + sizeof(LINK)*max_links + sizeof(PAGE)*max_pages); if (buffer == NULL) { buzzer(2); return (0); } link_table = (LINK far *)(&buffer[MAX_PAGE_SIZE]); page_table = (PAGE far *)(&link_table[max_links]); oldlookatmouse = lookatmouse; lookatmouse = 0; timer_start -= clock_ticks(); stackscreen(); if (helpmode >= 0) { next.topic_num = label[helpmode].topic_num; next.topic_off = label[helpmode].topic_off; } else { next.topic_num = helpmode; next.topic_off = 0; } oldhelpmode = helpmode; if (curr_hist <= 0) action = ACTION_CALL; /* make sure it isn't ACTION_PREV! */ do { switch(action) { case ACTION_PREV2: if (curr_hist > 0) curr = hist[--curr_hist]; /* fall-through */ case ACTION_PREV: if (curr_hist > 0) curr = hist[--curr_hist]; break; case ACTION_QUIT: break; case ACTION_INDEX: next.topic_num = label[HELP_INDEX].topic_num; next.topic_off = label[HELP_INDEX].topic_off; /* fall-through */ case ACTION_CALL: curr = next; curr.link = 0; break; } /* switch */ flags = 0; if (curr.topic_num == label[HELP_INDEX].topic_num) flags |= F_INDEX; if (curr_hist > 0) flags |= F_HIST; if ( curr.topic_num >= 0 ) action = help_topic(&curr, &next, flags); else { if ( curr.topic_num == -100 ) { print_document("FRACTINT.DOC", print_doc_msg_func, 1); action = ACTION_PREV2; } else if ( curr.topic_num == -101 ) action = ACTION_PREV2; else { display_page(unknowntopic_msg, NULL, 0, 0, 1, 0, NULL, NULL); action = -1; while (action == -1) { switch (getakey()) { case ESC: action = ACTION_QUIT; break; case ALT_F1: action = ACTION_PREV; break; case F1: action = ACTION_INDEX; break; } /* switch */ } /* while */ } } /* else */ if ( action != ACTION_PREV && action != ACTION_PREV2 ) { if (curr_hist >= MAX_HIST) { int ctr; for (ctr=0; ctr<MAX_HIST-1; ctr++) hist[ctr] = hist[ctr+1]; curr_hist = MAX_HIST-1; } hist[curr_hist++] = curr; } } while (action != ACTION_QUIT); farmemfree((BYTE far *)buffer); unstackscreen(); lookatmouse = oldlookatmouse; helpmode = oldhelpmode; timer_start += clock_ticks(); return(0); }