Modul:Detect singular: Unterschied zwischen den Versionen

Aus skandinavien-wiki.net
(count the number of list elements)
(an entry in a list should always be singular, also)
Zeile 21: Zeile 21:
end
end
s = tostring(s)
s = tostring(s)
s = mw.ustring.gsub(s,'%b[]','WIKILINK') -- replace all wikilinks with string
if plainFind(s,'forcedetectsingular') then -- magic data string to return true
if plainFind(s,'forcedetectsingular') then -- magic data string to return true
return true
return true
Zeile 28: Zeile 27:
return false
return false
end
end
-- replace all wikilinks with fixed string
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 = countMatches(s,'<%s*li') > 1
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')

Version vom 8. Januar 2022, 09:07 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
	-- replace all wikilinks with fixed string
	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 hasMultipleListElements = numListItems > 1
	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 hasMultipleListElements 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