src/highlighter.c

changeset 55
bf54085ce341
parent 54
b3f24e23bc25
child 57
eba880c1705c
equal deleted inserted replaced
54:b3f24e23bc25 55:bf54085ce341
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, "&gt;"); 41 ucx_buffer_puts(dest, "&gt;");
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 */

mercurial