diff -r 1f3835182aeb -r 534a4ef4143d src/c2html.c --- a/src/c2html.c Tue Aug 23 15:28:56 2016 +0200 +++ b/src/c2html.c Tue Aug 23 15:55:02 2016 +0200 @@ -48,7 +48,7 @@ } /* TODO: remove this workaround after refactoring highlighter structure */ -static void plainparseline(char *src, UcxBuffer *dest, highlighter_t* hltr) { +static void plainparseline(char *src, UcxBuffer *dest, HighlighterData* hltr) { size_t dp = 0; char *buf = dest->space + dest->pos; while (*src && *src != '\n') { @@ -61,10 +61,8 @@ dest->size += dp; } -int formatfile( - highlighter_t *highlighter, - UcxList *in, write_func out, void *stream, - int showlineno) { +int formatlines(highlighter_func highlighter, + UcxList *in, write_func out, void *stream, int showlineno) { /* compute width of line numbering */ int lnw; @@ -86,6 +84,9 @@ /* process lines */ size_t lineno = 0; + HighlighterData highlighter_data; + memset(&highlighter_data, 0, sizeof(HighlighterData)); + UCX_FOREACH(sourceline, in) { /* increase line number and clean line buffer */ lineno++; @@ -99,7 +100,7 @@ } /* process code line */ - highlighter->parser(sourceline->data, line, highlighter); + highlighter(sourceline->data, line, &highlighter_data); /* write code line */ out(line->space, 1, line->size, stream); @@ -174,22 +175,16 @@ return EXIT_FAILURE; } else { /* Configure highlighter */ - highlighter_t *highlighter = calloc(1, sizeof(highlighter_t)); + highlighter_func hltr = NULL; switch (sourcetype) { case SOURCE_C: - highlighter->isdirective = check_cdirective; - highlighter->istype = check_ctype; - highlighter->keywords = ckeywords; - highlighter->parser = cparseline; + hltr = cparseline; break; case SOURCE_JAVA: - highlighter->isdirective = check_jdirective; - highlighter->istype = check_jtype; - highlighter->keywords = jkeywords; - highlighter->parser = jparseline; + hltr = jparseline; break; case SOURCE_PLAIN: - highlighter->parser = plainparseline; + hltr = plainparseline; break; default: /* should be unreachable */ fprintf(stderr, "error in enum source_type\n"); @@ -254,14 +249,9 @@ } } - formatfile( - highlighter, - inputlines, - (write_func) fwrite, - fout, - settings.showlinenumbers); + formatlines(hltr, inputlines, + (write_func) fwrite, fout, settings.showlinenumbers); - free(highlighter); ucx_buffer_free(content); } else { perror("Error opening input file");