Modul:Detect singular: Unterschied zwischen den Versionen
(fix gsub) |
(fix) |
||
Zeile 5: | Zeile 5: | ||
local function plainFind(s, sub) | local function plainFind(s, sub) | ||
return mw.ustring.find(s, sub, 1, true) | return mw.ustring.find(s, sub, 1, true) | ||
end | |||
local function countMatches(s, pattern) | |||
local count = 0 | |||
_, count = mw.ustring.gsub(s, pattern, '') | |||
return count | |||
end | end | ||
Zeile 26: | Zeile 32: | ||
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 | local hasBullets = checkBullets and countMatches(s,'*+') > 1 | ||
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:10 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 count = 0 _, count = mw.ustring.gsub(s, pattern, '') 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 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