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