Module:Delink
- Afrikaans
- Алтай тил
- Anarâškielâ
- अंगिका
- Аԥсшәа
- العربية
- Արեւմտահայերէն
- Arpetan
- Asturianu
- Azərbaycanca
- تۆرکجه
- Basa Bali
- বাংলা
- 閩南語 / Bân-lâm-gí
- Башҡортса
- Беларуская
- Беларуская (тарашкевіца)
- भोजपुरी
- Bikol Central
- Български
- བོད་ཡིག
- Bosanski
- Буряад
- Català
- Cebuano
- Čeština
- ChiShona
- Cymraeg
- Dansk
- الدارجة
- Davvisámegiella
- Eesti
- Ελληνικά
- Эрзянь
- Español
- Esperanto
- Euskara
- فارسی
- Føroyskt
- Français
- Fulfulde
- Gaeilge
- Galego
- ГӀалгӀай
- ગુજરાતી
- गोंयची कोंकणी / Gõychi Konknni
- 한국어
- Hausa
- Հայերեն
- हिन्दी
- Igbo
- Ilokano
- Bahasa Indonesia
- Interlingua
- Ирон
- Íslenska
- Italiano
- Jawa
- ಕನ್ನಡ
- ქართული
- Kurdî
- Лакку
- ລາວ
- Latviešu
- Лезги
- Lietuvių
- Ligure
- Magyar
- मैथिली
- Македонски
- മലയാളം
- Māori
- मराठी
- მარგალური
- مصرى
- ဘာသာမန်
- مازِرونی
- Bahasa Melayu
- Mfantse
- Minangkabau
- 閩東語 / Mìng-dĕ̤ng-ngṳ̄
- Мокшень
- Монгол
- မြန်မာဘာသာ
- Na Vosa Vakaviti
- Nederlands
- 日本語
- Нохчийн
- Norsk bokmål
- Олык марий
- Oʻzbekcha / ўзбекча
- ਪੰਜਾਬੀ
- ပအိုဝ်ႏဘာႏသာႏ
- پښتو
- Português
- Qaraqalpaqsha
- Română
- Runa Simi
- Русиньскый
- Русский
- سرائیکی
- Scots
- Shqip
- සිංහල
- Simple English
- سنڌي
- SiSwati
- Slovenčina
- Slovenščina
- کوردی
- Српски / srpski
- Srpskohrvatski / српскохрватски
- Sunda
- Tagalog
- தமிழ்
- Taqbaylit
- Tarandíne
- တႆး
- ไทย
- Thuɔŋjäŋ
- ትግርኛ
- ತುಳು
- Türkçe
- Тыва дыл
- Удмурт
- Українська
- اردو
- Vahcuengh
- Vèneto
- Tiếng Việt
- Wayuunaiki
- 吴语
- Xitsonga
- 粵語
- 中文
- Jaku Iban
- Igala
- Kumoring
- Руски
- ᥖᥭᥰ ᥖᥬᥲ ᥑᥨᥒᥰ
- Tolışi
- ⵜⴰⵎⴰⵣⵉⵖⵜ ⵜⴰⵏⴰⵡⴰⵢⵜ
Appearance
From Wikipedia, the free encyclopedia
This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing.
Page protected This module is currently protected from editing.
See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected.
See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected.
This module can only be edited by administrators because it is transcluded onto one or more cascade-protected pages.
[画像:Warning] This Lua module is used in system messages, and on approximately 3,540,000 pages, or roughly 6% of all pages.
Changes to it can cause immediate changes to the Wikipedia user interface.
To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them.
Changes to it can cause immediate changes to the Wikipedia user interface.
To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on the talk page before implementing them.
This module implements the {{delink }} template. Please see the template page for documentation.
The above documentation is transcluded from Module:Delink/doc. (edit | history)
Editors can experiment in this module's sandbox (edit | diff) and testcases (edit | run) pages.
Subpages of this module.
Editors can experiment in this module's sandbox (edit | diff) and testcases (edit | run) pages.
Subpages of this module.
-- This module de-links most wikitext. require("strict") localp={} localgetArgs localfunctiondelinkReversePipeTrick(s) ifs:match("^%[%[|.*[|\n]")then-- Check for newlines or multiple pipes. returns end returns:match("%[%[|(.*)%]%]") 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("Attempt to de-link non-string input.",2) end iftype(pattern)~="string"ormw.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="" 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('Module:Arguments').getArgs end returnp._delink(getArgs(frame,{wrappers='Template:Delink'})) end returnp