Module:senseno

-- Based on Module:descendants tree

local export = {}

local pattern_escape = require("Module:string utilities").pattern_escape

local function list_index(wikitext, t_start) local text = wikitext:sub(1, t_start) local _, section_start = text:find(".*\n==") text = text:sub(section_start)

local lines = mw.ustring.gmatch(text, "\n#[#*:]*") local senseno = {} line = lines while line ~= nil do		if line:find(":") or line:find("%*") then -- skip else line = line:match("#+") local indentation = #line if indentation > #senseno then table.insert(senseno, 1) else senseno = {unpack(senseno, 1, indentation)} senseno[#senseno] = senseno[#senseno] + 1 end end

line = lines end

return senseno end

local function find_senseid(title, code, id) local content = mw.title.new(title):getContent local t_start = "" t_start = content:find("%{%{ *senseid *%| *" .. pattern_escape(code) .. " *%| *" .. pattern_escape(id) .. " *%}%}") if t_start == nil then t_start = content:find("%{%{ *sid *%| *" .. pattern_escape(code) .. " *%| *" .. pattern_escape(id) .. " *%}%}") end if t_start == nil then error("Could not find the correct senseid template in the entry "		.. title .. " (with language " .. code .. " and id '" .. id .. "'); this could be because you are in preview mode and the senseid template has not yet been saved to the page") end return table.concat(list_index(content, t_start), ".") end

function export.main(frame) local args = frame.args local code = args[1] local id = args[2] local title = args[3] title = args["title"]

return find_senseid(title, code, id) end

return export