95 lines
1.3 KiB
Plaintext
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");
|
|
}
|