Module:TitleUtil

local util_map = require("Module:MapUtil") local util_table = require('Module:TableUtil') local util_text = require('Module:TextUtil') local util_vars = require('Module:VarsUtil')

local p = {} local h = {}

function p.titleTable(title) local title = title or mw.title.getCurrentTitle.text return util_text.split(title,'/') end

function p.concatSubpage(base, extension) -- concatenate the two but don't add a / if the 2nd argument is empty or Overview if extension == 'Overview' or extension == '' or not extension then return base elseif base == '' or not base then return extension else return base .. '/' .. extension end end

function p.concatSubpageParts(base, ...) local args = {...} while next(args) do		base = p.concatSubpage(base, table.remove(args, 1)) end return base end

function p.concatSubpageArg(base, extension) if base == 'events' then base = nil end return p.concatSubpage(base, extension) end

function p.concatSubpageSystem(base, extension) local systems = mw.loadData('Module:Systems') return p.concatSubpage(base, systems[extension]) end

function p.concatSystemSubpage(base, extension) local systems = mw.loadData('Module:Systems') return p.concatSubpage(systems[base], extension) end

function p.concatSubpages(tbl, extension) for k, v in pairs(tbl) do		tbl[k] = p.concatSubpage(v, extension) end return end

function p.titleparts(str, n, s)	local tbl = util_text.split(str or mw.title.getCurrentTitle.text, '/') s = util_table.guaranteeIndex(tbl, s)	return table.concat(util_table.slice(tbl,s,s+n-1),'/') end

function p.titleslice(str, s, e)	local tbl = p.titleTable(str) s = util_table.guaranteeIndex(tbl, s)	e = util_table.guaranteeIndex(tbl, e)	return table.concat(util_table.slice(tbl,s,e),'/') end

function p.target(page) if not page then return nil end local title = mw.title.makeTitle(ns or '', page) if title.redirectTarget then return p.escape(title.redirectTarget.fullText) end return p.escape(page) end

function p.isRedirect(page) return p.target(page) ~= page end

function p.escape(page) return util_text.ucfirst(page:gsub('_', ' ')) end

function p.lowercase return mw.getCurrentFrame:expandTemplate({ title = 'lowercase' }) end

return p