diff --git a/Cargo.lock b/Cargo.lock index f0b1daa..d7caff6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2566,8 +2566,10 @@ dependencies = [ "tree-sitter-cmake", "tree-sitter-containerfile", "tree-sitter-cpp", + "tree-sitter-css", "tree-sitter-cuda", "tree-sitter-go", + "tree-sitter-html", "tree-sitter-javascript", "tree-sitter-json", "tree-sitter-lua", @@ -3794,6 +3796,16 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "tree-sitter-css" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5cbc5e18f29a2c6d6435891f42569525cf95435a3e01c2f1947abcde178686f" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-cuda" version = "0.21.1" @@ -3814,6 +3826,16 @@ dependencies = [ "tree-sitter-language", ] +[[package]] +name = "tree-sitter-html" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261b708e5d92061ede329babaaa427b819329a9d427a1d710abb0f67bbef63ee" +dependencies = [ + "cc", + "tree-sitter-language", +] + [[package]] name = "tree-sitter-javascript" version = "0.25.0" diff --git a/Cargo.toml b/Cargo.toml index e49da58..589ccaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -233,6 +233,14 @@ tree-sitter-md = "0.5" # uses the in-repo overlay `builtin/queries/latex/highlights.scm` (the first # such overlay; `include_str!`'d in `crate::syntax::BUILTIN_LANGUAGES`). codebook-tree-sitter-latex = "0.6" +# Web grammars: HTML + CSS (`.html`/`.htm`/`.xhtml`, `.css`). The official +# tree-sitter-org grammars; both export `LANGUAGE` + query constants over +# `tree-sitter-language 0.1` (shared ABI crate, `tree-sitter` dev-only), so no +# overlay is needed. HTML's `INJECTIONS_QUERY` lights up ` — `let` (JS keyword) at col 8. + let src = b"\n\n"; + let mut buf = Buffer::new(BufferId::next(), "page.html"); + buf.apply_edit(EditOp::Insert { pos: 0, bytes: src }) + .unwrap(); + let view = ParseView::new(&buf, language, "html".to_owned()); + let handle = view.handle(); + let _vid = buf.attach_view(Box::new(view)); + let mut req = handle.make_request(); + req.injection_aliases = reg.injection_alias_snapshot(); + let bundle = crate::syntax::run_parse(req).expect("html parse"); + handle.install(reg.resolve_layer_queries(&bundle)); + + let mut hv = SyntaxHighlightView::new(handle, reg.theme()); + let (rows, cols) = (2usize, 60usize); + let mut backing: Vec = vec![Cell::default(); rows * cols]; + let mut grid = CellGrid { + cells: &mut backing, + stride: cols as u32, + size: CellSize::new(rows as u32, cols as u32), + }; + let viewport = Viewport { + buffer_start: 0, + buffer_end: u64::MAX, + cell_origin: CellCoord::new(0, 0), + cell_size: CellSize::new(rows as u32, cols as u32), + gutter_w: 0, + }; + let registry = buf; + hv.render(®istry, viewport, &mut grid); + + // Inside