2.3 KiB
tree-sitter-tumblr
A tree-sitter grammar for Tumblr theme template syntax. The repository also ships filetype detection, queries, and the build glue Neovim needs, so you can install it directly as a plugin.
The grammar recognises the structure of theme files (variables, block
tags, attributes, lang: tags, prefixed forms, size suffixes) and
treats everything else as opaque content. Surrounding HTML is parsed
via injection, which in turn injects CSS into <style> and JS into
<script> through HTML's own queries.
Install (Neovim)
The parser binary lives at parser/tumblr.so and is gitignored, so
every install path needs a build step that runs make.
lazy.nvim
{
"https://git.owall.dev/warg/tree-sitter-tumblr",
build = "make",
}
vim.pack
vim.api.nvim_create_autocmd("PackChanged", {
callback = function(ev)
if ev.data.spec.name ~= "tree-sitter-tumblr" then return end
if ev.data.kind == "install" or ev.data.kind == "update" then
vim.system({ "make" }, { cwd = ev.data.path }):wait()
end
end,
})
vim.pack.add({
{ src = "https://git.owall.dev/warg/tree-sitter-tumblr" },
})
Manual
git clone https://git.owall.dev/warg/tree-sitter-tumblr /path/to/repo
cd /path/to/repo && make
vim.opt.runtimepath:append("/path/to/repo")
Injections
For HTML, CSS, and JS to highlight inside theme files, those parsers
need to be on runtimepath too. With nvim-treesitter:
:TSInstall html css javascript
Filetype detection
Files are recognised as tumblr by extension or by double-extension:
*.tumblr*.tumblr.html
Development
tree-sitter generate # regenerate src/parser.c from grammar.js
tree-sitter test # run the test corpus under test/corpus/
make # build parser/tumblr.so
The known-name lists in queries/tumblr/highlights.scm were extracted
from the official Tumblr theme docs. They drive richer highlighting
(@variable.builtin, @function.builtin) for documented names while
unknown names still parse and highlight as generic captures.
License
Apache-2.0. See LICENSE for the full text and NOTICE for
third-party attributions.