Модуль:Платформы

Материал из ВикиФур
Перейти к: навигация, поиск
local p={} local d local s=require('Модуль:Работа со строками') local str_replace=s.str_replace p.map=false p.platforms_gallery='<center>{{#tag:gallery|%platforms%|caption="[[Игровые платформы|Платформы]]"|widths=50px|heights=50px}}</center>'; p.platform_template='Файл:%image%{{!}}%link%<sup>[[:Категория:%category%|К]]</sup>%categories%' p.SRC_KEY='_list' function p.expand_platforms_from_template(frame) return p.expand_platforms_from_frame(frame:getParent()) end function p.expand_platforms_from_frame(frame) local result=p.expand_platforms(p.list_from_args(frame.args), true) -- return result return frame:preprocess(result) end function p.test_platforms(frame) p.load_data(frame.args[p.SRC_KEY]) local result=p.expand_platforms(p.list_all(), false) -- return result return frame:preprocess(result) end function p.expand_platforms_from_console(list) list=p.list_from_args(list) return p.expand_platforms(list, true) end function p.list_all(src) p.load_data(src) p.map_platforms() local list={} for i, v in pairs(d.platforms) do list[p.normal_code(i)]=true end return list end function p.list_from_args(args) p.load_data(args[p.SRC_KEY]) p.map_platforms() local list={}, platform_code; for i, v in pairs(args) do if i~=p.SRC_KEY then if string.match(i, '^%d+$') then platform_code=v else platform_code=i end platform_code=p.normal_code(platform_code) if not list[platform_code] then list[platform_code]=true end end end return list end function p.load_data(src) if d then return end if not src then src='Модуль:Платформы/Список' end d=require(src) end function p.normalize_list(list) p.map_platforms() local platform_code local normal_list={} for i, v in pairs(list) do platform_code=i if p.map[platform_code] then normal_list[p.map[platform_code]]=d.platforms[p.map[platform_code]] end end return normal_list end function p.normal_code(code) -- не учитывается заглавное/мелкое написание, пробелы, подчёркивания, дефисы local res = mw.ustring.lower(code) res = str_replace(res, ' ', '') res = str_replace(res, '_', '') res = str_replace(res, '-', '') return res end function p.expand_platforms(list, cat) list=p.normalize_list(list) local result='' for i, v in ipairs(d.platform_order) do if list[v] then result=result..p.expand_platform(list[v], cat).."\n" list[v]=nil end end for i, v in pairs(list) do result=result..p.expand_platform(v, cat).."\n" end result=str_replace(p.platforms_gallery, '%platforms%', result); return result end function p.expand_platform(data, cat) result=p.platform_template; result=str_replace(result, '%link%', p.get_platform_link(data)) result=str_replace(result, '%category%', p.get_platform_category(data)) result=str_replace(result, '%image%', p.get_platform_image(data)) if cat then result=str_replace(result, '%categories%', p.expand_categories(data)) else result=str_replace(result, '%categories%', '') end return result end function p.expand_categories(data) return '[[Категория:'..p.get_platform_category(data)..']]' end function p.map_platforms() if p.map~=false then return end p.map={} for i, v in pairs(d.platforms) do p.map[p.normal_code(i)]=i if v.title then p.map[p.normal_code(v.title)]=i end if v.syns then for i2, syn in pairs(v.syns) do p.map[p.normal_code(syn)]=i end end end end function p.get_platform_link(data) if data.link then return data.link end return '[['..data.title..']]' end function p.get_platform_category(data) if data.category then return data.category end return data.title end function p.get_platform_image(data) if data.image then return data.image end return data.title..'.png' end function p.test_parent_args(frame) local parent_frame=frame:getParent() local result='Parent arguments are:\n' for i, v in pairs(parent_frame.args) do result=result..'key '..i..'='..v..'<br>' end return result end return p