OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 06 Август, 2020 16:35

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: Пятница, 10 Июль, 2020 00:04 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 271
Коллеги,
Views Documentation писал(а):
PROCEDURE Old (ask: BOOLEAN; VAR loc: Files.Locator; VAR name: Files.Name;
VAR conv: Converters.Converter): View
conv determines the converter which is used for reading the document. conv = NIL means that no conversion is necessary, i.e., the file format already has the standard BlackBox format.

Т.е. если передать conv = NIL, то конверсия не должна производиться. И если читать, напр, .png файл этой командой, указав conv = NIL, то должно вернуться res = NIL, т.к. невозможно извлечь Views.View из Png-файла.

Однако де-факто реализация (в StdDialog.OldView) вызывает Converters.Import, передавая ему conv Без изменений. Но
документация PROCEDURE Converters.Import (loc: Files.Locator; name: Files.Name; VAR conv: Converter; OUT s: Stores.Store) писал(а):
If conv = NIL, the first suitable converter in list is used and returned in the VAR parameter.


В итоге, де-факто Views.Old, если передан conv = NIL, перебирает все установленные конвертеры, хватает первый попавшийся и читает с его помощью файл. И возвращается некая кирдымырда, поскольку Png не конвертируется в Зрителя.

Как вылечить:
Кажется, что-то напутано в StdDialog.OldView, там зачем-то введена локальная переменная c: Converters.Converter, какие-то с ней непонятные манипуляции, результат их не используется. Ее нужно удалить, вместо нее в тексте везде использовать формальный параметр conv:
Код:
      c := conv;  (* удалить *)
      IF c = NIL THEN c := Converters.list END;   (* use document converter *)
         (* IF conv = NIL THEN conv := Converters.list END; *)
      w := Windows.GetBySpec(loc, name, c (* -> conv *), {});
      IF w # NIL THEN s := w.doc.ThisView() END;
      IF s = NIL THEN
         Converters.Import(loc, name, conv, s);


Предлагаю вылечить.

Кроме того, уточнить документацию Views.Old: там ничего не сказано про случай, когда импортировать Зритель невозможно, кроме того, ошибочно указано постусловие
result = NIL => loc.res # 0
Надо указать, что если заданным конвертером не получается извлечь Зрителя из файла - то возвращается NIL.

Де-факто даже сейчас NIL вполне может вернуться, если Converters.Import не найдет подходящего конвертера (это маловероятно, т.к. есть HostTextConv.ImportText, (и .ImportHex, StdETHConv.ImportETHDoc), которые отмечены флагом Converters.importAll, т.е. он-то как раз и "ловит" все, для чего не нашлось спецконвертера, и превращает любой файл в текстовый кирдымырды; полезность этого весьма сомнительна, кмк, и я бы снял с него флажок importAll)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 11 Июль, 2020 16:21 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8351
Откуда: Троицк, Москва
Если правильно понимаю проблему, то надо лечить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB