Moduł:Sandbox/Draco flavus/TestFields3

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Sandbox/Draco flavus/TestFields3/opis

function FindFields3( frame )

-- Wywołanie: {{#invoke: Sandbox/Draco flavus/TestFields2 | FindFields2 | Ostatnia brygada | pattern1 | pattern2| pattern3 | … }}
-- Przeznaczenie znajduje na jakiejś stronie szablon {{:Dane tekstu}} kopiuje go, ale podmienia lub dodaje dodatkowe pola
-- tj. te wymienione w dalszych parametrach (pattern1, pattern2, pattern3 … )
-- Wynik: na nowo ewaluowany szablon {{Dane tekstu}}
-- pola szablonu źródłowego {{Dane tekstu}} nie muszą być w osobnej linii (tak zazwyczaj robimy dla przejrzystości, ale nie jest to wymóg techniczny)
-- Na przykład chcąc zrezygnować z okładki napiszemy | okładka = | strona z okładką =
-- chcąc dodać pole pochodzenie napiszemy | pochodzenie = tutaj skąd pochodzi
-- UWAGA by zapobiec ewaluacji szablonu podawanego jako jeden z argumentów np. inne = {{epub}} należy wstawić pipesign po parze nawiasów
-- a więc inne = {{|epub}}


    local PageResult = ""
    local PageName = frame.args[1]
    local PageContent= mw.title.new(PageName):getContent()
    local i = 0
    local j = 0
    local k = ""
    local v = ""
	i, j =  string.find(PageContent, "%b{}"  )
   	PageResult = " " .. string.sub(PageContent, i, j-2):gsub("[^|]*","",1) .. "|"
   	PageResult = PageResult:gsub("%b{}",
   		function(s1) return string.gsub(s1,"|", "🐉") end)
   	PageResult = PageResult:gsub("%b[]",
   		function(s1) return string.gsub(s1,"|", "🐉") end)
   	for k,v in pairs(frame.args) do
   		if k ~= 1
   		then
			if (string.find(PageResult, "| *" .. k .." *=[^|]*") ~= nil)
			then
				PageResult=PageResult:gsub("| *" .. k .. " *=[^|]*", "| " .. k .. " = " .. v:gsub("^%s+",""):gsub("|","🐉")  )
			else
				PageResult = PageResult  .. k .. " = " .. v:gsub("^%s+",""):gsub("|","🐉") .." |".. string.char(10)
			end
		end
   	end
   	PageResult = PageResult:gsub("🐉","|")
   	PageResult = PageResult:gsub("{{|","{{")
   	PageResult = PageResult:gsub("<|","<")
   	PageResult = PageResult:gsub("|\n?$","\n")
   	return frame:preprocess(frame:preprocess("{{Dane tekstu" .. PageResult .. "}}"))
	-- return PageResult
end


local p = {}
function p.FindFields2( frame )
    return  FindFields3( frame:getParent() )
end
return p