Модераторы: Vitalik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SynEdit 2.0.3 + UniHighlighter 2.0 Beta4 = трабла 
:(
    Опции темы
romis
  Дата 10.9.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.9.2006

Репутация: нет
Всего: нет



Народ, подскжаите в чем может скрываться пролема
Использую SynEdit 2.0.3 + UniHighlighter 2.0 Beta4
Создал простенькую подсветку для ASP.NET
В результате получаю повторное отображение в редакторе открывающихся и закрывающихся тэгов
(в случае если за соответствующим тэгом следует перенос строки)
Скриншот прилагаю
Кстати та же проблема при использовании связки SynEdit 2.0.3 + UniHighlighter 1.1
Та же проблема при использовании поставляемых вместе с UniHighlighter  подсветок (HTML, XHTML)
В стандартной подсветке HTML от SynEdit такой траблы нет 
То есть дело видимо не в моей подсветке и не в SynEdit


Присоединённый файл ( Кол-во скачиваний: 21 )
Присоединённый файл  SynBug.jpg 59,96 Kb
PM MAIL   Вверх
Seldon
Дата 10.9.2006, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 23.12.2005
Где: Minsk

Репутация: 2
Всего: 2



да, совсем забыл, такая проблема была и у меня.
я решил так: TCustomSynEdit.PaintTextLines->PaintLines закомментировать следующие строки:
Код

if fHighlighter.GetTokenPos < Length(sLine) then
begin
  sToken := Copy(sLine, vFirstChar, vLastChar - vFirstChar);
  if fHighlighter.GetTokenPos +1 >= vFirstChar then
  begin
    Delete(sToken, 1, fHighlighter.GetTokenPos +1 - vFirstChar);
    Dec(nTokenPos, vFirstChar - FirstCol);
    Inc(nTokenPos, nTokenLen);
  end;
  nTokenLen := Length(sToken);
  AddHighlightToken(sToken, nTokenPos, nTokenLen, attr.Foreground,
  attr.Background, []);
end;

как я понимаю, трабла из-за того, что TokenPos не соответсвует реальным данным. вечером копну глубже

Это сообщение отредактировал(а) Seldon - 10.9.2006, 23:42
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
Seldon
Дата 11.9.2006, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 23.12.2005
Где: Minsk

Репутация: 2
Всего: 2



нашёл такое вот решение, не требующее правки SynEdit.pas:
SynUniHighlighter.pas->TSynUniSyn.Next
Код

  if FPrEol then begin // if it was end of line then
    // if current range close on end of line then
    {$IFDEF SYNUNI_DEBUG}DebugLine('FPrEol = True');{$ENDIF}
    if (FCurrRange.CloseOnEol) or (FCurrRange.CloseOnTerm) then begin
      if FCurrRange.AllowPreviousClose then begin
        FCurrRange := FCurrRange.Parent;
        while (FCurrRange.CloseOnEol) or (FCurrRange.CloseOnTerm) do
          FCurrRange := FCurrRange.Parent;
      end else
        FCurrRange := FCurrRange.Parent;
    end;
    {atr := TSynHighlighterAttributes.Create('123');
    atr.Foreground := clRed;
    atr.Background := clYellow;
    CurrToken := TSynToken.Create(atr);
    CurrToken.Temporary := True;}
    FEol := True; // We are at the end of line
    FTokenPos:=Length(FLine); {Seldon /}
    Exit;
  end;

моя строка - {Seldon /}
суть проблемы, как я её понимаю:
SynEdit ожидает, что TokenPos после парсинга строки хайлайтером будет равен последнему пропарсенному символу. если он меньше - значит хайлайтер не смог пропарсить всю строку (хз как такое может быть) и те строки, которые я в предыдущем посте предлагал закомментировать, осуществляют отрисовку этого не пропарсенного текста в конце строки. 
в нашем случае текст пропарсиваецца (и соответсвенно отрисовываецца) весь, но TokenPos меньше длины строки и SynEdit отрисовывает непропарсенный (как он считает) текст, который на самом деле был пропарсен и нарисован.
моё решение - костыль, имхо надо подправить сам парсинг, чтобы в конце TokenPos соответсвовал последнему пропарсенному символу. я пока не вникал в работу парсинга и сделать это не могу, поэтому будем ждать решения со стороны разработчиков
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
romis
Дата 12.9.2006, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.9.2006

Репутация: нет
Всего: нет



2 Seldon
спасибо, я уже SynEdit.pas поправил
Видимо предпочтительнее править исходники самого UniHighlighter-а
А еще лучше если разработчики в следующей версии компонента исправят эту багу


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | SynUniHighlighter и SynEdit | Следующая тема »


 




[ Время генерации скрипта: 0.0884 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.