Modul:Detect singular: Unterschied zwischen den Versionen

Aus skandinavien-wiki.net
(an entry in a list should always be singular, also)
(simplify logic a bit)
Zeile 25: Zeile 25:
end
end
if plainFind(s,'forcedetectplural') then -- magic data string to return false
if plainFind(s,'forcedetectplural') then -- magic data string to return false
return false
end
-- count number of list items
local numListItems = countMatches(s,'<%s*li')
-- if exactly one, then singular, if more than one, then plural
if numListItems == 1 then
return true
end
if numListItems > 1 then
return false
return false
end
end
-- replace all wikilinks with fixed string
-- replace all wikilinks with fixed string
s = mw.ustring.gsub(s,'%b[]','WIKILINK')  
s = mw.ustring.gsub(s,'%b[]','WIKILINK')  
-- replace all list items with a fixed string
s, numListItems = mw.ustring.gsub(s,'<%s*li%s*>.-<%s*/li%s*>','<li>LISTITEM</li>')
local hasComma = checkComma and mw.ustring.find(s, '%a,%s')  
local hasComma = checkComma and mw.ustring.find(s, '%a,%s')  
local hasMultipleListElements = numListItems > 1
local hasAnd = mw.ustring.find(s,'%Aand%A')
local hasAnd = mw.ustring.find(s,'%Aand%A')
local hasBreak = mw.ustring.find(s,'<%s*br')
local hasBreak = mw.ustring.find(s,'<%s*br')
local hasBullets = checkBullets and countMatches(s,'%*+') > 1
local hasBullets = checkBullets and countMatches(s,'%*+') > 1
local multipleQids = mw.ustring.find(s,'Q%d+[%p%s]+Q%d+') -- has multiple QIDs in a row
local multipleQids = mw.ustring.find(s,'Q%d+[%p%s]+Q%d+') -- has multiple QIDs in a row
return not (hasComma or hasMultipleListElements or hasAnd or hasBreak or hasBullets or multipleQids)
return not (hasComma or hasAnd or hasBreak or hasBullets or multipleQids)
end
end



Version vom 8. Januar 2022, 09:13 Uhr

Die Dokumentation für dieses Modul kann unter Modul:Detect singular/doc erstellt werden

local p = {}
local getArgs = require('Module:Arguments').getArgs
local yesNo = require('Module:Yesno')

local function plainFind(s, sub)
	return mw.ustring.find(s, sub, 1, true)
end

local function countMatches(s, pattern)
	local dbg, count = mw.ustring.gsub(s, pattern, 'ASTERISK')
	mw.log(dbg)
	return count
end

function p._main(args)
	local checkComma = not yesNo(args.no_comma,true)
	local checkBullets = yesNo(args.bullets,true)
	local s = args[1]  -- the input string
	if not s then
		return nil -- empty input returns nil
	end
	s = tostring(s)
	if plainFind(s,'forcedetectsingular') then -- magic data string to return true
		return true
	end
	if plainFind(s,'forcedetectplural') then -- magic data string to return false
		return false
	end
	-- count number of list items
	local numListItems = countMatches(s,'<%s*li')
	-- if exactly one, then singular, if more than one, then plural
	if numListItems == 1 then
		return true
	end
	if numListItems > 1 then
		return false
	end
	-- replace all wikilinks with fixed string
	s = mw.ustring.gsub(s,'%b[]','WIKILINK') 
	local hasComma = checkComma and mw.ustring.find(s, '%a,%s') 
	local hasAnd = mw.ustring.find(s,'%Aand%A')
	local hasBreak = mw.ustring.find(s,'<%s*br')
	local hasBullets = checkBullets and countMatches(s,'%*+') > 1
	local multipleQids = mw.ustring.find(s,'Q%d+[%p%s]+Q%d+') -- has multiple QIDs in a row
	return not (hasComma or hasAnd or hasBreak or hasBullets or multipleQids)
end

function p.main(frame)
	local args = getArgs(frame)
	if p._main(args) then
		return 1
	end
	return ""
end

return p