Module:Lang: Difference between revisionsGive feedback
m Added overrides for AuraFireRateBonus and MoveSlowDuration |
added processing of InlineAttributeName and InlineAttributeIcon |
||
| Line 49: | Line 49: | ||
local function process_html_tags(text, frame) | local function process_html_tags(text, frame) | ||
if not text or type(text) ~= "string" then return text end | if not text or type(text) ~= "string" then return text end | ||
local replacements = { | local replacements = { | ||
BonusFireRate = {icon='{{Icon/Brown|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
BonusMoveSpeed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Move speed|20px]]}}', label_color='#ffefd7', link='Move speed'}, | |||
BonusSprintSpeed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Sprint speed|20px]]}}', label_color='#ffefd7', link='Sprint speed'}, | |||
BonusSpiritDamage = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
BonusWeaponDamage = {icon='{{Icon/NoColor|[[File:Bullet Damage.png|link=Weapon Damage|20px]]}}', label_color='#ec981a', link='Weapon Damage'}, | |||
bullet_armor_up = {icon='{{Icon/White|[[File:Barrier.png|link=Barrier|20px]]}}', label_color='#ffefd7', link='Barrier'}, | |||
bullet_damage = {icon='{{Icon/Brown|[[File:Damage.png|link=Weapon Damage|20px]]}}', label_color='#ec981a', link='Weapon Damage'}, | |||
BulletResist = {icon='{{Icon/Brown|[[File:Bullet_Armor.png|link=Damage_Resistance|20px]]}}', label_color='#ec981a', link='Damage_Resistance'}, | |||
cast = {icon='{{Icon/White|[[File:Cast.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
CombatBarrier = {icon='{{Icon/White|[[File:Bullet Armor (item).png|link=Damage_Resistance|20px]]}}', label_color='#ffefd7', link='Barrier'}, | |||
cooldown = {icon='{{Icon/White|[[File:AttributeIconTechDuration.png|link=Ability Cooldown|20px]]}}', label_color='#ffefd7', link='Ability Cooldown'}, | |||
damage = {icon='{{Icon/NoColor|[[File:Damage heart.png|link=Damage|20px]]}}', label_color='#ec981a', link='Damage'}, | |||
FireRate = {icon='{{Icon/White|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
fire_rate = {icon='{{Icon/White|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
Heal = {icon='{{Icon/Green|[[File:Healing.png|link=Health_Regen|20px]]}}', label_color='#13f278', link='Health_Regen'}, | |||
Healing = {icon='{{Icon/Green|[[File:Healing.png|link=Healing|20px]]}}', label_color='#13f278', link='Healing'}, | |||
Immobilize = {icon='{{Icon/White|[[File:Immobilize.png|link=Status Effects#Immobilized|20px]]}}', label_color='#ffefd7', link='Status Effects#Immobilized'}, | |||
invisible = {icon='{{Icon/White|[[File:Invisible.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
KnockBack = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
KnockUp = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
MaxHealth = {icon='{{Icon/Green|[[File:Healing.png|link=Health|20px]]}}', label_color='#13f278', link='Health'}, | |||
MeleeDamage = {icon='{{Icon/Brown|[[File:Melee damage.png|link=Melee Damage|20px]]}}', label_color='#ec981a', link='Melee Damage'}, | |||
MoveSpeed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Move speed|20px]]}}', label_color='#ffefd7', link='Move speed'}, | |||
move_speed = {icon='{{Icon/Green|[[File:Move_speed.png|link=Move speed|20px]]}}', label_color='#ffefd7', link='Move speed'}, | |||
Pull = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
Pulling = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
Pulls = {icon='{{Icon/NoColor|[[File:Displacement.png|link=|20px]]}}', label_color='#ffefd7', link='Status_Effects'}, | |||
ReducedFireRate = {icon='{{Icon/Brown|[[File:Fire_Rate.png|link=Fire Rate|20px]]}}', label_color='#ffefd7', link='Fire Rate'}, | |||
Regen = {icon='{{Icon/Green|[[File:Healing.png|link=Health_Regen|20px]]}}', label_color='#13f278', link='Health_Regen'}, | |||
revealed = {icon='{{Icon/White|[[File:Revealed.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
silence = {icon='{{Icon/White|[[File:Silence.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
Silence = {icon='{{Icon/Purple|[[File:Silence.png|link=Silence|20px]]}}', label_color='#bc8ee8', link='Silence'}, | |||
Slow = {icon='{{Icon/White|[[File:MoveSlow.png|link=Movement_Slow|20px]]}}', label_color='#ffefd7', link='Movement_Slow'}, | |||
slow = {icon='{{Icon/White|[[File:MoveSlow.png|link=Movement_Slow|20px]]}}', label_color='#ffefd7', link='Movement_Slow'}, | |||
SlowResistance = {icon='{{Icon/White|[[File:MoveSlow.png|link=Movement_Slow#Movement_Slow_Resist|20px]]}}', label_color='#ffefd7', link='Movement_Slow#Movement_Slow_Resist'}, | |||
Spirit = {icon='{{Icon/NoColor|[[File:Spirit_icon.png|link=Spirit Power|20px]]}}', label_color='#bc8ee8', link='Spirit Power'}, | |||
SpiritDamage = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
SpiritDPS = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
SpiritIcon = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', link='Spirit Damage'}, | |||
SpiritResist = {icon='{{Icon/Purple|[[File:Spirit_Armor.png|link=Damage_Resistance|20px]]}}', label_color='#bc8ee8', link='Damage_Resistance'}, | |||
StatDesc_TechPower = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', label_color='#bc8ee8', link='Spirit Damage'}, | |||
Stun = {icon='{{Icon/White|[[File:Status_Stun.png|link=Stun|20px]]}}', link='Stun'}, | |||
stun = {icon='{{Icon/White|[[File:Stun.png|link=|20px]]}}', label_color='#ffefd7', link=''}, | |||
tech_armor_up = {icon='{{Icon/White|[[File:Barrier.png|link=Barrier|20px]]}}', label_color='#ffefd7', link='Barrier'}, | |||
tech_damage = {icon='{{Icon/NoColor|[[File:AttributeIconTechShieldHealth.png|link=Spirit Damage|12px]]}}', link='Spirit Damage'}, | |||
WeaponDamage = {icon='{{Icon/NoColor|[[File:Bullet Damage.png|link=Weapon Damage|20px]]}}', label_color='#ec981a', link='Weapon Damage'}, | |||
} | |||
-- | -- 1. Highlight, diminish | ||
text = text:gsub('<span class="highlight">(.-)</span>', "<span style= font-weight:bold>%1</span>") | text = text:gsub('<span class="highlight">(.-)</span>', "<span style='font-weight:bold'>%1</span>") | ||
text = text:gsub('<span class="highlight_spirit">(.-)</span>', '<span style="font-weight:bold; color:#bc8ee8">%1</span>') | text = text:gsub('<span class="highlight_spirit">(.-)</span>', '<span style="font-weight:bold; color:#bc8ee8">%1</span>') | ||
text = text:gsub('<span class="diminish">(.-)</span>', '<span style="font-style: italic;color:#C0C0C0">%1</span>') | text = text:gsub('<span class="diminish">(.-)</span>', '<span style="font-style:italic;color:#C0C0C0">%1</span>') | ||
text = text:gsub('< | -- 2. InlineAttributeName | ||
text = text:gsub('<span class="InlineAttributeName (%w+)">(.-)</span>', function(key, inner) | |||
local replacement = replacements[key] | local replacement = replacements[key] | ||
local label_color = replacement and replacement.label_color or '#ffefd7' | |||
local translated | |||
if inner and inner ~= '' then | |||
translated = inner | |||
else | else | ||
translated = frame:preprocess('{{#invoke:Lang|get_string|InlineAttribute_' .. key .. '}}') | |||
end | end | ||
return string.format('<span style="font-weight:bold; color:%s;">%s</span>', label_color, translated) | |||
end) | end) | ||
-- | |||
-- 3. AbilityPropertyIcon | |||
text = text:gsub('<[Pp]anel class="AbilityPropertyIcon prop_(.-)"[^>]->', function(key) | |||
local replacement = replacements[key] | |||
if replacement then | |||
local icon = replacement.icon or '' | |||
local label_color = replacement.label_color or 'inherit' | |||
local link = replacement.link or '' | |||
local translated = frame:preprocess('{{#invoke:Lang|get_string|InlineAttribute_' .. key .. '}}') | |||
if translated == '' then | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s</span>', label_color, icon) | |||
else | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s [[%s|%s]]</span>', label_color, icon, link, translated) | |||
end | |||
else | |||
return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end | |||
end) | |||
-- 4. InlineAttributeIcon | |||
text = text:gsub('<[Pp]anel class="InlineAttributeIcon (%w+)"[^>]->', function(key) | |||
local replacement = replacements[key] | local replacement = replacements[key] | ||
if replacement then | if replacement then | ||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s</span>', replacement.label_color or 'inherit', replacement.icon or '') | |||
else | else | ||
return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red; | return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | ||
end | end | ||
end) | end) | ||
-- | -- 5. citadel_inline_attribute | ||
text = text:gsub("{g:citadel_inline_attribute:'(.-)'}", function(key) | |||
local replacement = replacements[key] | |||
if replacement then | |||
local icon = replacement.icon or '' | |||
local label_color = replacement.label_color or 'inherit' | |||
local link = replacement.link or '' | |||
local translated = frame:preprocess('{{#invoke:Lang|get_string|InlineAttribute_' .. key .. '}}') | |||
if translated == '' then | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s</span>', label_color, icon) | |||
else | |||
return string.format('<span class="no-blue-link" style="font-weight:bold; color:%s;">%s [[%s|%s]]</span>', label_color, icon, link, translated) | |||
end | |||
else | |||
return '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end | |||
end) | |||
-- 6. Удаляем закрывающие теги panel | |||
text = text:gsub('</[Pp]anel>', '') | |||
-- 7. Keybinds | |||
local KEYBINDS = { | |||
MoveForward = "'''Move Forward button'''", | MoveForward = "'''Move Forward button'''", | ||
MoveBackwards = "'''Move Backward button'''", | MoveBackwards = "'''Move Backward button'''", | ||
| Line 167: | Line 182: | ||
MoveDown = "'''Fly Down button'''", | MoveDown = "'''Fly Down button'''", | ||
MoveUp = "'''Fly Up button'''", | MoveUp = "'''Fly Up button'''", | ||
Attack = "'''Fire button'''", | Attack = "'''Fire button'''", | ||
ADS = "'''Alt-Fire button'''", | ADS = "'''Alt-Fire button'''", | ||
| Line 174: | Line 187: | ||
AbilityMelee = "'''Melee button'''", | AbilityMelee = "'''Melee button'''", | ||
HeldItem = "'''Melee Parry/Throw Held Item button'''", | HeldItem = "'''Melee Parry/Throw Held Item button'''", | ||
Ability1 = "'''Ability 1 button'''", | Ability1 = "'''Ability 1 button'''", | ||
Ability2 = "'''Ability 2 button'''", | Ability2 = "'''Ability 2 button'''", | ||
| Line 181: | Line 192: | ||
Ability4 = "'''Ability 4 button'''", | Ability4 = "'''Ability 4 button'''", | ||
AltCast = "'''Alternate Cast'''", | AltCast = "'''Alternate Cast'''", | ||
OpenHeroSheet = "'''Open Shop button'''", | OpenHeroSheet = "'''Open Shop button'''", | ||
PurchaseQuickbuy = "'''Purchase Quickbuy button'''", | PurchaseQuickbuy = "'''Purchase Quickbuy button'''", | ||
Scoreboard = "'''Scoreboard button'''", | Scoreboard = "'''Scoreboard button'''", | ||
OpenMainMenu = "'''Open Main Menu button'''", | OpenMainMenu = "'''Open Main Menu button'''", | ||
PushToTalk = "'''Voice Chat button'''", | PushToTalk = "'''Voice Chat button'''", | ||
Pause = "'''Pause button'''", | Pause = "'''Pause button'''", | ||
ReplayDeath = "'''Replay Death button'''", | ReplayDeath = "'''Replay Death button'''", | ||
| Line 197: | Line 202: | ||
HideoutCancelMatchmaking = "'''Cancel Matchmaking button'''", | HideoutCancelMatchmaking = "'''Cancel Matchmaking button'''", | ||
} | } | ||
text = text:gsub("{g:citadel_binding:'(.-)'}", function(key) | |||
return KEYBINDS[key] or '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end) | |||
text = text:gsub("{g:citadel_keybind:'(.-)'}", function(key) | |||
return KEYBINDS[key] or '<span style="color:red;font-weight:bold;border-bottom:1px dotted red;">['..key..']</span>' | |||
end) | |||
-- Force spaces around keybinds | |||
-- Force spaces around keybinds | |||
text = text:gsub("'''([a-zA-Z])", "''' %1") | text = text:gsub("'''([a-zA-Z])", "''' %1") | ||
text = text:gsub("'''%s+:", "''':") | text = text:gsub("'''%s+:", "''':") | ||
return frame:preprocess(text) | |||
end | end | ||