Modifica di Modulo:Delink

Vai alla navigazione Vai alla ricerca
Attenzione: non hai effettuato l'accesso. Se effettuerai delle modifiche il tuo indirizzo IP sarà visibile pubblicamente. Se accedi o crei un'utenza, le tue modifiche saranno attribuite al tuo nome utente, insieme ad altri benefici.

Questa modifica può essere annullata. Controlla le differenze mostrate sotto fra le due versioni per essere certo che il contenuto corrisponda a quanto desiderato, e quindi pubblicare le modifiche per completare la procedura di annullamento.

Versione attuale Il tuo testo
Riga 1: Riga 1:
-- This module de-links most wikitext.
--[[
* Modulo per rimuovere wikilink e collegamenti esterni dal wikitesto.
*
* Il modulo è stato importato da:
* https://en.wikipedia.org/w/index.php?title=Module:Delink&oldid=695173753
]]--


require("strict")
require('Module:No globals')


local p = {}
local p = {}
 
local args
local getArgs


local function delinkReversePipeTrick(s)
local function delinkReversePipeTrick(s)
if s:match("^%[%[|.*[|\n]") then -- Check for newlines or multiple pipes.
if s:match("^%[%[|.*[|\n]") then -- Check for newlines or multiple pipes.
return s
return s
else
return s:match("%[%[|(.*)%]%]")
end
end
return s:match("%[%[|(.*)%]%]")
end
end


local function delinkPipeTrick(s)
local function delinkPipeTrick(s)
local linkarea, display = "", ""
-- We need to deal with colons, brackets, and commas, per [[Help:Pipe trick]].
-- We need to deal with colons, brackets, and commas, per [[Help:Pipe trick]].
-- First, remove the text before the first colon, if any.
-- First, remove the text before the first colon, if any.
if s:match(":") then
if s:match(":") then
Riga 24: Riga 30:
s = s:match("%[%[(.*)|%]%]")
s = s:match("%[%[(.*)|%]%]")
end
end
 
-- Next up, brackets and commas.
if not args['singolo link'] then
if s:match("%(.-%)$") then -- Brackets trump commas.
-- Next up, brackets and commas.
s = s:match("(.-) ?%(.-%)$")
if s:match("%(.-%)$") then -- Brackets trump commas.
elseif s:match(",") then -- If there are no brackets, display only the text before the first comma.
s = s:match("(.-) ?%(.-%)$")
s = s:match("(.-),.*$")
elseif s:match(",") then -- If there are no brackets, display only the text before the first comma.
s = s:match("(.-),.*$")
end
end
end
return s
return s
end
end


-- Return wikilink target |wikilinks=target
local function delinkWikilink(s)
local function getDelinkedTarget(s)
local result = s
-- Deal with the reverse pipe trick.
if result:match("%[%[|") then
return delinkReversePipeTrick(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.
local target_area
if result: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.
if mw.ustring.match(target_area, "[%[%]<>{}%%%c\n]") and mw.ustring.match(target_area, "[%[%]<>{}%%%c\n]") ~= "?" then
return s
end
return target_area
end
 
local function getDelinkedLabel(s)
local result = s
local result = s
-- Deal with the reverse pipe trick.
-- Deal with the reverse pipe trick.
Riga 74: Riga 54:
-- Check for bad titles. To do this we need to find the
-- Check for bad titles. To do this we need to find the
-- title area of the link, i.e. the part before any pipes.
-- title area of the link, i.e. the part before any pipes.
local target_area
local titlearea
if result:match("|") then -- Find if we're dealing with a piped link.
if result:match("|") then -- Find if we're dealing with a piped link.
target_area = result:match("^%[%[(.-)|.*%]%]")
titlearea = result:match("^%[%[(.-)|.*%]%]")
else
else
target_area = result:match("^%[%[(.-)%]%]")
titlearea = result:match("^%[%[(.-)%]%]")
end
end
-- Check for bad characters.
-- Check for bad characters.
if mw.ustring.match(target_area, "[%[%]<>{}%%%c\n]") and mw.ustring.match(target_area, "[%[%]<>{}%%%c\n]") ~= "?" then
if mw.ustring.match(titlearea, "[%[%]<>{}%%%c\n]") then
return s
return s
end
end


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


Riga 102: Riga 84:
return delinkPipeTrick(result)
return delinkPipeTrick(result)
end
end
 
-- Find the display area of the wikilink
-- Find the display area of the wikilink
if result:match("|") then -- Find if we're dealing with a piped link.
if result:match("|") then -- Find if we're dealing with a piped link.
result = result:match("^%[%[.-|(.+)%]%]")
local pattern = "^%[%[.-|(.+)%]%]"
if args['singolo link'] and args[2] == 'v' then
pattern = "^%[%[(.-)|.+%]%]"
end
result = result:match(pattern)
-- Remove new lines from the display of multiline piped links,
-- Remove new lines from the display of multiline piped links,
-- where the pipe is before the first new line.
-- where the pipe is before the first new line.
Riga 119: Riga 105:
-- Assume we have already delinked internal wikilinks, and that
-- Assume we have already delinked internal wikilinks, and that
-- we have been passed some text between two square brackets [foo].
-- 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.
-- If the text contains a line break it is not formatted as a URL, regardless of other content.
if s:match("\n") then
if s:match("\n") then
return s
return s
end
end
 
-- Check if the text has a valid URL prefix and at least one valid URL character.
-- Check if the text has a valid URL prefix and at least one valid URL character.
local valid_url_prefixes = {"//", "http://", "https://", "ftp://", "gopher://", "mailto:", "news:", "irc://"}  
local valid_url_prefixes = {"//", "http://", "https://", "ftp://", "gopher://", "mailto:", "news:", "irc://"}  
local url_prefix
local url_prefix
for _ ,v in ipairs(valid_url_prefixes) do
for i,v in ipairs(valid_url_prefixes) do
if mw.ustring.match(s, '^%[' .. v ..'[^"%s].*%]' ) then
if mw.ustring.match(s, '^%[' .. v ..'[^"%s].*%]' ) then
url_prefix = v
url_prefix = v
Riga 134: Riga 120:
end
end
end
end
 
-- Get display text
-- Get display text
if not url_prefix then
if not url_prefix then
Riga 146: Riga 132:
if mw.ustring.match(s_decoded, "%c") then
if mw.ustring.match(s_decoded, "%c") then
return s
return s
else
return s_decoded
end
end
return s_decoded
end
end


local function delinkLinkClass(text, pattern, delinkFunction)
local function delinkLinkClass(s, pattern, delinkFunction)
if type(text) ~= "string" then
if not type(s) == "string" then
error("Attempt to de-link non-string input.", 2)
error("Tentativo di rimuovere link da un valore non di tipo stringa.", 2)
end
end
if type(pattern) ~= "string" or mw.ustring.sub(pattern, 1, 1) ~= "^" then
if not ( type(pattern) == "string" and mw.ustring.sub(pattern, 1, 1) == "^" ) then
error('Invalid pattern detected. Patterns must begin with "^".', 2)
error('Pattern non valido individuato. I pattern devono inziare con "^".', 2)
end
end
-- Iterate over the text string, and replace any matched text. using the  
-- Iterate over the text string, and replace any matched text. using the  
Riga 163: Riga 148:
-- than just use gsub, otherwise nested links aren't detected properly.
-- than just use gsub, otherwise nested links aren't detected properly.
local result = ""
local result = ""
while text ~= "" do
while s ~= '' do
-- Replace text using one iteration of gsub.
if args['singolo link'] then
text = mw.ustring.gsub(text, pattern, delinkFunction, 1)
local m = mw.ustring.match(s, pattern)
if m then
local m2 = delinkFunction(m)
if m ~= m2 then
result = mw.text.trim(m2)
break
end
end
else
-- Replace text using one iteration of gsub.
s = mw.ustring.gsub(s, pattern, delinkFunction, 1)
end
-- Append the left-most character to the result string.
-- Append the left-most character to the result string.
result = result .. mw.ustring.sub(text, 1, 1)
result = result .. mw.ustring.sub(s, 1, 1)
text = mw.ustring.sub(text, 2, -1)
s = mw.ustring.sub(s, 2, -1)
end
end
return result
return result
end
end


function p._delink(args)
function p._main(frame_args)
args = frame_args
local text = args[1] or ""
local text = args[1] or ""
if args.refs == "yes" then
if args.refs == "yes" or args.note == "sì" then
-- Remove any [[Help:Strip markers]] representing ref tags. In most situations  
-- 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!
-- 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", "")
text = mw.ustring.gsub(text, "UNIQ%w*%-ref%-%d*%-QINU", "")
end
end
if args.comments ~= "no" then
if not (args.comments == "no" or args.commenti == "no") then
text = text:gsub("<!%-%-.-%-%->", "") -- Remove html comments.
text = text:gsub("<!%-%-.-%-%->", "") -- Remove html comments.
end
end
 
if not (args.wikilinks == "no" or args.wikilink == "no") then
if args.wikilinks ~= "no" and args.wikilinks ~= "target" then
text = delinkLinkClass(text, "^%[%[.-%]%]", delinkWikilink) -- De-link wikilinks.
-- De-link wikilinks and return the label portion of the wikilink.
text = delinkLinkClass(text, "^%[%[.-%]%]", getDelinkedLabel)
elseif args.wikilinks == "target" then
-- De-link wikilinks and return the target portions of the wikilink.
text = delinkLinkClass(text, "^%[%[.-%]%]", getDelinkedTarget)
end
end
if args.urls ~= "no" then
if not (args.urls == "no" or args.url == "no") then
text = delinkLinkClass(text, "^%[.-%]", delinkURL) -- De-link URLs.
text = delinkLinkClass(text, "^%[.-%]", delinkURL) -- De-link URLs.
end
end
if args.whitespace ~= "no" then
if not (args.whitespace == "no" or args.spazi == "no") then
-- Replace single new lines with a single space, but leave double new lines
-- 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.
-- and new lines only containing spaces or tabs before a second new line.
Riga 203: Riga 195:
end
end


function p.delink(frame)
function p.main(frame)
if not getArgs then
local getArgs = require('Modulo:Arguments').getArgs
getArgs = require('Module:Arguments').getArgs
return p._main(getArgs(frame))
end
return p._delink(getArgs(frame, {wrappers = 'Template:Delink'}))
end
end


return p
return p
Per favore tieni presente che tutti i contributi a Tematiche di genere si considerano pubblicati nei termini d'uso della licenza Creative Commons Attribuzione-Condividi allo stesso modo (vedi Tematiche di genere:Copyright per maggiori dettagli). Se non desideri che i tuoi testi possano essere modificati e ridistribuiti da chiunque senza alcuna limitazione, non inviarli qui.
Inviando il testo dichiari inoltre, sotto tua responsabilità, che è stato scritto da te personalmente oppure è stato copiato da una fonte di pubblico dominio o similarmente libera. Non inviare materiale protetto da copyright senza autorizzazione!
Annulla Guida (si apre in una nuova finestra)

Template utilizzato in questa pagina: