darkrc/lua/vim.moon

126 lines
4.2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- vim: set noexpandtab :miv --
-- ┌──────────────────────────┐
-- │ Generic Helper Functions │
-- └──────────────────────────┘
match_all = (str, pat, init=0) ->
s,e = str\find(pat, init)
if s then
return str\sub(s,e), match_all(str, pat, e+1)
match_lines = (str) -> match_all(str, '[^\n]+')
-- ┌──────────────────┐
-- │ Actual Functions │
-- └──────────────────┘
tree = (tab, pref='') ->
print tab.title and tab.title or '┐'
for idx, element in ipairs tab
last = idx == #tab
first = idx == 1
io.write pref
io.write last and "└─" or "├─"
switch type element
when "table"
tree element, pref .. (last and ' ' or '│ ')
else
print tostring element
pad = (str='', len) ->
str..string.rep(" ", len-#str)
import max from math
chktbl = (obj) -> error("Object is not a table", 2) if type(obj) ~= 'table'
to_tab = (obj) -> type(obj)=='table' and obj or {match_lines tostring obj}
tab = (rows) ->
-- Get Measurements
chktbl(rows)
width = {}
height = {}
for row, fields in ipairs rows
chktbl(fields)
height[row] = 1
for col, lines in ipairs fields
lines = to_tab lines
height[row] = max(height[row], #lines)
for line in *lines do
width[col] = max(width[col] or 1, #line)
fields[col] = lines
bars = [string.rep('─', i+2) for i in *width]
-- Top Line
print '┌'..table.concat(bars, '┬')..'┐'
-- Rows
for row, fields in ipairs rows
for line=1,height[row]
io.write '│' -- Outer Left Border
for col, lines in ipairs fields
io.write ' '..pad(lines[line], width[col])..' '
io.write '│' if col < #fields
print '│' -- Outer Left Border
print '├'..table.concat(bars, '┼')..'┤' unless row == #rows
print '└'..table.concat(bars, '┴')..'┘'
col = (col) -> tab([{elem} for elem in *col])
row = (row) -> tab{row}
box = (box) -> tab{{box}}
line = (len=80) -> print string.rep('─', len)
line2 = (len=80) ->
error('Length must be at least 2 characters', 2) if len < 2
print '┌'..string.rep('─', len-2)..'┐'
print '└'..string.rep('─', len-2)..'┘'
CLASS = [[
print vim.col {
'Class' -- Title
{
-- Members
}
{
-- Methods
}
}
]]
DRAW = [[
─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏
┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟
┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯
┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ┼ ┽ ┾ ┿
╀ ╁ ╂ ╃ ╄ ╅ ╆ ╇ ╈ ╉ ╊ ╋ ╌ ╍ ╎ ╏
═ ║ ╒ ╓ ╔ ╕ ╖ ╗ ╘ ╙ ╚ ╛ ╜ ╝ ╞ ╟
╠ ╡ ╢ ╣ ╤ ╥ ╦ ╧ ╨ ╩ ╪ ╫ ╬ ╭ ╮ ╯
╴ ╵ ╶ ╷ ╸ ╹ ╺ ╻ ╼ ╽ ╾ ╿ ]]
ARROWS = [[
← ↑ → ↓ ↔ ↕ ↖ ↗ ↘ ↙ ▲ ▼ ◀ ▶ ➔ ➘
➙ ➚ ➛ ➜ ➝ ➞ ➟ ➠ ➡ ➢ ➣ ➤ ➥ ➦ ↪ ↩
↚ ↛ ↜ ↝ ↞ ↟ ↠ ↡ ↢ ↣ ↤ ↦ ↥ ↧ ↨ ↫
↬ ↭ ↮ ↯ ↰ ↱ ↲ ↴ ↳ ↵ ↶ ↷ ↸ ↹ ↺ ↻
⟲ ⟳ ↼ ↽ ↾ ↿ ⇀ ⇁ ⇂ ⇃ ⇄ ⇅ ⇆ ⇇ ⇐ ⇑
⇒ ⇓ ⇔ ⇌ ⇍ ⇏ ⇕ ⇖ ⇗ ⇘ ⇙ ⇙ ⇳ ⇚ ⇛ ⇜
⇝ ⇞ ⇟ ⇟ ⇟ ⇠ ⇡ ⇢ ⇣ ⇤ ⇥ ⇦ ⇨ ⇩ ⇪ ⇧
⇫ ⇬ ⇭ ⇮ ⇯ ⇰ ⇱ ⇲ ⇴ ⇵ ⇶ ⇷ ⇸ ⇹ ⇺ ⇺
⇻ ⇼ ⇽ ⇾ ⇿ ⟰ ⟱ ⟴ ⟵ ⟶ ⟷ ⟸ ⟹ ⟽ ⟾ ⟺
⟻ ⟼ ⟿ ⤀ ⤁ ⤅ ⤂ ⤃ ⤄ ⤆ ⤇ ⤈ ⤉ ⤊ ⤋ ⤌
⤍ ⤎ ⤏ ⤐ ⤑ ⤒ ⤓ ⤔ ⤕ ⤖ ⤗ ⤘ ⤙ ⤙ ⤚ ⤛
⤜ ⤝ ⤞ ⤡ ⤢ ⤣ ⤤ ⤥ ⤦ ⤧ ⤨ ⤩ ⤪ ⤭ ⤮ ⤯
⤰ ⤱ ⤲ ⤳ ⤻ ⤸ ⤾ ⤿ ⤺ ⤼ ⤽ ⤴ ⤵ ⤶ ⤷ ⤹
⥀ ⥁ ⥂ ⥃ ⥄ ⥅ ⥆ ⥇ ⥈ ⥉ ⥒ ⥓ ⥔ ⥕ ⥖ ⥗
⥘ ⥙ ⥚ ⥛ ⥜ ⥝ ⥞ ⥟ ⥠ ⥡ ⥢ ⥣ ⥤ ⥥ ⥦ ⥧
⥨ ⥩ ⥪ ⥫ ⥬ ⥭ ⥮ ⥯ ⥰ ⥱ ⥲ ⥳ ⥴ ⥵ ⥶ ⥷
⥸ ⥹ ⥺ ⥻ ➧ ➨ ➩ ➪ ➫ ➬ ➭ ➮ ➯ ➱ ➲ ➳
➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ➾ ⬅ ⬆ ⬇ ⏎ ⬎
⬏ ⬐ ⬑ ☈ ☇ ⍃ ⍄ ⍇ ⍈ ⍐ ⍗ ⍌ ⍓ ⍍ ⍔ ⍏
⍖ ⍅ ⍆ ⬈ ⬉ ⬊ ⬋ ⬌ ⬍ ⬀ ⬁ ⬂ ⬃ ⬄ ]]
{
:tree, :box, :tab, :col, :row, :line, :line2
:CLASS, :DRAW, :ARROWS
-- Aliases
table: tab
}