| Modul Lua ini digunakan pada sekitar 870.000 halaman, atau sekira 20% dari keseluruhan halaman. Untuk mencegah suntingan mengganggu skala besar dan beban peladen, setiap perubahan harus diuji di subhalaman /bak pasir atau /kasus uji Modul:Delink, atau bak pasir modul Anda. Perubahan yang telah diuji kemudian dapat ditambahkan ke halaman ini dalam satu suntingan. Pertimbangkan untuk mendiskusikan perubahan di halaman pembicaraan sebelum mengimplementasikannya. |
Dokumentasi di atas ditransklusikan dari Modul:Delink/doc. (sunting | riwayat)
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
-- 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) -- 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 -- Return wikilink target |wikilinks=target localfunctiongetDelinkedTarget(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. localtarget_area ifresult:match("|")then-- Find if we're dealing with a piped link. target_area=result:match("^%[%[(.-)|.*%]%]") else target_area=result:match("^%[%[(.-)%]%]") end -- Check for bad characters. ifmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")andmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")~="?"then returns end returntarget_area end localfunctiongetDelinkedLabel(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. localtarget_area ifresult:match("|")then-- Find if we're dealing with a piped link. target_area=result:match("^%[%[(.-)|.*%]%]") else target_area=result:match("^%[%[(.-)%]%]") end -- Check for bad characters. ifmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")andmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")~="?"then returns end -- Check for categories, interwikis, and files. localcolon_prefix=result:match("%[%[(.-):.*%]%]")or""-- Get the text before the first colon. localns=mw.site.namespaces[colon_prefix]-- see if this is a known namespace ifmw.language.isKnownLanguageTag(colon_prefix)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 for_,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 end returns_decoded end localfunctiondelinkLinkClass(text,pattern,delinkFunction) iftype(text)~="string"then error("Upaya untuk menghapus tautan dari masukan yang bukan string.",2) end iftype(pattern)~="string"ormw.ustring.sub(pattern,1,1)~="^"then error('Pola tidak valid terdeteksi. Pola harus dimulai dengan "^".',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="" whiletext~=""do -- Replace text using one iteration of gsub. text=mw.ustring.gsub(text,pattern,delinkFunction,1) -- Append the left-most character to the result string. result=result..mw.ustring.sub(text,1,1) text=mw.ustring.sub(text,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 ifargs.comments~="no"then text=text:gsub("<!%-%-.-%-%->","")-- Remove html comments. end ifargs.wikilinks~="no"andargs.wikilinks~="target"then -- De-link wikilinks and return the label portion of the wikilink. text=delinkLinkClass(text,"^%[%[.-%]%]",getDelinkedLabel) elseifargs.wikilinks=="target"then -- De-link wikilinks and return the target portions of the wikilink. text=delinkLinkClass(text,"^%[%[.-%]%]",getDelinkedTarget) end ifargs.urls~="no"then text=delinkLinkClass(text,"^%[.-%]",delinkURL)-- De-link URLs. end ifargs.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('Modul:Arguments').getArgs end returnp._delink(getArgs(frame,{wrappers='Templat:Delink'})) end returnp