Исправлена обработка вложенных меню

This commit is contained in:
Victor 2015-04-16 18:11:38 +03:00
parent f3d4930cec
commit 326c70f514

View File

@ -145,13 +145,7 @@ public final class Parser {
// Остаток от меню выбора. Пропускаем до появления ENDMENU.
if (match(token, TokenType.TEXT)) {
int pos = 0;
while (true) {
if (lookMatch(pos, TokenType.ENDMENU)) break;
if (lookMatch(pos, TokenType.EOF)) return true;
pos++;
}
position += pos;
if (hasEndMenu) position += skipMenu();
return false;
}
@ -553,6 +547,25 @@ public final class Parser {
}
}
private int skipMenu() {
int pos = 0;
int level = 1; // уровень вложенности меню
while (true) {
// Расчёт уровня меню.
if (lookMatch(pos, TokenType.MENU) && lookMatch(pos + 1, TokenType.COLON)) {
level++;
pos++;
}
if (lookMatch(pos, TokenType.ENDMENU)) {
level--;
// Завершаем работу по достижению ENDMENU первого уровня.
if (level <= 0) break;
}
pos++;
}
return pos;
}
private double consumeDouble() {
return Double.parseDouble(consume(TokenType.NUMBER).getText());