ReferenceParser constructor

ReferenceParser({
  1. Map<String, BibleBookEnum> aliases = const {},
  2. Map<BibleLanguageEnum, Map<String, BibleBookEnum>> aliasesByLanguage = const {},
  3. Iterable<BibleLanguageEnum> preferredLanguages = const [],
  4. ReferenceAmbiguityPolicy ambiguityPolicy = ReferenceAmbiguityPolicy.preferLanguagePriority,
})

Implementation

factory ReferenceParser({
  Map<String, BibleBookEnum> aliases = const {},
  Map<BibleLanguageEnum, Map<String, BibleBookEnum>> aliasesByLanguage =
      const {},
  Iterable<BibleLanguageEnum> preferredLanguages = const [],
  ReferenceAmbiguityPolicy ambiguityPolicy =
      ReferenceAmbiguityPolicy.preferLanguagePriority,
}) {
  final aliasesCopy = Map<String, BibleBookEnum>.unmodifiable(aliases);
  final localizedCopy = <BibleLanguageEnum, Map<String, BibleBookEnum>>{};
  for (final entry in aliasesByLanguage.entries) {
    if (entry.key == BibleLanguageEnum.auto) {
      throw ArgumentError.value(
        entry.key,
        'aliasesByLanguage',
        'auto is not a concrete alias language',
      );
    }
    localizedCopy[entry.key] =
        Map<String, BibleBookEnum>.unmodifiable(entry.value);
  }

  final preferredCopy = <BibleLanguageEnum>[];
  for (final language in preferredLanguages) {
    if (language == BibleLanguageEnum.auto) {
      throw ArgumentError.value(
        language,
        'preferredLanguages',
        'auto is not a concrete preferred language',
      );
    }
    if (!preferredCopy.contains(language)) preferredCopy.add(language);
  }

  return ReferenceParser._(
    aliases: aliasesCopy,
    aliasesByLanguage: Map.unmodifiable(localizedCopy),
    preferredLanguages: List.unmodifiable(preferredCopy),
    ambiguityPolicy: ambiguityPolicy,
  );
}