Module:Wikitext
Documentation for this module may be created at Module:Wikitext/doc
--[[
СлÑжебнÑе ÑÑнкÑии - конвеÑÑии викиÑекÑÑа
СинÑакÑиÑ: ÑÑнкÑÐ¸Ñ Ñо ÑÑÑоÑной бÑÐºÐ²Ñ - - {{#invoke:wikitext|fun|...}},
Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð¾Ð¹ - - require(wikitext).Fun()
]]
specns={file='file',image='file',category='cat',
['к']='cat',['каÑегоÑиÑ']='cat',['Ñайл']='file',['изобÑажение']='file'}
linkprefs="http:// gopher:// https:// mailto: news:// ftp:// irc:// //"
local function Delink(text,repl,cat,file,href,colon)
return ( --Ñдаление вики-ÑÑÑлок
mw.ustring.gsub(text, "%[%[(%s*([^|%]]+)%s*)|?(.-)%]%](%a*)", function(a,l,c,e)
l = l:gsub("%s+"," ");
if specns[mw.ustring.lower(l):match("^(.*):")] then
-- ÑÑÑлка - ÑпеÑиалÑное п. и.
if specns[mw.ustring.lower(l):match("^(.*):")]=='cat' then--каÑегоÑиÑ
if cat then -- ÑÑÑоÑка заменÑ, %1=catname, %2=key, %3=mode, %%="%"
return table.concat{ l:gsub("^.-:%s*",''), '|', c }:gsub( "^(.-)|([^|]*)|?(.-)$", cat ) .. e
else
return e -- ÑдалÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ñе каÑегоÑии
end
else--Ñайл. Fixme:пока вÑе Ð¿Ð¾Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ñайла не вÑдаÑÑÑÑ Ñаблонам
if file then -- ÑÑÑока заменÑ, %1=filename, %2=parameters, %%="%"
return table.concat{ l:gsub("^.-:%s*",''), '|', c }:gsub( "^(.-)|(.*)", file ) .. e
else return e -- вÑÑезаÑÑ ÑалÑ
end
end--if(Ñайл или каÑегоÑиÑ)
end--if(ÑпеÑ. пÑоÑÑÑанÑÑва)
l=string.gsub(l,"^: *", colon or "%1");-- замена наÑалÑного ":"
if repl then
return mw.ustring.gsub(l..'|'..(c=='' and a..e or c..e),"^(.-)|(.*)$",repl)
else
if c=='' then return a..e else return c..e end-- вÑÑезаем
end
end
):gsub(
"(%[([%a%._\/~%%%-%+&#%?!=%(%)@]+)%s*(.-)%])", function(a,r,t)
--вÑÑезаÑÐ¾Ñ Ð²Ð½ÐµÑниÑ
ÑÑÑлок
local p,i=r:match('^(%a*:?//)(.*)')
if not p then p,i=r:match('^(mailto:)(.*)') end
if p then-- ÐÑо URL
if href then
return (p..' '..i..' '..t):gsub("^(.-) (.-) (.*)$",href)
else
return t
end
else-- ÐÑо не URL
return a
end
end--вÑÑезаÑоÑ
) )
end
local function Detag(t)
if t == nil or t == '' then
return ''
end
-- ÐÑÑезаем кавÑÑки и > из лиÑеÑалов в ÑÑгаÑ
, а поÑом Ñами лиÑеÑалÑ
local text,j,i,k=t,0;
repeat
text,i=text:gsub('(</?%a[^>"\']*")[^"]*\\["\\]',"%1");--пеÑÐ²Ð°Ñ \", \\ из 1-го лиÑеÑала
text,k=text:gsub("(</?%a[^>\"']*')[^']*\\['\\]","%1");--пеÑÐ²Ð°Ñ \', \\ из 1-го лиÑеÑала
if i+k==0 then--1-й лиÑеÑал оÑиÑен
text,j=text:gsub("(</?%a[^>]*)(['\"]).-%2","%1")
end
until i+j+k==0
-- и вÑÑезаÑÑ ÑÑги, а Ñакже ''кÑÑÑив'' и '''жиÑнÑй'''
return (text:gsub("'''?",""):gsub('</?%a[^>]*>',''))
end
local function Nodis(t) -- УбиÑÐ°ÐµÑ ÑÑоÑÐ½ÐµÐ½Ð¸Ñ Ð² ÑкобкаÑ
return (t:gsub('%s*%([^%)]+%)$',''))
end
return {
delink=function(f) -- УдалÑÐµÑ ÑÑÑлки из викиÑекÑÑа
local tf=f:getParent()
return Delink(
f.args[1] or tf.args[1],
f.args['repl'] or tf.args['repl'],
f.args['cat'] or tf.args['cat'],
f.args['file'] or tf.args['file'],
f.args['href'] or tf.args['href'],
f.args[':'] or tf.args[':']
)
end; Delink=Delink;
detag=function(f)
return Detag(f.args[1] or f:getParent().args[1])
end; Detag=Detag;
plain=function(f)
local tf=f:getParent()
return Detag(Delink(
f.args[1] or tf.args[1],
f.args['repl'] or tf.args['repl'],
f.args['cat'] or tf.args['cat'],
f.args['file'] or tf.args['file'],
f.args['href'] or tf.args['href'],
f.args[':'] or tf.args[':']
));
end;
nodis=function(f)
return Nodis(f.args[1] or f:getParent().args[1])
end;Nodis=Nodis
}