silverbullet/plugs/core/Library/Std/Template.md

882 B

#meta

Implements useful template functions

-- priority: 10
-- Template API root table
template = {}
-- Template storage table
templates = {}

-- Iterates over a table/array and applies a function to each element,
-- concatenating the results
function template.each(tbl, fn)
    local result = {}
    for _, item in ipairs(tbl) do
        table.insert(result, fn(item))
    end
    return table.concat(result)
end

-- Creates a new template function from a string template
function template.new(template_str)
  -- Preprocess: strip indentation
  local lines = {}
  local split_lines = string.split(template_str, "\n")
  for _, line in ipairs(split_lines) do
    line = string.gsub(line, "^    ", "")
    table.insert(lines, line)
  end
  template_str = table.concat(lines, "\n")
  return function(obj)
    return space_lua.interpolate(template_str, obj)
  end
end