• Wunschlistenfunktionen
 'number' liefert die Anzahl der Links auf einer Seite
 'links' liefert eine Zufallsauswahl an Rotlinks, die weder ':' noch '|' enthalten,
         aus einer Seite zurück.

 Parameter 1: Name der Seite, wenn leer, wird die aktuelle Seite verwendet
 Parameter 2: Blockgröße. Die Rotlinks werden in Blöcke dieser Größe eingeteilt,
              dann wird aus jedem Block ein Rotlink zufällig ausgewählt.
              Wenn leer, dann 300. Wenn Blockgröße < 20, dann 20. Wenn Bockgröße > 5000, dann 5000

p = {}
function p.number (frame)

	local title
	
--  Bei diesem Konstrukt hat die Parameter-Übergabe nicht funktioniert
--	if frame:getParent().args[1] and frame:getParent().args[1] ~= "" then
--		title = mw.title.new( frame:getParent().args[1])
--	else
--		title = mw.title.getCurrentTitle()
--	end

--  Hier habe ich stattdessen das Konstrukt aus der unteren "function p.links (frame)" genommen.
--	Das scheint zu funktionieren
	if frame.args[1] and frame.args[1] ~= "" then
	 title = mw.title.new(frame.args[1])
	else
	 title = mw.title.getCurrentTitle()
	end
	
	if title.exists then
		local content = mw.ustring.match (title:getContent(), "<!%-%- Beginn -%-%->.*<!%-%- Ende -%-%->")
		content = mw.ustring.gsub( content, '<!%-%-.-%-%->', '' )
		content = mw.ustring.gsub( content, '{{.-}}', '' )
		content = mw.ustring.gsub( content, '<nowiki>.-</nowiki>', '' )
		content = mw.ustring.gsub( content, '<sup>.-</sup>', '' )
		content = mw.ustring.gsub( content, '<ref>.-</ref>', '' )		
	--	content = mw.ustring.gsub( content, '<ref[ ]*name[^>]*>.-</ref>', '' )
		content = mw.ustring.gsub( content, '<pre[^>]->.-</pre>', '' )		
		content = mw.ustring.gsub( content, '[(][^)]*[)]', '' )

		local links = 0	
		if content then
			for _, _ in string.gmatch (content, "[[][[][^]]*[]][]]") do
				links = links + 1
			end
		end
		return links
	else
		return "Error: Die Seite \"" .. frame:getParent().args[1] .. "\" existiert nicht."
	end
end


function p.links (frame)


 math.randomseed(os.time())
 math.random()

 local title
 local block

 if frame.args[1] and frame.args[1] ~= "" then
  title = mw.title.new(frame.args[1])
 else
  title = mw.title.getCurrentTitle()
 end

 if frame.args[2] and frame.args[2] ~= "" then
  block = tonumber(frame.args[2])
 else
  block = 300
 end

 -- reasonable block size
 if block < 20  then block = 20 end
 if block > 5000 then block = 5000 end

 if title.exists then

  local content = title:getContent()
  if not content then

   return "Error: Die Seite \"" .. frame.args[1] .. "\" ist leer."

  else

   content = mw.ustring.gsub( content, '<!%-%-.-%-%->', '' )
   content = mw.ustring.gsub( content, '{{.-}}', '' )
   content = mw.ustring.gsub( content, '<nowiki>.-</nowiki>', '' )
   content = mw.ustring.gsub( content, '<sup>.-</sup>', '' )
   content = mw.ustring.gsub( content, '<ref>.-</ref>', '' )		
   content = mw.ustring.gsub( content, '<pre[^>]->.-</pre>', '' )		
   content = mw.ustring.gsub( content, '[(][^)]*[)]', '' )

   local idx = 0
   local randomIdx
   local line = 0
   local words = ""
   local vorlage = "vereinfacht"

   randomIdx = math.random(1,block - 5)  -- reserve some entries for check-exist

   for line in string.gmatch (content, "\n([^\n]*)") do

    if line ~= nil then

     if line:match("^==") then

      if line:match("^===%s*Formatvorlagen") then
       return words
      end
      if line:match("^==%s*Substantive") then
       words = words .. "''[[Wiktionary:Wunschliste#Substantive|Substantive]]:'' "
       vorlage = "Substantiv_vereinfacht"
      end
      if line:match("^==%s*Eigennamen") then
       words = words .. "''[[Wiktionary:Wunschliste#Eigennamen,_Toponyme|Eigennamen, Toponyme]]:'' "
       vorlage = "vereinfacht"
      end
      if line:match("^==%s*Verben") then
       words = words .. "''[[Wiktionary:Wunschliste#Verben|Verben]]:'' "
       vorlage = "Verb_vereinfacht"
      end
      if line:match("^==%s*Adjektive") then
       words = words .. "''[[Wiktionary:Wunschliste#Adjektive,_Adverbien,_Partizipien|Adjektive, Adverbien, Partizipien]]:'' "
       vorlage = "Adjektiv_vereinfacht"
      end
      if line:match("^==%s*Sonstiges") then
       words = words .. "''[[Wiktionary:Wunschliste#Sonstiges|Sonstiges]]:'' "
       vorlage = "vereinfacht"
-- Trick, denn sonstige gibt es ggf. nicht so viele
       if randomIdx < idx then
        randomIdx = math.random(idx + 10,idx + 50)
       end
      end

     else


      local wlink
      for wlink in string.gmatch (line, "%[%[([^%]%|:]*)%]%]") do
       idx = idx + 1
       if idx == randomIdx then
        local entry = frame:expandTemplate{ title = 'edit', args = { wlink, vorlage, " • " } }
        if entry:match("preload=") then
         words = words .. entry
        else
         randomIdx = randomIdx + 1   -- if entry already exists, try next
        end
       end
       if idx >= block then
        idx = 0
        randomIdx = math.random(1,block - 5)
       end
      end


     end
    end

   end
   return words
  end

 else
  return "Error: Die Seite \"" .. frame.args[1] .. "\" existiert nicht."
 end
end

return p