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");