/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
LanguageIntegrator/LanguageProvider.cs
92 строки
3 KB
AlexanderZemlyak
Case sensitive search fixes (#3357)
07 ноя 2025, 20:43
Не верифицирован
07 ноя 2025, 20:43
21e2141
Код
Авторство
О чём код?
// 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 System; using System.Collections.Generic; using System.IO; using PascalABCCompiler.Errors; namespace Languages.Facade { /// <summary> /// Хранилище языков, поддерживаемых платформой (Singletone) /// </summary> public class LanguageProvider { private static readonly Lazy<LanguageProvider> lazyInstanceWrapper = new Lazy<LanguageProvider>(() => new LanguageProvider(), true); public static LanguageProvider Instance { get { return lazyInstanceWrapper.Value; } } /// <summary> /// Список всех языков, заполняется классом LanguageIntegrator /// </summary> public List<ILanguage> Languages { get; private set; } = new List<ILanguage>(); /// <summary> /// Основной язык платформы - PascalABC.NET /// </summary> public ILanguage MainLanguage { get { return Languages[0]; } } /// <summary> /// Выбор языка по расширению файла - бросает ошибку некорректного расширения /// </summary> /// <param name="fileName">Имя файла или просто расширение</param> /// <returns></returns> /// <exception cref="ParserBadFileExtension"></exception> public ILanguage SelectLanguageByExtension(string fileName) { return SelectLanguageByExtensionSafe(fileName) ?? throw new ParserBadFileExtension(fileName); } /// <summary> /// Выбор языка по расширению файла - возвращает null, если расширение не то /// </summary> /// <param name="fileName"></param> /// <returns></returns> public ILanguage SelectLanguageByExtensionSafe(string fileName) { string extension = Path.GetExtension(fileName).ToLower(); foreach (ILanguage language in Languages) foreach (string langExtension in language.FilesExtensions) if (langExtension.ToLower() == extension) return language; return null; } /// <summary> /// Есть ли язык, поддерживающий такое расширение файла /// </summary> /// <param name="fileName"></param> /// <returns></returns> public bool HasLanguageForExtension(string fileName) { return SelectLanguageByExtensionSafe(fileName) != null; } /// <summary> /// Выбор языка по имени (ILanguage.Name) /// </summary> /// <param name="languageName">Имя языка</param> /// <returns></returns> public ILanguage SelectLanguageByName(string languageName) { foreach (ILanguage language in Languages) if (language.Name == languageName) return language; return null; } } }