mirror of https://github.com/Hilbis/Hilbish
fix(commands/doc): fix title rendering, highlight codeblocks
parent
f3eac9f1c3
commit
42d86f2d37
|
@ -4,6 +4,7 @@ local fs = require 'fs'
|
||||||
local lunacolors = require 'lunacolors'
|
local lunacolors = require 'lunacolors'
|
||||||
local Greenhouse = require 'nature.greenhouse'
|
local Greenhouse = require 'nature.greenhouse'
|
||||||
local Page = require 'nature.greenhouse.page'
|
local Page = require 'nature.greenhouse.page'
|
||||||
|
local docfuncs = require 'nature.doc'
|
||||||
|
|
||||||
commander.register('doc', function(args, sinks)
|
commander.register('doc', function(args, sinks)
|
||||||
local moddocPath = hilbish.dataDir .. '/docs/'
|
local moddocPath = hilbish.dataDir .. '/docs/'
|
||||||
|
@ -89,7 +90,7 @@ Available sections: ]] .. table.concat(modules, ', ')
|
||||||
local size = terminal.size()
|
local size = terminal.size()
|
||||||
self.region = {
|
self.region = {
|
||||||
width = size.width,
|
width = size.width,
|
||||||
height = size.height - 2
|
height = size.height - 1
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
gh:resize()
|
gh:resize()
|
||||||
|
@ -101,12 +102,13 @@ Available sections: ]] .. table.concat(modules, ', ')
|
||||||
offset = self.specialOffset
|
offset = self.specialOffset
|
||||||
workingPage = self.specialPage
|
workingPage = self.specialPage
|
||||||
end
|
end
|
||||||
|
local size = terminal.size()
|
||||||
|
|
||||||
self.sink:write(ansikit.getCSI(self.region.height + 1 .. ';1', 'H'))
|
self.sink:write(ansikit.getCSI(size.height - 1 .. ';1', 'H'))
|
||||||
self.sink:write(ansikit.getCSI(0, 'J'))
|
self.sink:write(ansikit.getCSI(0, 'J'))
|
||||||
if not self.isSpecial then
|
if not self.isSpecial then
|
||||||
if args[1] == 'api' then
|
if args[1] == 'api' then
|
||||||
self.sink:writeln(lunacolors.reset(string.format('%s', workingPage.title)))
|
self.sink:writeln(workingPage.title)
|
||||||
self.sink:write(lunacolors.format(string.format('{grayBg} ↳ {white}{italic}%s {reset}', workingPage.description or 'No description.')))
|
self.sink:write(lunacolors.format(string.format('{grayBg} ↳ {white}{italic}%s {reset}', workingPage.description or 'No description.')))
|
||||||
else
|
else
|
||||||
self.sink:write(lunacolors.reset(string.format('Viewing doc page %s', moddocPath)))
|
self.sink:write(lunacolors.reset(string.format('Viewing doc page %s', moddocPath)))
|
||||||
|
@ -115,17 +117,17 @@ Available sections: ]] .. table.concat(modules, ', ')
|
||||||
end
|
end
|
||||||
local backtickOccurence = 0
|
local backtickOccurence = 0
|
||||||
local function formatDocText(d)
|
local function formatDocText(d)
|
||||||
return lunacolors.format(d:gsub('`', function()
|
return d:gsub('```(%w+)\n(.-)```', function(lang, text)
|
||||||
backtickOccurence = backtickOccurence + 1
|
return docfuncs.renderCodeBlock(text)
|
||||||
if backtickOccurence % 2 == 0 then
|
end)
|
||||||
return '{reset}'
|
--[[
|
||||||
else
|
return lunacolors.format(d:gsub('`(.-)`', function(t)
|
||||||
return '{underline}{green}'
|
return docfuncs.renderCodeBlock(t)
|
||||||
end
|
|
||||||
end):gsub('\n#+.-\n', function(t)
|
end):gsub('\n#+.-\n', function(t)
|
||||||
local signature = t:gsub('<.->(.-)</.->', '{underline}%1'):gsub('\\', '<')
|
local signature = t:gsub('<.->(.-)</.->', '{underline}%1'):gsub('\\', '<')
|
||||||
return '{bold}{yellow}' .. signature .. '{reset}'
|
return '{bold}{yellow}' .. signature .. '{reset}'
|
||||||
end))
|
end))
|
||||||
|
]]--
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
local lunacolors = require 'lunacolors'
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
function M.highlight(text)
|
||||||
|
return text:gsub('\'.-\'', lunacolors.yellow)
|
||||||
|
--:gsub('%-%- .-', lunacolors.black)
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.renderCodeBlock(text)
|
||||||
|
local longest = 0
|
||||||
|
local lines = string.split(text:gsub('\t', ' '), '\n')
|
||||||
|
|
||||||
|
for i, line in ipairs(lines) do
|
||||||
|
local len = line:len()
|
||||||
|
if len > longest then longest = len end
|
||||||
|
end
|
||||||
|
|
||||||
|
for i, line in ipairs(lines) do
|
||||||
|
lines[i] = M.highlight(line:sub(0, longest))
|
||||||
|
.. string.rep(' ', longest - line:len())
|
||||||
|
end
|
||||||
|
|
||||||
|
return '\n' .. lunacolors.format('{greyBg}' .. table.concat(lines, '\n')) .. '\n'
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
Loading…
Reference in New Issue