Показать сообщение отдельно
  #45  
Старый 14.07.2010, 22:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Как я сказал, нам нужен класс со следующим функционалом:
1. Распознавание кодировки по данным и перекодирование в Ansi
2. Перекодирование в любую кодировку (из тех, что будем поддерживать)
3. Возможность расширения на основе классов/плагинов.

На вскидку я бы сделал классы с такими интерфейсами:
Код:
TBaseFormatter = class
public
  class function IsThisFormat(AFileName : Srtirng) : Boolean;
  constructor Load(AFileName : String);

  property Name : String;
end;

TTextCoder = class
public
  procedure LoadFile(AFileName : String);
  procedure SaveFile(AFileName : String; AFormatter : TBaseFormatter);

  property Formatters[Index : Integer] : TBaseFormatter;
end;

Это очень грубо и в первой пристрелке.
Реально, как я себе это представляю.
У нас есть инстанс класса TTextCoder, к которому мы обращаемся для загрузки и сохранения файла. Этот класс так же хранить коллекцию форматтеров для разных кодировок (одна из них дефолтная, т.е. применяемая тогда, когда мы не можем распознать кодировку). Отдельные форматтеры выполнены в виде некоторых классов, занимающихся не только перекодированием текста, но и могущих хранить доп. информацию (например, мы можем сделать некоторые свои форматы, расширенные относительно текста и сохраняющиеся в каком-либо виде). Форматтеры могут быть в виде DLL (плагинов). В этом случае нам потребуется некоторая универсальная обертка для таких форматтеров, но это потом. Для начала надо сделать эти базовые классы.
Ответить с цитированием