diff --git a/src/com/annimon/everlastingsummer/Parser.java b/src/com/annimon/everlastingsummer/Parser.java index 54b51f6..2f81931 100644 --- a/src/com/annimon/everlastingsummer/Parser.java +++ b/src/com/annimon/everlastingsummer/Parser.java @@ -283,14 +283,30 @@ public final class Parser { // Ищем элементы выбора final Menu menu = new Menu(title); int pos = 0; - do { - if (lookMatch(pos, TokenType.EOF)) return false; - if (lookMatch(pos, TokenType.TEXT) && lookMatch(pos + 1, TokenType.COLON)) { - menu.addItem(get(pos).getText(), position + pos + 2); + 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; + } + + if (level == 1) { + // Добавляем только пункты из меню первого уровня. + if (lookMatch(pos, TokenType.TEXT) && lookMatch(pos + 1, TokenType.COLON)) { + menu.addItem(get(pos).getText(), position + pos + 2); + pos++; + } + } + + if (lookMatch(pos, TokenType.EOF)) return false; pos++; - } while (!lookMatch(pos, TokenType.ENDMENU)); + } ViewActivity.getInstance().menu(menu); return true;