27 * |
27 * |
28 */ |
28 */ |
29 |
29 |
30 #include "highlighter.h" |
30 #include "highlighter.h" |
31 |
31 |
32 HighlighterData* new_highlighter_data() { |
32 #include <stdlib.h> |
33 HighlighterData* hd = malloc(sizeof(HighlighterData)); |
33 #include <stdio.h> |
34 if (hd == NULL) { |
34 #include <string.h> |
35 return NULL; |
35 #include <ctype.h> |
36 } else { |
36 #include "ucx/string.h" |
37 hd->multiline_comment = 0; |
37 #include "ucx/utils.h" |
38 hd->primary_buffer = ucx_buffer_new(NULL, 256, UCX_BUFFER_AUTOEXTEND); |
|
39 hd->secondary_buffer = ucx_buffer_new(NULL, 32, UCX_BUFFER_AUTOEXTEND); |
|
40 return hd; |
|
41 } |
|
42 } |
|
43 |
|
44 void free_highlighter_data(HighlighterData *hd) { |
|
45 ucx_buffer_free(hd->primary_buffer); |
|
46 ucx_buffer_free(hd->secondary_buffer); |
|
47 free(hd); |
|
48 } |
|
49 |
38 |
50 static void put_htmlescaped(UcxBuffer *dest, char c) { |
39 static void put_htmlescaped(UcxBuffer *dest, char c) { |
51 if (c == '>') { |
40 if (c == '>') { |
52 ucx_buffer_puts(dest, ">"); |
41 ucx_buffer_puts(dest, ">"); |
53 } else if (c == '<') { |
42 } else if (c == '<') { |
82 return 1; |
71 return 1; |
83 } |
72 } |
84 |
73 |
85 /* Plaintext Highlighter */ |
74 /* Plaintext Highlighter */ |
86 |
75 |
87 void plain_highlighter(char *src, UcxBuffer *dest, HighlighterData *hd) { |
76 void c2html_plain_highlighter(char *src, UcxBuffer *dest, c2html_highlighter_data *hd) { |
88 while (*src && *src != '\n') { |
77 while (*src && *src != '\n') { |
89 put_htmlescaped(dest, *src); |
78 put_htmlescaped(dest, *src); |
90 src++; |
79 src++; |
91 } |
80 } |
92 ucx_buffer_putc(dest, '\n'); |
81 ucx_buffer_putc(dest, '\n'); |
100 "long", "register", "return", "short", "signed", "sizeof", "static", |
89 "long", "register", "return", "short", "signed", "sizeof", "static", |
101 "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", |
90 "struct", "switch", "typedef", "union", "unsigned", "void", "volatile", |
102 "while", NULL |
91 "while", NULL |
103 }; |
92 }; |
104 |
93 |
105 void c_highlighter(char *src, UcxBuffer *dest, HighlighterData *hd) { |
94 void c2html_c_highlighter(char *src, UcxBuffer *dest, c2html_highlighter_data *hd) { |
106 /* reset buffers without clearing them */ |
95 /* reset buffers without clearing them */ |
107 hd->primary_buffer->size = hd->primary_buffer->pos = 0; |
96 hd->primary_buffer->size = hd->primary_buffer->pos = 0; |
108 hd->secondary_buffer->size = hd->secondary_buffer->pos = 0; |
97 hd->secondary_buffer->size = hd->secondary_buffer->pos = 0; |
109 |
98 |
110 /* alias the buffers for better handling */ |
99 /* alias the buffers for better handling */ |
243 "transient", "catch", "extends", "int", "short", "try", "char", "final", |
232 "transient", "catch", "extends", "int", "short", "try", "char", "final", |
244 "interface", "static", "void", "class", "finally", "long", "strictfp", |
233 "interface", "static", "void", "class", "finally", "long", "strictfp", |
245 "volatile", "const", "float", "native", "super", "while", NULL |
234 "volatile", "const", "float", "native", "super", "while", NULL |
246 }; |
235 }; |
247 |
236 |
248 void java_highlighter(char *src, UcxBuffer *dest, HighlighterData *hd) { |
237 void c2html_java_highlighter(char *src, UcxBuffer *dest, c2html_highlighter_data *hd) { |
249 /* reset buffers without clearing them */ |
238 /* reset buffers without clearing them */ |
250 hd->primary_buffer->size = hd->primary_buffer->pos = 0; |
239 hd->primary_buffer->size = hd->primary_buffer->pos = 0; |
251 hd->secondary_buffer->size = hd->secondary_buffer->pos = 0; |
240 hd->secondary_buffer->size = hd->secondary_buffer->pos = 0; |
252 |
241 |
253 /* alias the buffers for better handling */ |
242 /* alias the buffers for better handling */ |