changes signature of parser functions to use a UcxBuffer - the functions itself don't use the API yet

Tue, 23 Aug 2016 15:28:56 +0200

author
Mike Becker <universe@uap-core.de>
date
Tue, 23 Aug 2016 15:28:56 +0200
changeset 45
1f3835182aeb
parent 44
2b4ac35d061d
child 46
534a4ef4143d

changes signature of parser functions to use a UcxBuffer - the functions itself don't use the API yet

src/c2html.c file | annotate | diff | comparison | revisions
src/ccodegen.c file | annotate | diff | comparison | revisions
src/ccodegen.h file | annotate | diff | comparison | revisions
src/codegens.h file | annotate | diff | comparison | revisions
src/javacodegen.c file | annotate | diff | comparison | revisions
src/javacodegen.h file | annotate | diff | comparison | revisions
     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");
     2.1 --- a/src/ccodegen.c	Tue Aug 23 15:07:29 2016 +0200
     2.2 +++ b/src/ccodegen.c	Tue Aug 23 15:28:56 2016 +0200
     2.3 @@ -50,7 +50,9 @@
     2.4  #define memcpy_const(darr,doff,str) memcpy(&(darr[doff]), str, sizeof(str)-1); \
     2.5                                      dp += sizeof(str)-1
     2.6  
     2.7 -void cparseline(char *src, char *dest, highlighter_t *hltr) {
     2.8 +void cparseline(char *src, UcxBuffer *destbuf, highlighter_t *hltr) {
     2.9 +    /* TODO: workaround for using old code with UcxBuffer */
    2.10 +    char *dest = destbuf->space + destbuf->pos;
    2.11  
    2.12      memset(hltr->word, 0, WORDBUF_SIZE);
    2.13      size_t wp = 0, ifp = 0, sp = (size_t)-1, dp = 0;
    2.14 @@ -191,4 +193,8 @@
    2.15          }
    2.16      } while (c != '\n');
    2.17      dest[dp] = 0;
    2.18 +    
    2.19 +    /* TODO: workaround */
    2.20 +    destbuf->pos += dp;
    2.21 +    destbuf->size += dp;
    2.22  }
     3.1 --- a/src/ccodegen.h	Tue Aug 23 15:07:29 2016 +0200
     3.2 +++ b/src/ccodegen.h	Tue Aug 23 15:28:56 2016 +0200
     3.3 @@ -41,7 +41,7 @@
     3.4  
     3.5  int check_ctype(char *word, size_t len);
     3.6  int check_cdirective(char *word);
     3.7 -void cparseline(char *src, char *dest, highlighter_t *hltr);
     3.8 +void cparseline(char *src, UcxBuffer *dest, highlighter_t *hltr);
     3.9  
    3.10  #ifdef	__cplusplus
    3.11  }
     4.1 --- a/src/codegens.h	Tue Aug 23 15:07:29 2016 +0200
     4.2 +++ b/src/codegens.h	Tue Aug 23 15:28:56 2016 +0200
     4.3 @@ -31,6 +31,7 @@
     4.4  #define	CODEGENS_H
     4.5  
     4.6  #include <stdio.h>
     4.7 +#include "ucx/buffer.h"
     4.8  
     4.9  #ifdef	__cplusplus
    4.10  extern "C" {
    4.11 @@ -41,7 +42,7 @@
    4.12  #define iswordcharacter(c) (isalnum(c) || c=='_' || c=='#' || c=='@')
    4.13      
    4.14  typedef struct _highlighter_t highlighter_t;
    4.15 -typedef void(*parser_fnc)(char*,char*,highlighter_t*);
    4.16 +typedef void(*parser_fnc)(char*,UcxBuffer*,highlighter_t*);
    4.17  
    4.18  struct _highlighter_t {
    4.19      const char** keywords;
     5.1 --- a/src/javacodegen.c	Tue Aug 23 15:07:29 2016 +0200
     5.2 +++ b/src/javacodegen.c	Tue Aug 23 15:28:56 2016 +0200
     5.3 @@ -52,7 +52,10 @@
     5.4  #define memcpy_const(darr,doff,str) memcpy(&(darr[doff]), str, sizeof(str)-1); \
     5.5                                      dp += sizeof(str)-1
     5.6  
     5.7 -void jparseline(char *src, char *dest, highlighter_t *hltr) {
     5.8 +void jparseline(char *src, UcxBuffer *destbuf, highlighter_t *hltr) {
     5.9 +    /* TODO: workaround for using old code with UcxBuffer */
    5.10 +    char *dest = destbuf->space + destbuf->pos;
    5.11 +    
    5.12      memset(hltr->word, 0, WORDBUF_SIZE);
    5.13      size_t wp = 0, sp = (size_t)-1, dp = 0;
    5.14      int isstring = 0, iscomment = 0, isimport = 0;
    5.15 @@ -161,4 +164,8 @@
    5.16          }
    5.17      } while (c != '\n');
    5.18      dest[dp] = 0;
    5.19 +    
    5.20 +    /* TODO: workaround */
    5.21 +    destbuf->pos += dp;
    5.22 +    destbuf->size += dp;
    5.23  }
     6.1 --- a/src/javacodegen.h	Tue Aug 23 15:07:29 2016 +0200
     6.2 +++ b/src/javacodegen.h	Tue Aug 23 15:28:56 2016 +0200
     6.3 @@ -41,7 +41,7 @@
     6.4  
     6.5  int check_jtype(char *word, size_t len);
     6.6  int check_jdirective(char *word);
     6.7 -void jparseline(char *src, char *dest, highlighter_t *hltr);
     6.8 +void jparseline(char *src, UcxBuffer *dest, highlighter_t *hltr);
     6.9  
    6.10  
    6.11  #ifdef	__cplusplus

mercurial