Изменения

Перейти к навигации Перейти к поиску
sync with enwiki, see authors of this version https://en.wikipedia.org/w/index.php?title=Module:Delink&oldid=1208348327
Строка 12: Строка 12:  
     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
Строка 38: Строка 36:  
end
 
end
   −
local function delinkWikilink(s)
+
-- Return wikilink target |wikilinks=target
 +
local function getDelinkedTarget(s)
 
     local result = s
 
     local result = s
 
     -- Deal with the reverse pipe trick.
 
     -- Deal with the reverse pipe trick.
Строка 50: Строка 49:  
     -- 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 titlearea
+
     local target_area
 
     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.
         titlearea = result:match("^%[%[(.-)|.*%]%]")
+
         target_area = result:match("^%[%[(.-)|.*%]%]")
 
     else
 
     else
         titlearea = result:match("^%[%[(.-)%]%]")
+
         target_area = result:match("^%[%[(.-)%]%]")
 
     end
 
     end
 +
 
     -- Check for bad characters.
 
     -- Check for bad characters.
     if mw.ustring.match(titlearea, "[%[%]<>{}%%%c\n]") then
+
     if mw.ustring.match(target_area, "[%[%]<>{}%%%c\n]") and mw.ustring.match(target_area, "[%[%]<>{}%%%c\n]") ~= "?" then
 
         return s
 
         return s
 
     end
 
     end
 
      
 
      
 +
    return target_area
 +
end
 +
 +
local function getDelinkedLabel(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
 +
 
     -- Check for categories, interwikis, and files.
 
     -- Check for categories, interwikis, and files.
     local colonprefix = result:match("%[%[(.-):.*%]%]") or "" -- Get the text before the first colon.
+
     local colon_prefix = result:match("%[%[(.-):.*%]%]") or "" -- Get the text before the first colon.
     local ns = mw.site.namespaces[colonprefix] -- see if this is a known namespace
+
     local ns = mw.site.namespaces[colon_prefix] -- see if this is a known namespace
     if mw.language.isKnownLanguageTag(colonprefix)
+
     if mw.language.isKnownLanguageTag(colon_prefix) or (ns and (ns.canonicalName == "File" or ns.canonicalName == "Category")) then
    or ( ns and ( ns.canonicalName == "File" or ns.canonicalName == "Category" ) ) then
   
         return ""
 
         return ""
 
     end
 
     end
Строка 104: Строка 130:  
     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 i,v in ipairs(valid_url_prefixes) do
+
     for _ ,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
Строка 122: Строка 148:  
     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(s, pattern, delinkFunction)
+
local function delinkLinkClass(text, pattern, delinkFunction)
     if not type(s) == "string" then
+
     if type(text) ~= "string" then
 
         error("Attempt to de-link non-string input.", 2)
 
         error("Attempt to de-link non-string input.", 2)
 
     end
 
     end
     if not ( type(pattern) == "string" and mw.ustring.sub(pattern, 1, 1) == "^" ) then
+
     if type(pattern) ~= "string" or mw.ustring.sub(pattern, 1, 1) ~= "^" then
 
         error('Invalid pattern detected. Patterns must begin with "^".', 2)
 
         error('Invalid pattern detected. Patterns must begin with "^".', 2)
 
     end
 
     end
Строка 138: Строка 165:  
     -- 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 s ~= '' do
+
     while text ~= "" do
 
         -- Replace text using one iteration of gsub.
 
         -- Replace text using one iteration of gsub.
         s = mw.ustring.gsub(s, pattern, delinkFunction, 1)
+
         text = mw.ustring.gsub(text, pattern, delinkFunction, 1)
 
         -- Append the left-most character to the result string.
 
         -- Append the left-most character to the result string.
         result = result .. mw.ustring.sub(s, 1, 1)
+
         result = result .. mw.ustring.sub(text, 1, 1)
         s = mw.ustring.sub(s, 2, -1)
+
         text = mw.ustring.sub(text, 2, -1)
 
     end
 
     end
 
     return result
 
     return result
Строка 158: Строка 185:  
         text = mw.ustring.gsub(text, "UNIQ%w*%-ref%-%d*%-QINU", "")
 
         text = mw.ustring.gsub(text, "UNIQ%w*%-ref%-%d*%-QINU", "")
 
     end
 
     end
     if not (yesno(args.wikilinks) == false) then
+
    if not (yesno(args.comments) == false) then
         text = delinkLinkClass(text, "^%[%[.-%]%]", delinkWikilink) -- De-link wikilinks.
+
        text = text:gsub("<!%-%-.-%-%->", "") -- Remove html comments.
 +
    end
 +
 
 +
     if not (yesno(args.wikilinks) == false) and args.wikilinks ~= "target" then
 +
        -- 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 not (yesno(args.urls) == false) then
 
     if not (yesno(args.urls) == false) then
 
         text = delinkLinkClass(text, "^%[.-%]", delinkURL) -- De-link URLs.
 
         text = delinkLinkClass(text, "^%[.-%]", delinkURL) -- De-link URLs.
    end
  −
    if not (yesno(args.comments) == false) then
  −
        text = text:gsub("<!%-%-.-%-%->", "") -- Remove html comments.
   
     end
 
     end
 
     if not (yesno(args.whitespace) == false) then
 
     if not (yesno(args.whitespace) == false) then
Анонимный участник

Реклама:

Навигация