src/c2html.c

changeset 46
534a4ef4143d
parent 45
1f3835182aeb
child 47
c39ecbbca7c0
--- 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");

mercurial