Skip to content

Commit

Permalink
Merge pull request #163 from 3rd/zuloo-html-css
Browse files Browse the repository at this point in the history
add html & css (by @zuloo)
  • Loading branch information
3rd committed Apr 28, 2024
2 parents cdf1be9 + e83e765 commit 18a8617
Show file tree
Hide file tree
Showing 4 changed files with 141 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,12 @@ require("image").setup({
only_render_image_at_cursor = false,
filetypes = { "norg" },
},
html = {
enabled = false,
},
css = {
enabled = false,
},
},
max_width = nil,
max_height = nil,
Expand Down
6 changes: 6 additions & 0 deletions lua/image/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ local default_options = {
syslang = {
enabled = true,
},
html = {
enabled = false,
},
css = {
enabled = false,
},
},
max_width = nil,
max_height = nil,
Expand Down
64 changes: 64 additions & 0 deletions lua/image/integrations/css.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
local document = require("image/utils/document")
return document.create_document_integration({
name = "css",
-- debug = true,
default_options = {
clear_in_insert_mode = false,
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "css", "sass", "scss" },
},
query_buffer_images = function(buffer)
local buf = buffer or vim.api.nvim_get_current_buf()

local parser = vim.treesitter.get_parser(buf, "css")
local root = parser:parse()[1]:root()
local query = vim.treesitter.query.parse(
"css",
'(call_expression (function_name) @name (#eq? @name "url"))'
)

local images = {}

---@diagnostic disable-next-line: missing-parameter
for id, node in query:iter_captures(root, 0) do
local capture = query.captures[id]

if capture == "name" then
---@diagnostic disable-next-line: unused-local
local start_row, start_col, end_row, end_col = node:range()
local line = vim.api.nvim_buf_get_lines(
buf,
end_row,
end_row + 1,
false
)[1]

local path = line:sub(start_col):gsub(".*url%([\"'](.-)[\"']%).*$", "%1")

-- search for path relative to webroot
if path:sub(1,1) == "/" then
path = vim.fs.find(path:sub(2), {
upward = true,
path = vim.fs.dirname(vim.api.nvim_buf_get_name(0)),
})[1]
end

if path ~= nil then
table.insert(images, {
node = node,
range = {
start_row = start_row,
start_col = start_col,
end_row = end_row,
end_col = end_col,
},
url = path,
})
end
end
end

return images
end
})
65 changes: 65 additions & 0 deletions lua/image/integrations/html.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
local document = require("image/utils/document")
return document.create_document_integration({
name = "html",
-- debug = true,
default_options = {
clear_in_insert_mode = false,
download_remote_images = true,
only_render_image_at_cursor = false,
filetypes = { "html", "xhtml", "htm" },
},
query_buffer_images = function(buffer)
local buf = buffer or vim.api.nvim_get_current_buf()

local parser = vim.treesitter.get_parser(buf, "html")
local root = parser:parse()[1]:root()
local query = vim.treesitter.query.parse(
"html",
'(attribute (attribute_name) @name (#eq? @name "src")'
.. ' (quoted_attribute_value))'
)

local images = {}

---@diagnostic disable-next-line: missing-parameter
for id, node in query:iter_captures(root, 0) do
local capture = query.captures[id]

if capture == "name" then
---@diagnostic disable-next-line: unused-local
local start_row, start_col, end_row, end_col = node:range()
local line = vim.api.nvim_buf_get_lines(
buf,
end_row,
end_row + 1,
false
)[1]

local path = line:sub(start_col):gsub(".*src=[\"'](.-)[\"'].*$", "%1")

-- search for path relative to webroot
if path:sub(1,1) == "/" then
path = vim.fs.find(path:sub(2), {
upward = true,
path = vim.fs.dirname(vim.api.nvim_buf_get_name(0)),
})[1]
end

if path ~= nil then
table.insert(images, {
node = node,
range = {
start_row = start_row,
start_col = start_col,
end_row = end_row,
end_col = end_col,
},
url = path,
})
end
end
end

return images
end
})

0 comments on commit 18a8617

Please sign in to comment.