Модуль:String/split
Этот модуль предназначен для обработки данных, введённых через разделитель / (косая черта). Используется в шаблонах геотематики (основанных на {{Геокар}}, {{Река}}).
split[править код]
Принимает строку параметров через разделитель (или без него, если значение одно).
- Использование
{{#invoke:String/split|split|целевая_строка|o=обёртка|r=разделитель|m=максимальное_количество|l=вывести_как_список|t=обернуть_в_шаблон|nodis=убрать_уточнение_в_ссылке}}
- Примеры
{{#invoke:String/split|split|Танзания/Кения/Уганда|t=Флагификация|l=1}}
{{#invoke:String/split|split|Кагера (область)/Мванза (область)/Мара (область)/Ньянза/Западная провинция (Кения)/Восточная область (Уганда)/Центральная область (Уганда)|o=[[%]]|r=, |nodis=1}}
Кагера, Мванза, Мара, Ньянза, Западная провинция, Восточная область, Центральная область
lang[править код]
Принимает строку параметров через разделитель, возвращает список национальных названий.
- Примеры
{{#invoke:String/split|lang|ru/Каспийское море/fa/دریای خزر/az/Xəzər dənizi/kk/Каспий теңізі/kum/Хазар денгиз/lez/Каспи гьуьл/tk/Hazar deňzi}}
рус. Каспийское море, перс. دریای خزر, азерб. Xəzər dənizi, каз. Каспий теңізі, кум. Хазар денгиз, лезг. Каспи гьуьл, туркм. Hazar deňzi
reflang[править код]
Принимает строку параметров через разделитель, возвращает список шаблонов указаний языка ({{ref-lang}}).
- Примеры
{{#invoke:String/split|reflang|ru/fa/az/kk/kum/lez/tk}}
(рус.) (перс.) (азерб.) (каз.) (кум.) (лезг.) (туркм.)
{{#invoke:String/split|reflang|ru/fa/az/kk/kum/рус./lez/tk|в}}
[рус.] [перс.] [азерб.] [каз.] [кум.] [рус.] [лезг.] [туркм.]
local str = {}
function str.split( frame )
local ret = ''
local s = frame.args[1] or '';
if s == '' then
return
end
local o = frame.args['o'] or '%';
local l = frame.args['l'] or '';
local t = frame.args['t'] or '';
local r = frame.args['r'] or '';
local m = tonumber(frame.args['m']) or 1000;
local n = frame.args['nodis'] or '0';
if l ~= '' then
ret = '<ul>'
o = '<li>' .. o .. r .. '</li>'
else
o = o .. r
end
local i = 0
local iterator = mw.ustring.gmatch(s, "[^/]+");
for w in iterator do
if t ~= '' then
local args = {}
args[1] = w
ret = ret .. mw.ustring.gsub( o, '%%', frame:expandTemplate{ title = t, args = args } )
else
if n == '1' then
w = w .. '|' .. mw.ustring.gsub( w, '%s?%(.*%)$', '' )
end
w = mw.ustring.gsub( o, '%%', w )
ret = ret .. w
end
i = i + 1
if i == m then
break
end
end
if l ~= '' then
ret = mw.ustring.gsub( ret, r .. '</li>$', '</li>' )
ret = ret .. '</ul>'
else
ret = mw.ustring.gsub( ret, r .. '$', '' )
end
return ret
end
function str.lang( frame )
local red = '[[К:Тептар:Страницы с ошибками в национальном названии]]<span style="color: red;">В параметре «Национальное название» нарушен синтаксис: [[:К:Тептар:Страницы с ошибками в национальном названии|его верное заполнение]]: «код языка/название/код второго языка/название». Пожалуйста, исправьте данную ошибку!</span>'
local s = frame.args[1] or '';
if s == '' then
return
end
local listLang = require('Module:Languages').list
local i = 1
local args = {}
local iterator = mw.ustring.gmatch(s, "[^/]+");
for w in iterator do
args[i] = w
i = i + 1
end
if i % 2 == 0 or mw.ustring.match( s, '[\]\[\<\>\127]' ) then
return red
end
frame.args = args
return listLang(frame)
end
function str.reflang( frame )
local s = frame.args[1] or '';
local v = frame.args[2] or false;
if s == '' then
return
end
local args = {}
local iterator = mw.ustring.gmatch(s, "[^/]+");
for w in iterator do
table.insert(args, w)
end
if #args == 0 then
return
end
if v then
args['в'] = 'в'
end
local listRef = require('Module:Languages').list_ref
frame.args = args
return listRef(frame)
end
return str