From 2bc0de01c9d1b1e2fde3cca350b87686226bcdbf Mon Sep 17 00:00:00 2001 From: Victor Date: Sun, 12 Apr 2015 00:39:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BC=D0=B5=D0=BD=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/annimon/everlastingsummer/Parser.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) 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;