Index: binaries/data/mods/mod/gui/common/guitags.js =================================================================== --- binaries/data/mods/mod/gui/common/guitags.js +++ binaries/data/mods/mod/gui/common/guitags.js @@ -6,4 +6,10 @@ return '[color="' + color + '"]' + text + '[/color]'; } -//TODO: font setter +/** + * Add font to text string. + */ +function setFont(text, font) +{ + return '[font="' + font + '"]' + text + '[/font]'; +} Index: binaries/data/mods/public/gui/civinfo/civinfo.js =================================================================== --- binaries/data/mods/public/gui/civinfo/civinfo.js +++ binaries/data/mods/public/gui/civinfo/civinfo.js @@ -21,7 +21,7 @@ */ function bigFirstLetter(str, size) { - return '[font="sans-bold-' + (size + 6) + '"]' + str[0] + '[/font]' + '[font="sans-bold-' + size + '"]' + str.substring(1) + '[/font]'; + return setFont(str[0], 'sans-bold-' + (size + 6)) + setFont(str.substring(1), 'sans-bold-' + size); } /** @@ -45,7 +45,7 @@ if (word.length && word[0].toLowerCase() != word[0]) textArray[i] = bigFirstLetter(wordCaps, size); else - textArray[i] = '[font="sans-bold-' + size + '"]' + wordCaps + '[/font]'; // TODO: Would not be necessary if we could do nested tags + textArray[i] = setFont(wordCaps, 'sans-bold-' + size); // TODO: Would not be necessary if we could do nested tags } return textArray.join(" "); @@ -71,7 +71,7 @@ { if (!obj.Name) return ""; - let string = '[font="sans-bold-14"]' + obj.Name + '[/font] '; + let string = setFont(obj.Name, "sans-bold-14"); if (obj.History) string += '[icon="iconInfo" tooltip="' + escapeQuotation(obj.History) + '" tooltip_style="civInfoTooltip"]'; if (obj.Description) Index: binaries/data/mods/public/gui/common/functions_global_object.js =================================================================== --- binaries/data/mods/public/gui/common/functions_global_object.js +++ binaries/data/mods/public/gui/common/functions_global_object.js @@ -135,7 +135,7 @@ Engine.PushGuiPage("page_msgbox.xml", { "width": 500, "height": 200, - "message": '[font="sans-bold-18"]' + msg + '[/font]', + "message": setFont(msg, "sans-bold-18"), "title": translate("Loading Aborted"), "mode": 2 }); Index: binaries/data/mods/public/gui/common/gamedescription.js =================================================================== --- binaries/data/mods/public/gui/common/gamedescription.js +++ binaries/data/mods/public/gui/common/gamedescription.js @@ -198,14 +198,14 @@ // Translation: Describe players of one team in a selected game, f.e. in the replay- or savegame menu or lobby return sprintf(translate("%(team)s:\n%(playerDescriptions)s"), { - "team": '[font="sans-bold-14"]' + teamCaption + "[/font]", + "team": setFont(teamCaption, "sans-bold-14"), "playerDescriptions": playerDescriptions[team].join("\n") }); }); if (playerDescriptions.observer) teamDescription.push(sprintf(translate("%(team)s:\n%(playerDescriptions)s"), { - "team": '[font="sans-bold-14"]' + translatePlural("Observer", "Observers", playerDescriptions.observer.length) + "[/font]", + "team": setFont(translatePlural("Observer", "Observers", playerDescriptions.observer.length), "sans-bold-14"), "playerDescriptions": playerDescriptions.observer.join("\n") })); Index: binaries/data/mods/public/gui/common/tooltips.js =================================================================== --- binaries/data/mods/public/gui/common/tooltips.js +++ binaries/data/mods/public/gui/common/tooltips.js @@ -186,10 +186,11 @@ "damage": template.armour[dmgType].toFixed(1), "damageType": unitFont(translateWithContext("damage type", g_DamageTypes.GetNames()[dmgType])), "armorPercentage": - '[font="sans-10"]' + - sprintf(translate("(%(armorPercentage)s)"), { - "armorPercentage": armorLevelToPercentageString(template.armour[dmgType]) - }) + '[/font]' + setFont( + sprintf(translate("(%(armorPercentage)s)"), { + "armorPercentage": armorLevelToPercentageString(template.armour[dmgType]) + }), + "sans-10") }) ).join(commaFont(translate(", "))) }); @@ -198,7 +199,7 @@ function damageTypesToText(dmg) { if (!dmg) - return '[font="sans-12"]' + translate("(None)") + '[/font]'; + return setFont(translate("(None)"), "sans-12"); return g_DamageTypes.GetTypes().filter( dmgType => dmg[dmgType]).map( @@ -593,11 +594,11 @@ let formatted = []; for (let resource in resources) formatted.push(sprintf(translate("%(component)s %(cost)s"), { - "component": '[font="sans-12"]' + resourceIcon(resource) + '[/font]', + "component": setFont(resourceIcon(resource), "sans-12"), "cost": resources[resource] })); return coloredText( - '[font="sans-bold-13"]' + translate("Insufficient resources:") + '[/font]', + setFont(translate("Insufficient resources:"), "sans-bold-13"), "red") + " " + formatted.join(" "); } @@ -701,13 +702,13 @@ function getEntityNamesFormatted(template) { if (!template.name.specific) - return '[font="sans-bold-16"]' + template.name.generic + "[/font]"; + return setFont(template.name.generic, "sans-bold-16"); // Translation: Example: "Epibátēs Athēnaîos [font="sans-bold-16"](Athenian Marine)[/font]" return sprintf(translate("%(specificName)s %(fontStart)s(%(genericName)s)%(fontEnd)s"), { "specificName": - '[font="sans-bold-16"]' + template.name.specific[0] + '[/font]' + - '[font="sans-bold-12"]' + template.name.specific.slice(1).toUpperCase() + '[/font]', + setFont(template.name.specific[0], "sans-bold-16") + + setFont(template.name.specific.slice(1).toUpperCase(), "sans-bold-12"), "genericName": template.name.generic, "fontStart": '[font="sans-bold-16"]', "fontEnd": '[/font]' Index: binaries/data/mods/public/gui/credits/credits.js =================================================================== --- binaries/data/mods/public/gui/credits/credits.js +++ binaries/data/mods/public/gui/credits/credits.js @@ -63,24 +63,24 @@ for (let object of list) { if (object.LangName) - result += "[font=\"sans-bold-stroke-14\"]" + object.LangName + "\n"; + result += setFont(object.LangNamem, "sans-bold-stroke-14") + "\n"; if (object.Title) - result += "[font=\"sans-bold-stroke-14\"]" + translate(object.Title) + "\n"; + result += setFont(translate(object.Title), "sans-bold-stroke-14") + "\n"; if (object.Subtitle) - result += "[font=\"sans-bold-14\"]" + translate(object.Subtitle) + "\n"; + result += setFont(translate(object.Subtitle), "sans-bold-14") + "\n"; if (object.List) { for (let element of object.List) { if (element.nick && element.name) - result += "[font=\"sans-14\"]" + sprintf(translate("%(nick)s - %(name)s"), { "nick": element.nick, "name": element.name }) + "\n"; + result += setFont(sprintf(translate("%(nick)s - %(name)s"), { "nick": element.nick, "name": element.name }), "sans-14") + "\n"; else if (element.nick) - result += "[font=\"sans-14\"]" + element.nick + "\n"; + result += setFont(element.nick, "sans-14") + "\n"; else if (element.name) - result += "[font=\"sans-14\"]" + element.name + "\n"; + result += setFont(element.name, "sans-14") + "\n"; } result += "\n"; Index: binaries/data/mods/public/gui/gamesetup/gamesetup.js =================================================================== --- binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -2216,7 +2216,7 @@ function senderFont(text) { - return '[font="' + g_SenderFont + '"]' + text + '[/font]'; + return setFont(text, g_SenderFont); } function systemMessage(message) Index: binaries/data/mods/public/gui/lobby/lobby.js =================================================================== --- binaries/data/mods/public/gui/lobby/lobby.js +++ binaries/data/mods/public/gui/lobby/lobby.js @@ -1457,7 +1457,7 @@ function senderFont(text) { - return '[font="' + g_SenderFont + '"]' + text + "[/font]"; + return setFont(text, g_SenderFont); } function formatWinRate(attr) Index: binaries/data/mods/public/gui/pregame/mainmenu.js =================================================================== --- binaries/data/mods/public/gui/pregame/mainmenu.js +++ binaries/data/mods/public/gui/pregame/mainmenu.js @@ -117,7 +117,7 @@ if (Engine.IsUserReportEnabled()) Engine.GetGUIObjectByName("userReportEnabledText").caption = - '[font="sans-bold-16"]' + translate("Thank you for helping improve 0 A.D.!") + "[/font]\n\n" + + setFont(translate("Thank you for helping improve 0 A.D.!"), "sans-bold-16") + "\n\n" + translate("Anonymous feedback is currently enabled.") + "\n" + sprintf(translate("Status: %(status)s."), { "status": formatUserReportStatus(Engine.GetUserReportStatus()) @@ -142,11 +142,11 @@ if (Engine.Renderer_GetRenderPath() == "fixed") messageBox( 600, 300, - "[font=\"sans-bold-16\"]" + - sprintf(translate("%(warning)s You appear to be using non-shader (fixed function) graphics. This option will be removed in a future 0 A.D. release, to allow for more advanced graphics features. We advise upgrading your graphics card to a more recent, shader-compatible model."), { - "warning": coloredText("Warning:", "200 20 20") - }) + - "\n\n" + + setFont( + sprintf(translate("%(warning)s You appear to be using non-shader (fixed function) graphics. This option will be removed in a future 0 A.D. release, to allow for more advanced graphics features. We advise upgrading your graphics card to a more recent, shader-compatible model."), { + "warning": coloredText("Warning:", "200 20 20") + }) + "\n\n" + + "sans-bold-16"), // Translation: This is the second paragraph of a warning. The // warning explains that the user is using “non-shader“ graphics, // and that in the future this will not be supported by the game, so Index: binaries/data/mods/public/gui/session/selection_details.js =================================================================== --- binaries/data/mods/public/gui/session/selection_details.js +++ binaries/data/mods/public/gui/session/selection_details.js @@ -184,13 +184,13 @@ if (entState.promotion.curr < entState.promotion.req) Engine.GetGUIObjectByName("experience").tooltip = sprintf(translate("%(experience)s %(current)s / %(required)s"), { - "experience": "[font=\"sans-bold-13\"]" + translate("Experience:") + "[/font]", + "experience": setFont(translate("Experience:"), "sans-bold-13"), "current": Math.floor(entState.promotion.curr), "required": entState.promotion.req }); else Engine.GetGUIObjectByName("experience").tooltip = sprintf(translate("%(experience)s %(current)s"), { - "experience": "[font=\"sans-bold-13\"]" + translate("Experience:") + "[/font]", + "experience": setFont(translate("Experience:"), "sans-bold-13"), "current": Math.floor(entState.promotion.curr) }); } @@ -324,7 +324,7 @@ let iconTooltips = []; if (genericName) - iconTooltips.push("[font=\"sans-bold-16\"]" + genericName + "[/font]"); + iconTooltips.push(setFont(genericName, "sans-bold-16")); iconTooltips = iconTooltips.concat([ getVisibleEntityClassesFormatted, Index: binaries/data/mods/public/gui/session/selection_panels.js =================================================================== --- binaries/data/mods/public/gui/session/selection_panels.js +++ binaries/data/mods/public/gui/session/selection_panels.js @@ -931,7 +931,7 @@ data.button.onPress = function() { performStance(data.unitEntStates.map(state => state.id), data.item); }; data.button.tooltip = getStanceDisplayName(data.item) + "\n" + - "[font=\"sans-13\"]" + getStanceTooltip(data.item) + "[/font]"; + setFont(getStanceTooltip(data.item), "sans-13"); data.guiSelection.hidden = !Engine.GuiInterfaceCall("IsStanceSelected", { "ents": data.unitEntStates.map(state => state.id), @@ -984,9 +984,9 @@ data.countDisplay.caption = trainNum > 1 ? trainNum : ""; let tooltips = [ - "[font=\"sans-bold-16\"]" + - colorizeHotkey("%(hotkey)s", "session.queueunit." + (data.i + 1)) + - "[/font]" + " " + getEntityNamesFormatted(template), + setFont( + colorizeHotkey("%(hotkey)s", "session.queueunit." + (data.i + 1)), + "sans-bold-16") + " " + getEntityNamesFormatted(template), getVisibleEntityClassesFormatted(template), getAurasTooltip(template), getEntityTooltip(template), Index: binaries/data/mods/public/gui/session/selection_panels_helpers.js =================================================================== --- binaries/data/mods/public/gui/session/selection_panels_helpers.js +++ binaries/data/mods/public/gui/session/selection_panels_helpers.js @@ -161,16 +161,16 @@ else batchString = translate("%(action)s to train %(number)s."); - return "[font=\"sans-13\"]" + + return setFont( coloredText( sprintf(batchString, { - "action": "[font=\"sans-bold-13\"]" + translate("Shift-click") + "[/font]", + "action": setFont(translate("Shift-click"), "sans-bold-13"), "number": totalBatchTrainingCount, "fullBatch": fullBatchesString, "remainderBatch": remainderBatch }), - g_HotkeyColor) + - "[/font]"; + g_HotkeyColor), + "sans-13"); } /** Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -987,7 +987,7 @@ function createPanelEntityTooltip(panelEntState, template) { - let getPanelEntNameTooltip = panelEntState => "[font=\"sans-bold-16\"]" + template.name.specific + "[/font]"; + let getPanelEntNameTooltip = panelEntState => setFont(template.name.specific, "sans-bold-16"); return [ getPanelEntNameTooltip, @@ -1153,8 +1153,7 @@ let res = resCodes[r]; - let tooltip = '[font="' + g_ResourceTitleFont + '"]' + - resourceNameFirstWord(res) + '[/font]'; + let tooltip = setFont(resourceNameFirstWord(res), g_ResourceTitleFont); let descr = g_ResourceData.GetResource(res).description; if (descr)