/* Function: MergeLanguagesInto * Merges the languages of the second <ConfigFiles.TextFile> into the first, adding new types and applying any alter entries. * This does NOT merge file extensions, aliases, or shebang strings. The base config will be changed, even if there are errors. * Returns false if there were any errors and adds them to errorList. */ protected bool MergeLanguagesInto(ref ConfigFiles.TextFile baseConfig, ConfigFiles.TextFile overridingConfig, Errors.ErrorList errorList) { bool success = true; if (overridingConfig.HasLanguages) { foreach (var overridingLanguage in overridingConfig.Languages) { var matchingLanguage = baseConfig.FindLanguage(overridingLanguage.Name); if (matchingLanguage != null) { if (overridingLanguage.AlterLanguage == false) { errorList.Add(Locale.Get("NaturalDocs.Engine", "Languages.txt.LanguageAlreadyExists(name)", overridingLanguage.Name), overridingLanguage.PropertyLocation); success = false; } else { MergeLanguageInto(ref matchingLanguage, overridingLanguage); } } else // no match { if (overridingLanguage.AlterLanguage == true) { errorList.Add(Locale.Get("NaturalDocs.Engine", "Languages.txt.AlteredLanguageDoesntExist(name)", overridingLanguage.Name), overridingLanguage.NamePropertyLocation); success = false; } else { baseConfig.AddLanguage(overridingLanguage.Duplicate()); } } } } return(success); }