OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:37

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




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Фикс DevReferences
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 10:34 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Иногда ложно срабатывает переход к исходнику, т.к. идентификатор попадается в комментарии.
Чтобы это пофиксить, нужно в DevReferences поправить процедуру SearchIdent как дано ниже:

Добавлена вложенная процедура Comment и два IFа ее вызывающие

Код:
PROCEDURE SearchIdent (t: TextModels.Model; ident: TextMappers.String; VAR beg, end: INTEGER; bold: BOOLEAN);
      VAR r: TextModels.Reader; found: BOOLEAN; ch: CHAR; len, i: INTEGER;
   PROCEDURE Comment;
   BEGIN INC(beg); r.ReadChar(ch);
      LOOP
         LOOP
            WHILE ch = "(" DO INC(beg); r.ReadChar(ch);
               IF ch = "*" THEN Comment END
            END;
            IF ch = "*" THEN INC(beg); r.ReadChar(ch); EXIT END ;
            IF r.eot THEN EXIT END ;
            INC(beg); r.ReadChar(ch)
         END;
         IF ch = ")" THEN INC(beg); r.ReadChar(ch); EXIT END ;
      END
   END Comment;
   BEGIN
      end := 0;
      IF ident # "" THEN
         len := 0; WHILE ident[len] # 0X DO INC(len) END;
         r := t.NewReader(NIL); found := FALSE;
         beg := 0; r.SetPos(0); r.ReadChar(ch);
         WHILE ~r.eot & ~found DO
            (* search legal start symbol *)
            WHILE ~r.eot & ((ch < "A") OR (ch > "Z") & (ch # "_") & (ch < "a") OR (ch > "z")) DO
               INC(beg); r.ReadChar(ch);
               IF ch = "(" THEN
                  INC(beg); r.ReadChar(ch);
                  IF ch = "*" THEN
                     Comment;
                  END;
               END;
            END;
            i := 0;
            WHILE ~r.eot & (~bold OR SpecialFont(r)) & (i # len) & (ch = ident[i]) DO
               r.ReadChar(ch); INC(i)
            END;
            found := (i = len) &
                        ((ch < "0") OR (ch > "9") & (ch < "A") OR (ch > "Z") & (ch # "_") & (ch < "a") OR (ch > "z"));
            IF ~r.eot & ~found THEN   (* skip rest of identifier *)
               beg := r.Pos() - 1;
               WHILE ~r.eot &
                  ~((ch < "0") OR (ch > "9") & (ch < "A") OR (ch > "Z") & (ch # "_") & (ch < "a") OR (ch > "z")) DO
                  INC(beg); r.ReadChar(ch);
               IF ch = "(" THEN
                  INC(beg); r.ReadChar(ch);
                  IF ch = "*" THEN
                     Comment;
                  END;
               END;
               END
            END
         END;
         IF found THEN end := r.Pos() - 1 END
      END
   END SearchIdent;


Вложения:
Комментарий к файлу: Правки выделены синим цветом
References.odc [8.65 КБ]
Скачиваний: 777


Последний раз редактировалось ilovb Вторник, 07 Июнь, 2011 08:40, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фикс DevReferences
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 22:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
ilovb писал(а):
Иногда ложно срабатывает переход к исходнику, т.к. идентификатор попадается в комментарии.
Пож., объясните пояснее :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фикс DevReferences
СообщениеДобавлено: Понедельник, 06 Июнь, 2011 23:45 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
ilovb писал(а):
Добавлена вложенная процедура Comment и два IFа ее вызывающие
Изменения, наверное, лучше выделять цветом (али ещё как) и прикладывать в тэге Code StdCoded-кусок odc-документа. Это удобнее, нежели уплощённый код с пояснениями, --- как для писания так и для понимания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фикс DevReferences
СообщениеДобавлено: Вторник, 07 Июнь, 2011 08:38 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Info21 писал(а):
Пож., объясните пояснее :)


Возьмите любой модуль. И, например, в разделе констант в комментарии напишите имя какой-нибудь процедуры модуля и сделайте болдом. Потом в логе напишите ИмяМодуля.ИмяПроцедуры, выделите сие и давите "source" в контекстном меню на выделенном. Ну и попадете в комментарий, а не туда куда должны были.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фикс DevReferences
СообщениеДобавлено: Вторник, 07 Июнь, 2011 12:30 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
ilovb писал(а):
... попадете в комментарий, а не туда куда должны были.
Теперь понял, спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 5 ] 

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


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

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


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

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