#include "../parser.h" #include #include #include #include void linedata_basic (char indent) { char *line = NULL; size_t bufsize = 32; ssize_t c_read = 0; terrace_linedata_t line_data = terrace_create_linedata(indent); while(c_read = getline(&line, &bufsize, stdin)) { if (c_read == -1) break; char *terrace_line = strtok(line, "\n"); terrace_parse_line(terrace_line, &line_data); if (terrace_line == 0) terrace_line = ""; printf("| level %u | indent %c | offsetHead %u | offsetTail %u | line %s |\n", line_data.level, line_data.indent, line_data.offsetHead, line_data.offsetTail, terrace_line); }; free(line); } void linedata_head_tail (char indent) { char *line = NULL; size_t bufsize = 32; ssize_t c_read = 0; terrace_linedata_t line_data = terrace_create_linedata(indent); char *head; char *tail; while(c_read = getline(&line, &bufsize, stdin)) { if (c_read == -1) break; char *terrace_line = strtok(line, "\n"); terrace_parse_line(terrace_line, &line_data); if (terrace_line == 0) terrace_line = ""; if (line_data.offsetTail < c_read) tail = &terrace_line[line_data.offsetTail + 1]; else tail = ""; // Cheeky move to avoid string slicing. if (line_data.offsetHead < c_read) { terrace_line[line_data.offsetTail] = '\0'; head = &terrace_line[line_data.offsetHead]; } else head = ""; printf("| head %s | tail %s |\n", head, tail); }; free(line); } int main(int argc, char *argv[]) { if (argc < 2) return 0; char* test = argv[1]; if (!strcmp(test, "linedata:basic")) linedata_basic(' '); if (!strcmp(test, "linedata:tabs")) linedata_basic('\t'); if (!strcmp(test, "linedata:head-tail")) linedata_head_tail(' '); return 0; }