1.1 --- a/src/c2html.c Tue Aug 23 15:28:56 2016 +0200 1.2 +++ b/src/c2html.c Tue Aug 23 15:55:02 2016 +0200 1.3 @@ -48,7 +48,7 @@ 1.4 } 1.5 1.6 /* TODO: remove this workaround after refactoring highlighter structure */ 1.7 -static void plainparseline(char *src, UcxBuffer *dest, highlighter_t* hltr) { 1.8 +static void plainparseline(char *src, UcxBuffer *dest, HighlighterData* hltr) { 1.9 size_t dp = 0; 1.10 char *buf = dest->space + dest->pos; 1.11 while (*src && *src != '\n') { 1.12 @@ -61,10 +61,8 @@ 1.13 dest->size += dp; 1.14 } 1.15 1.16 -int formatfile( 1.17 - highlighter_t *highlighter, 1.18 - UcxList *in, write_func out, void *stream, 1.19 - int showlineno) { 1.20 +int formatlines(highlighter_func highlighter, 1.21 + UcxList *in, write_func out, void *stream, int showlineno) { 1.22 1.23 /* compute width of line numbering */ 1.24 int lnw; 1.25 @@ -86,6 +84,9 @@ 1.26 1.27 /* process lines */ 1.28 size_t lineno = 0; 1.29 + HighlighterData highlighter_data; 1.30 + memset(&highlighter_data, 0, sizeof(HighlighterData)); 1.31 + 1.32 UCX_FOREACH(sourceline, in) { 1.33 /* increase line number and clean line buffer */ 1.34 lineno++; 1.35 @@ -99,7 +100,7 @@ 1.36 } 1.37 1.38 /* process code line */ 1.39 - highlighter->parser(sourceline->data, line, highlighter); 1.40 + highlighter(sourceline->data, line, &highlighter_data); 1.41 1.42 /* write code line */ 1.43 out(line->space, 1, line->size, stream); 1.44 @@ -174,22 +175,16 @@ 1.45 return EXIT_FAILURE; 1.46 } else { 1.47 /* Configure highlighter */ 1.48 - highlighter_t *highlighter = calloc(1, sizeof(highlighter_t)); 1.49 + highlighter_func hltr = NULL; 1.50 switch (sourcetype) { 1.51 case SOURCE_C: 1.52 - highlighter->isdirective = check_cdirective; 1.53 - highlighter->istype = check_ctype; 1.54 - highlighter->keywords = ckeywords; 1.55 - highlighter->parser = cparseline; 1.56 + hltr = cparseline; 1.57 break; 1.58 case SOURCE_JAVA: 1.59 - highlighter->isdirective = check_jdirective; 1.60 - highlighter->istype = check_jtype; 1.61 - highlighter->keywords = jkeywords; 1.62 - highlighter->parser = jparseline; 1.63 + hltr = jparseline; 1.64 break; 1.65 case SOURCE_PLAIN: 1.66 - highlighter->parser = plainparseline; 1.67 + hltr = plainparseline; 1.68 break; 1.69 default: /* should be unreachable */ 1.70 fprintf(stderr, "error in enum source_type\n"); 1.71 @@ -254,14 +249,9 @@ 1.72 } 1.73 } 1.74 1.75 - formatfile( 1.76 - highlighter, 1.77 - inputlines, 1.78 - (write_func) fwrite, 1.79 - fout, 1.80 - settings.showlinenumbers); 1.81 + formatlines(hltr, inputlines, 1.82 + (write_func) fwrite, fout, settings.showlinenumbers); 1.83 1.84 - free(highlighter); 1.85 ucx_buffer_free(content); 1.86 } else { 1.87 perror("Error opening input file");