import 'package:ini_parser/extensions.dart'; import 'package:ini_parser/models/ini_config.dart'; import 'package:ini_parser/parsing_exception.dart'; import 'package:ini_parser/patterns.dart'; import 'package:ini_parser/section.dart'; import 'package:text_parser/text_parser.dart'; class MenuParser { final List _menus = []; Menu? _currentMenu; GroupMenu? _currentGroupMenu; final _parser = TextParser( matchers: [ const PatternMatcher(namePattern), const PatternMatcher(textPattern), ], ); Future> parse(List lines) async { for (final line in lines) { try { await _parseLine(line); } catch (e) { throw ParsingException(section: Section.menu, line: line); } } return _menus; } Future _parseLine(String line) async { if (await _parseMenu(line)) { return; } if (_currentMenu == null) { return; } if (await _parseGroupMenu(line)) { return; } await _parseSubMenu(line); } Future _parseMenu(String line) async { final parser = TextParser( matchers: [ const PatternMatcher(r'^menu\s*=\s*"(?