Benutzer:Antonsusi/Spielwiese/Modul:Artikelfolge
aus Wikipedia, der freien Enzyklopädie
< Benutzer:Antonsusi | Spielwiese(Weitergeleitet von Benutzer:Antonsusi/Spielwiese/Modul:Folge)
-- Benutzer:Antonsusi/Spielwiese/Artikelfolge/Schablone
-- Benutzer:Antonsusi/Spielwiese/Artikelfolge/Vorlage
-- Spezial:Vorlagen Expandieren
-- V-Spielwiese
--
local LuaWiki = require( "Module:LuaWiki" ) local function split_newlines(s,nobreak) local ts = {} local posa = 1 while 1 do local pos, chars = s:match('()([\r\n].?)', posa) if pos then if chars == '\r\n' then pos = pos + 1 end local line = s:sub(posa, pos) if nobreak then line = line:sub(1,#line - 1) end ts[#ts+1] = line posa = pos + 1 else local line = s:sub(posa) if line ~= '' then ts[#ts+1] = line end break end end return ts end local function splitaline(str) local Data = {} local pos = 0 Data.Linkziel=""; Data.Linktext=""; Data.Extra1=""; -- enthaelt die Extraangabe in der Mitte, bei Personen oft eine Zeitspanne Data.Extra2=""; Data.Extra3=""; Data.Extra4=""; Data.Extra5=""; -- Der String soll die Form "Linkziel[=Linktext=Extra1=Extra2=Extra3=Extra4=Extra5]" haben. -- Teile ab Linktext sind optional und bleiben ggf leer. Fehlende Abgaben kann man mit "" ueberspringen. -- Lange Form ohne For-Schleife -- Mindestlaenge sind zwei Zeichen z. B. "Ei", und es darf kein Code am Anfang sein ( "<", "{" oder "[" ). if mw.ustring.len(str) < 2 then return false, Data; end if mw.ustring.sub(str,1,1) == '<' then return false, Data; end if mw.ustring.sub(str,1,1) == '[' then return false, Data; end if mw.ustring.sub(str,1,1) == '{' then return false, Data; end -- Ergaenze ein "=", um den letzten Teil leichter zu finden. str = str .. "=" ; -- Feld 1 pos = mw.ustring.find(str,'=',1,true); if pos == 1 then -- Gleichheitszeichen am Anfang - Fehler return false, Data; end if not pos then -- Bereits am Stringende - Nur ein Linkziel Data.Linkziel = str; return true, Data; end Data.Linkziel = mw.ustring.sub(str,1,pos-1); -- Feld 2 str = mw.ustring.sub(str,pos+1, -1); -- kuerzen pos = mw.ustring.find(str,'=',1,true); if not pos then -- Kein weiteres "=", der Rest ist leer return true, Data; end -- Bei pos = 1 ist Feld 2 leer ("=="), einfach ueberspringen if pos > 1 then -- Feld 2 nicht leer Data.Linktext = mw.ustring.sub(str,1,pos-1); end -- Feld 3 str = mw.ustring.sub(str,pos+1, -1); -- kuerzen pos = mw.ustring.find(str,'=',1,true); if not pos then -- Kein weiteres "=", der Rest ist leer. return true, Data; end -- Bei pos = 1 ist Feld 3 leer ("=="), einfach ueberspringen if pos > 1 then -- Feld 3 nicht leer Data.Extra1 = mw.ustring.sub(str,1,pos-1); end -- Feld 4 str = mw.ustring.sub(str,pos+1, -1); -- kuerzen pos = mw.ustring.find(str,'=',1,true); if not pos then -- kein weiteres "=", der Rest ist leer. return true, Data; end -- Bei pos = 1 ist Feld 4 leer("=="), einfach ueberspringen if pos > 1 then -- Feld 4 nicht leer Data.Extra2 = mw.ustring.sub(str,1,pos-1); end -- Feld 5 str = mw.ustring.sub(str,pos+1, -1); -- kuerzen pos = mw.ustring.find(str,'=',1,true); if not pos then -- kein weiteres "=", der Rest ist leer. return true, Data; end -- Bei pos = 1 ist Feld 5 leer("=="), einfach ueberspringen if pos > 1 then -- Feld 5 nicht leer Data.Extra3 = mw.ustring.sub(str,1,pos-1); end -- Feld 6 str = mw.ustring.sub(str,pos+1, -1); -- kuerzen pos = mw.ustring.find(str,'=',1,true); if not pos then -- kein weiteres "=", der Rest ist leer. return true, Data; end -- Bei pos = 1 ist Feld 6 leer("=="), einfach ueberspringen if pos > 1 then -- Feld 6 nicht leer Data.Extra4 = mw.ustring.sub(str,1,pos-1); end -- Feld 7 str = mw.ustring.sub(str,pos+1, -1); -- kuerzen pos = mw.ustring.find(str,'=',1,true); if not pos then -- kein weiteres "=", der Rest ist leer. return true, Data; end -- Bei pos = 1 ist Feld 7 leer("=="), einfach ueberspringen if pos > 1 then -- Feld 7 nicht leer Data.Extra5 = mw.ustring.sub(str,1,pos-1); end return true, Data; end local p = {} function p.Run(frame) local FR = frame:getParent() local tbl = {}; local isOk = true; local Daten = {}; -- nimmt die Teile einer Zeile auf local Lemma = {}; local Link = {}; local Extra1 = {}; local Extra2 = {}; local Extra3 = {}; local Extra4 = {}; local Extra5 = {}; local Tabelle = LuaWiki.transclude("Vorlage:Artikelfolge/Schablone" ) local KopfL = FR.args['KopfL'] or ""; local KopfR = FR.args['KopfR'] or ""; local Titel = FR.args['Titel'] or ""; local Seite = mw.title.getCurrentTitle(); local Artikel = Seite.text; Tabelle=mw.ustring.gsub(Tabelle,"{Kopf_L}", KopfL); Tabelle=mw.ustring.gsub(Tabelle,"{Kopf_R}", KopfR); Tabelle=mw.ustring.gsub(Tabelle,"{Titel}", Titel); local pagename =FR.args['Liste']; if not pagename then return "FEHLER!" end local page = mw.title.new(pagename); local Prev = ""; local Next = ""; local Current = ""; local Text = page:getContent(); local a, b = mw.ustring.find(Text,'<onlyinclude>') if b then Text = mw.ustring.sub(Text,b+1); end a, b = mw.ustring.find(Text,'</onlyinclude>') if b then Text = mw.ustring.sub(Text,1,a-1); end tbl = split_newlines(Text,true); local idx = 0 -- korrekte Zeilen for i,Zeile in ipairs(tbl) do isOk, Daten = splitaline(Zeile) Lemma[idx] = Daten.Linkziel; if Daten.Linkziel == Daten.Linktext or Daten.Linktext=="" then Link[idx] = "[[" .. Daten.Linkziel .. "]]"; else Link[idx] = "[[" .. Daten.Linkziel .."|" .. Daten.Linktext .."]]"; end Extra1[idx] = Daten.Extra1; Extra2[idx] = Daten.Extra2; Extra3[idx] = Daten.Extra3; Extra4[idx] = Daten.Extra4; Extra5[idx] = Daten.Extra5; idx=idx+1 ; end local found = false; for idx, txt in ipairs(Lemma) do if txt == Artikel then Tabelle=mw.ustring.gsub(Tabelle,"{Extra1}", Extra1[idx]); Tabelle=mw.ustring.gsub(Tabelle,"{Extra2}", Extra2[idx]); Tabelle=mw.ustring.gsub(Tabelle,"{Extra3}", Extra3[idx]); Tabelle=mw.ustring.gsub(Tabelle,"{Extra4}", Extra4[idx]); Tabelle=mw.ustring.gsub(Tabelle,"{Extra5}", Extra5[idx]); if idx > 1 then Prev = Link[idx-1]; else Prev = ""; end Current = Link[idx] or ""; if idx < #Link-1 then Next = Link[idx+1]; else Next = ""; end Tabelle=mw.ustring.gsub(Tabelle,'{Prev}', Prev); Tabelle=mw.ustring.gsub(Tabelle,'{Current}', Current); Tabelle=mw.ustring.gsub(Tabelle,'{Next}', Next); found = true; end end if found then return Tabelle; else return '<span class="error">[[Vorlage:Artikelfolge]]: Lemma nicht auf der Liste!</span>' end end return p --