Module:Galeria

local p = {}

-- local function parseval ( value, parm2 ) local par = value or '' local req = parm2 or '' if par == '' then return '' else if mw.ustring.sub(par, -2) == 'px' then par = mw.ustring.sub(par, 1, mw.ustring.len(par) -2) end local pos = mw.ustring.find(par, 'x'); if req == 'p' then return par; elseif req == 'w' then if pos == nil then return par; elseif pos > 1 then return mw.ustring.sub(par, 1, pos -1); else return '' end elseif req == 'h' then if pos == nil then return ''; else return mw.ustring.sub(par, pos +1) end end end end

-- function p.gallery ( frame ) local args = mw.getCurrentFrame:getParent.args; local tagtab = {}; local instab = {}; local fmat  = args.f or args.format or ""; local mode  = args.m or args.mode or ""; local insv  = ""; local strg  = ""; tagtab [1]  = "\n"; for _, v in ipairs(args) do strg = strg .. "\006" .. v                  -- replace pipe by ACK end strg = mw.ustring.gsub( strg, "[\n]", "\006" ); -- replace CRLF by ACK local arg2 = args[2] or ".svg" if fmat == "" then                               -- when format NOT specified if args[2] ~= "" then if mw.ustring.sub (args[1], 1, 1 ) == "\n" then local inx = mw.ustring.find( arg2 .. "\n", "\n" ); arg2 = mw.ustring.sub ( arg2, 1, inx - 1 ); inx = string.lower(string.gsub(arg2,"^.*%.([^%.]*)$","%1")); local map = {svg=1, png=1, jpg=1, jpeg=1, gif=1, tif=1, tiff=1, xcf=1, pdf=1 } if not map[inx] then fmat = "2"                      -- default format="2" end end end end

for _, v in ipairs(mw.text.split(strg, "\006") ) do		if fmat == "2" then if insv == "" then insv = v;			else if v == "" then v = ""; end table.insert(instab, insv .. "| " .. v .. " " ); insv = "" end else table.insert(instab, v ) end end for i, v in ipairs( instab ) do		if v == "" or v == "+" then tagtab [1] = tagtab [1] .. "\n" else tagtab [1] = tagtab [1] .. "\n" .. v		end	end --	if     mode == 'n' then mode = 'nolines' elseif mode == 'p' then mode = 'packed' elseif mode == 'o' then mode = 'packed-overlay' elseif mode == 'h' then mode = 'packed-hover' elseif mode == 's' then mode = 'slideshow' elseif mode == 't' then mode = 'traditional' end local wide = args.w or args.width  or args.widths or ''; local high = args.h or args.height or args.heights or ''; local disp = args.d or args.dis or args.disp or args.display or ''; if wide .. high ==  and disp ~=  then wide = parseval (disp, 'w') high = parseval (disp, 'h') end tagtab [2]  = mode; tagtab [3]  = args.c or args.caption or ''; tagtab [4]  = args.p or args.perrow or ''; tagtab [5]  = wide; tagtab [6]  = high; tagtab [7]  = args.s or args.style or ''; tagtab [8]  = args.a or args.attr or args.class or ''; tagtab [9]  = args.t or args.text or ''; tagtab [10] = fmat; if fmat == '' then tagtab [10] = '1'; if mode == '' then tagtab [2] = 'nolines'; end end return mw.getCurrentFrame:expandTemplate{ title = "G/layout", args = tagtab }; end

-- function p.converse (frame) local arg = frame.args out = parseval ( arg [1], arg [2] ) return out; end

-- remove final "px" function p.getp (frame) local arg = frame.args inp = arg [1] out = parseval ( inp, "p") return out; end function p.getw (frame) local arg = frame.args inp = arg [1] out = parseval ( inp, "w") return out; end function p.geth (frame) local arg = frame.args inp = arg [1] out = parseval ( inp, "h") return out; end

return p;