src/c2html.c

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

mercurial