| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'package:messages/messages.dart'; | |
| import 'icu_message_parser.dart'; | |
| import 'message_parser.dart'; | |
| class SelectParser { | |
| SelectMessage parse(Node node, List<String> arguments, | |
| [bool addId = false, String? id]) { | |
| final identifier = node.children | |
| .firstWhere((element) => element.type == ST.identifier) | |
| .value!; | |
| if (!arguments.contains(identifier)) arguments.add(identifier); | |
| final parts = node.children | |
| .firstWhere((element) => element.type == ST.selectParts) | |
| .children; | |
| final cases = parts | |
| .where((element) => element.type == ST.selectPart) | |
| .map((e) => MapEntry( | |
| e.children[0].value!, | |
| MessageParser.parseNode( | |
| e.children.firstWhere((element) => element.type == ST.message), | |
| arguments, | |
| )!)) | |
| .whereType<MapEntry<String, Message>>(); | |
| final caseMap = Map.fromEntries(cases.where((e) => e.key != 'other')); | |
| return SelectMessage( | |
| cases.firstWhere((element) => element.key == 'other').value, | |
| caseMap, | |
| arguments.indexOf(identifier), | |
| id, | |
| ); | |
| } | |
| } |