Обработка вложенных меню
This commit is contained in:
parent
7658d4bb68
commit
2bc0de01c9
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user