1
0
forked from me/IronOS

Put translation str indices into a struct

This commit is contained in:
Alvin Wong
2021-04-09 17:16:03 +08:00
parent 82620c685d
commit 7d6d7d11c0
4 changed files with 119 additions and 106 deletions

View File

@@ -567,11 +567,13 @@ def write_language(lang: dict, defs: dict, f: TextIO) -> None:
assert str_offsets[idx] >= 0
return str_offsets[idx]
f.write("static const TranslationIndexTable TranslationIndices = {\n")
# ----- Write the messages string indices:
for group in [str_group_messages, str_group_messageswarn, str_group_characters]:
for item in group:
f.write(
f"const uint16_t {item.info} = {get_offset(item.str_index)}; // {escape(str_table[item.str_index])}\n"
f" .{item.info} = {get_offset(item.str_index)}, // {escape(str_table[item.str_index])}\n"
)
f.write("\n")
@@ -583,12 +585,15 @@ def write_language(lang: dict, defs: dict, f: TextIO) -> None:
(str_group_settingmenuentriesdesc, "SettingsMenuEntriesDescriptions"),
]:
max_len = 30
f.write(f"const uint16_t {name}[] = {{\n")
f.write(f" .{name} = {{\n")
for item in group:
f.write(
f" /* {item.info.ljust(max_len)[:max_len]} */ {get_offset(item.str_index)}, // {escape(str_table[item.str_index])}\n"
f" /* {item.info.ljust(max_len)[:max_len]} */ {get_offset(item.str_index)}, // {escape(str_table[item.str_index])}\n"
)
f.write(f"}}; // {name}\n\n")
f.write(f" }}, // {name}\n\n")
f.write("}; // TranslationIndices\n\n")
f.write("const TranslationIndexTable *const Tr = &TranslationIndices;\n\n")
f.write(
f"const bool HasFahrenheit = {('true' if lang.get('tempUnitFahrenheit', True) else 'false')};\n"
@@ -600,6 +605,9 @@ def write_language(lang: dict, defs: dict, f: TextIO) -> None:
f.write(
f"static_assert(static_cast<uint8_t>(SettingsItemIndex::{eid}) == {i});\n"
)
f.write(
f"static_assert(static_cast<uint8_t>(SettingsItemIndex::NUM_ITEMS) == {len(defs['menuOptions'])});\n"
)
def read_version() -> str:

View File

@@ -12,56 +12,6 @@ extern const uint8_t USER_FONT_12[];
extern const uint8_t USER_FONT_6x8[];
extern const bool HasFahrenheit;
extern const char TranslationStrings[];
extern const uint16_t SettingsShortNames[];
extern const uint16_t SettingsDescriptions[];
extern const uint16_t SettingsMenuEntries[];
extern const uint16_t SettingsCalibrationWarning;
extern const uint16_t SettingsResetWarning;
extern const uint16_t UVLOWarningString;
extern const uint16_t UndervoltageString;
extern const uint16_t InputVoltageString;
extern const uint16_t SleepingSimpleString;
extern const uint16_t SleepingAdvancedString;
extern const uint16_t SleepingTipAdvancedString;
extern const uint16_t IdleTipString;
extern const uint16_t IdleSetString;
extern const uint16_t TipDisconnectedString;
extern const uint16_t SolderingAdvancedPowerPrompt;
extern const uint16_t OffString;
extern const uint16_t ResetOKMessage;
extern const uint16_t SettingsResetMessage;
extern const uint16_t NoAccelerometerMessage;
extern const uint16_t NoPowerDeliveryMessage;
extern const uint16_t LockingKeysString;
extern const uint16_t UnlockingKeysString;
extern const uint16_t WarningKeysLockedString;
extern const uint16_t SettingRightChar;
extern const uint16_t SettingLeftChar;
extern const uint16_t SettingAutoChar;
extern const uint16_t SettingStartSolderingChar;
extern const uint16_t SettingStartSleepChar;
extern const uint16_t SettingStartSleepOffChar;
extern const uint16_t SettingStartNoneChar;
extern const uint16_t SettingSensitivityOff;
extern const uint16_t SettingSensitivityLow;
extern const uint16_t SettingSensitivityMedium;
extern const uint16_t SettingSensitivityHigh;
extern const uint16_t SettingLockDisableChar;
extern const uint16_t SettingLockBoostChar;
extern const uint16_t SettingLockFullChar;
extern const uint16_t SettingNAChar;
extern const uint16_t SettingOffChar;
extern const uint16_t SettingFastChar;
extern const uint16_t SettingMediumChar;
extern const uint16_t SettingSlowChar;
extern const char *SymbolPlus;
extern const char *SymbolMinus;
extern const char *SymbolSpace;
@@ -108,8 +58,63 @@ enum class SettingsItemIndex : uint8_t {
AnimSpeed,
PowerPulseWait,
PowerPulseDuration,
NUM_ITEMS,
};
extern const char TranslationStrings[];
struct TranslationIndexTable {
uint16_t SettingsCalibrationWarning;
uint16_t SettingsResetWarning;
uint16_t UVLOWarningString;
uint16_t UndervoltageString;
uint16_t InputVoltageString;
uint16_t SleepingSimpleString;
uint16_t SleepingAdvancedString;
uint16_t SleepingTipAdvancedString;
uint16_t IdleTipString;
uint16_t IdleSetString;
uint16_t TipDisconnectedString;
uint16_t SolderingAdvancedPowerPrompt;
uint16_t OffString;
uint16_t ResetOKMessage;
uint16_t SettingsResetMessage;
uint16_t NoAccelerometerMessage;
uint16_t NoPowerDeliveryMessage;
uint16_t LockingKeysString;
uint16_t UnlockingKeysString;
uint16_t WarningKeysLockedString;
uint16_t SettingRightChar;
uint16_t SettingLeftChar;
uint16_t SettingAutoChar;
uint16_t SettingFastChar;
uint16_t SettingSlowChar;
uint16_t SettingMediumChar;
uint16_t SettingOffChar;
uint16_t SettingStartSolderingChar;
uint16_t SettingStartSleepChar;
uint16_t SettingStartSleepOffChar;
uint16_t SettingStartNoneChar;
uint16_t SettingSensitivityOff;
uint16_t SettingSensitivityLow;
uint16_t SettingSensitivityMedium;
uint16_t SettingSensitivityHigh;
uint16_t SettingLockDisableChar;
uint16_t SettingLockBoostChar;
uint16_t SettingLockFullChar;
uint16_t SettingNAChar;
uint16_t SettingsDescriptions[static_cast<uint32_t>(SettingsItemIndex::NUM_ITEMS)];
uint16_t SettingsShortNames[static_cast<uint32_t>(SettingsItemIndex::NUM_ITEMS)];
uint16_t SettingsMenuEntries[5];
uint16_t SettingsMenuEntriesDescriptions[5]; // unused
};
extern const TranslationIndexTable *const Tr;
constexpr uint8_t settings_item_index(const SettingsItemIndex i) { return static_cast<uint8_t>(i); }
// Use a constexpr function for type-checking.
#define SETTINGS_DESC(i) (settings_item_index(i) + 1)

View File

@@ -247,7 +247,7 @@ const menuitem advancedMenu[] = {
static void printShortDescription(SettingsItemIndex settingsItemIndex, uint16_t cursorCharPosition) {
// print short description (default single line, explicit double line)
uint8_t shortDescIndex = static_cast<uint8_t>(settingsItemIndex);
OLED::printWholeScreen(translatedString(SettingsShortNames[shortDescIndex]));
OLED::printWholeScreen(translatedString(Tr->SettingsShortNames[shortDescIndex]));
// prepare cursor for value
// make room for scroll indicator
@@ -362,7 +362,7 @@ static bool settings_displayInputMinVRange(void) {
OLED::printNumber(systemSettings.minVoltageCells % 10, 1, FontStyle::LARGE);
} else {
printShortDescription(SettingsItemIndex::MinVolCell, 5);
OLED::print(translatedString(SettingNAChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingNAChar), FontStyle::LARGE);
}
return false;
}
@@ -437,7 +437,7 @@ static bool settings_setSleepTime(void) {
static bool settings_displaySleepTime(void) {
printShortDescription(SettingsItemIndex::SleepTimeout, 5);
if (systemSettings.SleepTime == 0) {
OLED::print(translatedString(OffString), FontStyle::LARGE);
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
} else if (systemSettings.SleepTime < 6) {
OLED::printNumber(systemSettings.SleepTime * 10, 2, FontStyle::LARGE);
OLED::print(SymbolSeconds, FontStyle::LARGE);
@@ -461,7 +461,7 @@ static bool settings_setShutdownTime(void) {
static bool settings_displayShutdownTime(void) {
printShortDescription(SettingsItemIndex::ShutdownTimeout, 5);
if (systemSettings.ShutdownTime == 0) {
OLED::print(translatedString(OffString), FontStyle::LARGE);
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
} else {
OLED::printNumber(systemSettings.ShutdownTime, 2, FontStyle::LARGE);
OLED::print(SymbolMinutes, FontStyle::LARGE);
@@ -546,7 +546,7 @@ static bool settings_setPowerLimit(void) {
static bool settings_displayPowerLimit(void) {
printShortDescription(SettingsItemIndex::PowerLimit, 5);
if (systemSettings.powerLimit == 0) {
OLED::print(translatedString(OffString), FontStyle::LARGE);
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
} else {
OLED::printNumber(systemSettings.powerLimit, 2, FontStyle::LARGE);
OLED::print(SymbolWatts, FontStyle::LARGE);
@@ -564,7 +564,7 @@ static bool settings_setScrollSpeed(void) {
static bool settings_displayScrollSpeed(void) {
printShortDescription(SettingsItemIndex::ScrollingSpeed, 7);
OLED::print(translatedString((systemSettings.descriptionScrollSpeed) ? SettingFastChar : SettingSlowChar), FontStyle::LARGE);
OLED::print(translatedString((systemSettings.descriptionScrollSpeed) ? Tr->SettingFastChar : Tr->SettingSlowChar), FontStyle::LARGE);
return false;
}
@@ -592,16 +592,16 @@ static bool settings_displayDisplayRotation(void) {
switch (systemSettings.OrientationMode) {
case 0:
OLED::print(translatedString(SettingRightChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingRightChar), FontStyle::LARGE);
break;
case 1:
OLED::print(translatedString(SettingLeftChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingLeftChar), FontStyle::LARGE);
break;
case 2:
OLED::print(translatedString(SettingAutoChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingAutoChar), FontStyle::LARGE);
break;
default:
OLED::print(translatedString(SettingRightChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingRightChar), FontStyle::LARGE);
break;
}
return false;
@@ -637,7 +637,7 @@ static bool settings_displayBoostTemp(void) {
if (systemSettings.BoostTemp) {
OLED::printNumber(systemSettings.BoostTemp, 3, FontStyle::LARGE);
} else {
OLED::print(translatedString(OffString), FontStyle::LARGE);
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
}
return false;
}
@@ -653,19 +653,19 @@ static bool settings_displayAutomaticStartMode(void) {
switch (systemSettings.autoStartMode) {
case 0:
OLED::print(translatedString(SettingStartNoneChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingStartNoneChar), FontStyle::LARGE);
break;
case 1:
OLED::print(translatedString(SettingStartSolderingChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingStartSolderingChar), FontStyle::LARGE);
break;
case 2:
OLED::print(translatedString(SettingStartSleepChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingStartSleepChar), FontStyle::LARGE);
break;
case 3:
OLED::print(translatedString(SettingStartSleepOffChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingStartSleepOffChar), FontStyle::LARGE);
break;
default:
OLED::print(translatedString(SettingStartNoneChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingStartNoneChar), FontStyle::LARGE);
break;
}
return false;
@@ -682,16 +682,16 @@ static bool settings_displayLockingMode(void) {
switch (systemSettings.lockingMode) {
case 0:
OLED::print(translatedString(SettingLockDisableChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingLockDisableChar), FontStyle::LARGE);
break;
case 1:
OLED::print(translatedString(SettingLockBoostChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingLockBoostChar), FontStyle::LARGE);
break;
case 2:
OLED::print(translatedString(SettingLockFullChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingLockFullChar), FontStyle::LARGE);
break;
default:
OLED::print(translatedString(SettingLockDisableChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingLockDisableChar), FontStyle::LARGE);
break;
}
return false;
@@ -709,9 +709,9 @@ static bool settings_displayCoolingBlinkEnabled(void) {
}
static bool settings_setResetSettings(void) {
if (userConfirmation(translatedString(SettingsResetWarning))) {
if (userConfirmation(translatedString(Tr->SettingsResetWarning))) {
resetSettings();
warnUser(translatedString(ResetOKMessage), 2 * TICKS_SECOND);
warnUser(translatedString(Tr->ResetOKMessage), 2 * TICKS_SECOND);
}
return false;
}
@@ -754,7 +754,7 @@ static void setTipOffset() {
// If not only do single point tuning as per usual
static bool settings_setCalibrate(void) {
if (userConfirmation(translatedString(SettingsCalibrationWarning))) {
if (userConfirmation(translatedString(Tr->SettingsCalibrationWarning))) {
// User confirmed
// So we now perform the actual calculation
setTipOffset();
@@ -881,7 +881,7 @@ static bool settings_displayPowerPulse(void) {
OLED::print(SymbolDot, FontStyle::LARGE);
OLED::printNumber(systemSettings.KeepAwakePulse % 10, 1, FontStyle::LARGE);
} else {
OLED::print(translatedString(OffString), FontStyle::LARGE);
OLED::print(translatedString(Tr->OffString), FontStyle::LARGE);
}
return false;
}
@@ -907,16 +907,16 @@ static bool settings_displayAnimationSpeed(void) {
printShortDescription(SettingsItemIndex::AnimSpeed, 7);
switch (systemSettings.animationSpeed) {
case settingOffSpeed_t::SLOW:
OLED::print(translatedString(SettingSlowChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingSlowChar), FontStyle::LARGE);
break;
case settingOffSpeed_t::MEDIUM:
OLED::print(translatedString(SettingMediumChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingMediumChar), FontStyle::LARGE);
break;
case settingOffSpeed_t::FAST:
OLED::print(translatedString(SettingFastChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingFastChar), FontStyle::LARGE);
break;
default:
OLED::print(translatedString(SettingOffChar), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingOffChar), FontStyle::LARGE);
break;
}
return false;
@@ -967,17 +967,17 @@ static bool settings_displayHallEffect(void) {
printShortDescription(SettingsItemIndex::HallEffSensitivity, 7);
switch (systemSettings.hallEffectSensitivity) {
case 1:
OLED::print(translatedString(SettingSensitivityLow), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingSensitivityLow), FontStyle::LARGE);
break;
case 2:
OLED::print(translatedString(SettingSensitivityMedium), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingSensitivityMedium), FontStyle::LARGE);
break;
case 3:
OLED::print(translatedString(SettingSensitivityHigh), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingSensitivityHigh), FontStyle::LARGE);
break;
case 0:
default:
OLED::print(translatedString(SettingSensitivityOff), FontStyle::LARGE);
OLED::print(translatedString(Tr->SettingSensitivityOff), FontStyle::LARGE);
break;
}
return false;
@@ -996,7 +996,7 @@ static bool animOpenState = false;
static void displayMenu(size_t index) {
// Call into the menu
// Draw title
OLED::printWholeScreen(translatedString(SettingsMenuEntries[index]));
OLED::printWholeScreen(translatedString(Tr->SettingsMenuEntries[index]));
// Draw symbol
// 16 pixel wide image
// 2 pixel wide scrolling indicator
@@ -1128,7 +1128,7 @@ void gui_Menu(const menuitem *menu) {
// Draw description
if (descriptionStart == 0)
descriptionStart = xTaskGetTickCount();
const char *description = translatedString(SettingsDescriptions[menu[currentScreen].description - 1]);
const char *description = translatedString(Tr->SettingsDescriptions[menu[currentScreen].description - 1]);
// lower the value - higher the speed
int16_t descriptionWidth = FONT_12_WIDTH * (str_display_len(description) + 7);
int16_t descriptionOffset = ((xTaskGetTickCount() - descriptionStart) / (systemSettings.descriptionScrollSpeed == 1 ? (TICKS_100MS / 10) : (TICKS_100MS / 5)));

View File

@@ -107,13 +107,13 @@ static bool checkVoltageForExit() {
OLED::clearScreen();
OLED::setCursor(0, 0);
if (systemSettings.detailedSoldering) {
OLED::print(translatedString(UndervoltageString), FontStyle::SMALL);
OLED::print(translatedString(Tr->UndervoltageString), FontStyle::SMALL);
OLED::setCursor(0, 8);
OLED::print(translatedString(InputVoltageString), FontStyle::SMALL);
OLED::print(translatedString(Tr->InputVoltageString), FontStyle::SMALL);
printVoltage();
OLED::print(SymbolVolts, FontStyle::SMALL);
} else {
OLED::print(translatedString(UVLOWarningString), FontStyle::LARGE);
OLED::print(translatedString(Tr->UVLOWarningString), FontStyle::LARGE);
}
OLED::refresh();
@@ -326,9 +326,9 @@ static int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) {
OLED::clearScreen();
OLED::setCursor(0, 0);
if (systemSettings.detailedSoldering) {
OLED::print(translatedString(SleepingAdvancedString), FontStyle::SMALL);
OLED::print(translatedString(Tr->SleepingAdvancedString), FontStyle::SMALL);
OLED::setCursor(0, 8);
OLED::print(translatedString(SleepingTipAdvancedString), FontStyle::SMALL);
OLED::print(translatedString(Tr->SleepingTipAdvancedString), FontStyle::SMALL);
OLED::printNumber(tipTemp, 3, FontStyle::SMALL);
if (systemSettings.temperatureInF)
OLED::print(SymbolDegF, FontStyle::SMALL);
@@ -340,7 +340,7 @@ static int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) {
printVoltage();
OLED::print(SymbolVolts, FontStyle::SMALL);
} else {
OLED::print(translatedString(SleepingSimpleString), FontStyle::LARGE);
OLED::print(translatedString(Tr->SleepingSimpleString), FontStyle::LARGE);
OLED::printNumber(tipTemp, 3, FontStyle::LARGE);
if (systemSettings.temperatureInF)
OLED::drawSymbol(0);
@@ -462,7 +462,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
case BUTTON_BOTH_LONG:
// Unlock buttons
buttonsLocked = false;
warnUser(translatedString(UnlockingKeysString), TICKS_SECOND);
warnUser(translatedString(Tr->UnlockingKeysString), TICKS_SECOND);
break;
case BUTTON_F_LONG:
// if boost mode is enabled turn it on
@@ -476,7 +476,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
case BUTTON_F_SHORT:
case BUTTON_B_SHORT:
// Do nothing and display a lock warming
warnUser(translatedString(WarningKeysLockedString), TICKS_SECOND / 2);
warnUser(translatedString(Tr->WarningKeysLockedString), TICKS_SECOND / 2);
break;
default:
break;
@@ -511,7 +511,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
if (systemSettings.lockingMode != 0) {
// Lock buttons
buttonsLocked = true;
warnUser(translatedString(LockingKeysString), TICKS_SECOND);
warnUser(translatedString(Tr->LockingKeysString), TICKS_SECOND);
}
break;
default:
@@ -523,7 +523,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
OLED::clearScreen();
// Draw in the screen details
if (systemSettings.detailedSoldering) {
OLED::print(translatedString(SolderingAdvancedPowerPrompt), FontStyle::SMALL); // Power:
OLED::print(translatedString(Tr->SolderingAdvancedPowerPrompt), FontStyle::SMALL); // Power:
OLED::printNumber(x10WattHistory.average() / 10, 2, FontStyle::SMALL);
OLED::print(SymbolDot, FontStyle::SMALL);
OLED::printNumber(x10WattHistory.average() % 10, 1, FontStyle::SMALL);
@@ -535,7 +535,7 @@ static void gui_solderingMode(uint8_t jumpToSleep) {
}
OLED::setCursor(0, 8);
OLED::print(translatedString(SleepingTipAdvancedString), FontStyle::SMALL);
OLED::print(translatedString(Tr->SleepingTipAdvancedString), FontStyle::SMALL);
gui_drawTipTemp(true, FontStyle::SMALL);
if (boostModeOn) {
@@ -713,7 +713,7 @@ void showDebugMenu(void) {
void showWarnings() {
// Display alert if settings were reset
if (settingsWereReset) {
warnUser(translatedString(SettingsResetMessage), 10 * TICKS_SECOND);
warnUser(translatedString(Tr->SettingsResetMessage), 10 * TICKS_SECOND);
}
#ifndef NO_WARN_MISSING
// We also want to alert if accel or pd is not detected / not responding
@@ -727,7 +727,7 @@ void showWarnings() {
if (systemSettings.accelMissingWarningCounter < 2) {
systemSettings.accelMissingWarningCounter++;
saveSettings();
warnUser(translatedString(NoAccelerometerMessage), 10 * TICKS_SECOND);
warnUser(translatedString(Tr->NoAccelerometerMessage), 10 * TICKS_SECOND);
}
}
#ifdef POW_PD
@@ -736,7 +736,7 @@ void showWarnings() {
if (systemSettings.pdMissingWarningCounter < 2) {
systemSettings.pdMissingWarningCounter++;
saveSettings();
warnUser(translatedString(NoPowerDeliveryMessage), 10 * TICKS_SECOND);
warnUser(translatedString(Tr->NoPowerDeliveryMessage), 10 * TICKS_SECOND);
}
}
#endif
@@ -844,16 +844,16 @@ void startGUITask(void const *argument __unused) {
OLED::setCursor(0, 0);
if (systemSettings.detailedIDLE) {
if (tipTemp > tipDisconnectedThres) {
OLED::print(translatedString(TipDisconnectedString), FontStyle::SMALL);
OLED::print(translatedString(Tr->TipDisconnectedString), FontStyle::SMALL);
} else {
OLED::print(translatedString(IdleTipString), FontStyle::SMALL);
OLED::print(translatedString(Tr->IdleTipString), FontStyle::SMALL);
gui_drawTipTemp(false, FontStyle::SMALL);
OLED::print(translatedString(IdleSetString), FontStyle::SMALL);
OLED::print(translatedString(Tr->IdleSetString), FontStyle::SMALL);
OLED::printNumber(systemSettings.SolderingTemp, 3, FontStyle::SMALL);
}
OLED::setCursor(0, 8);
OLED::print(translatedString(InputVoltageString), FontStyle::SMALL);
OLED::print(translatedString(Tr->InputVoltageString), FontStyle::SMALL);
printVoltage();
} else {