1.1 --- a/src/c2html.c Tue Aug 23 15:07:29 2016 +0200 1.2 +++ b/src/c2html.c Tue Aug 23 15:28:56 2016 +0200 1.3 @@ -47,10 +47,23 @@ 1.4 "\n"); 1.5 } 1.6 1.7 +/* TODO: remove this workaround after refactoring highlighter structure */ 1.8 +static void plainparseline(char *src, UcxBuffer *dest, highlighter_t* hltr) { 1.9 + size_t dp = 0; 1.10 + char *buf = dest->space + dest->pos; 1.11 + while (*src && *src != '\n') { 1.12 + dp = writeescapedchar(buf, dp, *src); 1.13 + src++; 1.14 + } 1.15 + buf[dp++] = '\n'; 1.16 + buf[dp] = '\0'; 1.17 + dest->pos += dp; 1.18 + dest->size += dp; 1.19 +} 1.20 + 1.21 int formatfile( 1.22 highlighter_t *highlighter, 1.23 - UcxList *in, 1.24 - write_func out, void *stream, 1.25 + UcxList *in, write_func out, void *stream, 1.26 int showlineno) { 1.27 1.28 /* compute width of line numbering */ 1.29 @@ -85,23 +98,8 @@ 1.30 lineno, lineno, lnw, lineno); 1.31 } 1.32 1.33 - /* TODO: backwards compatibility: replace line->space in all occasions 1.34 - * and use UcxBuffer functions 1.35 - */ 1.36 - char *buf = line->space + line->pos; 1.37 - if (highlighter) { 1.38 - highlighter->parser(sourceline->data, buf, highlighter); 1.39 - } else { 1.40 - char *c = sourceline->data; 1.41 - size_t dp = 0; 1.42 - while (*c && *c != '\n') { 1.43 - dp = writeescapedchar(buf, dp, *c); 1.44 - c++; 1.45 - } 1.46 - buf[dp++] = '\n'; 1.47 - buf[dp] = '\0'; 1.48 - } 1.49 - line->size = strlen(line->space); 1.50 + /* process code line */ 1.51 + highlighter->parser(sourceline->data, line, highlighter); 1.52 1.53 /* write code line */ 1.54 out(line->space, 1, line->size, stream); 1.55 @@ -115,22 +113,6 @@ 1.56 return 0; 1.57 } 1.58 1.59 -void init_c_highlighter(highlighter_t *highlighter) { 1.60 - memset(highlighter, 0, sizeof(highlighter_t)); 1.61 - highlighter->isdirective = check_cdirective; 1.62 - highlighter->istype = check_ctype; 1.63 - highlighter->keywords = ckeywords; 1.64 - highlighter->parser = cparseline; 1.65 -} 1.66 - 1.67 -void init_java_highlighter(highlighter_t *highlighter) { 1.68 - memset(highlighter, 0, sizeof(highlighter_t)); 1.69 - highlighter->isdirective = check_jdirective; 1.70 - highlighter->istype = check_jtype; 1.71 - highlighter->keywords = jkeywords; 1.72 - highlighter->parser = jparseline; 1.73 -} 1.74 - 1.75 #define FILEBUF_SIZE 4096 1.76 1.77 enum source_type { 1.78 @@ -192,17 +174,22 @@ 1.79 return EXIT_FAILURE; 1.80 } else { 1.81 /* Configure highlighter */ 1.82 - highlighter_t highlighter; 1.83 - highlighter_t *hptr = &highlighter; 1.84 + highlighter_t *highlighter = calloc(1, sizeof(highlighter_t)); 1.85 switch (sourcetype) { 1.86 case SOURCE_C: 1.87 - init_c_highlighter(&highlighter); 1.88 + highlighter->isdirective = check_cdirective; 1.89 + highlighter->istype = check_ctype; 1.90 + highlighter->keywords = ckeywords; 1.91 + highlighter->parser = cparseline; 1.92 break; 1.93 case SOURCE_JAVA: 1.94 - init_java_highlighter(&highlighter); 1.95 + highlighter->isdirective = check_jdirective; 1.96 + highlighter->istype = check_jtype; 1.97 + highlighter->keywords = jkeywords; 1.98 + highlighter->parser = jparseline; 1.99 break; 1.100 case SOURCE_PLAIN: 1.101 - hptr = NULL; 1.102 + highlighter->parser = plainparseline; 1.103 break; 1.104 default: /* should be unreachable */ 1.105 fprintf(stderr, "error in enum source_type\n"); 1.106 @@ -268,11 +255,13 @@ 1.107 } 1.108 1.109 formatfile( 1.110 - hptr, 1.111 + highlighter, 1.112 inputlines, 1.113 (write_func) fwrite, 1.114 fout, 1.115 settings.showlinenumbers); 1.116 + 1.117 + free(highlighter); 1.118 ucx_buffer_free(content); 1.119 } else { 1.120 perror("Error opening input file");