Модуль:Linkreplace

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация

Модуль для шаблона {{Linkreplace}}
В качестве первого аргумента получает текст, в котором меняет все вики-ссылки, которые не соответствуют паттерну [[: ]] или [[# ]], добавляя к ним параметр lang (не работает) либо по умолчанию «ru». Импортировано из арбитражной вики, просьба в случае обнаружения ошибок сообщить действующим арбитрам.

p = {}

-- в коде ниже этот набор тупо не используется, но вообще хорошо бы проверять
wiki = {"aa","ab","ace","ady","af","ak","als","am","an","ang","ar","arc","ary",
	"arz","as","ast","atj","av","avk","awa","ay","az","azb","ba","ban","bar",
	"bat-smg","bcl","be","be-tarask","be-x-old","bg","bh","bi","bjn","bm","bn",
	"bo","bpy","br","bs","bug","bxr","ca","cbk-zam","cdo","ce","ceb","ch","cho",
	"chr","chy","ckb","co","cr","crh","cs","csb","cu","cv","cy","da","de","din",
	"diq","dsb","dty","dv","dz","ee","el","eml","en","eo","es","et","eu","ext",
	"fa","ff","fi","fiu-vro","fj","fo","fr","frp","frr","fur","fy","ga","gag",
	"gan","gcr","gd","gl","glk","gn","gom","gor","got","gu","gv","ha","hak",
	"haw","he","hi","hif","ho","hr","hsb","ht","hu","hy","hyw","hz","ia","id",
	"ie","ig","ii","ik","ilo","inh","io","is","it","iu","ja","jam","jbo","jv",
	"ka","kaa","kab","kbd","kbp","kg","ki","kj","kk","kl","km","kn","ko","koi",
	"kr","krc","ks","ksh","ku","kv","kw","ky","la","lad","lb","lbe","lez","lfn",
	"lg","li","lij","lmo","ln","lo","lrc","lt","ltg","lv","mai","map-bms","mdf",
	"mg","mh","mhr","mi","min","mk","ml","mn","mnw","mo","mr","mrj","ms","mt",
	"mus","mwl","my","myv","mzn","na","nah","nap","nds","nds-nl","ne","new",
	"ng","nl","nn","no","nov","nqo","nrm","nso","nv","ny","oc","olo","om","or",
	"os","pa","pag","pam","pap","pcd","pdc","pfl","pi","pih","pl","pms","pnb",
	"pnt","ps","pt","qu","rm","rmy","rn","ro","roa-rup","roa-tara","ru","rue",
	"rw","sa","sah","sat","sc","scn","sco","sd","se","sg","sh","shn","si",
	"simple","sk","sl","sm","sn","so","sq","sr","srn","ss","st","stq","su","sv",
	"sw","szl","szy","ta","tcy","te","tet","tg","th","ti","tk","tl","tn","to",
	"tpi","tr","ts","tt","tum","tw","ty","tyv","udm","ug","uk","ur","uz","ve",
	"vec","vep","vi","vls","vo","wa","war","wo","wuu","xal","xh","xmf","yi",
	"yo","yue","za","zea","zh","zh-classical","zh-min-nan","zh-yue","zu","nb",
	"zh-cn","zh-tw","nan","vro","lzh","rup","gsw","sgs","egl"}

-- проверяет вхождение в список
local is_in_list = function ( var, list )
	for i=1, #list do
		if var == list[i] then
			return true
		end
	end
    return false
end

-- отбрасывает n символов с начала и конца
local core = function ( s , n )
	s = mw.ustring.sub(s, 1 + (n or 1), mw.ustring.len(s) - (n or 1))
	if(not mw.ustring.find(s, '|')) then
		s = s .. '|' .. s
	end
	return s
end

local langfix = function ( lang, s )
	return table.concat{":",(lang or "ru"),":",(s or "")}
end

local sq_brack_it = function ( s )
	return table.concat{"[[",s,"]]"}
end

local replace = function ( s )
	local suss = string.match( core(s), "%b[]" )
	-- [[: ]] / [[# ]] 
    if suss 
	    and string.byte(suss,2) ~= 58 
	    and string.byte(suss,2) ~= 35 
	    and string.byte(suss,2) ~= 47
		and mw.ustring.sub(suss,2,5) ~= "Файл"
		and string.sub(suss,2,5) ~= "File"
		and mw.ustring.sub(suss,2,10) ~= "Категория"
		and string.sub(suss,2,9) ~= "Category"
		and mw.ustring.sub(suss,2,3) ~= "К:"
    then
    	return sq_brack_it(langfix(lang,core(suss)))
	else
		return s
   	end
end
--[===[  =p.main(mw.getCurrentFrame():newChild{title="1",args={[=[Это текст с 
переносами строк и ссылками: [[викиссылками]] и [[Якобы|конечно]] [url ссылками], 
а также [[:ru:интервики]]- и [[:en:interwiki]]-ссылками.]=]}})
--]===]

function p.main(frame)

	local args = frame:getParent().args
	local input = args[1] or "{{{1}}}"
	local lang = args["lang"] or "ru"
	local changeList = {}
	
	return (string.gsub(input, "%b[]", replace))
end


return p