MODULE:SearchParser

From Mepdata
Revision as of 00:14, 26 August 2024 by Admin (talk | contribs) (Created page with "local p = {} local letterToNs = { Q = 0, P = 120, L = 146, E = 640, } local function strafter(arg, pre) local length = mw.ustring.len(pre) if mw.ustring.sub(arg, 1, length) == pre then return mw.ustring.sub(arg, length + 1) end return nil end local function booleanOutput(val) local map = {[true] = '1', [false] = ''} return map[val] end local function namespaceIdFromEntityId(entityId) if not mw.wikibase.isValidEntityId(entityId) then return nil e...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Documentation for this module may be created at MODULE:SearchParser/doc

local p = {}

local letterToNs = {
	Q = 0,
	P = 120,
	L = 146,
	      E = 640,
}

local function strafter(arg, pre)
	local length = mw.ustring.len(pre)
	if mw.ustring.sub(arg, 1, length) == pre then
		return mw.ustring.sub(arg, length + 1)
	end
	return nil
end

local function booleanOutput(val)
	local map = {[true] = '1', [false] = ''}
	return map[val]
end

local function namespaceIdFromEntityId(entityId)
	if not mw.wikibase.isValidEntityId(entityId) then
		return nil
	end
	local first = entityId:sub(1, 1):upper()
	return letterToNs[first]
end

function p.isEntityId(frame)
	return booleanOutput(mw.wikibase.isValidEntityId(frame.args[1]))
end

function p.isEntityIdForNamespace(frame)
	local entityId = frame.args[1]
	local namespace = tonumber(frame.args[2])
	return booleanOutput(namespace == namespaceIdFromEntityId(entityId))
end

function p.getNamespaceFromEntityId(frame)
	return namespaceIdFromEntityId(frame.args[1])
end

local function _getLemmaFromInput(arg)
	for _, pre in ipairs{ "L:", "l:", "Lexeme:", "lexeme:" } do
		local lemma = strafter(arg, pre)
		if lemma then
			-- avoid T14974 when * is at the beginning
			-- if it causes problems, replace with string.gsub(lemma, '^*', '*', 1)
			return lemma
		end
	end
	return nil
end

function p.getUnescapedLemmaFromInput(frame)
	return _getLemmaFromInput(mw.text.unstripNoWiki(frame.args[1]))
end

function p.getLemmaFromInput(frame)
	local arg = _getLemmaFromInput(mw.text.unstripNoWiki(frame.args[1]))
	if arg then
		return mw.text.nowiki(arg)
	end
	return nil
end

function p.urlencode(frame)
	local arg = mw.text.unstripNoWiki(frame.args[1])
	-- some rare inputs ("-{", "}-", "<script>", etc.) will have HTML entities
	-- use arg = mw.text.decode(arg) if needed
	return mw.uri.encode(arg, frame.args[2])
end

return p