%top { #include int depth = 0; } %language markdown %% enter section { depth += 1; } leave section { depth -= 1; } enter atx_heading { printf("\n", depth); } leave atx_heading { printf("\n", depth); } enter paragraph { printf("

"); } leave paragraph { printf("

\n"); } enter list { printf("
    "); } leave list { printf("
\n"); } enter list_item { printf("
  • "); } leave list_item { printf("
  • \n"); } enter fenced_code_block { printf("
    ");
    }
    leave fenced_code_block {
        printf("
    \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("\n"); printf("\n"); tbtraverse(fstr); printf("\n"); printf("\n"); }