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