Gaan na inhoud

Module:Delink

in Wikipedia, die vrye ensiklopedie

Dokumentasie vir hierdie module kan geskep word by:Module:Delink/doc

-- This module de-links most wikitext.

require('strict')

localp={}

localgetArgs

localfunctiondelinkReversePipeTrick(s)
ifs:match("^%[%[|.*[|\n] ")then-- Check for newlines or multiple pipes.
returns
else
returns:match("%[%[|(.*)%]%]")
end
end

localfunctiondelinkPipeTrick(s)
locallinkarea,display="",""
-- We need to deal with colons, brackets, and commas, per [[Help:Pipe trick]].

-- First, remove the text before the first colon, if any.
ifs:match(":")then
s=s:match("%[%[.-:(.*)|%]%]")
-- If there are no colons, grab all of the text apart from the square brackets and the pipe.
else
s=s:match("%[%[(.*)|%]%]")
end

-- Next up, brackets and commas.
ifs:match("%(.-%)$")then-- Brackets trump commas.
s=s:match("(.-)?%(.-%)$")
elseifs:match(",")then-- If there are no brackets, display only the text before the first comma.
s=s:match("(.-),.*$")
end
returns
end

localfunctiondelinkWikilink(s)
localresult=s
-- Deal with the reverse pipe trick.
ifresult:match("%[%[|")then
returndelinkReversePipeTrick(result)
end

result=mw.uri.decode(result,"PATH")-- decode percent-encoded entities. Leave underscores and plus signs.
result=mw.text.decode(result,true)-- decode HTML entities.

-- Check for bad titles. To do this we need to find the
-- title area of the link, i.e. the part before any pipes.
localtitlearea
ifresult:match("|")then-- Find if we're dealing with a piped link.
titlearea=result:match("^%[%[(.-)|.*%]%]")
else
titlearea=result:match("^%[%[(.-)%]%]")
end
-- Check for bad characters.
ifmw.ustring.match(titlearea,"[%[%]<>{}%%%c\n] ")then
returns
end

-- Check for categories, interwikis, and files.
localcolonprefix=result:match("%[%[(.-):.*%]%]")or""-- Get the text before the first colon.
localns=mw.site.namespaces[colonprefix]-- see if this is a known namespace
ifmw.language.isKnownLanguageTag(colonprefix)
or(nsand(ns.canonicalName=="File"orns.canonicalName=="Category"))then
return""
end

-- Remove the colon if the link is using the [[Help:Colon trick]].
ifresult:match("%[%[:")then
result="[["..result:match("%[%[:(.*%]%])")
end

-- Deal with links using the [[Help:Pipe trick]].
ifmw.ustring.match(result,"^%[%[[^|]*|%]%]")then
returndelinkPipeTrick(result)
end

-- Find the display area of the wikilink
ifresult:match("|")then-- Find if we're dealing with a piped link.
result=result:match("^%[%[.-|(.+)%]%]")
-- Remove new lines from the display of multiline piped links,
-- where the pipe is before the first new line.
result=result:gsub("\n","")
else
result=result:match("^%[%[(.-)%]%]")
end

returnresult
end

localfunctiondelinkURL(s)
-- Assume we have already delinked internal wikilinks, and that
-- we have been passed some text between two square brackets [foo].

-- If the text contains a line break it is not formatted as a URL, regardless of other content.
ifs:match("\n")then
returns
end

-- Check if the text has a valid URL prefix and at least one valid URL character.
localvalid_url_prefixes={"//","http://","https://","ftp://","gopher://","mailto:","news:","irc://"}
localurl_prefix
fori,vinipairs(valid_url_prefixes)do
ifmw.ustring.match(s,'^%['..v..'[^ "%s].*%]')then
url_prefix=v
break
end
end

-- Get display text
ifnoturl_prefixthen
returns
end
s=s:match("^%["..url_prefix.."(.*)%]")-- Grab all of the text after the URL prefix and before the final square bracket.
s=s:match('^.-([ "<> ].*)')or""-- Grab all of the text after the first URL separator character ( "<> ).
s=mw.ustring.match(s,"^%s*(%S.*)$")or""-- If the separating character was a space, trim it off.

locals_decoded=mw.text.decode(s,true)
ifmw.ustring.match(s_decoded,"%c")then
returns
else
returns_decoded
end
end

localfunctiondelinkLinkClass(s,pattern,delinkFunction)
ifnottype(s)=="string"then
error("Attempt to de-link non-string input.",2)
end
ifnot(type(pattern)=="string"andmw.ustring.sub(pattern,1,1)=="^")then
error('Invalid pattern detected. Patterns must begin with "^".',2)
end
-- Iterate over the text string, and replace any matched text. using the
-- delink function. We need to iterate character by character rather
-- than just use gsub, otherwise nested links aren't detected properly.
localresult=""
whiles~=''do
-- Replace text using one iteration of gsub.
s=mw.ustring.gsub(s,pattern,delinkFunction,1)
-- Append the left-most character to the result string.
result=result..mw.ustring.sub(s,1,1)
s=mw.ustring.sub(s,2,-1)
end
returnresult
end

functionp._delink(args)
localtext=args[1]or""
ifargs.refs=="yes"then
-- Remove any [[Help:Strip markers]] representing ref tags. In most situations
-- this is not a good idea - only use it if you know what you are doing!
text=mw.ustring.gsub(text,"UNIQ%w*%-ref%-%d*%-QINU","")
end
ifnot(args.comments=="no")then
text=text:gsub("<!%-%-.-%-%->","")-- Remove html comments.
end
ifnot(args.wikilinks=="no")then
text=delinkLinkClass(text,"^%[%[.-%]%]",delinkWikilink)-- De-link wikilinks.
end
ifnot(args.urls=="no")then
text=delinkLinkClass(text,"^%[.-%]",delinkURL)-- De-link URLs.
end
ifnot(args.whitespace=="no")then
-- Replace single new lines with a single space, but leave double new lines
-- and new lines only containing spaces or tabs before a second new line.
text=mw.ustring.gsub(text,"([^\n\t][\t]*)\n([\t]*[^\n\t]) ","%1 %2")
text=text:gsub("[\t]+ ","")-- Remove extra tabs and spaces.
end
returntext
end

functionp.delink(frame)
ifnotgetArgsthen
getArgs=require('Module:Arguments').getArgs
end
returnp._delink(getArgs(frame,{wrappers='Template:Delink'}))
end

returnp