Permanently protected module

Difference between revisions of "Module:Autolink"

From Yugipedia
Jump to: navigation, search
(category and file links should always be escaped, even when the entire input is to be nolinked)
(only allow the second parameter to override the generated link text if there's only one item being linked)
Line 17: Line 17:
  
 
     links = mw.text.split( args[1], '*' )
 
     links = mw.text.split( args[1], '*' )
 +
 +
    args[2] = #links == 1 and args[2]
 +
    args[2] = args[2] or ''
  
 
     nolink = mw.ustring.find( args[1], zwnj ) == 1
 
     nolink = mw.ustring.find( args[1], zwnj ) == 1

Revision as of 14:24, 17 February 2015

--
-- implements {{Autolink}}
--

local p = {}

function p.link( frame )
    local args = frame:getParent().args
    -- for testing from console
    -- local args = frame
    -- zero-width non-joiner, used for {{nolink}} support
    local zwnj = '‌'
    local links, nolink, escape, el, link, text, formatl, formatr

    -- set default to stop errors
    args[1] = mw.text.trim( args[1] ) or ''

    links = mw.text.split( args[1], '*' )

    args[2] = #links == 1 and args[2]
    args[2] = args[2] or ''

    nolink = mw.ustring.find( args[1], zwnj ) == 1

    for i=1, #links do
        el = mw.text.trim( links[i] )

        -- catch empty string at the start of lists
        if el ~= '' then
            if mw.ustring.find( el, zwnj ) or mw.ustring.find( el, '%[%[' ) or nolink then
                el = mw.ustring.gsub( el, '%[%[[Cc]ategory:', '[[:Category:' )
                el = mw.ustring.gsub( el, '%[%[[Ff]ile:', '[[:File:' )
                el = mw.ustring.gsub( el, '%[%[[Ii]mage:', '[[:Image:' )
                links[i] = el
            else
                link = el
                text = args[2] or el
                formatl = ''
                formatr = ''

                link = mw.ustring.gsub( link, '""', '' )
                link = mw.ustring.gsub( link, "'''?", '' )

                if mw.ustring.find( text, '^""' ) and mw.ustring.find( text, '""$' ) then
                    formatl = '"'
                    formatr = '"'
                    text = mw.ustring.gsub( text, '""', '' )
                else
                    text = mw.ustring.gsub( text, '""', '"' )
                end
                if mw.ustring.find( text, "^'''" ) and mw.ustring.find( text, "'''$" ) then
                    formatl = formatl .. "'''"
                    formatr = "'''" .. formatr
                    text = mw.ustring.gsub( text, "^'''", '' )
                    text = mw.ustring.gsub( text, "'''$", '' )
                end
                if mw.ustring.find( text, "^''" ) and mw.ustring.find( text, "''$" ) then
                    formatl = formatl .. "''"
                    formatr = "''" .. formatr
                    text = mw.ustring.gsub( text, "^''", '' )
                    text = mw.ustring.gsub( text, "''$", '' )
                end

                if mw.ustring.find( link, '^[Cc]ategory:' ) or
                        mw.ustring.find( link, '^[Ff]ile:' ) or
                        mw.ustring.find( link, '^[Ii]mage:' ) then
                    escape = ':'
                else
                    escape = ''
                end

                if link == text then
                    links[i] = table.concat( { formatl, '[[', escape, link, ']]', formatr }, '' )
                else
                    links[i] = table.concat( { formatl, '[[', escape, link, '|', text, ']]', formatr }, '' )
                end
            end
        end
    end

    links = table.concat( links, '\n*' )
    links = mw.ustring.gsub( links, zwnj, '' )
    links = mw.text.trim( links )
    return links
end

return p