[apps/i18n] Default message ("") has index 0

This commit is contained in:
Léa Saviot
2018-10-26 15:03:45 +02:00
committed by Émilie Feral
parent ecb58dea71
commit 2f77fb88bb
2 changed files with 46 additions and 45 deletions

View File

@@ -80,39 +80,36 @@ def parse_files(files):
def print_header(data, path, locales):
f = open(path, 'w')
f.write("#ifndef APPS_I18N_H\n")
f.write("#define APPS_I18N_H\n")
f.write("\n")
f.write("// This file is auto-generated by i18n.py\n")
f.write("\n")
f.write("#include <escher.h>\n")
f.write("\n")
f.write("namespace I18n {\n")
f.write("\n")
f.write("constexpr static int NumberOfLanguages = %d;\n" % len(locales))
f.write("\n")
f.write("#define APPS_I18N_H\n\n")
f.write("// This file is auto-generated by i18n.py\n\n")
f.write("#include <escher.h>\n\n")
f.write("namespace I18n {\n\n")
f.write("constexpr static int NumberOfLanguages = %d;\n\n" % len(locales))
# Messages enumeration
f.write("enum class Message : uint16_t {\n")
for message in data["messages"]:
f.write(" " + message + ",\n")
f.write("\n")
f.write(" UniversalMessageMarker,\n")
f.write("\n")
f.write(" Default = 0,\n")
for message in data["universal_messages"]:
f.write(" " + message + ",\n")
f.write("};\n")
f.write("\n")
f.write(" LocalizedMessageMarker,\n\n")
for message in data["messages"]:
f.write(" " + message + ",\n")
f.write("};\n\n")
# Languages enumeration
f.write("enum class Language : uint16_t {\n")
f.write(" Default = 0,\n")
for locale in locales:
f.write(" " + locale.upper() + ",\n")
f.write("};\n")
f.write("\n")
f.write("};\n\n")
# Language names
f.write("constexpr const Message LanguageNames[NumberOfLanguages] = {\n");
for locale in locales:
f.write(" Message::Language" + locale.upper() + ",\n")
f.write("};\n")
f.write("\n")
f.write("}\n")
f.write("\n")
f.write("};\n\n")
f.write("}\n\n")
f.write("#endif\n")
f.close()
@@ -120,10 +117,22 @@ def print_implementation(data, path, locales):
f = open(path, 'w')
f.write("#include \"i18n.h\"\n")
f.write("#include \"global_preferences.h\"\n")
f.write("#include <assert.h>\n");
f.write("\n")
f.write("namespace I18n {\n")
f.write("#include <assert.h>\n\n");
f.write("namespace I18n {\n\n")
# Write the default message
f.write("constexpr static char universalDefault[] = {0};\n")
# Write the universal messages
for message in data["universal_messages"]:
f.write("constexpr static char universal" + message + "[] = " + data["data"]["universal"][message] + ";\n")
f.write("\n")
f.write("constexpr static const char * universalMessages[%d] = {\n" % (len(data["universal_messages"])+1))
f.write(" universalDefault,\n")
for message in data["universal_messages"]:
f.write(" universal" + message + ",\n")
f.write("};\n\n")
# Write the localized messages
for message in data["messages"]:
for locale in locales:
if not locale in data["data"]:
@@ -140,32 +149,25 @@ def print_implementation(data, path, locales):
for locale in locales:
f.write(locale + message + ", ")
f.write("},\n")
f.write("};\n")
f.write("\n")
for message in data["universal_messages"]:
f.write("constexpr static char universal" + message + "[] = " + data["data"]["universal"][message] + ";\n")
f.write("\n")
f.write("constexpr static const char * universalMessages[%d] = {\n" % len(data["universal_messages"]))
for message in data["universal_messages"]:
f.write(" universal" + message + ",\n")
f.write("};\n")
f.write("\n")
f.write("};\n\n")
# Write the translate method
f.write("const char * translate(Message m, Language l) {\n")
f.write(" assert(m != Message::UniversalMessageMarker);\n")
f.write(" int universalMessageOffset = (int)Message::UniversalMessageMarker+1;\n")
f.write(" if ((int)m >= universalMessageOffset) {\n")
f.write(" assert(universalMessages[(int)m - universalMessageOffset] != nullptr);\n")
f.write(" return universalMessages[(int)m - universalMessageOffset];\n")
f.write(" assert(m != Message::LocalizedMessageMarker);\n")
f.write(" int localizedMessageOffset = (int)Message::LocalizedMessageMarker+1;\n")
f.write(" if ((int)m < localizedMessageOffset) {\n")
f.write(" assert(universalMessages[(int)m] != nullptr);\n")
f.write(" return universalMessages[(int)m];\n")
f.write(" }\n")
f.write(" int languageIndex = (int)l;\n")
f.write(" if (l == Language::Default) {\n")
f.write(" languageIndex = (int) GlobalPreferences::sharedGlobalPreferences()->language();\n")
f.write(" }\n")
f.write(" assert(languageIndex > 0);\n")
f.write(" assert(((int)m*NumberOfLanguages+languageIndex-1)*sizeof(char *) < sizeof(messages));\n")
f.write(" return messages[(int)m][languageIndex-1];\n")
f.write("}\n")
f.write("\n")
f.write(" int messageIndex = (int)m - localizedMessageOffset;\n")
f.write(" assert((messageIndex*NumberOfLanguages+languageIndex-1)*sizeof(char *) < sizeof(messages));\n")
f.write(" return messages[messageIndex][languageIndex-1];\n")
f.write("}\n\n")
f.write("}\n")
f.close()

View File

@@ -16,7 +16,6 @@ ConfidenceCommandWithArg = "confidence(f,n)"
ConjCommandWithArg = "conj(z)"
CoshCommandWithArg = "cosh(x)"
D = "d"
Default = ""
DeterminantCommandWithArg = "det(M)"
DiffCommandWithArg = "diff(f(x),x,a)"
DimensionCommandWithArg = "dim(M)"