%top { #include //#define TBDEBUG 1 #define print puts 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 { print("

"); } leave paragraph { print("

\n"); } enter list { print("
    "); } leave list { print("
\n"); } enter list_item { print("
  • "); } leave list_item { print("
  • \n"); } enter fenced_code_block { print("
    ");
    }
    leave fenced_code_block {
        print("
    \n"); } enter inline { char * text = GET_TBTEXT; print(text); free(text); } enter code_fence_content { char * text = GET_TBTEXT; print(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); print("\n"); print("\n"); tbtraverse(fstr); print("\n"); print("\n"); }