Modul:Detect singular: Unterschied zwischen den Versionen

Aus skandinavien-wiki.net
(escape asterisk)
(check for multiple QIDs)
Zeile 8: Zeile 8:


local function countMatches(s, pattern)
local function countMatches(s, pattern)
local count = 0
local dbg, count = mw.ustring.gsub(s, pattern, 'ASTERISK')
_, count = mw.ustring.gsub(s, pattern, '')
mw.log(dbg)
return count
return count
end
end
Zeile 33: Zeile 33:
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
return not (hasComma or hasList or hasAnd or hasBreak or hasBullets)
return not (hasComma or hasList or hasAnd or hasBreak or hasBullets)
end
end

Version vom 8. Januar 2022, 08:19 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)
	s = mw.ustring.gsub(s,'%b[]','') -- delete all wikilinks
	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
	local hasComma = checkComma and mw.ustring.find(s, '%a,%A') 
	local hasList = plainFind(s,'hlist') or mw.ustring.find(s,'<%s*li')
	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 hasList or hasAnd or hasBreak or hasBullets)
end

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

return p