Модуль: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