Home
Random
Log in
Settings
About Brighter Shores Wiki
Disclaimers
Search
Editing
Module:Param Parse
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
--[=[ -- Standardized functions to parse Infobox params --]=] -- <nowiki> require('strict') local Infobox = require('Module:Infobox') local currency = require('Module:Currency').parse local parse = {} -- Generic functions -- ----------------------- -- Standardized "has content" function function parse.has_content(arg) -- Return arg if any non-whitespace character is found return string.match(arg or '', '%S') and arg or nil end -- Standardized numbers function parse.number(num) 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 -- Yes/No local yes_no = { ['Yes'] = 'true', ['No'] = 'false', ['N/A'] = 'NIL', } function parse.yes_no(text) if yes_no[text] ~= nil then return text end return nil end function parse.yes_no_smw(text) if text == 'N/A' then return nil end local bool = yes_no[text] if bool ~= nil then return bool end return nil end -- Premade Params -- -------------------- -- Standardized actions function parse.actions = { name = 'actions', func = parse.has_content, } -- Standardized name function parse.name = { name = 'name', func = parse.has_content, smw_property = 'Name', category_incomplete = 'Needs name', } local rarities = {"Common", "Uncommon", "Rare", "Epic"} function parse.get_rarity_func(name) for _, rarity in ipairs(rarities) do 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 function parse.description_func(description, examine) if not description and examine then description = examine end return parse.has_content(description) end parse.description = { name = 'description', func = {name = parse.description_func, params = {Infobox.raw_param('description'), Infobox.raw_param('examine')}}, smw_property = 'Description', category_incomplete = 'Needs description', } -- Standardized image function function parse.image_name(img) if img then return string.match(img, '%[%[(File:.+%.%w%w%w)|?%d*x?%d*p?x?%]%]') end return nil end function parse.image_height(img, default) if img then return string.match(img, '%[%[File:.+%.%w%w%w|%d*x(%d*)px%]%]') or default end return default end function parse.image_width(img, default) if img then return string.match(img, '%[%[File:.+%.%w%w%w|(%d*)x?%d*px%]%]') or default end return default end function parse.image_func(img, default_width, default_height) local name = parse.image_name(img) local width = parse.image_width(img, default_width) local height = parse.image_height(img, default_height) local size = '' if width and height then size = '|'..width..'x'..height..'px' elseif width then size = '|'..width..'px' elseif height then size = '|x'..height..'px' end if name then return '[['..name..size..']]' end return nil end function parse.image_smw(img) return parse.image_name(img) end parse.image = { name = 'image', func = parse.image_func, smw_property = 'Image', smw_func = parse.image_smw, empty = '[[Special:Upload|Please upload an image!]]', category_incomplete = 'Needs image', } parse.image_size300 = { name = 'image', func = {name = parse.image_func, params = {Infobox.raw_param('image'), 300, 300}}, smw_property = 'Image', smw_func = parse.image_smw, empty = '[[Special:Upload|Please upload an image!]]', category_incomplete = 'Needs image', } -- Episode local valid_episodes = { ['none'] = 'None', ['hopeport'] = 'Hopeport', ['hopeforest'] = 'Hopeforest', ['mine of mantuban'] = 'Mine of Mantuban', ['crenopolis'] = 'Crenopolis', ['stonemaw hill'] = 'Stonemaw Hill', ['bleakholm crags'] = 'Bleakholm Crags' } function parse.episode_func(episode) local valid_episode = valid_episodes[string.lower(episode or '')] if valid_episode then if valid_episode == 'None' then return '[[File:Unknown episode icon.png|18px|link=]] None' else return '[[File:'..valid_episode..' episode icon.png|18px|link='..valid_episode..']] [['..valid_episode..']]' end end return nil end function parse.episode_smw(episode) local valid_episode = valid_episodes[string.lower(episode or '')] if valid_episode then return valid_episode end return nil end parse.episode = { name = 'episode', func = parse.episode_func, smw_property = 'Episode', smw_func = parse.episode_smw, category_incomplete = 'Needs episode', } parse.additional_episode = { name = 'additional_episode', func = parse.episode_func, smw_property = 'Additional Episode', smw_func = parse.episode_smw, category_complete = 'Infobox with two episodes', } -- Premium local premium_episodes = { ['none'] = 'No', ['hopeport'] = 'No', ['hopeforest'] = 'No', ['mine of mantuban'] = 'Yes', ['crenopolis'] = 'Yes', ['stonemaw hill'] = 'Yes', ['bleakholm crags'] = 'Yes' } function parse.premium_func(episode) local premium_episode = premium_episodes[string.lower(episode or '')] return premium_episode end function parse.premium_smw(episode) return parse.yes_no_smw(parse.premium_func(episode)) end parse.premium = { name = 'premium', func = {name = parse.premium_func, params = {Infobox.raw_param('episode')}}, smw_property = 'Premium', smw_func = {name = parse.premium_smw, params = {Infobox.raw_param('episode')}} } -- Release local function unix_time(date) -- Convert a time to unix time if date == nil then return nil end local year, month, day = string.match(date, '(%d+)-(%d+)-(%d+)') if year == nil or month == nil or day == nil then return nil end return os.time{year=year, month=month, day=day} end function parse.release_func(date) local time = unix_time(date) if time == nil then return nil end local formatted_date = os.date('[[%d %B]] [[%Y]]', time) -- [[01 January]] [[2024]] formatted_date = string.gsub(formatted_date, '%[%[0', '[[') -- Convert [[01 January]] [[2024]] to [[1 January]] [[2024]] local iso_date = os.date('%Y-%m-%d', time) -- 2024-01-01 local update_string = formatted_date .. ' ([[Game updates/' .. iso_date .. '|Update]])' return update_string end function parse.release_smw(date) local time = unix_time(date) if time == nil then return nil end local formatted_date = os.date('%Y-%m-%d', time) -- 2024-01-01 return formatted_date end parse.release = { name = 'release', func = parse.release_func, category_incomplete = 'Needs release date', smw_property = 'Release Date', smw_func = parse.release_smw, } -- Value function parse.value_func(val) local status, val = pcall(currency, val) if status then return val end end parse.value = { name = 'value', func = parse.value_func, category_incomplete = 'Items needing value', smw_property = 'Value', smw_func = parse.number } -- Profession function parse.profession_bubble_func(profession, level) local profession_valid = parse.has_content(profession) local profession_valid_link = profession_valid local level_valid = parse.number_or_number_range(level) local category_error = false 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 = '' category_error = true end if profession_valid and not level_valid then -- Profession defined without level, invalid, show an unknown level level_valid = '?' category_error = true end return '[[File:'..profession_valid..' icon.png|x30px|link='..profession_valid_link..']] '..level_valid..(category_error and '[[Category:Invalid profession bubble]]' or '') end function parse.profession_bubble_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 profession_valid..','..level_valid end parse.profession_bubble_a = { name = 'profession_bubble_a', func = {name = parse.profession_bubble_func, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('profession_a_level')}}, smw_property = 'Profession Requirement A', smw_func = {name = parse.profession_bubble_smw, params = {Infobox.raw_param('profession_a'), Infobox.raw_param('profession_a_level')}}, } parse.profession_a_smw = { name = 'profession_a', func = parse.has_content, smw_property = 'Profession A', } parse.profession_a_level_smw = { name = 'profession_a_level', func = parse.number_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 = { name = 'profession_bubble_b', func = {name = parse.profession_bubble_func, params = {Infobox.raw_param('profession_b'), Infobox.raw_param('profession_b_level')}}, smw_property = 'Profession Requirement B', smw_func = {name = parse.profession_bubble_smw, params = {Infobox.raw_param('profession_b'), Infobox.raw_param('profession_b_level')}}, } parse.profession_b_smw = { name = 'profession_b', func = parse.has_content, smw_property = 'Profession B', } parse.profession_b_level_smw = { name = 'profession_b_level', func = parse.number_or_number_range_low, smw_property = 'Profession Level B', } parse.profession_b_level_high_smw = { name = 'profession_b_level_high', func = {name = parse.number_or_number_range_high, params = {Infobox.raw_param('profession_b_level')}}, smw_property = 'Profession Level B High', } parse.profession = { name = 'profession', func = parse.has_content, category_incomplete = 'Needs profession', smw_property = 'Profession' -- TODO - Need to create property page } parse.variant = { name = 'variant', func = parse.has_content, smw_property = 'Variant of', category_incomplete = 'Needs variant' } parse.passive = { name = 'passive', func = parse.yes_no, smw_property = 'Passive', smw_func = parse.yes_no_smw, category_incomplete = 'Needs passiveness' } parse.aggressive = { name = 'aggressive', func = parse.yes_no, smw_property = 'Aggressive', smw_func = parse.yes_no_smw, category_incomplete = 'Needs aggressiveness' } function parse.difficulty_func(val) if val == "0" then return "βββββ" end if val == "1" then return "β ββββ" end if val == "2" then return "β β βββ" end if val == "3" then return "β β β ββ" end if val == "4" then return "β β β β β" end if val == "5" then return "β β β β β " 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 -- Quest difficulty parse.difficulty = { name = 'difficulty', 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 -- </nowiki>
Summary:
Please note that all contributions to Brighter Shores Wiki are considered to be released under the CC BY-NC-SA 3.0 (see
Brighter Shores:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Templates used on this page:
Template:Documentation
(
edit
)
Template:Extension DPL
(
edit
)
Module:Array
(
edit
)
Module:Currency
(
edit
)
Module:DPLlua
(
edit
)
Module:DependencyList
(
edit
)
Module:Documentation
(
edit
)
Module:Infobox
(
edit
)
Module:Infobox Emote
(
edit
)
Module:Infobox Episode
(
edit
)
Module:Infobox Item
(
edit
)
Module:Infobox Monster
(
edit
)
Module:Infobox NPC
(
edit
)
Module:Infobox Profession
(
edit
)
Module:Infobox Quest
(
edit
)
Module:Infobox Room
(
edit
)
Module:Infobox Scenery
(
edit
)
Module:Infobox Shop
(
edit
)
Module:Infobox Skill Node
(
edit
)
Module:Infobox Spell
(
edit
)
Module:Param Parse
(
edit
)
Module:Param Parse/doc
(
edit
)
Module:Paramtest
(
edit
)
Module:Sandbox/User:The Gaffer/Modules/Infobox Recipe
(
edit
)
Module:Tooltip
(
edit
)
Module:Yesno
(
view source
) (semi-protected)
This page is a member of a hidden category:
Category:Pages using DynamicPageList3 parser function