This commit is contained in:
parent
9484f01258
commit
f6c78adbcf
@ -1,5 +1,5 @@
|
|||||||
local Range = require 'u.range'
|
local Range = require 'u.range'
|
||||||
local Renderer = require 'u.renderer'
|
local Renderer = require 'u.renderer'.Renderer
|
||||||
|
|
||||||
---@class Buffer
|
---@class Buffer
|
||||||
---@field buf number
|
---@field buf number
|
||||||
|
@ -1,10 +1,25 @@
|
|||||||
local utils = require 'u.utils'
|
local utils = require 'u.utils'
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
--- @alias Tag { kind: 'tag'; name: string, attributes: table<string, unknown>, children: Tree }
|
--- @alias Tag { kind: 'tag'; name: string, attributes: table<string, unknown>, children: Tree }
|
||||||
--- @alias Node nil | boolean | string | Tag
|
--- @alias Node nil | boolean | string | Tag
|
||||||
--- @alias Tree Node | Node[]
|
--- @alias Tree Node | Node[]
|
||||||
local TagMetaTable = {}
|
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
|
-- Renderer class
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
@ -18,20 +33,7 @@ local TagMetaTable = {}
|
|||||||
--- @field curr { lines: string[]; extmarks: RendererExtmark[] }
|
--- @field curr { lines: string[]; extmarks: RendererExtmark[] }
|
||||||
local Renderer = {}
|
local Renderer = {}
|
||||||
Renderer.__index = Renderer
|
Renderer.__index = Renderer
|
||||||
|
M.Renderer = 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
|
|
||||||
|
|
||||||
--- @param x any
|
--- @param x any
|
||||||
--- @return boolean
|
--- @return boolean
|
||||||
@ -383,4 +385,48 @@ function Renderer:get_pos_infos(pos0)
|
|||||||
return matching_tags
|
return matching_tags
|
||||||
end
|
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