Исправлена обработка вложенных меню
This commit is contained in:
parent
f3d4930cec
commit
326c70f514
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user