Mô đun:Disambiguation

Bách khoa toàn thư mở Wikipedia
Tài liệu mô đun[tạo]
local p = {}
local mRedirect = require('Mô đun:Redirect')
local disambiguationTemplates = mw.loadData('Mô đun:Disambiguation/templates')

local function capitalize(s)
	-- Hàm này chỉ hoạt động đối với chuỗi ký tự ASCII. Nếu wiki của bạn có
	-- bản mẫu định hướng sử dụng chuỗi Unicode, hãy sử dụng dòng được comment.
	-- viwiki chỉ sử dụng thao tác chuỗi ASCII ở đây để cải thiện hiệu suất
	return s:sub(1, 1):upper() .. s:sub(2, -1)
	-- return mw.ustring.upper(mw.ustring.sub(1, 1)) .. mw.ustring.sub(2, -1)
end

local function isDisambiguationTemplate(template)
	return disambiguationTemplates[capitalize(template)] or false
end

p.isDisambiguation = function(content)
	-- trả về false nếu không có nội dung
	if content == nil then
		return false
	end

	-- trang đổi hướng không phải là trang định hướng
	if mRedirect.getTargetFromText(content) ~= nil then
		return false
	end

	-- kiểm tra bản mẫu định hướng trong nội dung trang
	local templateNames = {}
	for template in string.gmatch(content, "{{%s*([^|}]-)%s*[|}]") do
		if isDisambiguationTemplate(template) then
			return true
		end
	end

	-- kiểm tra từ ma thuật
	if string.find(content, "__DISAMBIG__", 1, true) ~= nil then
		return true
	end

	return false
end

p._isDisambiguationPage = function(page)
	-- Kiểm tra xem tên trang có chứa "(định hướng)" hay không
	if string.find(page, "(định hướng)",0,true) ~= nil then
		return true;
	end
	-- Kiểm tra xem nội dung trang có bản mẫu định hướng hay không
	local title = mw.title.new(page)
	if not title then return false end
	local content = title:getContent()
	return p.isDisambiguation(content)
end

-- Entry points for templates
p.isDisambiguationPage = function(frame)
	local title = frame.args[1]
	return p._isDisambiguationPage(title) and "yes" or ""
end

return p