Module:Param Parse: Difference between revisions

6,516 bytes added ,  Yesterday at 20:35
Append hours to duration param
(Specify what episode is secondary)
(Append hours to duration param)
 
(72 intermediate revisions by 11 users not shown)
Line 3:
--]=]
-- <nowiki>
require('strict')
local Infobox = require('Module:Infobox')
local currency = require('Module:Currency').parse
Line 21 ⟶ 22:
num = string.gsub(num or '',',','')
return tonumber(num)
end
 
-- Standardized number range: Accepts '1' and '1-5'
function parse.number_or_number_range(prenum)
if not prenum then return end
local ret = ''
local count = 0
for out in string.gmatch(prenum, "[^-]+") do
if count == 1 then
ret = ret .. "➨\n"
elseif count == 3 then
return nil
end
local num = parse.number(out)
if num == nil then
return nil
end
ret = ret .. num
count = count + 1
end
if count == 0 then
return nil
end
return ret
end
 
function parse.number_or_number_range_low(prenum)
if not prenum then return end
local count = 0
local value = nil
for out in string.gmatch(prenum, "[^-]+") do
if parse.number(out) == nil then
return nil
end
count = count + 1
if count == 1 then
value = out
end
if count > 2 then
return nil
end
end
return parse.number(value)
end
 
function parse.number_or_number_range_high(prenum)
if not prenum then return end
local count = 0
local value = nil
for out in string.gmatch(prenum, "[^-]+") do
if parse.number(out) == nil then
return nil
end
count = count + 1
if count == 2 then
value = out
end
if count > 2 then
return nil
end
end
return parse.number(value)
end
 
Line 48 ⟶ 111:
-- Premade Params --
--------------------
 
-- Standardized actions function
parse.actions = {
name = 'actions',
func = parse.has_content,
}
 
-- Standardized name function
Line 56 ⟶ 125:
category_incomplete = 'Needs name',
}
local rarities = {"Common", "Uncommon", "Rare", "Epic"}
-- Standardized examine function
function parse.get_rarity_func(name)
parse.examine = {
for _, rarity in ipairs(rarities) do
name = 'examine',
if name:sub(1, #rarity) == rarity then
return rarity
end
end
return nil
end
parse.rarity_from_name = {
name = 'rarity_from_name',
func = {name = parse.get_rarity_func, params = {Infobox.raw_param('name')}}
}
 
-- Standardized description function
parse.description = {
name = 'description',
func = parse.has_content,
smw_property = 'ExamineDescription',
category_incomplete = 'Needs examinedescription',
}
 
Line 128 ⟶ 211:
['hopeforest'] = 'Hopeforest',
['mine of mantuban'] = 'Mine of Mantuban',
['crenopolis'] = 'Crenopolis',
['stonemaw hill'] = 'Stonemaw Hill',
['bleakholm crags'] = 'Bleakholm Crags'
}
function parse.episode_func(episode)
Line 136 ⟶ 221:
return '[[File:Unknown episode icon.png|18px|link=]] None'
else
localreturn page_name'[[File:'..valid_episode..' =episode icon.png|18px|link='..valid_episode .. ']] (episode)[['..valid_episode..']]'
-- Check if the page with '(episode)' exists
if mw.title.new(page_name).exists then
return '[[File:'..valid_episode..' episode icon.png|18px|link='..page_name..']] [['..page_name..'|'..valid_episode..']]'
else
-- Fallback to the original episode name
return '[[File:'..valid_episode..' episode icon.png|18px|link='..valid_episode..']] [['..valid_episode..']]'
end
end
end
Line 162 ⟶ 240:
category_incomplete = 'Needs episode',
}
function parse.additional_episode_smw(episode)
local valid_episode = valid_episodes[string.lower(episode or '')]
if valid_episode then
return "additional_" .. valid_episode
end
return nil
end
parse.additional_episode = {
name = 'additional_episode',
func = parse.episode_func,
smw_property = 'additional_episodeAdditional Episode',
smw_func = parse.additional_episode_smwepisode_smw,
category_complete = 'Infobox with two episodes',
category_incomplete = '',
}
 
Line 183 ⟶ 254:
['hopeforest'] = 'No',
['mine of mantuban'] = 'Yes',
['crenopolis'] = 'Yes',
['stonemaw hill'] = 'Yes',
['bleakholm crags'] = 'Yes'
}
function parse.premium_func(episode)
Line 200 ⟶ 273:
 
-- Release
local function unix_time(date)
-- Convert a time to unix time
if date == nil then
Line 240 ⟶ 313:
-- Value
function parse.value_func(val)
local status, val = pcall(currency, val)
return currency(val)
if status then
return val
end
end
parse.value = {
Line 250 ⟶ 326:
}
 
-- Profession (TODO)
function parse.profession_bubble_func(profession, level)
local profession_valid = parse.has_content(profession)
local profession_valid_link = profession_valid
local level_valid = parse.numbernumber_or_number_range(level)
local category_error = false
if not profession_valid and not level_valid then
Line 296 ⟶ 372:
parse.profession_a_level_smw = {
name = 'profession_a_level',
func = parse.numbernumber_or_number_range_low,
smw_property = 'Profession Level A',
}
parse.profession_a_level_high_smw = {
name = 'profession_a_level_high',
func = {name = parse.number_or_number_range_high, params = {Infobox.raw_param('profession_a_level')}},
smw_property = 'Profession Level A High',
}
parse.profession_bubble_b = {
Line 312 ⟶ 393:
parse.profession_b_level_smw = {
name = 'profession_b_level',
func = parse.numbernumber_or_number_range_low,
smw_property = 'Profession Level B',
}
parse.profession_b_level_high_smw = {
 
name = 'profession_b_level_high',
parse.profession = {
func = {name = parse.number_or_number_range_high, params = {Infobox.raw_param('profession_b_level')}},
name = 'profession',
smw_property = 'Profession Level B High',
func = parse.has_content,
category_incomplete = 'Needs profession',
smw_property = 'Profession' -- TODO - Need to create property page
}
 
Line 326 ⟶ 405:
name = 'variant',
func = parse.has_content,
smw_property = 'Variant of',
category_incomplete = 'Needs variant'
}
 
Line 335 ⟶ 415:
smw_func = parse.yes_no_smw,
category_incomplete = 'Needs passiveness'
}
 
function parse.duration_func(hours)
hours = string.gsub(hours or '',',','')
return (tonumber(hours) .. " Hours")
end
 
parse.duration = {
name = 'duration',
func = parse.duration_func,
smw_property = 'Duration',
category_incomplete = 'Needs duration',
}
 
parse.aggressive = {
name = 'aggressive',
func = parse.yes_no,
smw_property = 'Aggressive',
smw_func = parse.yes_no_smw,
category_incomplete = 'Needs aggressiveness'
}
 
Line 357 ⟶ 457:
end
return "N/A"
end
function parse.difficulty_smw(val)
if val == 'N/A' then
return -1
end
val = tonumber(val) -- Intentionally do not use parse.tonumber here
if val == nil then
return nil
end
if val >= 0 and val <= 5 and math.floor(val) == val then
return val
end
return nil
end
 
Line 364 ⟶ 477:
func = parse.difficulty_func,
smw_property = 'Difficulty',
smw_func = parse.difficulty_smw,
category_incomplete = 'Needs difficulty'
}
 
local valid_quest_types = {
['main'] = 'Main',
['side'] = 'Side'
}
function parse.quest_type_func(type)
local valid_type = valid_quest_types[string.lower(type or '')]
if valid_type then
return valid_type
else
return 'None'
end
return nil
end
function parse.quest_type_smw(type)
local valid_type = valid_quest_types[string.lower(type or '')]
if valid_type then
return valid_type
end
return nil
end
 
-- Quest type
parse.quest_type = {
name = 'quest_type',
func = parse.quest_type_func,
smw_property = 'quest_type',
smw_func = parse.quest_type_smw,
category_incomplete = 'Needs quest_type'
}
 
-- Quest
function parse.quest_smw(quest)
if quest == 'No' then
return nil
end
return parse.has_content(quest)
end
 
parse.quest = {
name = 'quest',
func = parse.has_content,
smw_property = 'Quest',
smw_func = parse.quest_smw,
category_incomplete = 'Needs quest'
}
 
-- Unlock Level
function parse.unlock_level_func(profession, level)
local level_valid = parse.number(level)
local profession_valid = parse.has_content(profession)
local profession_valid_link = profession_valid
if not profession_valid and not level_valid then
return nil
end
if not profession_valid and level_valid then
-- Profession undefined but level defined, invalid, show an unknown profession
profession_valid = 'Unknown episode'
profession_valid_link = ''
end
if profession_valid and not level_valid then
-- Profession defined without level, invalid, show an unknown level
level_valid = '?'
end
return '[[File:'..profession_valid..'_icon.png|link='..profession_valid_link..'|width=18x18]] '..level_valid
end
 
function parse.unlock_level_smw(profession, level)
local profession_valid = parse.has_content(profession)
local level_valid = parse.number(level)
if not profession_valid then
return nil
end
if not level_valid then
return nil
end
return level_valid
end
 
parse.unlock_level = {
name = 'unlock_level',
func = {name = parse.unlock_level_func, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('unlock_level')}},
smw_property = 'Unlock level',
smw_func = {name = parse.unlock_level_smw, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('unlock_level')}},
category_incomplete = 'Needs unlock level',
}
 
-- Knowledge
parse.knowledge = {
name = 'knowledge',
func = parse.number,
smw_property = 'Knowledge',
category_incomplete = 'Needs knowledge',
}
 
parse.health = {
name = 'health',
func = parse.number,
smw_property = 'Health',
category_incomplete = 'Needs health',
}
 
parse.experience = {
name = 'experience',
func = parse.number,
smw_property = 'Experience',
category_incomplete = 'Needs experience',
}
 
local valid_attack_styles = {
['none'] = 'None',
['impact'] = 'Impact',
['cryonae'] = 'Cryonae',
['arborae'] = 'Arborae',
['tempestae'] = 'Tempestae',
['infernae'] = 'Infernae',
['necromae'] = 'Necromae',
}
 
local function attack_style_func(style)
local attack_style = valid_attack_styles[string.lower(style or '')]
if attack_style then
if attack_style == 'None' then
return 'None'
else
return string.format('[[File:%s damage icon.png|18px|link=%s]] [[%s]]', attack_style, attack_style, attack_style)
end
end
return nil
end
 
local function attack_style_smw(style)
local attack_style = valid_attack_styles[string.lower(style or '')]
if attack_style then
return attack_style
else
return nil
end
end
 
parse.attack_style = {
name = 'attack_style',
func = attack_style_func,
smw_property = 'Attack style',
smw_func = attack_style_smw,
category_incomplete = 'Needs attack style',
}
 
parse.immune_to = {
name = 'immune_to',
func = attack_style_func,
smw_property = 'Immune to',
smw_func = attack_style_smw,
category_incomplete = 'Needs immune to',
}
 
parse.vulnerable_to = {
name = 'vulnerable_to',
func = attack_style_func,
smw_property = 'Vulnerable to',
smw_func = attack_style_smw,
category_incomplete = 'Needs vulnerable to',
}
 
return parse
592

edits