Feed The Beast Wiki

Follow the Feed The Beast Wiki on Discord or Mastodon!

READ MORE

Feed The Beast Wiki
Register
Advertisement

Documentation for this module may be created at Module:Language/doc

local langNames = require( [[Module:Language/Names]] )
local processArgs = require( [[Module:ProcessArgs]] )

local function code( title )
	local titleObj = title or mw.title.getCurrentTitle()
	if not titleObj.isSubpage then
		return nil
	end
	local subPage = titleObj.subpageText:lower()
	if langNames[subPage] then
		return subPage
	end
end
local function pageSuffix()
	local langCode = code()
	if langCode then
		return '/' .. langCode
	end
	return ''
end
-- Copied from [[wp:Module:Delink]]
-- Arguments should be supplied from other modules where "s" is the link without brackets

-- Returns the link text to be displayed from this link after applying the pipe trick
local function linktext( s )
	if type(s) ~= "string" then
		return nil
	end
	
    -- We need to deal with colons, brackets, and commas, per [[wp:Help:Pipe trick]].
    
    -- First, remove the text before the first colon, if any.
    if mw.ustring.match(s, ":") then
        s = mw.ustring.match(s, ".-:(.*)")
    end
    
    -- Next up, brackets and commas.
    if mw.ustring.match(s, "%(.-%)$") then -- Brackets trump commas.
        s = mw.ustring.match(s, "(.-) ?%(.-%)$")
    elseif s:match(",") then -- If there are no brackets, display only the text before the first comma.
        s = mw.ustring.match(s, "(.-),.*$")
    end

	return s
end

local p = {}

-- See {{L}}
p.link = function( f )
	-- Set keepEmptyArgs to true to allow pipe trick
	local args = processArgs.normDefault( f, true )
	
	-- Get language suffix for links
	if not args[1] or args[1]:lower() == 't' then
		return pageSuffix()
	end
	
	local page = args[1] .. pageSuffix()
	
	-- Get page name with suffix
	if args.dest then
		return page
	end
	
	local usePipeTrick = args.o == '' or args[2] == ''
	local display
	-- The pipe trick should only be used with English; but we have to support /en pages
	if usePipeTrick then
		-- Run pipe trick on page title without langauage code; otherwise it breaks
		display = linktext(args[1])
	else
		display = args.o or args[2] or args[1]
	end
	
	-- Get page link with suffix and specified display text
	return '[[' .. page .. '|' .. display .. ']]'
end

-- See {{Language}}
p.name = function( f )
	local args = processArgs.normDefault( f )
	
	local langCode = args[1] or 'en'
	
	-- Get language code for specified title or current page
	if args.code then
		return langCode
	end
	
	local langName = langNames[langCode]

    -- If langCode is not valid, just return itself
    if langName == nil then
        return langCode
    end
	
	-- Get language name in English if the 2nd arg or 'en' arg is set
	if (args[2] and args[2] ~= '') or (args.en and args.en ~= '') then
		return langName[1]
	end
	
	-- Get language name in that language (autonym)
	return langName[2]
end

-- See {{ML}}
p.modlink = function( f )
	local args = processArgs.normDefault( f )
	
	local modname = require([[Module:Mods]]).getData(args[2]).name
	
	if not modname then
		return 'No mod found'
	end
	
	local disambiguated = string.format("%s (%s)", args[1], modname)
	
	return p.link{disambiguated, args.title or args[1]}
end

p.code = function( f )
	local args = processArgs.normDefault( f )
	
	-- 'de' and 'Main Page/de' will be correctly processed regardless of the arg name
	-- These aliases are mainly to keep a standard
	local selected = args.code or args.title
	
	local code = code( selected and mw.title.new(selected) or mw.title.getCurrentTitle() )
	
	if not code then
		return args.default or ''
	end
	
	return code
end

return p
Advertisement