#include #include #include #include #include #include #include #include "cli.hpp" #include "scanner.hpp" #include "exit_values.hpp" // Define declared variables from 'scanner.hpp' here std::vector ignore_list; std::vector asymmetric_special_list; bool is_asymmetric; std::string buffer; std::string tag_candidate; std::stack tag_stack; /* --------------- */ extern int from_xml_to_csml_lex_destroy(void); extern int from_csml_to_xml_lex_destroy(void); char * output_name_from_input_name(const char * const input, const char * const extension) { char * input_duplicate = strdup(input); char * dn = strdup(dirname(input_duplicate)); char * bn = strdup(basename(input_duplicate)); free(input_duplicate); char * r = (char *)malloc(strlen(dn) + strlen(bn) + strlen(extension)); strcpy(r, dn); strcat(r, bn); const char *last_dot = strrchr(bn, '.'); if (last_dot) { strncpy(r, bn, last_dot - bn); } else { strcpy(r, bn); } strcat(r, extension); free(dn); free(bn); return r; } void trim(char * const s) { int bp = 0; int len = strlen(s); bool do_break = false; for (int i = 0; i < len; i++) { if ((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z') || (s[i] >= '0' && s[i] <= '9') || (s[i] == '_')) { s[bp++] = s[i]; do_break = true; } else if (do_break) { break; } } s[bp] = '\0'; } void trim(std::string &s) { char * dup = strdup(s.c_str()); trim(dup); s = std::string(dup); free(dup); } signed main(int argc, char * * argv) { const int b = parse_round1_arguments(argc, argv); switch (b) { case 0: break; case EXIT_EARLY_SUCCESS: exit(EXIT_SUCCESS); default: exit(b); } parse_round2_arguments(argc - 1, argv + 1); if (not did_any_work) { usage(); } from_xml_to_csml_lex_destroy(); from_csml_to_xml_lex_destroy(); return EXIT_SUCCESS; }