Skip to content

Commit 1aa4a2c

Browse files
committed
Handle Lua variable reassignments
1 parent fa7ddc8 commit 1aa4a2c

File tree

3 files changed

+46
-16
lines changed

3 files changed

+46
-16
lines changed

gettext-gradle-plugin/src/main/java/org/mini2Dx/gettext/plugin/file/LuaFile.java

+26-15
Original file line numberDiff line numberDiff line change
@@ -173,24 +173,35 @@ private void extractFromTable(int lineNumber, String key) {
173173

174174
@Override
175175
public void exitStat(LuaParser.StatContext ctx) {
176-
if(ctx.namelist() != null && ctx.explist() != null) {
177-
final List<String> variableNames = new ArrayList<String>();
178-
for(int i = 0; i < ctx.namelist().NAME().size(); i++) {
176+
final List<String> variableNames;
177+
if (ctx.namelist() != null && ctx.explist() != null) {
178+
variableNames = new ArrayList<String>();
179+
for (int i = 0; i < ctx.namelist().NAME().size(); i++) {
179180
variableNames.add(ctx.namelist().NAME().get(i).getText());
180181
}
181-
for(int i = 0; i < ctx.explist().exp().size(); i++) {
182-
String value = ctx.explist().exp(i).getText();
183-
if(variables.containsKey(value)) {
184-
value = variables.get(value);
185-
} else if(value.startsWith("\"") && value.endsWith("\"")) {
186-
value = value.substring(1, value.length() - 1);
187-
value = value.replace("\"..\"", "");
188-
}
182+
storeVariables(variableNames, ctx);
183+
} else if(ctx.varlist() != null && ctx.explist() != null) {
184+
variableNames = new ArrayList<String>();
185+
for (int i = 0; i < ctx.varlist().var().size(); i++) {
186+
variableNames.add(ctx.varlist().var(i).NAME().getText());
187+
}
188+
storeVariables(variableNames, ctx);
189+
}
190+
}
189191

190-
for(String variableName : variableNames) {
191-
variables.put(variableName, value);
192-
variableByLineNumber.put(variableName, ctx.start.getLine());
193-
}
192+
protected void storeVariables(final List<String> variableNames, LuaParser.StatContext ctx) {
193+
for (int i = 0; i < ctx.explist().exp().size(); i++) {
194+
String value = ctx.explist().exp(i).getText();
195+
if (variables.containsKey(value)) {
196+
value = variables.get(value);
197+
} else if (value.startsWith("\"") && value.endsWith("\"")) {
198+
value = value.substring(1, value.length() - 1);
199+
value = value.replace("\"..\"", "");
200+
}
201+
202+
for (String variableName : variableNames) {
203+
variables.put(variableName, value);
204+
variableByLineNumber.put(variableName, ctx.start.getLine());
194205
}
195206
}
196207
}

gettext-gradle-plugin/src/test/java/org/mini2Dx/gettext/plugin/file/LuaFileTest.java

+17-1
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,16 @@ public class LuaFileTest {
2727
private static final String TRC_FILENAME = "sampleTrc.lua";
2828
private static final String TRN_FILENAME = "sampleTrn.lua";
2929
private static final String TRNC_FILENAME = "sampleTrnc.lua";
30+
private static final String REASSIGN_FILENAME = "varReassign.lua";
31+
3032
private static final String COMMENT_FORMAT = "#.";
3133
private static final String FORCE_EXTRACT_FORMAT = "#!extract";
3234
private static final String IGNORE_FORMAT = "#!ignore";
3335

3436
private static final String TR_CUSTOM_COMMENT_FILENAME = "sampleTrCustomComment.lua";
3537
private static final String CUSTOM_COMMENT_FORMAT = " #. ";
3638

37-
private static LuaFile TR_FILE, TRC_FILE, TRN_FILE, TRNC_FILE, TR_CUSTOM_COMMENT_FILE;
39+
private static LuaFile TR_FILE, TRC_FILE, TRN_FILE, TRNC_FILE, TR_CUSTOM_COMMENT_FILE, REASSIGN_FILE;
3840

3941
private final List<TranslationEntry> results = new ArrayList<TranslationEntry>();
4042

@@ -51,6 +53,8 @@ public static void loadFiles() throws IOException {
5153
COMMENT_FORMAT, FORCE_EXTRACT_FORMAT, IGNORE_FORMAT);
5254
TR_CUSTOM_COMMENT_FILE = new LuaFile(LuaFileTest.class.getResourceAsStream("/" + TR_CUSTOM_COMMENT_FILENAME), TR_CUSTOM_COMMENT_FILENAME,
5355
CUSTOM_COMMENT_FORMAT, FORCE_EXTRACT_FORMAT, IGNORE_FORMAT);
56+
REASSIGN_FILE = new LuaFile(LuaFileTest.class.getResourceAsStream("/" + REASSIGN_FILENAME), REASSIGN_FILENAME,
57+
COMMENT_FORMAT, FORCE_EXTRACT_FORMAT, IGNORE_FORMAT);
5458
} catch (Exception e) {
5559
e.printStackTrace();
5660
}
@@ -247,4 +251,16 @@ public void testTrCustomComment() {
247251
Assert.assertEquals(1, entry3.getExtractedComments().size());
248252
Assert.assertEquals("Comment 1", entry3.getExtractedComments().get(0));
249253
}
254+
255+
@Test
256+
public void testTrReassignVariable() {
257+
REASSIGN_FILE.getTranslationEntries(results);
258+
259+
Assert.assertEquals(1, results.size());
260+
261+
final TranslationEntry entry0 = results.get(0);
262+
Assert.assertEquals(REASSIGN_FILENAME + ":3", entry0.getReference());
263+
Assert.assertEquals("Re-assigned Ref", entry0.getId());
264+
Assert.assertEquals(0, entry0.getExtractedComments().size());
265+
}
250266
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
local ref1 = "Variable Ref"
2+
ref1 = "Re-assigned Ref"
3+
npc:say(GetText:tr(ref1))

0 commit comments

Comments
 (0)