Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > SynUniHighlighter и SynEdit > проблемы с code folding


Автор: svoloch 17.8.2008, 19:41
здравствуйте уважаемые...
баг с подсветкой CSS... при сворачивании открывающая скобка остается... из-за этого возникают некоторые косяки весьма неприятного характера и раздражающего свойства а именно: подсветка нижеследующего блока изменяеться несоответсвенно правилам подсветки, ну и наличие одной непарной скобки теста само по себе нарушает общюю логику программы, что затрудняет написание программ с этоим компонентом и приводит к возникновению ошибок... 
да и вообще проект как я понимаю давно закончился. почему бы не выложить окончательную версию без багов. было бы таааак приятно

Автор: mr.Anderson 17.8.2008, 19:58
svoloch, вот именно потому, что "проект давно закончился", версии без багов нет. И окончательной версии тоже нет. Последняя версия SynEdit - 2.0.6, последняя версия SynUniHighlighter - 2.0.4 beta. Более нового и безглючного нет ничего, и, с вероятностью 95%, не будет.

Автор: svoloch 18.8.2008, 07:25
а что на счет бага? подскажите плз где и как исправить


ООООООООООчень надо!

заранее спасибо) 

Автор: mr.Anderson 18.8.2008, 11:50
svoloch, если б знать. Я не встречал его. Используешь встроенную подсветку или SynUni?

Автор: Ronef 18.8.2008, 15:46
mr.Anderson, привет, мы со сволочем вдвоем работаем...
вот скриншот:
user posted image

исопльзуемые компоненты: SynEdit, SynCssSyn...

где-то тут встречал пример скомпилированный под TotalCommander... там все норм

Автор: mr.Anderson 19.8.2008, 11:56
Ronef, ясно, этот баг я, вроде, исправлял уже... В этом же разделе гляньте мою прикрепленную тему (сверху) об исправлении багов в пакете SynMix. Если там нет - то не знаю, как поправить.

Автор: Ronef 19.8.2008, 13:29
mr.Anderson, все темы уже пересмотрел не по разу)) мозг уже не соображает совсем smile 
какие-то изменения внес, какие-то нет по причине полного несоответствия номеров строк (+-200-500!)...

Добавлено через 1 минуту и 13 секунд
mr.Anderson, кстати, можешь выслать уже исправленный тобой SynMix на мэйл?

заранее ООчень благодарен

Автор: vladislavus 19.8.2008, 13:38
Ronef, можно поиграться с процедурами в SynEdit.pas

наступает во время сворачивания кода
   procedure TCustomSynEdit.Collapse(AFoldRange: TSynEditFoldRange);
наступает во время разворачивания кода
   procedure TCustomSynEdit.Uncollapse(FoldRange: TSynEditFoldRange);

если убрать символ начала региона при сворачивании код, например '{', и свернуть код - я получил нужный результат, НО при обновлении обновлении регионов я всегда потерял свой свернутый регион.

Автор: Ronef 19.8.2008, 14:08
vladislavus, спасибо, покопаюсь)

Добавлено через 1 минуту и 53 секунды
кстати, наверное нужно не убирать символ, а наоборот добавить!...
добавить не получается smile - символ подсказки (прямоугольник с троеточием) становится после...

Автор: vladislavus 19.8.2008, 14:53
Ronef, и вот эту процедуру нужно просмотреть

procedure TCustomSynEdit.ScanForFoldRanges(var TopFoldRanges: TSynEditAllFoldRanges; Strings: TStrings);

походу, это жестокий гемор получаеться. smile 

Автор: Ronef 19.8.2008, 15:00
нету такой процедуры!((

Автор: vladislavus 19.8.2008, 16:08
Ronef, должна быть в файле synedit.pas класс TCustomSynEdit секция private.
она отвечает за поиск регионов.

Автор: Ronef 19.8.2008, 16:32
нашел... большая однако процедура... smile

Добавлено через 55 секунд
vladislavus, не знаешь, как получить закрывающий тег?

Автор: vladislavus 19.8.2008, 19:42
Код


если изменить код TCustomSynEdit.Collapse, то добавляет тег.
изменения в //***
Код

procedure TCustomSynEdit.Collapse(AFoldRange: TSynEditFoldRange);
var
    i: Integer;
  FoldRange: TSynEditFoldRange;
begin
    Lines.BeginUpdate;

  with AFoldRange do
  begin
    //***
    if FoldRegion.Close = '}' then
      Lines[FromLine - 1] := Lines[FromLine - 1] + FoldRegion.Close;
    //***

......

и код TCustomSynEdit.Uncollapse, то убирает тег
Код

procedure TCustomSynEdit.Uncollapse(FoldRange: TSynEditFoldRange);
var
    i: Integer;
begin
    Lines.BeginUpdate;

    with FoldRange do
    begin
    //***
    if FoldRegion.Close = '}' then
        Lines[FromLine-1] := Copy(Lines[FromLine-1], 1,
            Length(Lines[FromLine-1]) - 1);
    //***
....

НО
если обновить регионы фолдинка при свернутом коде, то они исчезнут на всегда.
для этого нужно лопатить процедуру TCustomSynEdit.ScanForFoldRanges.

может есть более легкий путь....  smile 

Автор: vladislavus 19.8.2008, 20:38
путь  smile есть - придобавлении региона фолдинга указать AAddEnding  smile    
Код

  ...  .FoldRegions.Add(rtChar, True, False, False, '{', '}', nil);

но это не решает проблебы исчезновения с вернутого кода при обновлении фолдинга

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)