Tue, 23 Aug 2016 15:28:56 +0200
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