pascalabcnet/LanguageIntegrator/LanguageIntegrator.cs
AlexanderZemlyak edecab7416
Add check for LanguageKits directory existence (#3052)
* Add check for LanguageKits directory existence

* Fix the check
2024-03-22 23:25:02 +03:00

97 lines
3.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) Ivan Bondarev, Stanislav Mikhalkovich (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using PascalABCCompiler.Parsers;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
namespace LanguageIntegration
{
public static class LanguageIntegrator
{
public static Controller ParsersController = Controller.Instance;
private const string languageKitsDirectoryName = "LanguageKits";
/// <summary>
/// Возвращает директорию, содержащую комплекты языков (если ее нет, то вернется null)
/// </summary>
private static DirectoryInfo GetLanguageKitsDirectory()
{
string binDirectoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string languageKitsDirectoryPath = Path.Combine(binDirectoryPath, languageKitsDirectoryName);
if (Directory.Exists(languageKitsDirectoryPath))
return new DirectoryInfo(languageKitsDirectoryPath);
return null;
}
/// <summary>
/// Загружает все языковые комплекты для использования
/// </summary>
public static void LoadAllLanguageKits()
{
DirectoryInfo languageKitsDirectory = GetLanguageKitsDirectory();
if (languageKitsDirectory == null)
return;
foreach (var languageKit in languageKitsDirectory.GetDirectories())
{
FileInfo[] dllFiles = languageKit.GetFiles();
foreach (var dll in dllFiles)
{
if (Regex.IsMatch(dll.Name, @".*Parser\.dll"))
{
ParsersController.IntegrateParsersFromAssembly(dll);
}
}
}
}
/// <summary>
/// Загружает все языки, доступные в системе
/// </summary>
public static void LoadAllLanguages()
{
ParsersController.LoadStandardParsers();
LoadAllLanguageKits();
}
/// <summary>
/// Перезагружает парсеры всех языков
/// </summary>
public static void ReloadAllParsers()
{
ParsersController.Parsers.Clear();
ParsersController.LoadStandardParsers();
LoadParsersFromLanguageKits();
}
/// <summary>
/// Загружает все парсеры из языковых комплектов
/// </summary>
public static void LoadParsersFromLanguageKits()
{
DirectoryInfo languageKitsDirectory = GetLanguageKitsDirectory();
if (languageKitsDirectory == null)
return;
foreach (var parserDll in languageKitsDirectory.GetDirectories()
.SelectMany(directory => directory.GetFiles("*Parser.dll")))
{
if (parserDll != null)
ParsersController.IntegrateParsersFromAssembly(parserDll);
}
}
}
}