This commit is contained in:
parent
9484f01258
commit
f6c78adbcf
@ -1,5 +1,5 @@
|
||||
local Range = require 'u.range'
|
||||
local Renderer = require 'u.renderer'
|
||||
local Renderer = require 'u.renderer'.Renderer
|
||||
|
||||
---@class Buffer
|
||||
---@field buf number
|
||||
|
@ -1,10 +1,25 @@
|
||||
local utils = require 'u.utils'
|
||||
|
||||
local M = {}
|
||||
|
||||
--- @alias Tag { kind: 'tag'; name: string, attributes: table<string, unknown>, children: Tree }
|
||||
--- @alias Node nil | boolean | string | Tag
|
||||
--- @alias Tree Node | Node[]
|
||||
local TagMetaTable = {}
|
||||
|
||||
--- @param name string
|
||||
--- @param attributes? table<string, any>
|
||||
--- @param children? Node | Node[]
|
||||
--- @return Tag
|
||||
function M.h(name, attributes, children)
|
||||
return setmetatable({
|
||||
kind = 'tag',
|
||||
name = name,
|
||||
attributes = attributes or {},
|
||||
children = children,
|
||||
}, TagMetaTable)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Renderer class
|
||||
--------------------------------------------------------------------------------
|
||||
@ -18,20 +33,7 @@ local TagMetaTable = {}
|
||||
--- @field curr { lines: string[]; extmarks: RendererExtmark[] }
|
||||
local Renderer = {}
|
||||
Renderer.__index = Renderer
|
||||
|
||||
--- function h(name: string, attributes: table<string, unknown>, children: Node | Node[]): Node
|
||||
--- @param name string
|
||||
--- @param attributes? table<string, any>
|
||||
--- @param children? Node | Node[]
|
||||
--- @return Tag
|
||||
function Renderer.h(name, attributes, children)
|
||||
return setmetatable({
|
||||
kind = 'tag',
|
||||
name = name,
|
||||
attributes = attributes or {},
|
||||
children = children,
|
||||
}, TagMetaTable)
|
||||
end
|
||||
M.Renderer = Renderer
|
||||
|
||||
--- @param x any
|
||||
--- @return boolean
|
||||
@ -383,4 +385,48 @@ function Renderer:get_pos_infos(pos0)
|
||||
return matching_tags
|
||||
end
|
||||
|
||||
return Renderer
|
||||
--------------------------------------------------------------------------------
|
||||
-- TagWriter class
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
--- @class TagWriter
|
||||
--- @field private nodes Node[]
|
||||
local TagWriter = {}
|
||||
TagWriter.__index = TagWriter
|
||||
M.TagWriter = TagWriter
|
||||
|
||||
function TagWriter.new()
|
||||
local self = setmetatable({ nodes = {} }, TagWriter)
|
||||
return self
|
||||
end
|
||||
|
||||
--- @param nodes Tree
|
||||
--- @return TagWriter
|
||||
function TagWriter:put(nodes)
|
||||
table.insert(self.nodes, nodes)
|
||||
return self
|
||||
end
|
||||
|
||||
--- @param name string
|
||||
--- @param attributes? table<string, any>
|
||||
--- @param children? Node | Node[]
|
||||
--- @return TagWriter
|
||||
function TagWriter:put_h(name, attributes, children)
|
||||
local tag = M.h(name, attributes, children)
|
||||
table.insert(self.nodes, tag)
|
||||
return self
|
||||
end
|
||||
|
||||
--- @param fn fun(TagWriter): any
|
||||
--- @return TagWriter
|
||||
function TagWriter:nest(fn)
|
||||
local nested_writer = TagWriter.new()
|
||||
fn(nested_writer)
|
||||
table.insert(self.nodes, nested_writer.nodes)
|
||||
return self
|
||||
end
|
||||
|
||||
--- @return Tree
|
||||
function TagWriter:tree() return self.nodes end
|
||||
|
||||
return M
|
||||
|
Loading…
x
Reference in New Issue
Block a user