tbsp/test/convert.tbsp
2024-09-15 14:14:32 +02:00

95 lines
1.3 KiB
Plaintext

%top {
#include <stdio.h>
int depth = 0;
}
%language markdown
%%
enter section {
depth += 1;
}
leave section {
depth -= 1;
}
enter atx_heading {
printf("<h%d>\n", depth);
}
leave atx_heading {
printf("</h%d>\n", depth);
}
enter paragraph {
printf("<p>");
}
leave paragraph {
printf("</p>\n");
}
enter list {
printf("<ol>");
}
leave list {
printf("</ol>\n");
}
enter list_item {
printf("<li>");
}
leave list_item {
printf("</li>\n");
}
enter fenced_code_block {
printf("<pre>");
}
leave fenced_code_block {
printf("</pre>\n");
}
enter inline {
char * text = tbget_text;
printf(text);
free(text);
}
enter code_fence_content {
char * text = tbget_text;
printf(text);
free(text);
}
%%
// @BAKE g++ -o $*.out $@ $(pkg-config --cflags --libs tree-sitter) -ltree-sitter-markdown -ggdb
signed main(int argc, char * * argv) {
if (argc < 2) {
return 1;
}
FILE* f = fopen(argv[1], "r");
if (!f) {
return 2;
}
fseek(f, 0, SEEK_END);
int flen = ftell(f);
rewind(f);
char fstr[flen+1];
fstr[flen] = '\00';
fread(fstr, flen, sizeof(char), f);
fclose(f);
printf("-- meta: %d chars\n", flen);
printf("<html>\n");
printf("<body>\n");
tbtraverse(fstr);
printf("</body>\n");
printf("</html>\n");
}