123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336 |
- -- place this file in mod ".ldoc" directory
- local print, type, string, table, tostring, tonumber, error, pairs, ipairs
- if import then
- print = import("print")
- type = import("type")
- string = import("string")
- table = import("table")
- tostring = import("tostring")
- tonumber = import("tonumber")
- error = import("error")
- pairs = import("pairs")
- ipairs = import("ipairs")
- end
- project = "3d_armor"
- title = "3D Armor"
- format = "markdown"
- not_luadoc = true
- boilerplate = false
- wrap = false
- style = true
- favicon = "https://www.minetest.net/media/icon.svg"
- file = {
- "3d_armor/api.lua",
- ".ldoc/settings.luadoc",
- --".ldoc/armors.luadoc",
- ".ldoc/helmets.luadoc",
- ".ldoc/chestplates.luadoc",
- ".ldoc/leggings.luadoc",
- ".ldoc/boots.luadoc",
- --".ldoc/shields.luadoc",
- "shields/init.lua",
- ".ldoc/crafting.luadoc",
- }
- new_type("setting", "Settings")
- new_type("armor", "Armors")
- new_type("craft", "Craft Recipes")
- alias("helmet", "armor")
- alias("chestplate", "armor")
- alias("leggings", "armor")
- alias("boots", "armor")
- alias("shield", "armor")
- alias("grp", "group")
- -- function declarations
- local format_text
- local format_group
- custom_tags = {
- -- settings
- {
- "settype",
- title = "Type",
- hidden = true,
- },
- {
- "min",
- title = "Minimum Value",
- hidden = true,
- },
- {
- "max",
- title = "Maximum Value",
- hidden = true,
- },
- {
- "default",
- title = "Default Value",
- hidden = true,
- },
- -- craft items/tools
- {
- -- specify image basename only
- "img",
- title = "Inventory Image",
- format = function(value)
- return "<img src=\"../data/" .. value .. "\" style=\"width:32px; height:32px;\" />"
- end,
- },
- {
- -- specify full (relative or absolute) image path
- "image",
- title = "Image",
- format = function(value)
- return "<img src=\"" .. value .. "\" style=\"width:32px; height:32px;\" />"
- end,
- },
- {
- "group",
- title = "Groups",
- format = function(value)
- return format_group(value)
- end,
- },
- {
- "armorgrp",
- title = "Armor Groups",
- format = function(value)
- return format_group(value)
- end,
- },
- {
- "damagegrp",
- title = "Damage Groups",
- format = function(value)
- return format_group(value)
- end,
- },
- }
- if string then
- string.trim = function(st, delim)
- if not delim then
- delim = " "
- end
- while string.find(st, delim) == 1 do
- st = st:sub(2)
- end
- while string.sub(st, string.len(st)) == delim do
- st = st:sub(1, string.len(st)-1)
- end
- return st
- end
- string.split = function(st, delim)
- local list = {}
- local idx = string.find(st, delim)
- while idx do
- table.insert(list, st:sub(1, idx-1))
- st = st:sub(idx+1)
- idx = string.find(st, delim)
- end
- -- add remaining item
- table.insert(list, st)
- return list
- end
- end
- if table then
- if not table.copy then
- table.copy = function(orig_table)
- local new_table = {}
- for k, v in pairs(orig_table) do
- new_table[k] = v
- end
- return new_table
- end
- end
- end
- format_text = function(text, flags)
- local ret = "<"
- local ttype = "span"
- if flags.code then
- ttype = "code"
- end
- ret = ret .. ttype .. " style=\""
- if flags.size then
- ret = ret .. "font-size:" .. flags.size .. ";"
- end
- if flags.mono then
- ret = ret .. "font-family:monospace;"
- end
- if flags.italic then
- ret = ret .. "font-style:italic;"
- end
- if flags.bold then
- ret = ret .. "font-weight:bold;"
- end
- if flags.color then
- ret = ret .. "color:" .. flags.color .. ";"
- end
- if flags.bgcolor then
- ret = ret .. "background-color:" .. flags.bgcolor .. ";"
- end
- ret = ret .. "\">" .. text .. "</" .. ttype .. ">"
- return ret
- end
- format_group = function(text)
- if string then
- local idx, k, v = string.find(text, " ")
- if idx then
- text = format_text(string.sub(text, 1, idx-1) .. ": ", {mono=true, color="darkgreen"})
- .. string.sub(text, idx)
- end
- end
- return text
- end
- local function format_setting_tag(desc, value)
- return "\n- <span style=\"font-size:80%;\">`" .. desc .. ":`</span> `" .. value .. "`"
- end
- local registered = {
- settings = {},
- }
- local function setting_handler(item)
- -- avoid parsing again
- if registered.settings[item.name] then
- return item
- end
- if not ipairs or not type then
- return item
- end
- local tags = {
- {"settype", "type"},
- {"default"},
- {"min", "minimum value"},
- {"max", "maximum value"},
- }
- local def = {
- ["settype"] = format_setting_tag("type", "string"),
- }
- for _, t in ipairs(tags) do
- local name = t[1]
- local desc = t[2]
- if not desc then desc = name end
- local value = item.tags[name]
- if type(value) == "table" then
- if #value > 1 then
- local msg = item.file.filename .. " (line " .. item.lineno
- .. "): multiple instances of tag \"" .. name .. "\" found"
- if error then
- error(msg)
- elseif print then
- print("WARNING: " .. msg)
- end
- end
- if value[1] then
- def[name] = format_setting_tag(desc, value[1])
- end
- end
- end
- item.description = item.description .. "\n\n**Definition:**\n" .. def.settype
- for _, t in ipairs({def.default, def.min, def.max}) do
- if t then
- item.description = item.description .. t
- end
- end
- registered.settings[item.name] = true
- return item
- end
- function custom_display_name_handler(item, default_handler)
- if item.type == "setting" then
- item = setting_handler(item)
- end
- if item then
- return default_handler(item)
- end
- end
- local custom_see_links = {
- ["ObjectRef"] = "https://minetest.gitlab.io/minetest/class-reference/#objectref",
- ["PlayerMetaRef"] = "https://minetest.gitlab.io/minetest/class-reference/#playermetaref",
- ["ItemDef"] = "https://minetest.gitlab.io/minetest/definition-tables/#item-definition",
- ["ItemStack"] = "https://minetest.gitlab.io/minetest/class-reference/#itemstack",
- ["groups"] = "https://minetest.gitlab.io/minetest/groups/",
- ["entity_damage_mechanism"] = "https://minetest.gitlab.io/minetest/entity-damage-mechanism/",
- ["vector"] = "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector",
- }
- local function format_custom_see(name, section)
- local url = custom_see_links[name]
- if not url then
- url = ""
- end
- if not name then
- name = ""
- end
- return name, url
- end
- custom_see_handler("^(ObjectRef)$", function(name, section)
- return format_custom_see(name, section)
- end)
- custom_see_handler("^(PlayerMetaRef)$", function(name, section)
- return format_custom_see(name, section)
- end)
- custom_see_handler("^(ItemDef)$", function(name, section)
- return format_custom_see(name, section)
- end)
- custom_see_handler("^(groups)$", function(name, section)
- return format_custom_see(name, section)
- end)
- custom_see_handler("^(entity_damage_mechanism)$", function(name, section)
- return format_custom_see(name, section)
- end)
- custom_see_handler("^(ItemStack)$", function(name, section)
- return format_custom_see(name, section)
- end)
- custom_see_handler("^(vector)$", function(name, section)
- return name, "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector"
- end)
|