Модуль:Вложенные кавычки

Из Википедии, бесплатной энциклопедии

Документация

См. документацию {{Вложенные кавычки}}. Функции:

Прошлый код шаблона имел недостатки с точки зрения ВП:ПРЕДЕЛ (код {{Вложенные кавычки|я}} использовал 143 байта, в то время как шаблон на модуле использует 4) и некорректно обрабатывал часть ссылок. Авторы кода, на котором основан этот модуль, доступны в истории шаблона.

Примеры

-- -- Re-implement [[Template:Вложенные кавычки]] in Lua -- Replaces «» to „“ without touching links -- require( 'strict' )  local getArgs local p = {}  local function isEmpty( str ) 	return str == nil or str == '' end  local function protectLinks( str ) 	local links, head = {}, 0 	while true do 		local s, e, link = str:find( '(%[%[.-%]%])', head ) 		if not link then 			return str, links 		elseif link:find( '[[', 3, true ) then 			head = s + 2 		else 			-- If the alt text contains '[', it can have one final ']'. 			if link:match( '^[^|]*|.-%[', 3 ) and str:sub( e + 1, e + 1 ) == ']' then 				link = link .. ']' 			end 			table.insert( links, link ) 			local placeholder = mw.ustring.char( 0xF0000 + #links ) 			str = str:gsub( link:gsub( '[$%%()*+%-.?[%]^]', '%%%0' ), placeholder ) 			head = str:find( placeholder ) + 1 		end 	end end  local function unprotectLinks( str, links ) 	for i, link in ipairs( links ) do 		str = str:gsub( mw.ustring.char( 0xF0000 + i ), link:gsub( '%%', '%%%%' ), 1 ) 	end 	return str end  local function replace( str ) 	if isEmpty( str ) then 		return '' 	end 	 	str = mw.ustring.gsub( str, '«(.[^«»]-)»', '„%1“' ) 	return str end  function p._main( text ) 	if isEmpty( text ) then 		return '' 	end 	 	local links = {} 	text, links = protectLinks( text ) 	if #links == 0 then 		return replace( text ) 	end 	 	-- Replace visible link text while keeping links intact 	for i, link in ipairs( links ) do 		local linkTarget = mw.text.trim( link, '%[%]' ) 		local linkText = '' 		 		local pipePos = link:find( '|', 1, true ) 		if pipePos ~= nil then 			local parts = mw.text.split( linkTarget, '|' ) 			linkTarget = parts[ 1 ] 			linkText = replace( parts[ 2 ] ) 		else 			linkText = replace( linkTarget ) 		end 		 		links[ i ] = string.format( '[[%s|%s]]', linkTarget, linkText ) 	end 	 	text = replace( text ) 	text = unprotectLinks( text, links ) 	 	return text end  function p.main( frame ) 	getArgs = require( 'Module:Arguments' ).getArgs 	local args = getArgs( frame ) 	 	return p._main( args[ 1 ] ) end  return p