Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Module:Delink

Permanently protected module
From Wikipedia, the free encyclopedia
Module documentation[view] [edit] [history] [purge]
Thismodule is rated asready 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 onhelp pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed throughsandbox testing rather than repeated trial-and-error editing.
Page protectedThis module is currentlyprotected from editing.
See theprotection policy andprotection log for more details. Please discuss any changes on thetalk page; you maysubmit an edit request to ask anadministrator to make an edit if it isuncontroversial or supported byconsensus. You may alsorequest that this page be unprotected.
This module can only be edited byadministrators because it istranscluded onto one or morecascade-protected pages.
WarningThis Lua module is used in system messages, and onapproximately 3,530,000 pages, or roughly 5% 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 ownmodule sandbox. The tested changes can be added to this page in a single edit. Please discuss changes on thetalk page before implementing them.

This module implements the{{delink}} template. Please see the template page for documentation.

The abovedocumentation istranscluded fromModule:Delink/doc.(edit |history)
Editors can experiment in this module'ssandbox(edit |diff) andtestcases(edit |run) pages.
Subpages of this module.

-- This module de-links most wikitext.require("strict")localp={}localgetArgslocalfunctiondelinkReversePipeTrick(s)ifs:match("^%[%[|.*[|\n]")then-- Check for newlines or multiple pipes.returnsendreturns:match("%[%[|(.*)%]%]")endlocalfunctiondelinkPipeTrick(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(":")thens=s:match("%[%[.-:(.*)|%]%]")-- If there are no colons, grab all of the text apart from the square brackets and the pipe.elses=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("(.-),.*$")endreturnsend-- Return wikilink target |wikilinks=targetlocalfunctiongetDelinkedTarget(s)localresult=s-- Deal with the reverse pipe trick.ifresult:match("%[%[|")thenreturndelinkReversePipeTrick(result)endresult=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_areaifresult:match("|")then-- Find if we're dealing with a piped link.target_area=result:match("^%[%[(.-)|.*%]%]")elsetarget_area=result:match("^%[%[(.-)%]%]")end-- Check for bad characters.ifmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")andmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")~="?"thenreturnsendreturntarget_areaendlocalfunctiongetDelinkedLabel(s)localresult=s-- Deal with the reverse pipe trick.ifresult:match("%[%[|")thenreturndelinkReversePipeTrick(result)endresult=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_areaifresult:match("|")then-- Find if we're dealing with a piped link.target_area=result:match("^%[%[(.-)|.*%]%]")elsetarget_area=result:match("^%[%[(.-)%]%]")end-- Check for bad characters.ifmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")andmw.ustring.match(target_area,"[%[%]<>{}%%%c\n]")~="?"thenreturnsend-- 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 namespaceifmw.language.isKnownLanguageTag(colon_prefix)or(nsand(ns.canonicalName=="File"orns.canonicalName=="Category"))thenreturn""end-- Remove the colon if the link is using the [[Help:Colon trick]].ifresult:match("%[%[:")thenresult="[["..result:match("%[%[:(.*%]%])")end-- Deal with links using the [[Help:Pipe trick]].ifmw.ustring.match(result,"^%[%[[^|]*|%]%]")thenreturndelinkPipeTrick(result)end-- Find the display area of the wikilinkifresult: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","")elseresult=result:match("^%[%[(.-)%]%]")endreturnresultendlocalfunctiondelinkURL(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")thenreturnsend-- 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_prefixfor_,vinipairs(valid_url_prefixes)doifmw.ustring.match(s,'^%['..v..'[^"%s].*%]')thenurl_prefix=vbreakendend-- Get display textifnoturl_prefixthenreturnsends=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")thenreturnsendreturns_decodedendlocalfunctiondelinkLinkClass(text,pattern,delinkFunction)iftype(text)~="string"thenerror("Attempt to de-link non-string input.",2)endiftype(pattern)~="string"ormw.ustring.sub(pattern,1,1)~="^"thenerror('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)endreturnresultendfunctionp._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","")endifargs.comments~="no"thentext=text:gsub("<!%-%-.-%-%->","")-- Remove html comments.endifargs.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)endifargs.urls~="no"thentext=delinkLinkClass(text,"^%[.-%]",delinkURL)-- De-link URLs.endifargs.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.endreturntextendfunctionp.delink(frame)ifnotgetArgsthengetArgs=require('Module:Arguments').getArgsendreturnp._delink(getArgs(frame,{wrappers='Template:Delink'}))endreturnp
Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:Delink&oldid=1208348327"
Categories:
Hidden category:

[8]ページ先頭

©2009-2025 Movatter.jp