Как сделать динамическую подсветку(SynEdit+SynUniSyn)?

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

Как сделать динамическую подсветку(SynEdit+SynUniSyn)?

Сообщение ViTality » 05.10.2007 15:58:26

подскажите пожайлуста как такого добиться:
Нужно добавлять выделеное слово в список подсвечиваемых.
Т.е. выделил слово в тексте(SynEdit1), щелкнул на кнопку(Button1) и оно в списке подсвечиваемых(SynUniSyn1), ну соответственно и подсвечиваеться.

пытаюсь так но не выходит
Код: Выделить всё
var
   kw:TSynSymbolGroup;

procedure TForm1.FormCreate(Sender: TObject);
begin
  kw:=TSynSymbolGroup.Create('',TSynHighlighterAttributes.Create('unknown'));
  kw.Name:='Key words';
  kw.Attribs.Foreground:=clGreen;
  kw.Attribs.Background:=clWhite;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SynUniSyn1.MainRules.reset;
  SynEdit1.Highlighter:=nil;
  kw.KeywordsList.Add(SynEdit1.SelText);
  SynUniSyn1.MainRules.AddSymbolGroup(kw);
  SynEdit1.Highlighter:=SynUniSyn1; 
end;
Последний раз редактировалось ViTality 09.12.2007 20:37:28, всего редактировалось 1 раз.
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality » 09.10.2007 09:30:29

Неужели никто не пользовался UniHighlighter'ом под Lazarus?
Но с добавлением ключевых слов я вроде справился вот так
Код: Выделить всё
var
   kw:TSynSymbolGroup;

procedure TForm1.FormCreate(Sender: TObject);
begin
  kw:=TSynSymbolGroup.Create('',TSynHighlighterAttributes.Create('unknown'));
  kw.Name:='Key words';
  kw.Attribs.Foreground:=clGreen;
  kw.Attribs.Background:=clWhite;
  SynUniSyn1.MainRules.AddSymbolGroup(kw);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SynUniSyn1.MainRules.reset;
  kw.KeywordsList.Add(SynEdit1.SelText);
  SynEdit1.Refresh; // или SynEdit1.Repaint;
end;

но теперь есть друга проблема. Подсвечиваеться не только само слово но и все символы(цифры, знаки препинания) стоящие после него вплоть до первой буквы следующего слова.
Т.е. вместо
мой индекс 123456. Траляля

получаем
мой индекс 123456. Траляля

Подскажите хоть ктонибудь как это побороть?
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

Сообщение ViTality » 10.12.2007 00:21:09

Нашел косяк в самом UniHighlighter`e.

в этих 2-х функциях, которые как раз и отвечают за числа и разделители(пробелы, знаки пунктуации)
Код: Выделить всё
function TNumberSymbols.GetToken(parser:TSynUniSyn; var tkSynSymbol1:TSynSymbol): boolean;
function TDefaultTermSymbols.GetToken(parser: TSynUniSyn;var tkSynSymbol1:TSynSymbol): boolean;

строку
Код: Выделить всё
  tkSynSymbol:=self.tkSynSymbol;

заменить на
Код: Выделить всё
  tkSynSymbol1:=self.tkSynSymbol;

самое интересное чтоя был не первый кто заметил этот косяк
http://www.mail-archive.com/lazarus@mir ... 09456.html
но разрабы почемуто так и не исправили.
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02


Вернуться в SynEdit и UniHighlighter

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

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

Рейтинг@Mail.ru