Modul:Lehensabfrage Briefspiel: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
Zeile 28: Zeile 28:
  local a=frame:callParserFunction(
  local a=frame:callParserFunction(
   '#show',lehen,
   '#show',lehen,
   '?'..attribut..'#-'
   '?'..attribut..'#'
  )
  )
  if a=='' then a='unbekannt' end
  if a=='' then a='unbekannt' end
Zeile 47: Zeile 47:
  local result=''
  local result=''
  local i=holelehenattribut(frame,ort,'Icon ist')
  local i=holelehenattribut(frame,ort,'Icon ist')
  if i~=nil then return i end
  if i~=nil then return ort.."?"..i end
  local ortbps=basepagename(ort)
  local ortbps=basepagename(ort)
  local hoi='[[Handlungsort indirekt::'..ort..'| ]]'
  local hoi='[[Handlungsort indirekt::'..ort..'| ]]'

Version vom 29. Februar 2020, 14:40 Uhr

Dokumentation und Testfälle unter Modul:Lehensabfrage Briefspiel/Doku.
local p = {}

function robusttrim(s)
 if s==nil then return '' end
 local p=string.gsub(s,'%[%[SMW::on%]%]','')
 p=string.gsub(p,'%[%[SMW::off%]%]','')
 return mw.text.trim(p)
end

function holehandlungsorte(frame,geschichte)
 if geschichte=='' then return '' end
 
  --Finde alle Handlungsorte
 local a=frame:callParserFunction(
  '#ask','[['..geschichte..']]',
  'mainlabel=-',
  '?Handlungsort ist#=',
  'limit=500',
  'searchlabel=',
  'format=list'
 )

 return mw.text.split(a,',',true);
end

function holelehenattribut(frame,lehen,attribut)
 if lehen=='' then return 'unbekannt' end
 local a=frame:callParserFunction(
  '#show',lehen,
  '?'..attribut..'#'
 )
 if a=='' then a='unbekannt' end
 return a
end

function basepagename(page)
	local parts=mw.text.split(page,':',true)
	if #parts==1 then return parts[1] end
	return parts[2]
end

function printhandlungsortesub(frame,ort,catname,visited,rekursion,enhance)
 if rekursion==0 then return '' end
 if visited[ort]~=nil then return '' end
 visited[ort]=true
 ort=mw.text.split(ort,'#',true)[1]
 local result=''
 local i=holelehenattribut(frame,ort,'Icon ist')
 if i~=nil then return ort.."?"..i end
 local ortbps=basepagename(ort)
 local hoi='[[Handlungsort indirekt::'..ort..'| ]]'
 if rekursion==7 then hoi='' end
 result=result..' [['..i..'|20px|link='..ort..']][[Kategorie:'..ortbps..'|'..catname..']]'..hoi
 if enhance then
  result='<div class="hell" style="display:inline-block;">'..result..'</div>'
 end
 local heg=frame:callParserFunction(
  '#show',ort,
  '?Vasallenlehen von#'
 )
 if heg~='' then
	local heg1=mw.text.split(heg,',',true);
	for key,value in pairs(heg1) do
		if robusttrim(value)~='' then
 			result=printhandlungsortesub(frame,value,catname,visited,rekursion-1,false)..result..'&nbsp;'
 		end
 	end
 end
 return result
end

function printhandlungsorte(frame,orte,catname)
 local result=''
 local visited={}
 for key,value in pairs(orte) do
  if robusttrim(value)~='' then
  	result=result..printhandlungsortesub(frame,value,catname,visited,7,true)
  end
 end
 return result
end

function p.Abfrage(frame)
 if (frame.args[1]==nil) then
  return "no parameter found"
 end
 local catname=robusttrim(frame.args[2])
 local geschichte=frame.args[1]
 local result=holehandlungsorte(frame,geschichte)
 return printhandlungsorte(frame,result,catname)
end

function p.Kapiteltext(frame)
 if (frame.args[1]==nil) then
  return "no parameter found"
 end
 local kapitel=robusttrim(frame.args[1])
 local result=''
 local k=tonumber(kapitel)
 if (k>=-100)and(k<-10) then result="Vorgeschichte "..tostring(k+101) end
 if (k>=-10)and(k<1) then result="Prolog "..tostring(k+11) end
 if (k>=1)and(k<97) then result="Kapitel "..tostring(k) end
 if (k==97) then result="Epilog" end
 if (k==98) then result="Anhang" end
 if (k>=99) then result="Folgehandlung "..tostring(k-98) end
 return result
end

function p.KapiteltextKurz(frame)
 if (frame.args[1]==nil) then
  return "no parameter found"
 end
 local kapitel=robusttrim(frame.args[1])
 local result=''
 local k=tonumber(kapitel)
 if (k>=-100)and(k<-10) then result="V"..tostring(k+101) end
 if (k>=-10)and(k<1) then result="P"..tostring(k+11) end
 if (k>=1)and(k<97) then result="K"..tostring(k) end
 if (k==97) then result="E" end
 if (k==98) then result="A" end
 if (k>=99) then result="F"..tostring(k-98) end
 return result
end

return p