struct terrace_linedata_s { char type; unsigned int level; unsigned int offsetHead; unsigned int offsetTail; }; typedef struct terrace_linedata_s terrace_linedata_t; void terrace_parse_line(char* line, terrace_linedata_t *lineData) { char type = 0; unsigned int level = 0; unsigned int offsetTail = 0; if (line[0] == '\n') { if (lineData->type == 1) level++; if (lineData->type == 0) level = lineData->level; lineData->type = type; lineData->level = level; lineData->offsetHead = 0; lineData->offsetTail = 0; } else { type = 1; while (line[level] == ' ' && level <= lineData->level + 1) ++level; lineData->type = type; lineData->level = level; lineData->offsetHead = level; lineData->offsetTail = level; while (line[lineData->offsetTail] != '\0' && line[lineData->offsetTail] != ' ') ++lineData->offsetTail; } lineData->type = type; lineData->level = level; lineData->offsetHead = level; }