Permanently protected module

Difference between revisions of "Module:Autolink"

From Yugipedia
Jump to: navigation, search
(only allow the second parameter to override the generated link text if there's only one item being linked)
(only allow the second parameter to override the generated link text if there's only one item being linked)
(No difference)

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