Marvel Database
Advertisement
Marvel Database

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

local p = {}
local h = require("Module:HF")
local getArgs = require('Dev:Arguments').getArgs
local list_of_realities = mw.loadData( 'Module:Disambiguation/Realities' )
--local special_names = { "Mojoverse", "Ideaverse", "Brilliant City", "Otherworld", "Weirdworld", "Unknown Reality", "Unknown" }

--------------------------------------------------------------------------------
function p.sort_by_reality(frame)
	local function sort_name(reality_number)
		if tonumber(reality_number) ~= nil
			then output = string.rep('0', 15-#reality_number)..reality_number
			else output = reality_number
		end
		return output
	end
    local args = getArgs (frame)
    local value = args[1]
    local name
    local reality
    local info
    local output = ''
    
    if not h.isempty(value)
    	then
    		name, reality = p.lua_get_name_and_reality(value)
    		if reality ~= ''
    			then 
    				if name ~= ''
    					then output = name..' ('..reality.padded_number..')'
    					else output = reality.padded_number
    				end
    			else output = value
    		end
    end
    
    return output
end


--------------------------------------------------------------------------------
-- separate 'pagename' into name and reality. If reality is not empty, then information about it is returned from 'list_of_realities'
function p.lua_get_name_and_reality(pagename)
    local s_reverse
    local s_name = pagename
    local info = {}
    local s_reality = {}
    local i
 
    if not h.isempty(pagename)
        then
            pagename = string.gsub(pagename,'_',' ')
            s_reverse = string.reverse(pagename)
            i = string.find(s_reverse,'( ',1,true)
            j = string.find(s_reverse,')',1,true)
            if not h.isempty(i)
                then
                    s_name = string.reverse( string.sub(s_reverse, i+2, #s_reverse) )
                    s_reality = string.reverse( string.sub(s_reverse, j+1, i-1) )
                    info = p.get_reality_info({s_reality})
                    if not h.isempty(info)
                        then s_reality = info
                        else s_reality = ''
                    end
                else
                    info = p.get_reality_info({pagename})
                    if not h.isempty(info)
                        then 
                        	s_name = ''
                        	s_reality = info
                        else 
                        	s_name = pagename
                        	s_reality = ''
                    end
            end
    end
 
    return s_name, s_reality
end


--------------------------------------------------------------------------------
function p.get_reality_info(frame)
    local args = getArgs (frame)
    local reality = args[1]
    local part = args[2]
    local info
    local s2
    local s3
    local output = ''

    if not h.isempty(reality)
        then
            reality = string.gsub(reality, 'Earth%-', '')
            info = list_of_realities[reality]
            if info ~= nil
                then output = { 
                				['name'] = info[2], 
                				['description'] = info[1], 
                				['type'] = info[3], 
                				['number'] = reality,
                				['padded_number'] = p.padded_reality_number(reality),
                			}
                elseif tonumber(reality) ~= nil or string.match(reality, '^TRN%d+') ~= nil
                    then output = { 
                    				['name'] = "Earth-"..reality, 
                    				['description'] = "Earth-"..reality, 
                    				['type'] = "Comic", 
                    				['number'] = reality,
                    				['padded_number'] = p.padded_reality_number(reality),
                    			}
                    --else output = { ['name'] = reality, ['description'] = reality, ['type'] = "Comic" }
            end
    end
 
    if not h.isempty(part)
        then
            part = tonumber(part)
            if part == 3
                then output = output.type
                elseif part == 2
                    then output = output.description
                else output = output.name
            end
    end
 
    return output
end

--------------------------------------------------------------------------------
function p.padded_reality_number(reality_number)
	local output = ''
	
	if tonumber(reality_number) ~= nil
		then output = 'Earth-'..string.rep('0', 15-#reality_number)..reality_number
		elseif string.find(reality_number, 'TRN') ~= nil
			then output = 'Earth-'..reality_number
		else
			output = reality_number
	end
	
	return output
end


return p