| // Copyright 2014 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:io'; |
| import 'logical_key_data.dart'; |
| |
| import 'physical_key_data.dart'; |
| |
| String _injectDictionary(String template, Map<String, String> dictionary) { |
| String result = template; |
| for (final String key in dictionary.keys) { |
| result = result.replaceAll('@@@$key@@@', dictionary[key] ?? '@@@$key@@@'); |
| } |
| return result; |
| } |
| |
| /// Generates a file based on the information in the key data structure given to |
| /// it. |
| /// |
| /// [BaseCodeGenerator] finds tokens in the template file that has the form of |
| /// `@@@TOKEN@@@`, and replace them by looking up the key `TOKEN` from the map |
| /// returned by [mappings]. |
| /// |
| /// Subclasses must implement [templatePath] and [mappings]. |
| abstract class BaseCodeGenerator { |
| /// Create a code generator while providing [keyData] to be used in [mappings]. |
| BaseCodeGenerator(this.keyData, this.logicalData); |
| |
| /// Absolute path to the template file that this file is generated on. |
| String get templatePath; |
| |
| /// A mapping from tokens to be replaced in the template to the result string. |
| Map<String, String> mappings(); |
| |
| /// Substitutes the various platform specific maps into the template file for |
| /// keyboard_maps.g.dart. |
| String generate() { |
| final String template = File(templatePath).readAsStringSync(); |
| return _injectDictionary(template, mappings()); |
| } |
| |
| /// The database of keys loaded from disk. |
| final PhysicalKeyData keyData; |
| |
| final LogicalKeyData logicalData; |
| } |
| |
| /// A code generator which also defines platform-based behavior. |
| abstract class PlatformCodeGenerator extends BaseCodeGenerator { |
| PlatformCodeGenerator(super.keyData, super.logicalData); |
| |
| /// Absolute path to the output file. |
| /// |
| /// How this value will be used is based on the callee. |
| String outputPath(String platform); |
| |
| static String engineRoot = ''; |
| } |